diff --git a/.gitignore b/.gitignore index 844dbe5..09d6665 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ - # Created by https://www.gitignore.io/api/unity ### Unity ### diff --git a/IronToad_UnityProject/Assets/Art.meta b/IronToad_UnityProject/Assets/Art.meta new file mode 100644 index 0000000..d59a750 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2ba78c3cb3169564cab93d93fd9ebad3 +folderAsset: yes +timeCreated: 1484955406 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models.meta b/IronToad_UnityProject/Assets/Art/Models.meta new file mode 100644 index 0000000..a68ab6c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8d8720f50dd1758448e0ff4b90528038 +folderAsset: yes +timeCreated: 1484955410 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX b/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX new file mode 100644 index 0000000..1a025d3 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX differ diff --git a/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX.meta b/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX.meta new file mode 100644 index 0000000..bb9c377 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/M_Boat.FBX.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: c6438dabf6228f441bc1b9ba721d99f9 +timeCreated: 1484955416 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: boat + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX b/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX new file mode 100644 index 0000000..5eac5fd Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX differ diff --git a/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX.meta b/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX.meta new file mode 100644 index 0000000..cf85555 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/M_Lighthouse.FBX.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: d2fbd0b28b22d44468a5c4e5b4a5e545 +timeCreated: 1484955417 +licenseType: Pro +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: lightHouse + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Materials.meta b/IronToad_UnityProject/Assets/Art/Models/Materials.meta new file mode 100644 index 0000000..d55c33f --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c9200701dc2384e4bbf86e2b9d3d50c1 +folderAsset: yes +timeCreated: 1484955416 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat b/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat new file mode 100644 index 0000000..e15f536 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat.meta new file mode 100644 index 0000000..10a519c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Materials/No Name.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 885f67248e6247a469b3d3a4f6bd1729 +timeCreated: 1484955416 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Animations.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks.meta similarity index 67% rename from IronToad_UnityProject/Assets/Animations.meta rename to IronToad_UnityProject/Assets/Art/Models/Rocks.meta index 8b3de79..fb17e48 100644 --- a/IronToad_UnityProject/Assets/Animations.meta +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: c3c37dccb1d28fb4d8a2af9b0d3c182c +guid: 513738f9015643447831ab32b61ce25f folderAsset: yes -timeCreated: 1484909413 +timeCreated: 1484958664 licenseType: Free DefaultImporter: userData: diff --git a/IronToad_UnityProject/Assets/Models.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials.meta similarity index 67% rename from IronToad_UnityProject/Assets/Models.meta rename to IronToad_UnityProject/Assets/Art/Models/Rocks/Materials.meta index f3970f1..58a7394 100644 --- a/IronToad_UnityProject/Assets/Models.meta +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 3840d50d014fff442a04a43739a88778 +guid: c8094283f00c501469440c1187bcec20 folderAsset: yes -timeCreated: 1484909328 +timeCreated: 1484958682 licenseType: Free DefaultImporter: userData: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat new file mode 100644 index 0000000..9bfb2e1 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat.meta new file mode 100644 index 0000000..77e2993 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/rocksCombined001Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b42b91fe7a50714bb176e9b6d9257f8 +timeCreated: 1484958683 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat new file mode 100644 index 0000000..d478067 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat.meta new file mode 100644 index 0000000..b713861 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/Materials/toonRock.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: fcafcd3d19ba3e049a2a7f2fa50faece +NativeFormatImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab b/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab new file mode 100644 index 0000000..5d2c5d5 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab.meta new file mode 100644 index 0000000..07682bc --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/ROCKS.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fed67a16459d35498df54a44737ef15 +timeCreated: 1484959732 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Sound.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes.meta similarity index 67% rename from IronToad_UnityProject/Assets/Sound.meta rename to IronToad_UnityProject/Assets/Art/Models/Rocks/meshes.meta index 0234fb8..2dc0a95 100644 --- a/IronToad_UnityProject/Assets/Sound.meta +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 06bba0cb55a0ad94983c8d5e34921e79 +guid: f3af5674fa8cf714a91830560f9dbc37 folderAsset: yes -timeCreated: 1484909398 +timeCreated: 1484958740 licenseType: Free DefaultImporter: userData: diff --git a/IronToad_UnityProject/Assets/Sound/Music.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials.meta similarity index 67% rename from IronToad_UnityProject/Assets/Sound/Music.meta rename to IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials.meta index 660dbba..109a97c 100644 --- a/IronToad_UnityProject/Assets/Sound/Music.meta +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials.meta @@ -1,7 +1,7 @@ fileFormatVersion: 2 -guid: 8676adc5f0d75c24b8aa52f6d2cb7e24 +guid: e6435d4cbc375b1478d2a3e46d9dcf28 folderAsset: yes -timeCreated: 1484909403 +timeCreated: 1484960076 licenseType: Free DefaultImporter: userData: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat new file mode 100644 index 0000000..a83bfa0 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat.meta new file mode 100644 index 0000000..0b20526 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined002Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 50e38f3044543914f8dad1de4c8a5068 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat new file mode 100644 index 0000000..ad9b7e4 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat.meta new file mode 100644 index 0000000..a59d4aa --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined003Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 676a5c977f21e8846bfdc17e15fafd26 +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat new file mode 100644 index 0000000..7df3d61 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat.meta new file mode 100644 index 0000000..50c09dd --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined004Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 74d28001b6fc42b4e931de72d1e6591d +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat new file mode 100644 index 0000000..0d44a04 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat.meta new file mode 100644 index 0000000..9a7c8d9 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined005Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9ea587cddc7611a4ea24179890186bd4 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat new file mode 100644 index 0000000..2600edc Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat.meta new file mode 100644 index 0000000..3f02fad --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined006Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c9bdeda304358ae4da8197d28963b9d9 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat new file mode 100644 index 0000000..b51f595 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat.meta new file mode 100644 index 0000000..f889ddc --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined007Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 560fa7c5bddd5e34cb99fe18b3651fa5 +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat new file mode 100644 index 0000000..ed373b5 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat.meta new file mode 100644 index 0000000..3406d4b --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined008Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fbdd4b717e5713a419919fc7ca6b6f33 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat new file mode 100644 index 0000000..58df080 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat.meta new file mode 100644 index 0000000..5f5ca76 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined009Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 801e368f8a9f12b4c9c9a60bc8baf7b1 +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat new file mode 100644 index 0000000..0c149ef Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat.meta new file mode 100644 index 0000000..57db412 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined010Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 691965ed663737f44b2ea2049ac029c5 +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat new file mode 100644 index 0000000..e8f6898 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat.meta new file mode 100644 index 0000000..616ddec --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined011Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7aae0eb91fb06d441a25298b91b92c4f +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat new file mode 100644 index 0000000..6e1286f Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat.meta new file mode 100644 index 0000000..1b8200b --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined012Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 84927542d721a774999493f3af9c89f6 +timeCreated: 1484960077 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat new file mode 100644 index 0000000..0e4230a Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat.meta new file mode 100644 index 0000000..9f2f120 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined013Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1a0f5f869a5a9444cbc89ac4687e2060 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat new file mode 100644 index 0000000..2a74abf Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat.meta new file mode 100644 index 0000000..9edc60f --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/Materials/rocksCombined014Mat.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 479227483a85ee84cb49ba5797c1fca7 +timeCreated: 1484960076 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj new file mode 100644 index 0000000..44ba900 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:44 + +mtllib rocksCombined001.mtl + +# +# object rocksCombined001 +# + +v 1.067200 0.346217 6.647980 +v 6.645859 0.362262 6.682800 +v 1.074585 0.358057 1.218201 +v 6.666794 0.316750 1.227966 +v 1.940689 4.145024 3.233154 +v 4.489334 3.344209 3.389923 +v 2.091354 3.282437 1.071968 +v 4.505219 3.364553 1.067299 +v 5.791885 2.230005 5.147820 +v 0.769638 3.080929 5.716805 +v 5.765823 2.423326 0.850929 +v 1.332733 2.270460 0.885010 +v 0.573334 0.257285 3.993759 +v 6.993088 0.287427 4.011841 +v 4.564423 3.378100 2.259766 +v 1.712143 3.707999 2.054047 +v 6.157074 2.305221 3.005302 +v 0.416885 2.427336 2.841759 +v 3.920395 0.230877 0.567673 +v 3.880859 0.287907 7.350349 +v 3.425034 3.878795 3.325752 +v 3.253052 3.382441 0.724152 +v 3.681793 3.020344 6.198784 +v 3.481033 2.462504 0.014153 +v 3.915085 0.076651 4.078575 +v 3.263977 3.572783 2.064659 +v 2.084244 0.088331 4.086472 +v 3.841568 0.062564 5.911194 +v 2.214859 0.221518 6.988655 +v 0.627365 0.233186 5.604111 +v 2.034561 0.009320 5.760796 +v 3.272903 3.596180 2.613190 +v 2.489868 3.632771 2.108391 +v 1.684418 4.132161 2.602295 +v 2.815689 4.072466 3.302467 +v 2.560074 3.657348 2.618919 +v 3.701324 1.495046 7.089775 +v 2.015442 3.318671 6.414139 +v 0.593582 1.386728 6.622452 +v 2.114410 1.598832 7.656616 +v 6.882935 1.276720 3.400978 +v 6.158585 2.323101 4.077118 +v 6.374557 1.096171 6.097115 +v 6.928391 0.220869 5.563393 +v 6.685730 1.190776 4.938858 +v 3.749680 1.220718 0.135628 +v 4.584625 2.494753 0.249031 +v 6.348709 1.212032 0.991028 +v 5.457047 0.197022 0.798454 +v 5.108948 1.222868 0.435623 +v 0.736435 0.265867 2.396980 +v 0.323242 1.254594 3.402840 +v 0.664276 2.448710 1.741592 +v 1.090775 1.229399 0.983299 +v 0.591217 1.236811 2.069229 +v 3.982758 3.549884 3.304016 +v 3.714172 3.753229 4.597557 +v 4.855133 2.501791 5.704437 +v 5.082047 3.024169 4.102600 +v 4.504456 3.243861 4.511559 +v 5.014969 3.043195 0.985641 +v 4.529495 3.337664 1.603607 +v 5.339539 3.103080 2.719955 +v 6.046326 2.361991 1.932358 +v 5.272873 3.107122 1.793671 +v 1.744354 2.867732 0.972534 +v 2.623840 3.310253 0.885765 +v 3.315842 3.035815 0.340744 +v 2.326248 2.322931 0.353683 +v 2.495132 2.886184 0.592354 +v 0.943405 3.210471 2.333694 +v 0.066605 2.967225 4.302284 +v 1.129959 4.212461 4.557823 +v 0.734879 3.965027 3.251122 +v 2.287109 0.237206 0.812782 +v 3.919037 0.068549 2.212601 +v 2.174942 0.069950 2.327377 +v 3.936890 3.515205 0.821693 +v 3.236694 3.624840 1.373756 +v 3.915222 3.412279 2.158585 +v 3.902130 3.489971 1.473701 +v 6.911163 0.279091 2.440102 +v 6.681168 1.218022 2.196831 +v 0.204315 1.263535 4.953888 +v 4.518692 3.381176 2.890495 +v 5.330353 3.006294 3.441444 +v 1.948227 3.456017 1.472893 +v 1.227341 3.018288 1.523308 +v 5.466965 0.312577 7.268265 +v 5.660629 0.086806 4.087700 +v 5.654602 0.028259 5.784393 +v 3.894897 3.480976 2.718956 +v 5.207657 1.435186 6.929680 +v 2.289658 1.230722 0.369370 +v 2.611755 3.919345 4.654930 +v 4.230347 3.110029 0.501854 +v 5.613831 0.073796 2.340576 +v 2.597260 3.516689 1.411888 +v 1.122910 0.031392 4.061363 +v 2.047333 0.049235 4.898521 +v 1.174561 0.008234 5.711533 +v 0.613022 0.252812 4.789886 +v 1.144440 0.038907 4.899010 +v 3.005493 0.086906 4.083099 +v 3.917496 0.084712 4.981537 +v 2.877960 0.042902 5.890968 +v 2.996460 0.082441 4.967224 +v 3.791672 0.107518 6.904594 +v 3.008255 0.347379 7.287376 +v 2.146317 0.086015 6.591591 +v 2.955734 0.076467 6.713379 +v 1.503769 0.278643 6.858734 +v 0.833725 0.267747 6.268707 +v 1.388824 0.094492 6.443390 +v 3.377182 3.785353 2.901024 +v 2.918213 3.624089 2.577644 +v 2.640717 3.813658 2.901566 +v 3.156631 4.105656 3.243736 +v 3.062576 3.854256 2.876213 +v 3.272537 3.585048 2.254951 +v 2.862045 3.650400 2.105194 +v 2.522675 3.583618 2.431717 +v 2.886322 3.591710 2.349220 +v 2.133804 3.647136 2.050575 +v 1.711533 3.756664 2.369781 +v 2.214890 3.730146 2.659027 +v 2.152237 3.761067 2.324982 +v 1.842209 4.119591 2.955238 +v 2.396210 4.020803 3.287491 +v 2.294479 3.780379 2.952370 +v 2.248398 0.740180 7.427765 +v 1.280823 1.486603 7.471054 +v 0.840088 0.660988 6.681625 +v 1.373688 0.680326 7.189972 +v 3.770020 0.774364 7.359634 +v 2.971771 1.547073 7.292007 +v 3.050720 0.801423 7.293747 +v 3.696976 2.260556 6.678482 +v 2.961746 3.172375 6.389931 +v 2.069229 2.549372 7.287148 +v 2.929749 2.529387 7.137825 +v 1.295059 3.182664 6.160934 +v 0.504211 2.361392 6.249924 +v 1.241074 2.433163 6.979683 +v 7.048538 0.680625 3.806442 +v 6.760956 1.223837 4.234474 +v 6.952957 0.626333 5.288177 +v 6.968643 0.277281 4.791885 +v 6.996307 0.682102 4.562531 +v 6.525177 1.785499 3.236443 +v 6.183563 2.305683 3.531639 +v 6.471405 1.832623 4.522987 +v 6.538788 1.825605 3.803230 +v 6.023666 2.339280 4.701431 +v 6.104538 1.603057 5.626755 +v 6.631729 1.102174 5.583427 +v 6.321854 1.698925 5.168839 +v 6.590759 0.653193 6.514221 +v 6.833084 0.258370 6.286720 +v 6.869431 0.593748 5.983536 +v 3.869476 0.613371 0.231026 +v 4.423431 1.160769 0.073471 +v 5.308395 0.582884 0.500481 +v 4.684235 0.184203 0.596947 +v 4.573730 0.583655 0.301079 +v 3.641159 1.867343 0.055084 +v 3.977478 2.567095 -0.000000 +v 4.866653 1.846574 0.341286 +v 4.239212 1.820631 0.117287 +v 5.250290 2.440387 0.489830 +v 6.057281 1.810333 0.916969 +v 5.799896 1.213761 0.585808 +v 5.533386 1.871321 0.501259 +v 6.585083 0.677771 1.091934 +v 6.232986 0.265294 1.031090 +v 6.049820 0.643129 0.725342 +v 0.909927 0.290592 1.699142 +v 0.585571 0.673293 2.334618 +v 0.778214 1.243769 1.503769 +v 0.979584 0.704667 1.052391 +v 0.759949 0.676244 1.647369 +v 0.605560 0.258143 3.197594 +v 0.394028 0.676312 3.795883 +v 0.384796 1.233400 2.704605 +v 0.370865 0.671777 2.980690 +v 0.260910 1.913259 3.062462 +v 0.519363 2.404594 2.303185 +v 0.604279 1.860304 1.850471 +v 0.375900 1.868263 2.325806 +v 0.988617 2.351081 1.231384 +v 1.043274 1.882290 0.845932 +v 0.697998 1.926967 1.338600 +v 4.250092 3.378670 3.393013 +v 4.299469 3.583361 3.882256 +v 4.796936 3.106024 4.314087 +v 4.721268 3.217377 3.679184 +v 4.448975 3.293872 3.771965 +v 3.722229 3.752072 3.291512 +v 3.610641 4.011000 3.890511 +v 4.151489 3.530904 4.619705 +v 4.018097 3.919770 3.849060 +v 3.642761 3.456520 5.445900 +v 4.257446 2.764103 5.974442 +v 4.636917 2.889019 5.039040 +v 4.183609 3.199043 5.249611 +v 5.349014 2.280661 5.427277 +v 5.402100 2.771805 4.645844 +v 5.077606 2.749170 4.886726 +v 5.396683 2.838732 0.896408 +v 5.198151 3.054313 1.347229 +v 5.681885 2.902345 1.906647 +v 5.977890 2.376683 1.347870 +v 5.610703 2.890097 1.344688 +v 4.698532 3.160833 1.033264 +v 4.517120 3.378838 1.284828 +v 4.884857 3.196674 1.681778 +v 4.831100 3.172522 1.322662 +v 4.555756 3.348577 1.930145 +v 4.930374 3.314956 2.464119 +v 5.324097 3.219382 2.293083 +v 4.919373 3.249542 2.063774 +v 5.753708 2.770314 2.950272 +v 6.095062 2.260647 2.479530 +v 5.723969 2.798126 2.453926 +v 1.540451 2.595736 0.921455 +v 2.077576 2.871988 0.748146 +v 2.371582 2.662535 0.468620 +v 1.755020 2.311225 0.532791 +v 1.916992 2.609789 0.660110 +v 1.940353 3.116111 1.027435 +v 2.315994 3.311198 0.980385 +v 2.579254 3.123733 0.712067 +v 2.222855 3.117350 0.844048 +v 2.940857 3.326850 0.787697 +v 3.296494 3.205429 0.516739 +v 2.900497 2.938447 0.448639 +v 2.940308 3.144147 0.594322 +v 3.392227 2.830281 0.152870 +v 2.897247 2.392698 0.152657 +v 2.857910 2.731845 0.290611 +v 1.156448 4.078734 2.870186 +v 0.851746 3.982839 3.944328 +v 1.498901 4.239506 3.751839 +v 1.172272 4.122951 3.333565 +v 1.285828 3.567820 2.183632 +v 0.709854 3.741319 2.661583 +v 1.221924 3.810557 2.487122 +v 0.485352 2.913391 2.507828 +v 0.253220 2.624698 3.471764 +v 0.351654 3.554305 3.824295 +v 0.425476 3.248904 3.091110 +v 0.297592 3.016333 5.094887 +v 1.018814 3.591911 5.174652 +v 0.555649 3.542639 4.582085 +v 1.486954 0.266408 1.016853 +v 2.246689 0.094056 1.491600 +v 1.345505 0.107720 2.415977 +v 1.423172 0.116150 1.628418 +v 3.121353 0.216910 0.602921 +v 3.857483 0.041390 1.278442 +v 3.077103 0.033151 2.275101 +v 3.097580 0.069259 1.364769 +v 3.914200 0.079225 3.153786 +v 2.111908 0.081673 3.215088 +v 3.019684 0.080366 3.173820 +v 1.236130 0.082512 3.230415 +v 4.247253 3.365981 0.974449 +v 3.888260 3.544565 1.117706 +v 4.224548 3.507018 1.529793 +v 4.191422 3.430492 1.226227 +v 3.538284 3.479984 0.742119 +v 3.265884 3.483765 1.012543 +v 3.578110 3.581235 1.405762 +v 3.566513 3.558709 1.036118 +v 3.248978 3.575707 1.766029 +v 3.622238 3.493095 2.032478 +v 3.914215 3.468304 1.822838 +v 3.597641 3.582860 1.790939 +v 4.233185 3.419308 2.179291 +v 4.223358 3.410326 1.861984 +v 6.590134 1.206928 1.546837 +v 6.937317 0.677901 2.355415 +v 6.829330 0.279166 1.699730 +v 6.843735 0.675318 1.646599 +v 6.379944 1.778116 2.020981 +v 6.291962 1.863194 1.408157 +v 6.760452 1.235662 2.841759 +v 6.471680 1.805645 2.599510 +v 6.967712 0.284329 3.226746 +v 6.997513 0.683403 3.090195 +v 0.402161 0.627700 5.357079 +v 0.227264 1.246660 4.133194 +v 0.385406 0.640209 4.571564 +v 0.124054 1.321446 5.879669 +v 0.460785 0.635479 6.124809 +v 0.045059 2.053717 4.618195 +v 0.000000 2.213937 5.533867 +v 0.114395 1.961592 3.754608 +v 5.246353 2.998026 3.811966 +v 4.883453 3.270034 3.171150 +v 4.501282 3.382358 3.147247 +v 4.857574 3.251686 3.437042 +v 5.715988 2.665479 3.765175 +v 5.658386 2.680291 4.226959 +v 5.332855 2.995257 3.103142 +v 5.765915 2.728820 3.338608 +v 4.546600 3.390196 2.586723 +v 4.909607 3.326773 2.848892 +v 1.848801 3.527960 1.777130 +v 1.641068 3.261175 1.526566 +v 1.099106 3.136518 1.963867 +v 1.420746 3.365214 1.858170 +v 2.035828 3.385463 1.217712 +v 1.530319 2.972463 1.182365 +v 1.781265 3.202450 1.214828 +v 0.954819 2.749930 1.616417 +v 1.256607 2.692454 1.189529 +v 0.736130 2.859146 2.049133 +v 6.429138 0.048167 5.711060 +v 5.663559 0.054855 4.937073 +v 6.472046 0.121065 4.084000 +v 6.458466 0.096788 4.900497 +v 6.223206 0.315462 6.942291 +v 5.577454 0.119324 6.618896 +v 6.390991 0.119323 6.499146 +v 4.632401 0.289064 7.348755 +v 4.879929 0.062930 5.851608 +v 4.647995 0.129296 6.857765 +v 4.797226 0.076540 4.080673 +v 4.798630 0.065742 4.965881 +v 4.203232 3.417984 2.771416 +v 3.887924 3.536838 2.975067 +v 4.198730 3.480451 2.994247 +v 3.919128 3.460116 2.418556 +v 4.223389 3.415195 2.487061 +v 3.583923 3.567943 2.648056 +v 3.600098 3.508071 2.361671 +v 3.656769 3.692372 2.919029 +v 5.356476 0.750819 7.248383 +v 4.483078 1.455261 7.024300 +v 4.591156 0.738412 7.345169 +v 5.804611 1.288864 6.528732 +v 6.013565 0.733874 6.915710 +v 5.103317 2.132118 6.420624 +v 5.586121 1.773069 5.984825 +v 4.380371 2.178073 6.552025 +v 1.544632 1.265308 0.507736 +v 2.186478 0.677230 0.391647 +v 1.451630 0.690363 0.580643 +v 2.258743 1.879519 0.280296 +v 1.525925 1.924721 0.435471 +v 3.021851 1.223752 0.223236 +v 2.959198 1.871426 0.138268 +v 3.102402 0.624056 0.309334 +v 2.789597 3.941326 3.903854 +v 3.230026 3.837429 4.722862 +v 3.204391 3.952224 3.936714 +v 1.846863 4.180709 4.761597 +v 2.281677 4.194571 3.883125 +v 2.202087 3.837550 5.663033 +v 1.432877 3.718067 5.481064 +v 3.098923 3.698313 5.495636 +v 4.656464 3.048289 0.749237 +v 4.093948 3.278515 0.647224 +v 4.455902 3.238824 0.808350 +v 4.459732 2.908506 0.336372 +v 4.953979 2.802961 0.599396 +v 3.697540 3.114902 0.340469 +v 3.847885 2.891281 0.152267 +v 3.632233 3.333263 0.518692 +v 6.410538 0.098782 2.427315 +v 5.572586 0.092557 1.489685 +v 6.347504 0.118148 1.623322 +v 5.644302 0.087983 3.217300 +v 6.451645 0.116955 3.254219 +v 4.771042 0.074603 2.250053 +v 4.786118 0.082451 3.173569 +v 4.629211 0.000000 1.332146 +v 2.264999 3.530115 1.409935 +v 2.640472 3.449318 1.117607 +v 2.331070 3.459325 1.175179 +v 2.524078 3.632921 1.723328 +v 2.180008 3.615334 1.699333 +v 2.916748 3.548908 1.399933 +v 2.865570 3.679228 1.760262 +v 2.952271 3.450045 1.052414 +# 386 vertices + +vt 0.493090 0.510590 0.000000 +vt 0.492690 0.504990 0.000000 +vt 0.496890 0.504380 0.000000 +vt 0.497040 0.509860 0.000000 +vt 0.492290 0.499390 0.000000 +vt 0.496750 0.498890 0.000000 +vt 0.501210 0.498400 0.000000 +vt 0.501100 0.503770 0.000000 +vt 0.500990 0.509130 0.000000 +vt 0.491890 0.493780 0.000000 +vt 0.496610 0.493410 0.000000 +vt 0.491490 0.488180 0.000000 +vt 0.496460 0.487920 0.000000 +vt 0.501440 0.487660 0.000000 +vt 0.501330 0.493030 0.000000 +vt 0.506050 0.492660 0.000000 +vt 0.505680 0.497900 0.000000 +vt 0.506420 0.487410 0.000000 +vt 0.511400 0.487150 0.000000 +vt 0.510770 0.492280 0.000000 +vt 0.510140 0.497410 0.000000 +vt 0.505310 0.503150 0.000000 +vt 0.504940 0.508400 0.000000 +vt 0.509510 0.502540 0.000000 +vt 0.508890 0.507670 0.000000 +vt 0.495220 0.548300 0.000000 +vt 0.493010 0.548550 0.000000 +vt 0.492480 0.546830 0.000000 +vt 0.494640 0.546730 0.000000 +vt 0.490790 0.548810 0.000000 +vt 0.490320 0.546940 0.000000 +vt 0.489860 0.545080 0.000000 +vt 0.491960 0.545120 0.000000 +vt 0.494060 0.545160 0.000000 +vt 0.488570 0.549060 0.000000 +vt 0.488160 0.547050 0.000000 +vt 0.486350 0.549310 0.000000 +vt 0.486000 0.547150 0.000000 +vt 0.485650 0.544990 0.000000 +vt 0.487760 0.545040 0.000000 +vt 0.487350 0.543020 0.000000 +vt 0.489390 0.543210 0.000000 +vt 0.485300 0.542840 0.000000 +vt 0.484960 0.540680 0.000000 +vt 0.486940 0.541010 0.000000 +vt 0.488930 0.541350 0.000000 +vt 0.491440 0.543400 0.000000 +vt 0.493480 0.543580 0.000000 +vt 0.490920 0.541680 0.000000 +vt 0.492900 0.542010 0.000000 +vt 0.513310 0.510070 0.000000 +vt 0.510780 0.514990 0.000000 +vt 0.506730 0.512740 0.000000 +vt 0.517730 0.512470 0.000000 +vt 0.514840 0.517240 0.000000 +vt 0.511950 0.522020 0.000000 +vt 0.508260 0.519920 0.000000 +vt 0.504570 0.517810 0.000000 +vt 0.522150 0.514870 0.000000 +vt 0.518900 0.519500 0.000000 +vt 0.526580 0.517260 0.000000 +vt 0.522950 0.521750 0.000000 +vt 0.519330 0.526230 0.000000 +vt 0.515640 0.524130 0.000000 +vt 0.512380 0.528750 0.000000 +vt 0.509060 0.526800 0.000000 +vt 0.515700 0.530710 0.000000 +vt 0.512080 0.535190 0.000000 +vt 0.509120 0.533380 0.000000 +vt 0.506170 0.531570 0.000000 +vt 0.505740 0.524840 0.000000 +vt 0.502410 0.522880 0.000000 +vt 0.503210 0.529760 0.000000 +vt 0.500260 0.527950 0.000000 +vt 0.423000 0.522690 0.000000 +vt 0.426930 0.526640 0.000000 +vt 0.423480 0.528680 0.000000 +vt 0.419290 0.524910 0.000000 +vt 0.430860 0.530580 0.000000 +vt 0.427670 0.532460 0.000000 +vt 0.424480 0.534330 0.000000 +vt 0.420030 0.530730 0.000000 +vt 0.415590 0.527130 0.000000 +vt 0.434790 0.534530 0.000000 +vt 0.431860 0.536230 0.000000 +vt 0.438720 0.538470 0.000000 +vt 0.436040 0.540000 0.000000 +vt 0.433370 0.541540 0.000000 +vt 0.428920 0.537930 0.000000 +vt 0.425990 0.539640 0.000000 +vt 0.421290 0.536210 0.000000 +vt 0.430690 0.543070 0.000000 +vt 0.428020 0.544600 0.000000 +vt 0.423060 0.541340 0.000000 +vt 0.418100 0.538090 0.000000 +vt 0.416590 0.532780 0.000000 +vt 0.411880 0.529350 0.000000 +vt 0.413140 0.534830 0.000000 +vt 0.408180 0.531570 0.000000 +vt 0.457770 0.512810 0.000000 +vt 0.459080 0.517820 0.000000 +vt 0.454500 0.518300 0.000000 +vt 0.452830 0.513410 0.000000 +vt 0.460380 0.522830 0.000000 +vt 0.456170 0.523190 0.000000 +vt 0.451950 0.523560 0.000000 +vt 0.449920 0.518780 0.000000 +vt 0.447890 0.514010 0.000000 +vt 0.461690 0.527840 0.000000 +vt 0.457830 0.528080 0.000000 +vt 0.463000 0.532840 0.000000 +vt 0.459500 0.532970 0.000000 +vt 0.456000 0.533100 0.000000 +vt 0.453980 0.528330 0.000000 +vt 0.450120 0.528570 0.000000 +vt 0.447730 0.523920 0.000000 +vt 0.452500 0.533230 0.000000 +vt 0.449010 0.533350 0.000000 +vt 0.446260 0.528820 0.000000 +vt 0.443510 0.524290 0.000000 +vt 0.445340 0.519270 0.000000 +vt 0.442960 0.514610 0.000000 +vt 0.440770 0.519750 0.000000 +vt 0.438020 0.515220 0.000000 +vt 0.476770 0.510500 0.000000 +vt 0.480850 0.510520 0.000000 +vt 0.480470 0.515460 0.000000 +vt 0.476650 0.515520 0.000000 +vt 0.484930 0.510550 0.000000 +vt 0.484300 0.515410 0.000000 +vt 0.483660 0.520280 0.000000 +vt 0.480100 0.520400 0.000000 +vt 0.476540 0.520530 0.000000 +vt 0.489010 0.510570 0.000000 +vt 0.488120 0.515360 0.000000 +vt 0.491940 0.515310 0.000000 +vt 0.490790 0.520020 0.000000 +vt 0.487220 0.520150 0.000000 +vt 0.486330 0.524940 0.000000 +vt 0.483030 0.525140 0.000000 +vt 0.489640 0.524730 0.000000 +vt 0.488490 0.529440 0.000000 +vt 0.485440 0.529720 0.000000 +vt 0.482390 0.530010 0.000000 +vt 0.479720 0.525350 0.000000 +vt 0.476420 0.525550 0.000000 +vt 0.479350 0.530290 0.000000 +vt 0.476300 0.530570 0.000000 +vt 0.507310 0.551410 0.000000 +vt 0.505750 0.550140 0.000000 +vt 0.509500 0.548070 0.000000 +vt 0.511400 0.549580 0.000000 +vt 0.504180 0.548880 0.000000 +vt 0.507610 0.546570 0.000000 +vt 0.511030 0.544260 0.000000 +vt 0.513260 0.546000 0.000000 +vt 0.515490 0.547750 0.000000 +vt 0.502620 0.547610 0.000000 +vt 0.505710 0.545060 0.000000 +vt 0.501060 0.546350 0.000000 +vt 0.503820 0.543560 0.000000 +vt 0.506570 0.540770 0.000000 +vt 0.508800 0.542520 0.000000 +vt 0.511890 0.539970 0.000000 +vt 0.514450 0.541950 0.000000 +vt 0.509320 0.537980 0.000000 +vt 0.514980 0.537420 0.000000 +vt 0.517880 0.539640 0.000000 +vt 0.517020 0.543930 0.000000 +vt 0.519580 0.545920 0.000000 +vt 0.520780 0.541860 0.000000 +vt 0.523680 0.544090 0.000000 +vt 0.451280 0.536040 0.000000 +vt 0.448900 0.537220 0.000000 +vt 0.446430 0.534630 0.000000 +vt 0.453550 0.538720 0.000000 +vt 0.451360 0.539810 0.000000 +vt 0.449180 0.540900 0.000000 +vt 0.446520 0.538410 0.000000 +vt 0.443860 0.535910 0.000000 +vt 0.455820 0.541400 0.000000 +vt 0.453830 0.542400 0.000000 +vt 0.458090 0.544090 0.000000 +vt 0.456290 0.544990 0.000000 +vt 0.454490 0.545890 0.000000 +vt 0.451830 0.543400 0.000000 +vt 0.449840 0.544400 0.000000 +vt 0.446990 0.541990 0.000000 +vt 0.452690 0.546800 0.000000 +vt 0.450890 0.547700 0.000000 +vt 0.447850 0.545390 0.000000 +vt 0.444800 0.543090 0.000000 +vt 0.444140 0.539590 0.000000 +vt 0.441290 0.537190 0.000000 +vt 0.441760 0.540780 0.000000 +vt 0.476600 0.533270 0.000000 +vt 0.473510 0.533810 0.000000 +vt 0.472970 0.531140 0.000000 +vt 0.476900 0.535980 0.000000 +vt 0.474040 0.536490 0.000000 +vt 0.471190 0.537000 0.000000 +vt 0.470420 0.534350 0.000000 +vt 0.469650 0.531710 0.000000 +vt 0.477200 0.538680 0.000000 +vt 0.474580 0.539160 0.000000 +vt 0.477500 0.541390 0.000000 +vt 0.475110 0.541840 0.000000 +vt 0.472720 0.542290 0.000000 +vt 0.471950 0.539640 0.000000 +vt 0.469330 0.540120 0.000000 +vt 0.468330 0.537510 0.000000 +vt 0.470330 0.542740 0.000000 +vt 0.467950 0.543190 0.000000 +vt 0.466710 0.540600 0.000000 +vt 0.465470 0.538020 0.000000 +vt 0.467330 0.534890 0.000000 +vt 0.466320 0.532280 0.000000 +vt 0.464240 0.535430 0.000000 +vt 0.492520 0.538340 0.000000 +vt 0.494740 0.538500 0.000000 +vt 0.490290 0.538180 0.000000 +vt 0.491650 0.535020 0.000000 +vt 0.494110 0.535000 0.000000 +vt 0.496580 0.534980 0.000000 +vt 0.488070 0.538030 0.000000 +vt 0.485840 0.537870 0.000000 +vt 0.486720 0.535060 0.000000 +vt 0.489190 0.535040 0.000000 +vt 0.490310 0.532060 0.000000 +vt 0.493010 0.531860 0.000000 +vt 0.487610 0.532250 0.000000 +vt 0.491430 0.529070 0.000000 +vt 0.494370 0.528700 0.000000 +vt 0.495710 0.531660 0.000000 +vt 0.498420 0.531470 0.000000 +vt 0.497310 0.528330 0.000000 +vt 0.475020 0.505610 0.000000 +vt 0.479440 0.505460 0.000000 +vt 0.473260 0.500720 0.000000 +vt 0.478020 0.500390 0.000000 +vt 0.482770 0.500060 0.000000 +vt 0.483850 0.505300 0.000000 +vt 0.471510 0.495840 0.000000 +vt 0.476600 0.495320 0.000000 +vt 0.469750 0.490950 0.000000 +vt 0.475190 0.490260 0.000000 +vt 0.480620 0.489570 0.000000 +vt 0.481700 0.494810 0.000000 +vt 0.486790 0.494300 0.000000 +vt 0.487530 0.499720 0.000000 +vt 0.486050 0.488870 0.000000 +vt 0.488270 0.505150 0.000000 +vt 0.480240 0.556830 0.000000 +vt 0.479480 0.555040 0.000000 +vt 0.481320 0.555130 0.000000 +vt 0.481930 0.556980 0.000000 +vt 0.478710 0.553240 0.000000 +vt 0.480700 0.553270 0.000000 +vt 0.482690 0.553300 0.000000 +vt 0.483160 0.555220 0.000000 +vt 0.483620 0.557130 0.000000 +vt 0.477940 0.551450 0.000000 +vt 0.480080 0.551420 0.000000 +vt 0.477180 0.549650 0.000000 +vt 0.479470 0.549570 0.000000 +vt 0.481760 0.549480 0.000000 +vt 0.482230 0.551390 0.000000 +vt 0.484370 0.551370 0.000000 +vt 0.484680 0.553330 0.000000 +vt 0.484050 0.549400 0.000000 +vt 0.486510 0.551340 0.000000 +vt 0.486670 0.553370 0.000000 +vt 0.485000 0.555300 0.000000 +vt 0.485310 0.557270 0.000000 +vt 0.486830 0.555390 0.000000 +vt 0.487000 0.557420 0.000000 +vt 0.437310 0.521470 0.000000 +vt 0.434260 0.517080 0.000000 +vt 0.440350 0.525860 0.000000 +vt 0.437190 0.527430 0.000000 +vt 0.433850 0.523190 0.000000 +vt 0.430510 0.518950 0.000000 +vt 0.443390 0.530250 0.000000 +vt 0.440520 0.531670 0.000000 +vt 0.437660 0.533100 0.000000 +vt 0.434020 0.529010 0.000000 +vt 0.430390 0.524910 0.000000 +vt 0.426750 0.520820 0.000000 +vt 0.495630 0.514670 0.000000 +vt 0.499330 0.514020 0.000000 +vt 0.497680 0.518920 0.000000 +vt 0.494230 0.519470 0.000000 +vt 0.503030 0.513380 0.000000 +vt 0.501130 0.518360 0.000000 +vt 0.499220 0.523340 0.000000 +vt 0.496030 0.523810 0.000000 +vt 0.492830 0.524270 0.000000 +vt 0.444740 0.551290 0.000000 +vt 0.440560 0.549620 0.000000 +vt 0.442380 0.548560 0.000000 +vt 0.446280 0.550390 0.000000 +vt 0.436380 0.547950 0.000000 +vt 0.438490 0.546730 0.000000 +vt 0.440590 0.545520 0.000000 +vt 0.444200 0.547510 0.000000 +vt 0.447820 0.549500 0.000000 +vt 0.432200 0.546270 0.000000 +vt 0.434590 0.544900 0.000000 +vt 0.436980 0.543530 0.000000 +vt 0.439370 0.542150 0.000000 +vt 0.442700 0.544300 0.000000 +vt 0.446030 0.546450 0.000000 +vt 0.449350 0.548600 0.000000 +vt 0.483090 0.540850 0.000000 +vt 0.483680 0.538070 0.000000 +vt 0.481230 0.541030 0.000000 +vt 0.481520 0.538280 0.000000 +vt 0.481810 0.535520 0.000000 +vt 0.484270 0.535290 0.000000 +vt 0.479360 0.541210 0.000000 +vt 0.479360 0.538480 0.000000 +vt 0.479350 0.535750 0.000000 +vt 0.479350 0.533020 0.000000 +vt 0.482100 0.532760 0.000000 +vt 0.484850 0.532510 0.000000 +vt 0.489780 0.466770 0.000000 +vt 0.494210 0.466860 0.000000 +vt 0.494780 0.472120 0.000000 +vt 0.490210 0.472120 0.000000 +vt 0.498650 0.466940 0.000000 +vt 0.499350 0.472120 0.000000 +vt 0.500040 0.477300 0.000000 +vt 0.495340 0.477390 0.000000 +vt 0.490630 0.477470 0.000000 +vt 0.503080 0.467030 0.000000 +vt 0.503920 0.472130 0.000000 +vt 0.507510 0.467120 0.000000 +vt 0.508480 0.472130 0.000000 +vt 0.509460 0.477130 0.000000 +vt 0.504750 0.477220 0.000000 +vt 0.505590 0.482310 0.000000 +vt 0.500740 0.482480 0.000000 +vt 0.510430 0.482140 0.000000 +vt 0.495900 0.482660 0.000000 +vt 0.491060 0.482830 0.000000 +vt 0.493820 0.556060 0.000000 +vt 0.492120 0.556400 0.000000 +vt 0.492340 0.554440 0.000000 +vt 0.494170 0.554120 0.000000 +vt 0.490410 0.556740 0.000000 +vt 0.490500 0.554750 0.000000 +vt 0.490600 0.552770 0.000000 +vt 0.492560 0.552470 0.000000 +vt 0.494520 0.552180 0.000000 +vt 0.488700 0.557080 0.000000 +vt 0.488670 0.555070 0.000000 +vt 0.488640 0.553070 0.000000 +vt 0.488600 0.551060 0.000000 +vt 0.490690 0.550790 0.000000 +vt 0.492780 0.550510 0.000000 +vt 0.494870 0.550240 0.000000 +vt 0.530660 0.520370 0.000000 +vt 0.526740 0.524630 0.000000 +vt 0.534750 0.523480 0.000000 +vt 0.530530 0.527520 0.000000 +vt 0.526310 0.531560 0.000000 +vt 0.522820 0.528890 0.000000 +vt 0.538840 0.526590 0.000000 +vt 0.534320 0.530410 0.000000 +vt 0.542930 0.529690 0.000000 +vt 0.538110 0.533290 0.000000 +vt 0.533300 0.536890 0.000000 +vt 0.529810 0.534220 0.000000 +vt 0.525290 0.538040 0.000000 +vt 0.522100 0.535600 0.000000 +vt 0.528490 0.540490 0.000000 +vt 0.518900 0.533160 0.000000 +vt 0.472260 0.516090 0.000000 +vt 0.472020 0.511080 0.000000 +vt 0.472500 0.521110 0.000000 +vt 0.468460 0.521680 0.000000 +vt 0.467860 0.516670 0.000000 +vt 0.467270 0.511650 0.000000 +vt 0.472740 0.526120 0.000000 +vt 0.469050 0.526690 0.000000 +vt 0.465370 0.527260 0.000000 +vt 0.464420 0.522250 0.000000 +vt 0.463470 0.517240 0.000000 +vt 0.462520 0.512230 0.000000 +vt 0.499020 0.545260 0.000000 +vt 0.501550 0.542290 0.000000 +vt 0.496980 0.544180 0.000000 +vt 0.499280 0.541030 0.000000 +vt 0.501570 0.537880 0.000000 +vt 0.504070 0.539320 0.000000 +vt 0.494940 0.543100 0.000000 +vt 0.497010 0.539760 0.000000 +vt 0.499080 0.536430 0.000000 +vt 0.501140 0.533100 0.000000 +vt 0.503870 0.534730 0.000000 +vt 0.506600 0.536350 0.000000 +vt 0.458540 0.541200 0.000000 +vt 0.460560 0.543860 0.000000 +vt 0.456530 0.538550 0.000000 +vt 0.459510 0.538370 0.000000 +vt 0.461270 0.541000 0.000000 +vt 0.463020 0.543640 0.000000 +vt 0.454520 0.535890 0.000000 +vt 0.457760 0.535730 0.000000 +vt 0.461000 0.535580 0.000000 +vt 0.462490 0.538190 0.000000 +vt 0.463990 0.540800 0.000000 +vt 0.465480 0.543420 0.000000 +vt 0.472190 0.470220 0.000000 +vt 0.476590 0.469360 0.000000 +vt 0.476240 0.474580 0.000000 +vt 0.471580 0.475400 0.000000 +vt 0.480990 0.468490 0.000000 +vt 0.480890 0.473760 0.000000 +vt 0.480800 0.479030 0.000000 +vt 0.475890 0.479810 0.000000 +vt 0.470970 0.480580 0.000000 +vt 0.485380 0.467630 0.000000 +vt 0.485550 0.472940 0.000000 +vt 0.485720 0.478250 0.000000 +vt 0.485890 0.483560 0.000000 +vt 0.480710 0.484300 0.000000 +vt 0.475540 0.485030 0.000000 +vt 0.470360 0.485770 0.000000 +vt 0.479390 0.543300 0.000000 +vt 0.477420 0.543450 0.000000 +vt 0.481360 0.543140 0.000000 +vt 0.481490 0.545260 0.000000 +vt 0.479420 0.545390 0.000000 +vt 0.477340 0.545520 0.000000 +vt 0.483330 0.542990 0.000000 +vt 0.483570 0.545130 0.000000 +vt 0.483810 0.547260 0.000000 +vt 0.481630 0.547370 0.000000 +vt 0.479440 0.547480 0.000000 +vt 0.477260 0.547590 0.000000 +# 441 texture coords + +g rocksCombined001 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj.meta new file mode 100644 index 0000000..19767e6 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined001.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: bfb1bc7e46aa9864088f5990182382a2 +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined001 + 100002: //RootNode + 400000: rocksCombined001 + 400002: //RootNode + 2300000: rocksCombined001 + 3300000: rocksCombined001 + 4300000: rocksCombined001 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj new file mode 100644 index 0000000..fcdeeff --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj @@ -0,0 +1,2605 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:31 + +mtllib rocksCombined002.mtl + +# +# object rocksCombined002 +# + +v 11.191994 3.151953 80.808975 +v 29.928391 3.433820 80.497543 +v 10.054695 3.838861 6.790066 +v 30.666779 3.062974 5.489367 +v 16.580490 31.818230 74.745468 +v 26.228867 32.720905 72.635651 +v 19.003914 33.313171 5.618126 +v 25.271996 33.805939 5.560181 +v 28.482452 20.461641 74.403641 +v 16.936699 19.502138 74.543732 +v 26.853355 21.941469 5.070978 +v 17.434044 21.647060 5.121597 +v 10.434036 2.269671 44.546818 +v 30.652824 2.937149 44.510830 +v 25.792183 34.701679 40.339642 +v 17.849602 34.532883 40.989300 +v 29.041382 22.790823 42.298237 +v 14.569939 21.320999 44.780544 +v 23.154358 2.495358 4.071548 +v 23.371307 3.151423 83.501648 +v 21.145218 34.407722 76.844208 +v 22.141312 34.343185 3.869345 +v 22.998322 20.081020 77.507889 +v 22.507019 21.577841 2.295986 +v 23.058136 1.829946 44.531239 +v 21.986145 35.884178 40.502094 +v 35.760124 16.414978 83.439255 +v 32.605247 12.279537 2.793430 +v 11.518295 11.655789 4.689068 +v 9.440781 13.094785 77.066513 +v 33.278900 12.645713 43.206547 +v 9.865013 11.739353 43.913204 +v 27.711922 15.781461 85.003128 +v 22.717102 12.225113 0.722528 +v 10.279732 2.363477 64.746872 +v 24.672226 32.962723 57.656086 +v 12.414032 20.882715 60.316319 +v 32.563652 1.279926 63.487217 +v 16.714264 32.383080 58.962444 +v 27.557724 20.991024 58.275280 +v 23.284210 0.996683 65.567581 +v 21.125381 34.169411 59.156864 +v 37.778305 15.218045 59.901142 +v 10.007065 10.659549 62.476948 +v 30.386360 2.707946 23.888268 +v 17.316589 31.811197 21.384323 +v 28.310944 20.833872 23.846561 +v 10.883957 1.586367 25.062263 +v 23.932503 32.301872 21.260075 +v 15.310234 18.671030 23.395481 +v 23.453911 1.403854 23.705803 +v 21.076767 33.525864 21.201416 +v 8.207222 11.548904 23.704319 +v 38.181282 11.701519 25.963470 +v 10.242317 2.033684 74.217072 +v 17.365334 1.992678 66.001434 +v 25.403732 3.725642 76.836807 +v 16.654076 3.389197 83.127121 +v 17.376404 1.305991 75.081573 +v 18.590141 33.870026 76.614456 +v 21.257591 34.049618 67.567413 +v 19.042786 33.805557 58.934246 +v 15.505974 32.586040 67.503738 +v 18.013733 33.719666 67.272446 +v 24.831200 8.437511 84.686310 +v 16.859055 12.989811 79.880661 +v 10.909424 6.768388 79.588577 +v 16.439575 7.529410 82.737396 +v 33.557213 6.451483 61.879032 +v 34.217438 12.698100 69.570313 +v 33.307320 9.340963 82.670074 +v 31.692131 2.399033 73.662903 +v 34.291039 7.253641 74.077042 +v 22.860741 6.370263 1.813711 +v 27.734398 11.673250 -0.000000 +v 31.719734 6.867184 3.630079 +v 27.675728 1.927257 4.714621 +v 27.929680 5.164724 1.760679 +v 3.525864 3.422713 16.885872 +v 8.767006 6.493750 24.498020 +v 2.439529 13.480379 16.978600 +v 11.223404 6.898900 4.922565 +v 0.000000 7.665533 17.262142 +v 23.241623 34.581379 75.637756 +v 20.986015 26.801085 78.395660 +v 26.147484 21.066805 76.803101 +v 27.291748 26.321709 73.604507 +v 24.509552 25.853106 76.640808 +v 26.143211 28.107754 5.210407 +v 23.730690 32.797028 11.910805 +v 26.458931 26.701088 22.473778 +v 27.957397 20.712994 12.688122 +v 25.679810 26.311245 12.546951 +v 18.507332 27.856901 4.727903 +v 20.436394 34.232384 4.310530 +v 22.337021 28.025806 2.651087 +v 19.925735 21.490431 2.953814 +v 20.419518 28.032185 2.999018 +v 16.008705 25.035357 75.145493 +v 13.452988 26.338013 59.585201 +v 12.091484 19.746452 69.850159 +v 14.652779 25.902493 68.506912 +v 16.874649 1.306591 24.415005 +v 23.154678 2.189592 33.806240 +v 16.334808 1.738503 44.460468 +v 10.460701 2.213432 34.489746 +v 16.632637 1.213113 35.062675 +v 22.851051 33.857784 21.291111 +v 21.778755 34.945614 30.639126 +v 24.026024 36.601456 40.057926 +v 25.763519 34.189064 30.355370 +v 23.781517 35.935673 30.445694 +v 32.393845 6.456475 24.233627 +v 30.712593 12.603539 32.785744 +v 33.244247 6.386628 42.819752 +v 30.139397 3.086357 33.957966 +v 31.231110 6.706985 33.367184 +v 9.236855 1.671434 56.669254 +v 9.119133 6.037261 63.986256 +v 5.992813 11.939714 52.538937 +v 10.676270 5.800302 44.917904 +v 5.496788 5.888907 54.518856 +v 26.193245 26.852655 57.767879 +v 27.580406 21.959038 50.781254 +v 27.440247 28.382643 41.669033 +v 25.286934 34.012703 50.399700 +v 26.046257 27.800989 51.162647 +v 17.717308 33.045990 31.500984 +v 15.479805 25.063166 21.693348 +v 15.597366 20.031363 34.183323 +v 16.167511 27.872740 42.813396 +v 16.240616 26.549915 32.983604 +v 27.530952 2.091831 44.545048 +v 31.784157 2.097792 53.992016 +v 29.094231 0.332631 64.768097 +v 23.315033 1.842270 55.699276 +v 28.164146 1.487783 54.847378 +v 24.799530 32.215775 65.796158 +v 22.975121 34.342796 58.553013 +v 22.993881 34.102028 66.595886 +v 28.268898 3.099938 82.060501 +v 32.451775 16.803761 85.456238 +v 29.643776 8.698107 84.250549 +v 17.011871 11.666572 1.925461 +v 16.761742 2.922213 4.595829 +v 16.935242 6.386396 1.846991 +v 20.949852 19.074402 77.172607 +v 19.938667 26.353012 77.635345 +v 24.913033 22.369030 3.001375 +v 23.791451 34.438709 4.315157 +v 24.177773 28.264200 3.104298 +v 31.248863 2.931896 14.079044 +v 27.344139 1.940900 23.758121 +v 23.146400 1.576023 12.531326 +v 27.567291 1.747407 13.313011 +v 17.840874 32.267853 12.135990 +v 18.905807 33.459667 21.150970 +v 21.622894 34.490955 11.462994 +v 19.358231 34.338341 11.586212 +v 26.551086 19.655693 82.104767 +v 14.028664 15.369010 75.430435 +v 18.915306 15.799184 77.871719 +v 30.920197 18.219414 42.421902 +v 32.966461 19.111088 58.294949 +v 34.674492 12.866602 51.494923 +v 31.370949 18.825716 50.878246 +v 22.526550 16.807846 1.084070 +v 29.778511 17.608248 4.038197 +v 25.776176 16.906200 1.943186 +v 11.697083 16.133503 23.892082 +v 7.250999 12.055197 34.513344 +v 11.869072 16.373055 45.049747 +v 11.558945 17.157463 34.152843 +v 30.133667 16.835327 23.933689 +v 35.358528 12.971849 13.422161 +v 33.257133 17.072594 14.185509 +v 10.061035 16.721945 60.429691 +v 3.849510 14.143494 71.839798 +v 6.401985 18.638004 71.225983 +v 32.003639 19.181433 78.738571 +v 30.452477 20.278652 82.213379 +v 14.792580 16.225601 4.930635 +v 18.561462 16.781975 2.533739 +v 16.436325 2.093060 55.103222 +v 19.856651 35.834850 40.664196 +v 16.346046 34.439541 50.828533 +v 21.571014 34.628368 51.042118 +v 19.307983 34.853100 50.873608 +v 35.516312 6.570659 52.667835 +v 10.264626 21.614115 52.701359 +v 12.597290 28.233603 51.192646 +v 4.559280 8.641148 72.604752 +v 28.292145 21.275156 66.101944 +v 25.804794 25.866064 65.237869 +v 29.869164 2.929206 76.190308 +v 23.542839 35.317986 50.581577 +v 31.497208 17.998920 67.331100 +v 7.612350 17.327877 52.650928 +v 8.539413 5.761236 34.805058 +v 27.701462 20.916595 32.824863 +v 26.160179 27.025574 31.943855 +v 16.867218 1.776820 13.421463 +v 22.772522 33.844963 11.622833 +v 34.927902 7.097783 13.139290 +v 14.196144 21.627758 13.511871 +v 16.413086 25.738157 12.760281 +v 27.241753 2.329098 33.804585 +v 19.560135 34.545368 31.364784 +v 9.985390 18.089001 13.867046 +v 28.729149 17.133766 32.973648 +v 10.054565 2.426408 78.552246 +v 13.828209 1.450916 74.867264 +v 16.679176 1.887998 80.056610 +v 12.665924 3.180979 82.266769 +v 12.683205 2.101879 79.295303 +v 10.767639 1.519390 69.711060 +v 13.128777 1.699938 65.185822 +v 17.922302 0.470393 70.402527 +v 14.400787 0.576180 70.710846 +v 20.746658 2.012793 66.130081 +v 23.717087 1.040486 71.178223 +v 20.902184 2.212123 75.049500 +v 20.714935 0.918018 70.933960 +v 24.422310 2.497927 80.091446 +v 20.698395 3.421555 83.448502 +v 20.792641 1.965378 80.469849 +v 17.813988 33.007439 75.823029 +v 18.899666 34.101479 72.400192 +v 16.370644 33.920609 67.132126 +v 15.962173 31.517138 71.723770 +v 17.318481 33.350502 71.979477 +v 19.869759 34.333469 77.023468 +v 21.940155 35.562233 72.560577 +v 19.509300 33.585350 67.495590 +v 20.285461 34.631954 72.670547 +v 21.142357 33.606766 62.220379 +v 20.119553 33.922646 59.006123 +v 18.677185 33.505463 62.068310 +v 20.160690 33.418282 62.358738 +v 17.958488 33.494579 58.852650 +v 16.688904 32.006119 62.201244 +v 17.574417 33.239323 62.107693 +v 22.975319 5.320099 84.239868 +v 20.186897 8.139148 83.068802 +v 16.605148 5.431927 83.438553 +v 20.254456 5.452203 83.981567 +v 26.549240 12.358047 85.133896 +v 22.670319 15.395360 83.232468 +v 16.468330 10.297522 81.313858 +v 22.901779 12.061810 84.538193 +v 14.716965 12.020892 78.685928 +v 11.232002 9.354371 78.365021 +v 12.966843 6.867014 81.902390 +v 13.685188 9.638233 80.096542 +v 10.905319 4.187690 80.851563 +v 12.801208 4.677455 82.934845 +v 33.106789 3.349621 62.718655 +v 34.042580 5.881271 67.009659 +v 33.229836 4.641375 73.669571 +v 32.118332 1.514299 68.933090 +v 33.024162 3.315168 67.966232 +v 39.082878 11.879886 60.736591 +v 34.377937 13.443451 65.066910 +v 35.550636 10.603240 72.544907 +v 34.752563 9.757256 65.963089 +v 37.151588 16.785995 80.545120 +v 34.952766 13.181662 83.192017 +v 35.479134 9.790636 80.841736 +v 36.945053 13.984811 81.182877 +v 31.399170 5.876849 81.995148 +v 30.815201 3.708521 78.648239 +v 33.261330 6.584747 79.877380 +v 23.141266 3.905714 2.313482 +v 25.475784 5.496594 1.843704 +v 27.685707 3.198563 2.769749 +v 25.515709 2.182600 4.289734 +v 25.539459 3.484481 2.472179 +v 22.926781 8.812894 1.273676 +v 25.064468 12.360875 0.327406 +v 28.254166 8.170085 0.356758 +v 25.243469 8.110404 0.840876 +v 30.503136 11.143889 0.703074 +v 32.342117 9.716121 3.095585 +v 29.978813 6.174256 1.815754 +v 30.810844 8.713442 0.812723 +v 30.877647 4.015665 4.848036 +v 29.266312 2.466071 4.973740 +v 29.411713 3.688801 3.371344 +v 6.269485 3.625219 11.125160 +v 0.305206 5.047582 17.417538 +v 5.695549 7.993624 10.873352 +v 11.121651 4.693252 5.402184 +v 5.301659 5.426412 10.938354 +v 10.242958 2.273800 19.546875 +v 9.151627 3.681642 24.823811 +v 8.865852 5.900557 19.418343 +v 8.868271 3.974662 19.503197 +v 8.503036 8.905956 24.142632 +v 7.770226 11.506834 19.928055 +v 1.057343 10.542026 17.474384 +v 5.330887 9.192313 20.480675 +v 7.485954 12.301438 9.547974 +v 11.226585 9.229527 4.828983 +v 6.609230 10.099559 10.201130 +v 25.109695 33.011883 73.990280 +v 24.205025 30.375252 78.303909 +v 25.622200 26.091003 75.292664 +v 27.157272 29.940641 73.647202 +v 25.997940 29.738379 75.608398 +v 22.179390 34.458111 76.078293 +v 21.039993 30.695997 77.984268 +v 22.000954 27.190596 78.330185 +v 22.745605 30.313795 78.595490 +v 22.512993 22.303663 77.647934 +v 24.654274 20.809486 77.345230 +v 25.122635 22.863743 76.194855 +v 24.155220 22.531328 76.948685 +v 27.065460 20.271828 75.606903 +v 27.555923 23.123438 73.839813 +v 26.435913 23.002773 75.817429 +v 26.187065 25.088276 5.261869 +v 26.662819 27.696747 8.138454 +v 26.348740 23.034805 12.566689 +v 27.430847 21.654011 8.538445 +v 26.867424 24.301685 8.536274 +v 26.042061 31.823214 5.238974 +v 25.248726 33.841187 7.964947 +v 24.803123 30.183357 12.315510 +v 26.363487 31.861919 8.317505 +v 22.455231 31.167492 16.839710 +v 25.172264 30.077515 21.386166 +v 25.265976 26.396931 17.444149 +v 23.706047 29.234800 17.181828 +v 27.455902 23.625984 23.513771 +v 29.612831 21.979750 18.816990 +v 27.962181 23.827677 18.266258 +v 18.015221 24.670774 4.889400 +v 19.354065 28.090290 3.273964 +v 20.102295 24.878988 2.581030 +v 18.735687 21.464830 3.717091 +v 18.982689 25.019943 3.314512 +v 18.859665 31.117886 5.093658 +v 19.601357 34.026188 4.792318 +v 20.496788 31.611025 3.128164 +v 19.638641 31.480713 3.637205 +v 21.294212 34.290257 4.006418 +v 22.257500 31.722107 2.681454 +v 21.398773 28.087446 2.785290 +v 21.382004 31.670959 2.818939 +v 22.461899 24.853878 2.569717 +v 21.254128 21.295204 2.399994 +v 21.321777 24.721478 2.494648 +v 16.160309 21.657001 74.833710 +v 14.725662 24.693796 72.221436 +v 14.522964 21.765751 69.414047 +v 15.087990 18.681124 72.331467 +v 15.376518 22.226391 72.659821 +v 16.516693 29.110609 75.181793 +v 15.136238 30.002182 68.184509 +v 14.626045 28.668003 71.900360 +v 14.823036 30.061720 59.266438 +v 15.850113 25.250813 63.664494 +v 15.829414 29.406206 63.165752 +v 13.205956 22.762938 60.183941 +v 13.242088 19.912733 64.212616 +v 15.285400 22.068220 63.769619 +v 13.669891 0.792721 24.824867 +v 16.684097 1.725797 29.423241 +v 12.408638 1.147615 34.894123 +v 9.623230 1.656791 29.405930 +v 13.160637 1.406407 29.559784 +v 20.279663 1.414719 24.085327 +v 23.439232 1.696178 28.888889 +v 20.207672 1.785795 34.218273 +v 20.364647 1.709993 29.095375 +v 22.731209 1.598999 39.577209 +v 19.784142 2.185295 44.153912 +v 16.552849 1.213363 39.750904 +v 19.826469 1.934093 39.541443 +v 13.138863 1.138662 44.563900 +v 12.345276 2.164329 40.005638 +v 12.956459 1.013356 39.712582 +v 23.770676 34.031380 21.344532 +v 23.144661 34.738106 25.408337 +v 24.750938 35.511539 30.377892 +v 24.822899 33.356003 26.280380 +v 24.077248 34.641163 25.839836 +v 22.006325 33.663666 21.185863 +v 21.197830 34.105659 25.193165 +v 22.770485 35.434086 30.610348 +v 22.165260 34.405338 25.260353 +v 21.802704 35.364719 36.137665 +v 23.060966 36.213215 40.183132 +v 23.800705 35.731995 36.021713 +v 22.833237 35.301502 36.182884 +v 24.960693 35.811378 40.099548 +v 25.543968 34.535103 36.383457 +v 24.761932 35.412617 36.186752 +v 30.719467 4.458340 23.781017 +v 32.446518 6.995477 28.208511 +v 30.721664 4.454819 33.683994 +v 29.981956 3.196631 29.031376 +v 30.436539 4.749821 28.517864 +v 35.726852 8.701557 25.116066 +v 35.126945 12.010371 29.782639 +v 31.565056 9.680639 32.846619 +v 34.772659 9.153761 29.505466 +v 30.936081 12.116416 38.312458 +v 33.500496 9.212900 43.024494 +v 31.247856 6.907993 38.665833 +v 31.400230 8.916731 38.460617 +v 33.011551 4.020234 43.527470 +v 30.210220 3.389538 39.314346 +v 30.857666 4.821419 38.847069 +v 9.699593 2.560379 49.555241 +v 7.614609 3.253124 55.620953 +v 7.242470 6.306974 49.171543 +v 10.575630 3.809579 45.023396 +v 8.762070 3.826219 49.359035 +v 9.177528 1.920181 62.140255 +v 9.354637 4.289505 64.293671 +v 7.140167 5.363138 61.598476 +v 8.196907 3.213540 62.250065 +v 9.972267 8.112178 63.545605 +v 5.448181 12.007362 57.467381 +v 4.991241 8.798978 53.814663 +v 5.394592 8.895771 59.304462 +v 9.749878 11.404246 48.677090 +v 10.287674 8.768581 44.511402 +v 7.320343 9.074861 48.681156 +v 25.367256 30.251513 57.542538 +v 26.204445 27.480946 53.888721 +v 26.153595 31.287466 50.943493 +v 25.008781 33.503742 53.800655 +v 25.654739 30.945408 53.866657 +v 26.769760 23.702795 57.957584 +v 27.668884 21.701288 54.753567 +v 26.579613 24.553007 50.978657 +v 26.680786 24.045004 54.164898 +v 29.226288 22.643091 46.918346 +v 28.270592 25.043566 42.110989 +v 27.780304 28.346495 46.655842 +v 28.313698 25.044794 47.234562 +v 26.703194 32.298702 41.208126 +v 25.899467 35.403694 45.407146 +v 27.277489 32.234467 45.776676 +v 17.663193 33.982964 36.572262 +v 16.439804 30.532001 32.014912 +v 16.202660 27.973728 37.663189 +v 16.676208 32.179199 41.298084 +v 17.055138 31.637550 37.177044 +v 17.062668 32.532692 26.329067 +v 16.182327 28.734690 21.525238 +v 14.926949 25.217344 28.011322 +v 16.084190 29.990553 25.678841 +v 15.668884 21.364412 22.754349 +v 13.122612 21.286846 29.227520 +v 16.224777 23.064371 33.785088 +v 13.896172 22.318495 29.115017 +v 15.894150 21.007042 38.931408 +v 15.462952 24.834179 44.497860 +v 16.193909 23.872198 38.616585 +v 25.524101 1.972855 44.524082 +v 28.066452 1.105486 50.318485 +v 25.704185 1.848080 55.009274 +v 23.522789 2.118308 49.686329 +v 25.820404 1.706940 50.005848 +v 29.373863 2.206894 44.613010 +v 32.408783 1.202927 49.676746 +v 30.509666 1.208669 55.117092 +v 30.263367 0.992023 49.912983 +v 32.325974 1.192792 58.377827 +v 31.449074 0.298021 64.187317 +v 29.156876 0.084183 58.283260 +v 31.102463 0.192669 58.316814 +v 26.370186 0.000000 65.245056 +v 23.733742 1.956229 60.113499 +v 25.970840 1.346367 59.625286 +v 25.901329 33.169434 70.161148 +v 23.767212 33.917339 65.768173 +v 23.776962 34.905987 70.937363 +v 24.595726 34.353027 70.511246 +v 24.592461 32.450958 61.320889 +v 23.877579 34.110081 58.072445 +v 23.083427 33.815468 61.589504 +v 23.889671 33.719597 61.399761 +v 22.029190 34.263550 58.944118 +v 22.275002 34.303581 67.205109 +v 22.143555 33.727127 61.848881 +v 22.861176 35.327599 71.971466 +v 26.514656 3.129670 82.909012 +v 28.663185 5.226089 83.458740 +v 27.367348 8.488142 84.611511 +v 26.498497 5.269014 84.032623 +v 29.299034 3.098851 81.504547 +v 31.606171 8.726918 83.614258 +v 29.936722 5.232148 82.886353 +v 34.135361 16.473839 84.678726 +v 31.277695 12.582048 84.980957 +v 33.626587 12.757359 84.498032 +v 30.117241 16.834805 85.235016 +v 29.225349 12.797031 84.870575 +v 13.756866 6.774308 3.058764 +v 16.793686 4.388744 2.784689 +v 13.535728 3.078371 5.225418 +v 13.399117 4.355853 3.631563 +v 14.021484 11.624803 2.651058 +v 16.579102 8.966062 1.696692 +v 13.611832 9.247211 2.876143 +v 20.127037 11.730119 1.297298 +v 20.200813 6.222355 1.819767 +v 20.208267 8.989202 1.535910 +v 20.162621 2.950989 4.275137 +v 20.150932 4.514637 2.585501 +v 19.359261 31.032812 77.741394 +v 20.312584 26.656515 77.943130 +v 19.670456 30.901213 77.870392 +v 17.785881 25.633226 77.154633 +v 18.204262 30.308897 77.135422 +v 18.926147 19.228683 75.987518 +v 19.850220 22.499960 77.634995 +v 18.924210 21.638519 76.362030 +v 22.362831 19.663364 77.318420 +v 20.743210 22.973625 78.034805 +v 25.151764 28.189554 3.680254 +v 23.964729 31.809002 3.152016 +v 24.602791 34.360458 4.769081 +v 24.868729 31.863382 3.677940 +v 26.069656 21.964220 3.509130 +v 24.511482 24.857410 2.945286 +v 25.500824 25.056244 3.633678 +v 23.743385 22.145880 2.550179 +v 23.247818 28.095026 2.744026 +v 23.478882 24.849506 2.713661 +v 22.970940 34.390137 4.007561 +v 23.115646 31.765196 2.828737 +v 31.871849 2.211939 9.230709 +v 29.516533 1.763989 13.731800 +v 27.712608 1.430950 8.370838 +v 29.161514 2.213671 8.461361 +v 30.341866 3.103912 18.707798 +v 29.426949 1.669810 23.866985 +v 27.539055 1.762256 18.321259 +v 29.110481 2.146911 18.384163 +v 25.640099 1.671532 23.661957 +v 23.537949 1.437886 17.589905 +v 26.153030 0.561951 13.296257 +v 25.895714 1.378958 18.102375 +v 23.267395 1.101758 8.020006 +v 25.632759 1.534320 8.194086 +v 18.552864 33.361191 8.184189 +v 18.466888 33.678009 11.820522 +v 20.435364 35.136101 7.560854 +v 19.270531 34.610809 7.845541 +v 17.516182 31.529387 16.869320 +v 17.933708 33.081097 21.189846 +v 19.111053 33.798691 16.437664 +v 18.238602 33.179634 16.668732 +v 20.031792 33.486668 21.246136 +v 20.975151 33.818398 15.713650 +v 20.381119 34.364410 11.460964 +v 20.058891 33.849747 16.071022 +v 22.738876 35.763477 7.229092 +v 21.855339 35.693035 7.347240 +v 27.348763 18.250605 83.608810 +v 22.256477 17.115219 78.871048 +v 17.343178 14.134398 78.357483 +v 23.774025 17.630919 82.703568 +v 23.400864 18.769638 77.817871 +v 20.169098 17.341890 77.360168 +v 22.341240 18.268726 77.649399 +v 15.485344 17.329544 74.920517 +v 16.336472 15.263602 76.881485 +v 17.956902 16.863516 76.646103 +v 11.312759 14.629835 76.141663 +v 15.212601 13.722030 77.514374 +v 32.014107 15.844782 42.807682 +v 31.763817 18.616503 46.439884 +v 33.005608 16.327606 51.076427 +v 35.182495 12.532761 47.004261 +v 33.471863 15.782016 47.151592 +v 29.885185 20.720947 42.412045 +v 29.600502 20.553780 50.701069 +v 30.555969 20.614601 46.273937 +v 28.872917 19.739119 58.647579 +v 31.612488 19.101528 55.531956 +v 28.532700 20.279938 55.080059 +v 35.850914 17.519932 58.803677 +v 39.886086 16.390102 55.041790 +v 36.507813 18.003216 55.138271 +v 22.563484 14.993068 0.602152 +v 24.223747 16.667278 1.515427 +v 26.349815 14.565774 1.387625 +v 24.535980 14.704844 0.761534 +v 22.495468 19.026600 1.927689 +v 25.432373 19.419992 2.462267 +v 24.088493 19.228836 1.925760 +v 27.925507 19.771038 4.573120 +v 27.445526 17.293476 2.565090 +v 26.645546 19.473873 3.173298 +v 31.729118 14.775153 3.297359 +v 28.965027 14.663777 1.552992 +v 13.870461 18.575474 33.802040 +v 12.653229 16.223543 39.638668 +v 13.062454 19.131773 44.784016 +v 14.651230 18.763577 39.223965 +v 13.920990 17.184799 23.823666 +v 9.423943 18.029099 29.021950 +v 11.932671 20.217228 29.418171 +v 9.338982 14.128551 23.665314 +v 5.719650 12.195419 29.092392 +v 8.696388 15.273481 34.511372 +v 6.636650 14.850432 28.896843 +v 11.250923 11.290283 39.395416 +v 10.359024 13.950183 44.496517 +v 11.165024 13.291210 40.226250 +v 30.595879 18.779518 13.257381 +v 32.138969 17.226051 8.153379 +v 29.064095 19.534897 8.278212 +v 29.300888 18.085815 24.193508 +v 33.082909 18.329933 19.293922 +v 31.320259 20.185190 19.263287 +v 31.536133 15.117334 23.673168 +v 35.106918 13.321108 18.760258 +v 34.945885 15.157575 14.186783 +v 34.553619 15.848656 19.269073 +v 33.666512 12.529589 7.287838 +v 33.123344 14.336706 7.842798 +v 8.005859 19.401051 70.735687 +v 5.591064 19.432268 73.835587 +v 8.469391 20.108356 72.887436 +v 10.988525 19.394913 60.226131 +v 9.184677 17.100016 67.380020 +v 10.207878 19.023472 66.302200 +v 9.639137 13.612187 61.322361 +v 8.004967 12.147182 67.477982 +v 4.841545 16.888794 71.709106 +v 8.715263 14.451099 67.518463 +v 0.890884 15.858700 74.674393 +v 2.875595 18.173420 74.490509 +v 26.198578 18.629505 76.722366 +v 31.759544 20.138235 81.314392 +v 28.560951 18.719019 74.763626 +v 27.269539 18.682886 75.986221 +v 28.516502 19.820257 82.324509 +v 24.803452 18.365877 77.014420 +v 32.171219 19.653177 84.722549 +v 30.424179 19.048435 84.700760 +v 35.343063 19.363634 82.652206 +v 34.027847 19.439163 84.240875 +v 12.845314 14.111102 4.315014 +v 16.599609 16.383677 3.365059 +v 17.800774 14.259244 2.246038 +v 14.940933 14.103419 2.628948 +v 16.384109 18.702532 5.004005 +v 19.511757 18.900713 2.918591 +v 17.929337 18.769581 3.579374 +v 20.521446 17.184589 1.680723 +v 20.958817 19.061716 2.248825 +v 20.017876 14.841321 1.086126 +v 11.269180 1.153812 55.974667 +v 16.351868 1.887686 61.254101 +v 12.141861 1.222761 61.409100 +v 16.156944 2.202479 49.714497 +v 12.825531 2.012888 49.773457 +v 20.545876 2.234128 55.207363 +v 19.935722 2.278462 49.708340 +v 20.386894 2.415613 60.227779 +v 21.048752 35.691418 40.677708 +v 19.753426 35.638405 45.472492 +v 20.592743 34.507294 51.060467 +v 23.077461 37.188652 45.651043 +v 21.806061 37.123676 45.860233 +v 18.757088 35.842293 40.956852 +v 17.126030 34.334507 45.464451 +v 17.461441 35.432419 50.566326 +v 17.918732 36.037586 44.804012 +v 15.873024 33.574471 55.509846 +v 19.299088 34.244400 54.845890 +v 17.797859 34.477528 54.945271 +v 21.334518 34.531715 54.729755 +v 20.288429 34.497334 54.903721 +v 36.756493 5.327724 46.791386 +v 33.028748 3.804989 53.466831 +v 35.796082 2.621902 47.517315 +v 35.887421 9.818581 51.685444 +v 36.836235 8.681509 47.136524 +v 36.887665 7.878507 56.964741 +v 40.938805 13.165751 55.559750 +v 32.961617 3.315002 58.010860 +v 14.302269 32.293167 51.133282 +v 12.582863 27.555309 56.422260 +v 15.193825 30.675543 55.560307 +v 15.266953 27.677103 47.960545 +v 16.281662 31.239664 46.916821 +v 14.046249 20.965012 48.461002 +v 11.326317 24.524912 51.878933 +v 14.765564 23.920940 47.869450 +v 8.795975 21.670855 57.785366 +v 10.404991 23.878931 57.633152 +v 8.626152 3.700154 73.561539 +v 7.357048 7.446241 68.248337 +v 9.264038 3.894378 68.625610 +v 8.604805 6.397349 76.234619 +v 9.206154 4.012705 77.475983 +v 3.565727 11.420050 72.098969 +v 2.109024 12.659600 75.572205 +v 6.681892 9.954797 68.059387 +v 25.624725 29.715387 65.459137 +v 25.823975 26.352325 61.958118 +v 25.357239 29.731815 61.523235 +v 27.631882 26.381685 71.102631 +v 27.027626 30.551140 70.125717 +v 29.125008 20.674900 71.061234 +v 26.685196 22.971445 65.427444 +v 28.102158 22.951693 70.111908 +v 27.298691 21.244980 62.151112 +v 26.472198 23.543388 62.355366 +v 28.372589 2.552175 79.038910 +v 30.608856 1.971355 74.774399 +v 29.484879 2.627750 78.546524 +v 28.665718 3.695341 76.870926 +v 27.096085 2.938631 79.920639 +v 29.012375 1.012110 70.174011 +v 26.176384 1.497178 70.901672 +v 31.195168 0.692625 69.768829 +v 24.564476 35.321346 50.211750 +v 23.326942 34.690422 54.127201 +v 24.238396 34.826931 53.975216 +v 24.896202 36.877991 45.254452 +v 25.379837 36.328499 45.204479 +v 22.535957 34.922554 50.873295 +v 24.018562 37.007053 45.368084 +v 22.365791 34.540661 54.419018 +v 32.370468 16.586409 71.955688 +v 29.979355 19.838434 66.747238 +v 30.182487 19.033710 72.283875 +v 32.966904 15.824618 68.268326 +v 34.827988 17.711977 77.033768 +v 31.284950 18.079103 63.111736 +v 33.139542 16.283588 64.063080 +v 29.076248 19.775545 62.022022 +v 9.104622 19.852943 53.227253 +v 6.979286 17.371906 57.079144 +v 7.989616 19.996220 57.583858 +v 10.796303 16.538330 49.209522 +v 12.336021 18.878212 48.989193 +v 6.698364 14.723827 52.392262 +v 9.778084 14.190551 48.473614 +v 6.358673 14.937305 56.965199 +v 9.451622 3.687086 34.598011 +v 7.044281 5.491932 28.611172 +v 8.245857 3.176803 29.216137 +v 13.209618 6.074136 39.544159 +v 13.100555 3.725541 39.798336 +v 7.456329 8.581874 34.876457 +v 12.377457 8.858978 38.844326 +v 6.223785 8.399529 28.022247 +v 26.517044 27.868246 37.012589 +v 25.907890 31.000788 31.776958 +v 26.119652 31.923903 36.664772 +v 27.874046 21.954357 38.094418 +v 26.891129 23.755726 32.289471 +v 27.049706 24.529318 37.486168 +v 27.264877 20.065544 27.507149 +v 25.723557 26.239153 26.337597 +v 26.416809 23.473003 27.027287 +v 25.546448 30.786421 26.284008 +v 16.736870 2.337245 8.391777 +v 7.201088 2.492036 16.257912 +v 9.137192 2.992693 10.287415 +v 20.132645 2.152828 12.854134 +v 20.141502 2.296107 7.995354 +v 16.887985 1.561728 18.513279 +v 20.418884 1.746800 17.776768 +v 13.783775 0.646608 19.602764 +v 23.736153 35.194702 7.479984 +v 23.140694 33.517097 11.716259 +v 24.345840 34.920456 7.729664 +v 22.291245 34.185562 11.533852 +v 23.279083 35.505444 7.291252 +v 21.718140 32.740524 16.265339 +v 21.707794 33.593266 15.659245 +v 21.876442 32.204132 16.825073 +v 34.513428 7.127075 6.981213 +v 33.108963 4.457042 14.253967 +v 34.065132 4.321283 6.983685 +v 35.366699 10.254089 13.090256 +v 34.139130 10.313719 6.942492 +v 33.496628 6.849529 18.555771 +v 35.421890 10.026171 18.519463 +v 31.237289 4.494268 18.624027 +v 17.043816 29.642262 12.326309 +v 16.779121 24.926605 16.930523 +v 16.591644 28.699965 17.031288 +v 17.715088 27.082962 8.356724 +v 18.004066 30.634733 8.305164 +v 16.231201 21.167538 8.509010 +v 15.191750 23.558771 12.721786 +v 17.056519 23.838362 8.566555 +v 17.000687 18.542416 17.149734 +v 17.537491 20.778507 17.143181 +v 29.008804 2.289849 33.911720 +v 27.287788 2.185711 28.959831 +v 28.887001 2.465102 29.016979 +v 27.425934 1.676285 39.443863 +v 29.235390 2.197562 39.518047 +v 25.350609 2.397117 33.728069 +v 25.298241 1.477646 39.491482 +v 25.566864 1.862709 29.029747 +v 18.606750 34.342712 31.371311 +v 19.200294 33.969357 25.472454 +v 18.128845 33.802818 25.982681 +v 19.639725 35.231209 36.297932 +v 18.525215 35.080608 36.654461 +v 20.706818 34.654255 30.939266 +v 20.645164 35.464760 35.990864 +v 20.222122 33.911583 25.255653 +v 13.602371 15.895634 8.569527 +v 12.555573 20.179674 13.604397 +v 15.302628 18.497499 8.890263 +v 4.269142 16.248501 15.810402 +v 10.471504 14.117723 8.627213 +v 14.929909 13.600307 18.079166 +v 14.127144 12.112972 18.113800 +v 15.828201 16.012772 17.594032 +v 29.092072 17.600689 38.188183 +v 28.178909 18.737820 33.097080 +v 28.642464 19.849760 38.060196 +v 29.656792 15.058474 32.642059 +v 30.034317 15.125193 38.245373 +v 29.284004 17.023188 28.166061 +v 30.128967 15.398570 27.792793 +v 28.398567 17.967232 28.192657 +# 834 vertices + +vt 0.825950 0.612410 0.000000 +vt 0.812010 0.612040 0.000000 +vt 0.813270 0.600560 0.000000 +vt 0.827330 0.601030 0.000000 +vt 0.798060 0.611660 0.000000 +vt 0.799210 0.600080 0.000000 +vt 0.800360 0.588510 0.000000 +vt 0.814530 0.589080 0.000000 +vt 0.828700 0.589650 0.000000 +vt 0.784120 0.611280 0.000000 +vt 0.785150 0.599610 0.000000 +vt 0.770180 0.610910 0.000000 +vt 0.771090 0.599130 0.000000 +vt 0.772010 0.587360 0.000000 +vt 0.786180 0.587930 0.000000 +vt 0.787220 0.576260 0.000000 +vt 0.801500 0.576930 0.000000 +vt 0.772930 0.575590 0.000000 +vt 0.773850 0.563820 0.000000 +vt 0.788250 0.564580 0.000000 +vt 0.802650 0.565350 0.000000 +vt 0.815790 0.577600 0.000000 +vt 0.830080 0.578270 0.000000 +vt 0.817050 0.566120 0.000000 +vt 0.831450 0.566880 0.000000 +vt 0.781360 0.773650 0.000000 +vt 0.782260 0.774550 0.000000 +vt 0.771070 0.773660 0.000000 +vt 0.770390 0.772080 0.000000 +vt 0.783160 0.775460 0.000000 +vt 0.771750 0.775240 0.000000 +vt 0.760340 0.775030 0.000000 +vt 0.759880 0.772770 0.000000 +vt 0.759430 0.770500 0.000000 +vt 0.784060 0.776360 0.000000 +vt 0.772420 0.776830 0.000000 +vt 0.784950 0.777260 0.000000 +vt 0.773100 0.778410 0.000000 +vt 0.761240 0.779550 0.000000 +vt 0.760790 0.777290 0.000000 +vt 0.749160 0.777760 0.000000 +vt 0.748920 0.774810 0.000000 +vt 0.749390 0.780700 0.000000 +vt 0.737530 0.781850 0.000000 +vt 0.737520 0.778220 0.000000 +vt 0.737510 0.774600 0.000000 +vt 0.748690 0.771870 0.000000 +vt 0.748460 0.768930 0.000000 +vt 0.737500 0.770980 0.000000 +vt 0.737500 0.767360 0.000000 +vt 0.864410 0.636490 0.000000 +vt 0.857570 0.646450 0.000000 +vt 0.848300 0.640550 0.000000 +vt 0.854800 0.630470 0.000000 +vt 0.850740 0.656410 0.000000 +vt 0.841800 0.650640 0.000000 +vt 0.832870 0.644870 0.000000 +vt 0.839030 0.634660 0.000000 +vt 0.845180 0.624450 0.000000 +vt 0.843900 0.666380 0.000000 +vt 0.835310 0.660730 0.000000 +vt 0.837060 0.676340 0.000000 +vt 0.828810 0.670810 0.000000 +vt 0.820560 0.665280 0.000000 +vt 0.826720 0.655070 0.000000 +vt 0.818130 0.649420 0.000000 +vt 0.823940 0.639090 0.000000 +vt 0.812310 0.659750 0.000000 +vt 0.804070 0.654220 0.000000 +vt 0.809540 0.643770 0.000000 +vt 0.815010 0.633320 0.000000 +vt 0.829750 0.628760 0.000000 +vt 0.835570 0.618430 0.000000 +vt 0.820480 0.622870 0.000000 +vt 0.126990 0.827430 0.000000 +vt 0.130870 0.837880 0.000000 +vt 0.117400 0.838730 0.000000 +vt 0.113030 0.828330 0.000000 +vt 0.134740 0.848330 0.000000 +vt 0.121760 0.849130 0.000000 +vt 0.108780 0.849940 0.000000 +vt 0.103930 0.839580 0.000000 +vt 0.099070 0.829220 0.000000 +vt 0.138610 0.858780 0.000000 +vt 0.126120 0.859540 0.000000 +vt 0.142490 0.869230 0.000000 +vt 0.130480 0.869940 0.000000 +vt 0.118480 0.870650 0.000000 +vt 0.113630 0.860290 0.000000 +vt 0.101140 0.861050 0.000000 +vt 0.095800 0.850740 0.000000 +vt 0.106480 0.871360 0.000000 +vt 0.094480 0.872070 0.000000 +vt 0.088650 0.861810 0.000000 +vt 0.082820 0.851550 0.000000 +vt 0.090460 0.840430 0.000000 +vt 0.085110 0.830120 0.000000 +vt 0.076990 0.841280 0.000000 +vt 0.071150 0.831020 0.000000 +vt 0.313260 0.814610 0.000000 +vt 0.314110 0.825240 0.000000 +vt 0.309460 0.825570 0.000000 +vt 0.308370 0.814950 0.000000 +vt 0.314960 0.835880 0.000000 +vt 0.310550 0.836190 0.000000 +vt 0.306140 0.836490 0.000000 +vt 0.304810 0.825890 0.000000 +vt 0.303480 0.815290 0.000000 +vt 0.315810 0.846520 0.000000 +vt 0.311640 0.846810 0.000000 +vt 0.316660 0.857150 0.000000 +vt 0.312730 0.857430 0.000000 +vt 0.308790 0.857700 0.000000 +vt 0.307460 0.847100 0.000000 +vt 0.303290 0.847390 0.000000 +vt 0.301720 0.836800 0.000000 +vt 0.304860 0.857980 0.000000 +vt 0.300920 0.858250 0.000000 +vt 0.299110 0.847680 0.000000 +vt 0.297310 0.837110 0.000000 +vt 0.300150 0.826210 0.000000 +vt 0.298590 0.815630 0.000000 +vt 0.295500 0.826540 0.000000 +vt 0.293700 0.815970 0.000000 +vt 0.604830 0.605690 0.000000 +vt 0.618510 0.605960 0.000000 +vt 0.617640 0.616130 0.000000 +vt 0.604170 0.615710 0.000000 +vt 0.632200 0.606230 0.000000 +vt 0.631100 0.616550 0.000000 +vt 0.630000 0.626870 0.000000 +vt 0.616760 0.626290 0.000000 +vt 0.603510 0.625720 0.000000 +vt 0.645880 0.606500 0.000000 +vt 0.644560 0.616970 0.000000 +vt 0.659560 0.606770 0.000000 +vt 0.658030 0.617390 0.000000 +vt 0.656490 0.628010 0.000000 +vt 0.643250 0.627440 0.000000 +vt 0.641940 0.637900 0.000000 +vt 0.628910 0.637180 0.000000 +vt 0.654960 0.638630 0.000000 +vt 0.653430 0.649240 0.000000 +vt 0.640620 0.648370 0.000000 +vt 0.627810 0.647500 0.000000 +vt 0.615880 0.636460 0.000000 +vt 0.602850 0.635740 0.000000 +vt 0.615000 0.646630 0.000000 +vt 0.602190 0.645760 0.000000 +vt 0.794710 0.779060 0.000000 +vt 0.792800 0.778800 0.000000 +vt 0.801280 0.764000 0.000000 +vt 0.803780 0.764650 0.000000 +vt 0.790890 0.778540 0.000000 +vt 0.798790 0.763340 0.000000 +vt 0.806680 0.748140 0.000000 +vt 0.809760 0.749190 0.000000 +vt 0.812840 0.750250 0.000000 +vt 0.788980 0.778280 0.000000 +vt 0.796290 0.762680 0.000000 +vt 0.787070 0.778020 0.000000 +vt 0.793800 0.762020 0.000000 +vt 0.800520 0.746030 0.000000 +vt 0.803600 0.747080 0.000000 +vt 0.810910 0.731480 0.000000 +vt 0.814570 0.732940 0.000000 +vt 0.807250 0.730030 0.000000 +vt 0.813970 0.714030 0.000000 +vt 0.818220 0.715880 0.000000 +vt 0.822470 0.717740 0.000000 +vt 0.818240 0.734390 0.000000 +vt 0.821900 0.735850 0.000000 +vt 0.826720 0.719590 0.000000 +vt 0.830970 0.721440 0.000000 +vt 0.305090 0.901720 0.000000 +vt 0.306300 0.919120 0.000000 +vt 0.293000 0.919880 0.000000 +vt 0.291610 0.902560 0.000000 +vt 0.307520 0.936510 0.000000 +vt 0.294380 0.937200 0.000000 +vt 0.281250 0.937880 0.000000 +vt 0.279690 0.920640 0.000000 +vt 0.278140 0.903390 0.000000 +vt 0.308730 0.953910 0.000000 +vt 0.295770 0.954520 0.000000 +vt 0.309950 0.971300 0.000000 +vt 0.297160 0.971840 0.000000 +vt 0.284370 0.972370 0.000000 +vt 0.282810 0.955130 0.000000 +vt 0.269850 0.955740 0.000000 +vt 0.268120 0.938570 0.000000 +vt 0.271580 0.972910 0.000000 +vt 0.258790 0.973450 0.000000 +vt 0.256890 0.956350 0.000000 +vt 0.254990 0.939260 0.000000 +vt 0.266390 0.921400 0.000000 +vt 0.264660 0.904230 0.000000 +vt 0.253090 0.922160 0.000000 +vt 0.251190 0.905060 0.000000 +vt 0.339520 0.901620 0.000000 +vt 0.338570 0.919230 0.000000 +vt 0.334360 0.919020 0.000000 +vt 0.335000 0.901460 0.000000 +vt 0.337630 0.936840 0.000000 +vt 0.333730 0.936580 0.000000 +vt 0.329830 0.936330 0.000000 +vt 0.330150 0.918820 0.000000 +vt 0.330480 0.901310 0.000000 +vt 0.336680 0.954450 0.000000 +vt 0.333090 0.954140 0.000000 +vt 0.335740 0.972060 0.000000 +vt 0.332450 0.971700 0.000000 +vt 0.329170 0.971340 0.000000 +vt 0.329500 0.953840 0.000000 +vt 0.325900 0.953530 0.000000 +vt 0.325930 0.936070 0.000000 +vt 0.325880 0.970990 0.000000 +vt 0.322600 0.970630 0.000000 +vt 0.322310 0.953220 0.000000 +vt 0.322020 0.935810 0.000000 +vt 0.325950 0.918610 0.000000 +vt 0.325970 0.901150 0.000000 +vt 0.321740 0.918410 0.000000 +vt 0.321450 0.901000 0.000000 +vt 0.798970 0.706510 0.000000 +vt 0.794560 0.723290 0.000000 +vt 0.782110 0.722010 0.000000 +vt 0.786010 0.705320 0.000000 +vt 0.790160 0.740080 0.000000 +vt 0.778200 0.738700 0.000000 +vt 0.766240 0.737320 0.000000 +vt 0.769650 0.720720 0.000000 +vt 0.773050 0.704130 0.000000 +vt 0.785760 0.756860 0.000000 +vt 0.774300 0.755390 0.000000 +vt 0.762830 0.753910 0.000000 +vt 0.751370 0.752430 0.000000 +vt 0.754280 0.735940 0.000000 +vt 0.739910 0.750960 0.000000 +vt 0.742320 0.734550 0.000000 +vt 0.757190 0.719440 0.000000 +vt 0.760100 0.702940 0.000000 +vt 0.744730 0.718150 0.000000 +vt 0.747140 0.701750 0.000000 +vt 0.658750 0.595270 0.000000 +vt 0.672910 0.595830 0.000000 +vt 0.673460 0.607470 0.000000 +vt 0.657940 0.583760 0.000000 +vt 0.672360 0.584190 0.000000 +vt 0.686790 0.584620 0.000000 +vt 0.687070 0.596390 0.000000 +vt 0.687360 0.608160 0.000000 +vt 0.657130 0.572260 0.000000 +vt 0.671820 0.572550 0.000000 +vt 0.656320 0.560750 0.000000 +vt 0.671270 0.560920 0.000000 +vt 0.686220 0.561080 0.000000 +vt 0.686500 0.572850 0.000000 +vt 0.701190 0.573150 0.000000 +vt 0.701210 0.585050 0.000000 +vt 0.701170 0.561240 0.000000 +vt 0.716120 0.561410 0.000000 +vt 0.715880 0.573440 0.000000 +vt 0.715640 0.585480 0.000000 +vt 0.701230 0.596950 0.000000 +vt 0.701260 0.608850 0.000000 +vt 0.715400 0.597510 0.000000 +vt 0.715160 0.609550 0.000000 +vt 0.635430 0.790860 0.000000 +vt 0.635040 0.787790 0.000000 +vt 0.647820 0.788320 0.000000 +vt 0.648100 0.791390 0.000000 +vt 0.634650 0.784710 0.000000 +vt 0.647540 0.785250 0.000000 +vt 0.660430 0.785790 0.000000 +vt 0.660600 0.788850 0.000000 +vt 0.660770 0.791910 0.000000 +vt 0.634260 0.781640 0.000000 +vt 0.647260 0.782190 0.000000 +vt 0.633870 0.778560 0.000000 +vt 0.646980 0.779120 0.000000 +vt 0.660090 0.779680 0.000000 +vt 0.660260 0.782730 0.000000 +vt 0.673260 0.783280 0.000000 +vt 0.673320 0.786330 0.000000 +vt 0.673210 0.780230 0.000000 +vt 0.686320 0.780790 0.000000 +vt 0.686270 0.783830 0.000000 +vt 0.686220 0.786870 0.000000 +vt 0.673380 0.789380 0.000000 +vt 0.673440 0.792430 0.000000 +vt 0.686170 0.789910 0.000000 +vt 0.686120 0.792960 0.000000 +vt 0.238620 0.820240 0.000000 +vt 0.240490 0.830880 0.000000 +vt 0.226500 0.831840 0.000000 +vt 0.224600 0.821210 0.000000 +vt 0.242370 0.841520 0.000000 +vt 0.228390 0.842480 0.000000 +vt 0.214420 0.843430 0.000000 +vt 0.212500 0.832810 0.000000 +vt 0.210580 0.822190 0.000000 +vt 0.244240 0.852160 0.000000 +vt 0.230290 0.853110 0.000000 +vt 0.246120 0.862800 0.000000 +vt 0.232190 0.863740 0.000000 +vt 0.218250 0.864680 0.000000 +vt 0.216330 0.854060 0.000000 +vt 0.202380 0.855010 0.000000 +vt 0.200440 0.844390 0.000000 +vt 0.204310 0.865620 0.000000 +vt 0.190380 0.866560 0.000000 +vt 0.188420 0.855960 0.000000 +vt 0.186460 0.845350 0.000000 +vt 0.198500 0.833780 0.000000 +vt 0.196570 0.823160 0.000000 +vt 0.184510 0.834740 0.000000 +vt 0.182550 0.824140 0.000000 +vt 0.728910 0.609890 0.000000 +vt 0.726780 0.620380 0.000000 +vt 0.713460 0.620010 0.000000 +vt 0.742670 0.610230 0.000000 +vt 0.740100 0.620750 0.000000 +vt 0.737530 0.631270 0.000000 +vt 0.724650 0.630870 0.000000 +vt 0.711770 0.630460 0.000000 +vt 0.756420 0.610570 0.000000 +vt 0.753420 0.621120 0.000000 +vt 0.766740 0.621490 0.000000 +vt 0.763300 0.632080 0.000000 +vt 0.750420 0.631670 0.000000 +vt 0.747410 0.642230 0.000000 +vt 0.734970 0.641790 0.000000 +vt 0.759860 0.642660 0.000000 +vt 0.756420 0.653250 0.000000 +vt 0.744410 0.652780 0.000000 +vt 0.732400 0.652320 0.000000 +vt 0.722520 0.641360 0.000000 +vt 0.710080 0.640920 0.000000 +vt 0.720390 0.651850 0.000000 +vt 0.708390 0.651380 0.000000 +vt 0.158540 0.979680 0.000000 +vt 0.157430 0.962530 0.000000 +vt 0.169510 0.961790 0.000000 +vt 0.170950 0.978910 0.000000 +vt 0.156330 0.945380 0.000000 +vt 0.168070 0.944670 0.000000 +vt 0.179820 0.943960 0.000000 +vt 0.181590 0.961050 0.000000 +vt 0.183360 0.978150 0.000000 +vt 0.155220 0.928230 0.000000 +vt 0.166630 0.927550 0.000000 +vt 0.154110 0.911080 0.000000 +vt 0.165190 0.910420 0.000000 +vt 0.176270 0.909760 0.000000 +vt 0.178050 0.926860 0.000000 +vt 0.189460 0.926180 0.000000 +vt 0.191560 0.943250 0.000000 +vt 0.187360 0.909110 0.000000 +vt 0.198440 0.908450 0.000000 +vt 0.200870 0.925490 0.000000 +vt 0.203310 0.942540 0.000000 +vt 0.193670 0.960320 0.000000 +vt 0.195770 0.977390 0.000000 +vt 0.205740 0.959580 0.000000 +vt 0.208180 0.976630 0.000000 +vt 0.687650 0.766910 0.000000 +vt 0.674970 0.766650 0.000000 +vt 0.677610 0.749830 0.000000 +vt 0.690480 0.750130 0.000000 +vt 0.662280 0.766380 0.000000 +vt 0.664740 0.749530 0.000000 +vt 0.667200 0.732680 0.000000 +vt 0.680250 0.733010 0.000000 +vt 0.693300 0.733340 0.000000 +vt 0.649590 0.766120 0.000000 +vt 0.651870 0.749240 0.000000 +vt 0.636910 0.765850 0.000000 +vt 0.639000 0.748940 0.000000 +vt 0.641100 0.732030 0.000000 +vt 0.654150 0.732350 0.000000 +vt 0.656420 0.715470 0.000000 +vt 0.669660 0.715830 0.000000 +vt 0.643190 0.715110 0.000000 +vt 0.645280 0.698200 0.000000 +vt 0.658700 0.698590 0.000000 +vt 0.672120 0.698980 0.000000 +vt 0.682890 0.716200 0.000000 +vt 0.696130 0.716560 0.000000 +vt 0.685540 0.699380 0.000000 +vt 0.698960 0.699770 0.000000 +vt 0.716160 0.555570 0.000000 +vt 0.730500 0.556190 0.000000 +vt 0.730550 0.562010 0.000000 +vt 0.716190 0.549730 0.000000 +vt 0.730450 0.550380 0.000000 +vt 0.744710 0.551030 0.000000 +vt 0.744850 0.556820 0.000000 +vt 0.744980 0.562610 0.000000 +vt 0.716230 0.543890 0.000000 +vt 0.730400 0.544570 0.000000 +vt 0.716270 0.538050 0.000000 +vt 0.730360 0.538750 0.000000 +vt 0.744450 0.539450 0.000000 +vt 0.744580 0.545240 0.000000 +vt 0.758760 0.545920 0.000000 +vt 0.758980 0.551680 0.000000 +vt 0.758540 0.540150 0.000000 +vt 0.772630 0.540850 0.000000 +vt 0.772930 0.546590 0.000000 +vt 0.773240 0.552330 0.000000 +vt 0.759200 0.557450 0.000000 +vt 0.759410 0.563210 0.000000 +vt 0.773540 0.558070 0.000000 +vt 0.782180 0.787060 0.000000 +vt 0.770290 0.788140 0.000000 +vt 0.770990 0.785710 0.000000 +vt 0.782870 0.784610 0.000000 +vt 0.758400 0.789220 0.000000 +vt 0.759110 0.786810 0.000000 +vt 0.759820 0.784390 0.000000 +vt 0.771690 0.783270 0.000000 +vt 0.783570 0.782160 0.000000 +vt 0.746510 0.790300 0.000000 +vt 0.747230 0.787900 0.000000 +vt 0.734620 0.791390 0.000000 +vt 0.735350 0.789000 0.000000 +vt 0.736080 0.786620 0.000000 +vt 0.747950 0.785500 0.000000 +vt 0.748670 0.783100 0.000000 +vt 0.760530 0.781970 0.000000 +vt 0.736800 0.784230 0.000000 +vt 0.772400 0.780840 0.000000 +vt 0.784260 0.779710 0.000000 +vt 0.869360 0.639240 0.000000 +vt 0.862460 0.649080 0.000000 +vt 0.874300 0.641990 0.000000 +vt 0.867340 0.651700 0.000000 +vt 0.860380 0.661420 0.000000 +vt 0.855560 0.658920 0.000000 +vt 0.879250 0.644740 0.000000 +vt 0.872230 0.654330 0.000000 +vt 0.884190 0.647490 0.000000 +vt 0.877110 0.656950 0.000000 +vt 0.870030 0.666420 0.000000 +vt 0.865210 0.663920 0.000000 +vt 0.858190 0.673510 0.000000 +vt 0.853420 0.671130 0.000000 +vt 0.862950 0.675880 0.000000 +vt 0.855870 0.685350 0.000000 +vt 0.851170 0.683100 0.000000 +vt 0.846470 0.680840 0.000000 +vt 0.848660 0.668750 0.000000 +vt 0.841760 0.678590 0.000000 +vt 0.355330 0.813610 0.000000 +vt 0.354670 0.823630 0.000000 +vt 0.344530 0.824030 0.000000 +vt 0.344810 0.813860 0.000000 +vt 0.354000 0.833650 0.000000 +vt 0.344240 0.834200 0.000000 +vt 0.334480 0.834760 0.000000 +vt 0.334390 0.824440 0.000000 +vt 0.334300 0.814110 0.000000 +vt 0.353340 0.843660 0.000000 +vt 0.343960 0.844380 0.000000 +vt 0.352680 0.853680 0.000000 +vt 0.343680 0.854550 0.000000 +vt 0.334670 0.855420 0.000000 +vt 0.334580 0.845090 0.000000 +vt 0.325200 0.845800 0.000000 +vt 0.324720 0.835320 0.000000 +vt 0.325670 0.856290 0.000000 +vt 0.324250 0.824840 0.000000 +vt 0.323780 0.814360 0.000000 +vt 0.785640 0.776930 0.000000 +vt 0.791790 0.760730 0.000000 +vt 0.784220 0.775830 0.000000 +vt 0.789780 0.759440 0.000000 +vt 0.795340 0.743050 0.000000 +vt 0.797930 0.744540 0.000000 +vt 0.782790 0.774740 0.000000 +vt 0.787770 0.758150 0.000000 +vt 0.792750 0.741570 0.000000 +vt 0.797740 0.724980 0.000000 +vt 0.800910 0.726660 0.000000 +vt 0.802720 0.708390 0.000000 +vt 0.806470 0.710270 0.000000 +vt 0.804080 0.728350 0.000000 +vt 0.810220 0.712150 0.000000 +vt 0.312130 0.953740 0.000000 +vt 0.313110 0.971130 0.000000 +vt 0.311140 0.936340 0.000000 +vt 0.314770 0.936160 0.000000 +vt 0.315520 0.953560 0.000000 +vt 0.316270 0.970960 0.000000 +vt 0.310160 0.918940 0.000000 +vt 0.309180 0.901540 0.000000 +vt 0.313270 0.901360 0.000000 +vt 0.314020 0.918760 0.000000 +vt 0.317880 0.918580 0.000000 +vt 0.318400 0.935990 0.000000 +vt 0.317360 0.901180 0.000000 +vt 0.318920 0.953390 0.000000 +vt 0.319440 0.970790 0.000000 +vt 0.601490 0.540760 0.000000 +vt 0.615830 0.540240 0.000000 +vt 0.614730 0.545670 0.000000 +vt 0.600230 0.546160 0.000000 +vt 0.630170 0.539720 0.000000 +vt 0.629220 0.545180 0.000000 +vt 0.628280 0.550640 0.000000 +vt 0.613620 0.551100 0.000000 +vt 0.598960 0.551570 0.000000 +vt 0.644510 0.539200 0.000000 +vt 0.643720 0.544690 0.000000 +vt 0.658850 0.538680 0.000000 +vt 0.658220 0.544200 0.000000 +vt 0.657590 0.549710 0.000000 +vt 0.642930 0.550180 0.000000 +vt 0.642140 0.555670 0.000000 +vt 0.627330 0.556100 0.000000 +vt 0.656950 0.555230 0.000000 +vt 0.641350 0.561160 0.000000 +vt 0.626380 0.561560 0.000000 +vt 0.612510 0.556530 0.000000 +vt 0.597700 0.556970 0.000000 +vt 0.611410 0.561970 0.000000 +vt 0.596440 0.562370 0.000000 +vt 0.585240 0.764140 0.000000 +vt 0.598160 0.764570 0.000000 +vt 0.597190 0.767390 0.000000 +vt 0.584210 0.766840 0.000000 +vt 0.611080 0.765000 0.000000 +vt 0.610180 0.767940 0.000000 +vt 0.609280 0.770870 0.000000 +vt 0.596220 0.770210 0.000000 +vt 0.583170 0.769540 0.000000 +vt 0.623990 0.765420 0.000000 +vt 0.623160 0.768480 0.000000 +vt 0.636150 0.769030 0.000000 +vt 0.635390 0.772210 0.000000 +vt 0.622330 0.771540 0.000000 +vt 0.621500 0.774600 0.000000 +vt 0.608380 0.773810 0.000000 +vt 0.634630 0.775380 0.000000 +vt 0.620680 0.777660 0.000000 +vt 0.607480 0.776750 0.000000 +vt 0.595260 0.773030 0.000000 +vt 0.582130 0.772240 0.000000 +vt 0.594290 0.775840 0.000000 +vt 0.581090 0.774940 0.000000 +vt 0.831290 0.685760 0.000000 +vt 0.824160 0.681150 0.000000 +vt 0.825510 0.695190 0.000000 +vt 0.819510 0.691480 0.000000 +vt 0.813520 0.687780 0.000000 +vt 0.817040 0.676530 0.000000 +vt 0.819740 0.704610 0.000000 +vt 0.814870 0.701820 0.000000 +vt 0.809990 0.699020 0.000000 +vt 0.805120 0.696230 0.000000 +vt 0.807520 0.684070 0.000000 +vt 0.800240 0.693440 0.000000 +vt 0.801520 0.680370 0.000000 +vt 0.809910 0.671910 0.000000 +vt 0.802790 0.667300 0.000000 +vt 0.192390 0.877030 0.000000 +vt 0.180640 0.877700 0.000000 +vt 0.178410 0.867230 0.000000 +vt 0.194410 0.887500 0.000000 +vt 0.182880 0.888170 0.000000 +vt 0.171350 0.888830 0.000000 +vt 0.168890 0.878360 0.000000 +vt 0.166430 0.867890 0.000000 +vt 0.196420 0.897980 0.000000 +vt 0.185120 0.898640 0.000000 +vt 0.173810 0.899300 0.000000 +vt 0.162510 0.899960 0.000000 +vt 0.159830 0.889490 0.000000 +vt 0.151210 0.900620 0.000000 +vt 0.148300 0.890150 0.000000 +vt 0.157140 0.879030 0.000000 +vt 0.154460 0.868560 0.000000 +vt 0.145390 0.879690 0.000000 +vt 0.317860 0.868110 0.000000 +vt 0.313890 0.868370 0.000000 +vt 0.319060 0.879080 0.000000 +vt 0.315040 0.879300 0.000000 +vt 0.311030 0.879530 0.000000 +vt 0.309910 0.868620 0.000000 +vt 0.320250 0.890040 0.000000 +vt 0.316200 0.890240 0.000000 +vt 0.312150 0.890450 0.000000 +vt 0.308100 0.890650 0.000000 +vt 0.307020 0.879760 0.000000 +vt 0.304040 0.890850 0.000000 +vt 0.303000 0.879990 0.000000 +vt 0.305940 0.868870 0.000000 +vt 0.301960 0.869120 0.000000 +vt 0.687820 0.687250 0.000000 +vt 0.701310 0.687670 0.000000 +vt 0.674320 0.686820 0.000000 +vt 0.676510 0.674650 0.000000 +vt 0.690090 0.675110 0.000000 +vt 0.703670 0.675580 0.000000 +vt 0.660820 0.686390 0.000000 +vt 0.647320 0.685960 0.000000 +vt 0.649360 0.673720 0.000000 +vt 0.662940 0.674180 0.000000 +vt 0.665050 0.661980 0.000000 +vt 0.678710 0.662480 0.000000 +vt 0.651390 0.661480 0.000000 +vt 0.667170 0.649780 0.000000 +vt 0.680910 0.650310 0.000000 +vt 0.692370 0.662980 0.000000 +vt 0.706030 0.663480 0.000000 +vt 0.694650 0.650850 0.000000 +vt 0.290510 0.891770 0.000000 +vt 0.276980 0.892680 0.000000 +vt 0.275830 0.881960 0.000000 +vt 0.289420 0.880970 0.000000 +vt 0.263450 0.893590 0.000000 +vt 0.249920 0.894500 0.000000 +vt 0.248650 0.883930 0.000000 +vt 0.262240 0.882940 0.000000 +vt 0.261030 0.872300 0.000000 +vt 0.274670 0.871240 0.000000 +vt 0.247390 0.873370 0.000000 +vt 0.259820 0.861660 0.000000 +vt 0.273520 0.860520 0.000000 +vt 0.288320 0.870180 0.000000 +vt 0.287220 0.859390 0.000000 +vt 0.787550 0.692480 0.000000 +vt 0.774850 0.691530 0.000000 +vt 0.776650 0.678930 0.000000 +vt 0.789080 0.679650 0.000000 +vt 0.762160 0.690580 0.000000 +vt 0.749460 0.689630 0.000000 +vt 0.751780 0.677500 0.000000 +vt 0.764210 0.678220 0.000000 +vt 0.766270 0.665850 0.000000 +vt 0.778440 0.666340 0.000000 +vt 0.754100 0.665370 0.000000 +vt 0.768330 0.653490 0.000000 +vt 0.780240 0.653740 0.000000 +vt 0.790620 0.666820 0.000000 +vt 0.792150 0.653980 0.000000 +vt 0.832830 0.710470 0.000000 +vt 0.837190 0.712420 0.000000 +vt 0.828470 0.708510 0.000000 +vt 0.834470 0.699290 0.000000 +vt 0.838940 0.701340 0.000000 +vt 0.843420 0.703390 0.000000 +vt 0.824110 0.706560 0.000000 +vt 0.829990 0.697240 0.000000 +vt 0.835880 0.687920 0.000000 +vt 0.840470 0.690070 0.000000 +vt 0.845060 0.692220 0.000000 +vt 0.849650 0.694370 0.000000 +vt 0.349390 0.865670 0.000000 +vt 0.341510 0.866280 0.000000 +vt 0.346100 0.877650 0.000000 +vt 0.339340 0.878010 0.000000 +vt 0.332580 0.878360 0.000000 +vt 0.333630 0.866890 0.000000 +vt 0.342810 0.889630 0.000000 +vt 0.337170 0.889740 0.000000 +vt 0.331530 0.889840 0.000000 +vt 0.325890 0.889940 0.000000 +vt 0.325820 0.878720 0.000000 +vt 0.325740 0.867500 0.000000 +vt 0.757170 0.598730 0.000000 +vt 0.743250 0.598320 0.000000 +vt 0.743820 0.586420 0.000000 +vt 0.757920 0.586890 0.000000 +vt 0.729320 0.597920 0.000000 +vt 0.729730 0.585950 0.000000 +vt 0.730140 0.573980 0.000000 +vt 0.744400 0.574520 0.000000 +vt 0.758670 0.575050 0.000000 +vt 0.686650 0.777320 0.000000 +vt 0.699370 0.777550 0.000000 +vt 0.699120 0.781060 0.000000 +vt 0.686980 0.773850 0.000000 +vt 0.699620 0.774040 0.000000 +vt 0.712250 0.774230 0.000000 +vt 0.712090 0.777770 0.000000 +vt 0.711920 0.781320 0.000000 +vt 0.687320 0.770380 0.000000 +vt 0.699870 0.770530 0.000000 +vt 0.700110 0.767020 0.000000 +vt 0.712570 0.767130 0.000000 +vt 0.712410 0.770680 0.000000 +vt 0.724960 0.770830 0.000000 +vt 0.724880 0.774410 0.000000 +vt 0.725030 0.767250 0.000000 +vt 0.724800 0.778000 0.000000 +vt 0.724730 0.781580 0.000000 +vt 0.171100 0.835530 0.000000 +vt 0.168660 0.824960 0.000000 +vt 0.173530 0.846090 0.000000 +vt 0.160600 0.846840 0.000000 +vt 0.157690 0.836310 0.000000 +vt 0.154770 0.825780 0.000000 +vt 0.175970 0.856660 0.000000 +vt 0.163520 0.857370 0.000000 +vt 0.151060 0.858070 0.000000 +vt 0.147670 0.847580 0.000000 +vt 0.144280 0.837100 0.000000 +vt 0.140880 0.826610 0.000000 +vt 0.727550 0.750750 0.000000 +vt 0.715190 0.750540 0.000000 +vt 0.717810 0.733950 0.000000 +vt 0.730060 0.734250 0.000000 +vt 0.702840 0.750330 0.000000 +vt 0.705560 0.733640 0.000000 +vt 0.708280 0.716950 0.000000 +vt 0.720430 0.717350 0.000000 +vt 0.711000 0.700270 0.000000 +vt 0.723050 0.700760 0.000000 +vt 0.732580 0.717750 0.000000 +vt 0.735090 0.701260 0.000000 +vt 0.780170 0.621840 0.000000 +vt 0.793610 0.622180 0.000000 +vt 0.789150 0.632700 0.000000 +vt 0.776230 0.632390 0.000000 +vt 0.807040 0.622520 0.000000 +vt 0.802080 0.633010 0.000000 +vt 0.797120 0.643490 0.000000 +vt 0.784700 0.643220 0.000000 +vt 0.772280 0.642940 0.000000 +vt 0.146140 0.980470 0.000000 +vt 0.145380 0.963290 0.000000 +vt 0.133740 0.981270 0.000000 +vt 0.133320 0.964050 0.000000 +vt 0.132890 0.946840 0.000000 +vt 0.144610 0.946110 0.000000 +vt 0.121340 0.982060 0.000000 +vt 0.121260 0.964820 0.000000 +vt 0.108940 0.982860 0.000000 +vt 0.109200 0.965580 0.000000 +vt 0.109460 0.948310 0.000000 +vt 0.121180 0.947580 0.000000 +vt 0.121100 0.930330 0.000000 +vt 0.132470 0.929630 0.000000 +vt 0.109720 0.931030 0.000000 +vt 0.109990 0.913760 0.000000 +vt 0.121020 0.913090 0.000000 +vt 0.132050 0.912420 0.000000 +vt 0.143850 0.928930 0.000000 +vt 0.143080 0.911750 0.000000 +vt 0.828700 0.544510 0.000000 +vt 0.829390 0.550100 0.000000 +vt 0.815270 0.549220 0.000000 +vt 0.814680 0.543590 0.000000 +vt 0.830070 0.555700 0.000000 +vt 0.815870 0.554860 0.000000 +vt 0.801660 0.554020 0.000000 +vt 0.801160 0.548350 0.000000 +vt 0.800660 0.542680 0.000000 +vt 0.830760 0.561290 0.000000 +vt 0.816460 0.560490 0.000000 +vt 0.802150 0.559680 0.000000 +vt 0.787850 0.558880 0.000000 +vt 0.787450 0.553170 0.000000 +vt 0.787050 0.547470 0.000000 +vt 0.786650 0.541770 0.000000 +vt 0.722490 0.791780 0.000000 +vt 0.723050 0.789230 0.000000 +vt 0.710370 0.792170 0.000000 +vt 0.710760 0.789460 0.000000 +vt 0.711150 0.786750 0.000000 +vt 0.723610 0.786680 0.000000 +vt 0.698240 0.792560 0.000000 +vt 0.698460 0.789690 0.000000 +vt 0.698680 0.786810 0.000000 +vt 0.698900 0.783930 0.000000 +vt 0.711540 0.784030 0.000000 +vt 0.724170 0.784130 0.000000 +vt 0.106110 0.903340 0.000000 +vt 0.117380 0.902660 0.000000 +vt 0.102230 0.892920 0.000000 +vt 0.113750 0.892230 0.000000 +vt 0.125270 0.891540 0.000000 +vt 0.128660 0.901980 0.000000 +vt 0.098360 0.882500 0.000000 +vt 0.110120 0.881790 0.000000 +vt 0.121870 0.881090 0.000000 +vt 0.133630 0.880390 0.000000 +vt 0.136780 0.890840 0.000000 +vt 0.139930 0.901300 0.000000 +vt 0.737420 0.689140 0.000000 +vt 0.725390 0.688650 0.000000 +vt 0.727730 0.676540 0.000000 +vt 0.739750 0.677020 0.000000 +vt 0.713350 0.688160 0.000000 +vt 0.715700 0.676060 0.000000 +vt 0.718050 0.663950 0.000000 +vt 0.730060 0.664430 0.000000 +vt 0.742080 0.664900 0.000000 +vt 0.671890 0.618050 0.000000 +vt 0.685740 0.618700 0.000000 +vt 0.684130 0.629240 0.000000 +vt 0.670310 0.628620 0.000000 +vt 0.699600 0.619350 0.000000 +vt 0.697950 0.629850 0.000000 +vt 0.696300 0.640350 0.000000 +vt 0.682520 0.639770 0.000000 +vt 0.668740 0.639200 0.000000 +vt 0.218530 0.958770 0.000000 +vt 0.220830 0.975830 0.000000 +vt 0.216230 0.941720 0.000000 +vt 0.229150 0.940900 0.000000 +vt 0.231320 0.957970 0.000000 +vt 0.233490 0.975040 0.000000 +vt 0.213930 0.924660 0.000000 +vt 0.211620 0.907600 0.000000 +vt 0.224810 0.906760 0.000000 +vt 0.226980 0.923830 0.000000 +vt 0.240030 0.922990 0.000000 +vt 0.242070 0.940080 0.000000 +vt 0.238000 0.905910 0.000000 +vt 0.244100 0.957160 0.000000 +vt 0.246140 0.974240 0.000000 +vt 0.602730 0.594860 0.000000 +vt 0.616740 0.594960 0.000000 +vt 0.600630 0.584030 0.000000 +vt 0.614960 0.583960 0.000000 +vt 0.629290 0.583900 0.000000 +vt 0.630740 0.595060 0.000000 +vt 0.598540 0.573200 0.000000 +vt 0.613180 0.572960 0.000000 +vt 0.627830 0.572730 0.000000 +vt 0.642480 0.572490 0.000000 +vt 0.643610 0.583830 0.000000 +vt 0.644740 0.595170 0.000000 +vt 0.584580 0.786450 0.000000 +vt 0.583700 0.783580 0.000000 +vt 0.596540 0.784630 0.000000 +vt 0.597290 0.787560 0.000000 +vt 0.582830 0.780700 0.000000 +vt 0.595790 0.781700 0.000000 +vt 0.608740 0.782700 0.000000 +vt 0.609370 0.785680 0.000000 +vt 0.610000 0.788660 0.000000 +vt 0.581960 0.777820 0.000000 +vt 0.595040 0.778770 0.000000 +vt 0.608110 0.779730 0.000000 +vt 0.621180 0.780680 0.000000 +vt 0.621690 0.783710 0.000000 +vt 0.622200 0.786740 0.000000 +vt 0.622710 0.789760 0.000000 +vt 0.281750 0.827620 0.000000 +vt 0.279930 0.817040 0.000000 +vt 0.283570 0.838210 0.000000 +vt 0.269840 0.839310 0.000000 +vt 0.268000 0.828710 0.000000 +vt 0.266160 0.818100 0.000000 +vt 0.285400 0.848800 0.000000 +vt 0.271680 0.849920 0.000000 +vt 0.257960 0.851040 0.000000 +vt 0.256100 0.840420 0.000000 +vt 0.254250 0.829790 0.000000 +vt 0.252390 0.819170 0.000000 +vt 0.625800 0.748340 0.000000 +vt 0.612600 0.747730 0.000000 +vt 0.614110 0.730470 0.000000 +vt 0.627610 0.731250 0.000000 +vt 0.599390 0.747130 0.000000 +vt 0.586190 0.746530 0.000000 +vt 0.587130 0.728920 0.000000 +vt 0.600620 0.729700 0.000000 +vt 0.601860 0.712260 0.000000 +vt 0.615630 0.713210 0.000000 +vt 0.588080 0.711310 0.000000 +vt 0.589020 0.693700 0.000000 +vt 0.603090 0.694820 0.000000 +vt 0.617150 0.695950 0.000000 +vt 0.629410 0.714160 0.000000 +vt 0.631220 0.697070 0.000000 +vt 0.673210 0.538520 0.000000 +vt 0.672720 0.544120 0.000000 +vt 0.687560 0.538360 0.000000 +vt 0.687220 0.544040 0.000000 +vt 0.686890 0.549720 0.000000 +vt 0.672240 0.549720 0.000000 +vt 0.701910 0.538210 0.000000 +vt 0.701730 0.543970 0.000000 +vt 0.701540 0.549730 0.000000 +vt 0.701360 0.555480 0.000000 +vt 0.686550 0.555400 0.000000 +vt 0.671750 0.555320 0.000000 +vt 0.648940 0.769370 0.000000 +vt 0.661730 0.769710 0.000000 +vt 0.661190 0.773030 0.000000 +vt 0.648290 0.772620 0.000000 +vt 0.674530 0.770040 0.000000 +vt 0.674090 0.773440 0.000000 +vt 0.673650 0.776840 0.000000 +vt 0.660640 0.776350 0.000000 +vt 0.647630 0.775870 0.000000 +vt 0.592320 0.681710 0.000000 +vt 0.606070 0.682770 0.000000 +vt 0.595610 0.669730 0.000000 +vt 0.609040 0.670730 0.000000 +vt 0.622480 0.671720 0.000000 +vt 0.619820 0.683840 0.000000 +vt 0.598900 0.657740 0.000000 +vt 0.612020 0.658680 0.000000 +vt 0.625150 0.659610 0.000000 +vt 0.638270 0.660550 0.000000 +vt 0.635920 0.672720 0.000000 +vt 0.633570 0.684900 0.000000 +vt 0.209800 0.897110 0.000000 +vt 0.207970 0.886610 0.000000 +vt 0.221530 0.885720 0.000000 +vt 0.223170 0.896240 0.000000 +vt 0.206140 0.876120 0.000000 +vt 0.219890 0.875200 0.000000 +vt 0.233640 0.874280 0.000000 +vt 0.235090 0.884820 0.000000 +vt 0.236540 0.895370 0.000000 +# 922 texture coords + +g rocksCombined002 +usemtl rocksSculpts +f 215/3 214/4 1/1 211/2 +f 212/6 215/3 211/2 55/5 +f 59/7 213/8 215/3 212/6 +f 213/8 58/9 214/4 215/3 +f 219/11 212/6 55/5 216/10 +f 217/13 219/11 216/10 35/12 +f 56/14 218/15 219/11 217/13 +f 218/15 59/7 212/6 219/11 +f 223/16 222/17 59/7 218/15 +f 220/18 223/16 218/15 56/14 +f 41/19 221/20 223/16 220/18 +f 221/20 57/21 222/17 223/16 +f 226/22 225/23 58/9 213/8 +f 222/17 226/22 213/8 59/7 +f 57/21 224/24 226/22 222/17 +f 224/24 20/25 225/23 226/22 +f 231/28 230/29 5/26 227/27 +f 228/31 231/28 227/27 60/30 +f 64/32 229/33 231/28 228/31 +f 229/33 63/34 230/29 231/28 +f 235/36 228/31 60/30 232/35 +f 233/38 235/36 232/35 21/37 +f 61/39 234/40 235/36 233/38 +f 234/40 64/32 228/31 235/36 +f 239/41 238/42 64/32 234/40 +f 236/43 239/41 234/40 61/39 +f 42/44 237/45 239/41 236/43 +f 237/45 62/46 238/42 239/41 +f 242/47 241/48 63/34 229/33 +f 238/42 242/47 229/33 64/32 +f 62/46 240/49 242/47 238/42 +f 240/49 39/50 241/48 242/47 +f 246/53 225/54 20/51 243/52 +f 244/56 246/53 243/52 65/55 +f 68/57 245/58 246/53 244/56 +f 245/58 58/59 225/54 246/53 +f 250/61 244/56 65/55 247/60 +f 248/63 250/61 247/60 33/62 +f 66/64 249/65 250/61 248/63 +f 249/65 68/57 244/56 250/61 +f 254/66 253/67 68/57 249/65 +f 251/68 254/66 249/65 66/64 +f 30/69 252/70 254/66 251/68 +f 252/70 67/71 253/67 254/66 +f 256/72 214/73 58/59 245/58 +f 253/67 256/72 245/58 68/57 +f 67/71 255/74 256/72 253/67 +f 255/74 1/1 214/73 256/72 +f 261/77 260/78 38/75 257/76 +f 258/80 261/77 257/76 69/79 +f 73/81 259/82 261/77 258/80 +f 259/82 72/83 260/78 261/77 +f 265/85 258/80 69/79 262/84 +f 263/87 265/85 262/84 43/86 +f 70/88 264/89 265/85 263/87 +f 264/89 73/81 258/80 265/85 +f 269/90 268/91 73/81 264/89 +f 266/92 269/90 264/89 70/88 +f 27/93 267/94 269/90 266/92 +f 267/94 71/95 268/91 269/90 +f 272/96 271/97 72/83 259/82 +f 268/91 272/96 259/82 73/81 +f 71/95 270/98 272/96 268/91 +f 270/98 2/99 271/97 272/96 +f 277/102 276/103 19/100 273/101 +f 274/105 277/102 273/101 74/104 +f 78/106 275/107 277/102 274/105 +f 275/107 77/108 276/103 277/102 +f 281/110 274/105 74/104 278/109 +f 279/112 281/110 278/109 34/111 +f 75/113 280/114 281/110 279/112 +f 280/114 78/106 274/105 281/110 +f 285/115 284/116 78/106 280/114 +f 282/117 285/115 280/114 75/113 +f 28/118 283/119 285/115 282/117 +f 283/119 76/120 284/116 285/115 +f 288/121 287/122 77/108 275/107 +f 284/116 288/121 275/107 78/106 +f 76/120 286/123 288/121 284/116 +f 286/123 4/124 287/122 288/121 +f 293/127 292/128 3/125 289/126 +f 290/130 293/127 289/126 79/129 +f 83/131 291/132 293/127 290/130 +f 291/132 82/133 292/128 293/127 +f 297/135 290/130 79/129 294/134 +f 295/137 297/135 294/134 48/136 +f 80/138 296/139 297/135 295/137 +f 296/139 83/131 290/130 297/135 +f 301/140 300/141 83/131 296/139 +f 298/142 301/140 296/139 80/138 +f 53/143 299/144 301/140 298/142 +f 299/144 81/145 300/141 301/140 +f 304/146 303/147 82/133 291/132 +f 300/141 304/146 291/132 83/131 +f 81/145 302/148 304/146 300/141 +f 302/148 29/149 303/147 304/146 +f 309/152 308/153 6/150 305/151 +f 306/155 309/152 305/151 84/154 +f 88/156 307/157 309/152 306/155 +f 307/157 87/158 308/153 309/152 +f 313/160 306/155 84/154 310/159 +f 311/162 313/160 310/159 21/161 +f 85/163 312/164 313/160 311/162 +f 312/164 88/156 306/155 313/160 +f 317/165 316/166 88/156 312/164 +f 314/167 317/165 312/164 85/163 +f 23/168 315/169 317/165 314/167 +f 315/169 86/170 316/166 317/165 +f 320/171 319/172 87/158 307/157 +f 316/166 320/171 307/157 88/156 +f 86/170 318/173 320/171 316/166 +f 318/173 9/174 319/172 320/171 +f 325/177 324/178 11/175 321/176 +f 322/180 325/177 321/176 89/179 +f 93/181 323/182 325/177 322/180 +f 323/182 92/183 324/178 325/177 +f 329/185 322/180 89/179 326/184 +f 327/187 329/185 326/184 8/186 +f 90/188 328/189 329/185 327/187 +f 328/189 93/181 322/180 329/185 +f 333/190 332/191 93/181 328/189 +f 330/192 333/190 328/189 90/188 +f 49/193 331/194 333/190 330/192 +f 331/194 91/195 332/191 333/190 +f 336/196 335/197 92/183 323/182 +f 332/191 336/196 323/182 93/181 +f 91/195 334/198 336/196 332/191 +f 334/198 47/199 335/197 336/196 +f 341/202 340/203 12/200 337/201 +f 338/205 341/202 337/201 94/204 +f 98/206 339/207 341/202 338/205 +f 339/207 97/208 340/203 341/202 +f 345/210 338/205 94/204 342/209 +f 343/212 345/210 342/209 7/211 +f 95/213 344/214 345/210 343/212 +f 344/214 98/206 338/205 345/210 +f 349/215 348/216 98/206 344/214 +f 346/217 349/215 344/214 95/213 +f 22/218 347/219 349/215 346/217 +f 347/219 96/220 348/216 349/215 +f 352/221 351/222 97/208 339/207 +f 348/216 352/221 339/207 98/206 +f 96/220 350/223 352/221 348/216 +f 350/223 24/224 351/222 352/221 +f 357/227 356/228 10/225 353/226 +f 354/230 357/227 353/226 99/229 +f 102/231 355/232 357/227 354/230 +f 355/232 101/233 356/228 357/227 +f 360/235 354/230 99/229 358/234 +f 230/29 360/235 358/234 5/26 +f 63/34 359/236 360/235 230/29 +f 359/236 102/231 354/230 360/235 +f 363/237 362/238 102/231 359/236 +f 241/48 363/237 359/236 63/34 +f 39/50 361/239 363/237 241/48 +f 361/239 100/240 362/238 363/237 +f 366/241 365/242 101/233 355/232 +f 362/238 366/241 355/232 102/231 +f 100/240 364/243 366/241 362/238 +f 364/243 37/244 365/242 366/241 +f 371/246 370/247 48/136 367/245 +f 368/249 371/246 367/245 103/248 +f 107/250 369/251 371/246 368/249 +f 369/251 106/252 370/247 371/246 +f 375/254 368/249 103/248 372/253 +f 373/256 375/254 372/253 51/255 +f 104/257 374/258 375/254 373/256 +f 374/258 107/250 368/249 375/254 +f 379/259 378/260 107/250 374/258 +f 376/261 379/259 374/258 104/257 +f 25/262 377/263 379/259 376/261 +f 377/263 105/264 378/260 379/259 +f 382/265 381/266 106/252 369/251 +f 378/260 382/265 369/251 107/250 +f 105/264 380/267 382/265 378/260 +f 380/267 13/268 381/266 382/265 +f 387/271 386/272 49/269 383/270 +f 384/274 387/271 383/270 108/273 +f 112/275 385/276 387/271 384/274 +f 385/276 111/277 386/272 387/271 +f 391/279 384/274 108/273 388/278 +f 389/281 391/279 388/278 52/280 +f 109/282 390/283 391/279 389/281 +f 390/283 112/275 384/274 391/279 +f 395/284 394/285 112/275 390/283 +f 392/286 395/284 390/283 109/282 +f 26/287 393/288 395/284 392/286 +f 393/288 110/289 394/285 395/284 +f 398/290 397/291 111/277 385/276 +f 394/285 398/290 385/276 112/275 +f 110/289 396/292 398/290 394/285 +f 396/292 15/293 397/291 398/290 +f 403/296 402/297 45/294 399/295 +f 400/299 403/296 399/295 113/298 +f 117/300 401/301 403/296 400/299 +f 401/301 116/302 402/297 403/296 +f 407/304 400/299 113/298 404/303 +f 405/306 407/304 404/303 54/305 +f 114/307 406/308 407/304 405/306 +f 406/308 117/300 400/299 407/304 +f 411/309 410/310 117/300 406/308 +f 408/311 411/309 406/308 114/307 +f 31/312 409/313 411/309 408/311 +f 409/313 115/314 410/310 411/309 +f 414/315 413/316 116/302 401/301 +f 410/310 414/315 401/301 117/300 +f 115/314 412/317 414/315 410/310 +f 412/317 14/318 413/316 414/315 +f 419/320 418/321 13/268 415/319 +f 416/323 419/320 415/319 118/322 +f 122/324 417/325 419/320 416/323 +f 417/325 121/326 418/321 419/320 +f 423/328 416/323 118/322 420/327 +f 421/329 423/328 420/327 35/12 +f 119/330 422/331 423/328 421/329 +f 422/331 122/324 416/323 423/328 +f 427/332 426/333 122/324 422/331 +f 424/334 427/332 422/331 119/330 +f 44/335 425/336 427/332 424/334 +f 425/336 120/337 426/333 427/332 +f 430/338 429/339 121/326 417/325 +f 426/333 430/338 417/325 122/324 +f 120/337 428/340 430/338 426/333 +f 428/340 32/341 429/339 430/338 +f 435/344 434/345 36/342 431/343 +f 432/347 435/344 431/343 123/346 +f 127/348 433/349 435/344 432/347 +f 433/349 126/350 434/345 435/344 +f 439/352 432/347 123/346 436/351 +f 437/354 439/352 436/351 40/353 +f 124/355 438/356 439/352 437/354 +f 438/356 127/348 432/347 439/352 +f 443/357 442/358 127/348 438/356 +f 440/359 443/357 438/356 124/355 +f 17/360 441/361 443/357 440/359 +f 441/361 125/362 442/358 443/357 +f 446/363 445/364 126/350 433/349 +f 442/358 446/363 433/349 127/348 +f 125/362 444/365 446/363 442/358 +f 444/365 15/366 445/364 446/363 +f 451/369 450/370 16/367 447/368 +f 448/372 451/369 447/368 128/371 +f 132/373 449/374 451/369 448/372 +f 449/374 131/375 450/370 451/369 +f 455/377 448/372 128/371 452/376 +f 453/379 455/377 452/376 46/378 +f 129/380 454/381 455/377 453/379 +f 454/381 132/373 448/372 455/377 +f 459/382 458/383 132/373 454/381 +f 456/384 459/382 454/381 129/380 +f 50/385 457/386 459/382 456/384 +f 457/386 130/387 458/383 459/382 +f 462/388 461/389 131/375 449/374 +f 458/383 462/388 449/374 132/373 +f 130/387 460/390 462/388 458/383 +f 460/390 18/391 461/389 462/388 +f 467/393 466/394 25/262 463/392 +f 464/396 467/393 463/392 133/395 +f 137/397 465/398 467/393 464/396 +f 465/398 136/399 466/394 467/393 +f 471/401 464/396 133/395 468/400 +f 469/403 471/401 468/400 14/402 +f 134/404 470/405 471/401 469/403 +f 470/405 137/397 464/396 471/401 +f 475/406 474/407 137/397 470/405 +f 472/408 475/406 470/405 134/404 +f 38/409 473/410 475/406 472/408 +f 473/410 135/411 474/407 475/406 +f 478/412 477/413 136/399 465/398 +f 474/407 478/412 465/398 137/397 +f 135/411 476/414 478/412 474/407 +f 476/414 41/19 477/413 478/412 +f 482/417 305/418 6/415 479/416 +f 480/420 482/417 479/416 138/419 +f 140/421 481/422 482/417 480/420 +f 481/422 84/423 305/418 482/417 +f 486/425 480/420 138/419 483/424 +f 484/427 486/425 483/424 36/426 +f 139/428 485/429 486/425 484/427 +f 485/429 140/421 480/420 486/425 +f 489/430 488/431 140/421 485/429 +f 487/432 489/430 485/429 139/428 +f 42/44 236/43 489/430 487/432 +f 236/43 61/39 488/431 489/430 +f 490/433 310/434 84/423 481/422 +f 488/431 490/433 481/422 140/421 +f 61/39 233/38 490/433 488/431 +f 233/38 21/37 310/434 490/433 +f 494/436 243/52 20/51 491/435 +f 492/438 494/436 491/435 141/437 +f 143/439 493/440 494/436 492/438 +f 493/440 65/55 243/52 494/436 +f 497/442 492/438 141/437 495/441 +f 270/444 497/442 495/441 2/443 +f 71/445 496/446 497/442 270/444 +f 496/446 143/439 492/438 497/442 +f 500/447 499/448 143/439 496/446 +f 267/449 500/447 496/446 71/445 +f 27/450 498/451 500/447 267/449 +f 498/451 142/452 499/448 500/447 +f 502/453 247/60 65/55 493/440 +f 499/448 502/453 493/440 143/439 +f 142/452 501/454 502/453 499/448 +f 501/454 33/62 247/60 502/453 +f 506/457 505/458 3/455 292/456 +f 503/460 506/457 292/456 82/459 +f 146/461 504/462 506/457 503/460 +f 504/462 145/463 505/458 506/457 +f 509/465 503/460 82/459 303/464 +f 507/467 509/465 303/464 29/466 +f 144/468 508/469 509/465 507/467 +f 508/469 146/461 503/460 509/465 +f 512/470 511/471 146/461 508/469 +f 510/472 512/470 508/469 144/468 +f 34/111 278/109 512/470 510/472 +f 278/109 74/104 511/471 512/470 +f 514/473 513/474 145/463 504/462 +f 511/471 514/473 504/462 146/461 +f 74/104 273/101 514/473 511/471 +f 273/101 19/100 513/474 514/473 +f 517/476 311/162 21/161 232/475 +f 515/478 517/476 232/475 60/477 +f 148/479 516/480 517/476 515/478 +f 516/480 85/163 311/162 517/476 +f 519/482 515/478 60/477 227/481 +f 358/234 519/482 227/481 5/26 +f 99/229 518/483 519/482 358/234 +f 518/483 148/479 515/478 519/482 +f 522/484 521/485 148/479 518/483 +f 353/226 522/484 518/483 99/229 +f 10/225 520/486 522/484 353/226 +f 520/486 147/487 521/485 522/484 +f 524/488 314/167 85/163 516/480 +f 521/485 524/488 516/480 148/479 +f 147/487 523/489 524/488 521/485 +f 523/489 23/168 314/167 524/488 +f 528/490 527/491 8/186 326/184 +f 525/492 528/490 326/184 89/179 +f 151/493 526/494 528/490 525/492 +f 526/494 150/495 527/491 528/490 +f 531/496 525/492 89/179 321/176 +f 529/497 531/496 321/176 11/175 +f 149/498 530/499 531/496 529/497 +f 530/499 151/493 525/492 531/496 +f 534/500 533/501 151/493 530/499 +f 532/502 534/500 530/499 149/498 +f 24/224 350/223 534/500 532/502 +f 350/223 96/220 533/501 534/500 +f 536/503 535/504 150/495 526/494 +f 533/501 536/503 526/494 151/493 +f 96/220 347/219 536/503 533/501 +f 347/219 22/218 535/504 536/503 +f 540/507 287/508 4/505 537/506 +f 538/510 540/507 537/506 152/509 +f 155/511 539/512 540/507 538/510 +f 539/512 77/513 287/508 540/507 +f 544/515 538/510 152/509 541/514 +f 542/517 544/515 541/514 45/516 +f 153/518 543/519 544/515 542/517 +f 543/519 155/511 538/510 544/515 +f 548/520 547/521 155/511 543/519 +f 545/522 548/520 543/519 153/518 +f 51/255 546/523 548/520 545/522 +f 546/523 154/524 547/521 548/520 +f 550/525 276/526 77/513 539/512 +f 547/521 550/525 539/512 155/511 +f 154/524 549/527 550/525 547/521 +f 549/527 19/528 276/526 550/525 +f 554/531 343/532 7/529 551/530 +f 552/534 554/531 551/530 156/533 +f 159/535 553/536 554/531 552/534 +f 553/536 95/537 343/532 554/531 +f 558/539 552/534 156/533 555/538 +f 556/540 558/539 555/538 46/378 +f 157/541 557/542 558/539 556/540 +f 557/542 159/535 552/534 558/539 +f 562/543 561/544 159/535 557/542 +f 559/545 562/543 557/542 157/541 +f 52/280 560/546 562/543 559/545 +f 560/546 158/547 561/544 562/543 +f 564/548 346/549 95/537 553/536 +f 561/544 564/548 553/536 159/535 +f 158/547 563/550 564/548 561/544 +f 563/550 22/551 346/549 564/548 +f 568/553 248/63 33/62 565/552 +f 566/555 568/553 565/552 160/554 +f 162/556 567/557 568/553 566/555 +f 567/557 66/64 248/63 568/553 +f 571/559 566/555 160/554 569/558 +f 523/489 571/559 569/558 23/168 +f 147/487 570/560 571/559 523/489 +f 570/560 162/556 566/555 571/559 +f 574/561 573/562 162/556 570/560 +f 520/486 574/561 570/560 147/487 +f 10/225 572/563 574/561 520/486 +f 572/563 161/564 573/562 574/561 +f 576/565 251/68 66/64 567/557 +f 573/562 576/565 567/557 162/556 +f 161/564 575/566 576/565 573/562 +f 575/566 30/69 251/68 576/565 +f 581/568 580/569 31/312 577/567 +f 578/571 581/568 577/567 163/570 +f 166/572 579/573 581/568 578/571 +f 579/573 165/574 580/569 581/568 +f 584/576 578/571 163/570 582/575 +f 440/359 584/576 582/575 17/360 +f 124/355 583/577 584/576 440/359 +f 583/577 166/572 578/571 584/576 +f 587/578 586/579 166/572 583/577 +f 437/354 587/578 583/577 124/355 +f 40/353 585/580 587/578 437/354 +f 585/580 164/581 586/579 587/578 +f 590/582 589/583 165/574 579/573 +f 586/579 590/582 579/573 166/572 +f 164/581 588/584 590/582 586/579 +f 588/584 43/86 589/583 590/582 +f 594/586 279/112 34/111 591/585 +f 592/588 594/586 591/585 167/587 +f 169/589 593/590 594/586 592/588 +f 593/590 75/113 279/112 594/586 +f 597/592 592/588 167/587 595/591 +f 532/502 597/592 595/591 24/224 +f 149/498 596/593 597/592 532/502 +f 596/593 169/589 592/588 597/592 +f 600/594 599/595 169/589 596/593 +f 529/497 600/594 596/593 149/498 +f 11/175 598/596 600/594 529/497 +f 598/596 168/597 599/595 600/594 +f 602/598 282/117 75/113 593/590 +f 599/595 602/598 593/590 169/589 +f 168/597 601/599 602/598 599/595 +f 601/599 28/118 282/117 602/598 +f 606/600 605/601 18/391 460/390 +f 603/602 606/600 460/390 130/387 +f 173/603 604/604 606/600 603/602 +f 604/604 172/605 605/601 606/600 +f 609/606 603/602 130/387 457/386 +f 607/607 609/606 457/386 50/385 +f 170/608 608/609 609/606 607/607 +f 608/609 173/603 603/602 609/606 +f 613/610 612/611 173/603 608/609 +f 610/612 613/610 608/609 170/608 +f 53/143 611/613 613/610 610/612 +f 611/613 171/614 612/611 613/610 +f 616/615 615/616 172/605 604/604 +f 612/611 616/615 604/604 173/603 +f 171/614 614/617 616/615 612/611 +f 614/617 32/341 615/616 616/615 +f 619/618 598/596 11/175 324/178 +f 617/619 619/618 324/178 92/183 +f 176/620 618/621 619/618 617/619 +f 618/621 168/597 598/596 619/618 +f 622/622 617/619 92/183 335/197 +f 620/623 622/622 335/197 47/199 +f 174/624 621/625 622/622 620/623 +f 621/625 176/620 617/619 622/622 +f 626/626 625/627 176/620 621/625 +f 623/628 626/626 621/625 174/624 +f 54/305 624/629 626/626 623/628 +f 624/629 175/630 625/627 626/626 +f 628/631 601/599 168/597 618/621 +f 625/627 628/631 618/621 176/620 +f 175/630 627/632 628/631 625/627 +f 627/632 28/118 601/599 628/631 +f 631/633 572/563 10/225 356/228 +f 629/634 631/633 356/228 101/233 +f 179/635 630/636 631/633 629/634 +f 630/636 161/564 572/563 631/633 +f 634/637 629/634 101/233 365/242 +f 632/638 634/637 365/242 37/244 +f 177/639 633/640 634/637 632/638 +f 633/640 179/635 629/634 634/637 +f 638/641 637/642 179/635 633/640 +f 635/643 638/641 633/640 177/639 +f 44/335 636/644 638/641 635/643 +f 636/644 178/645 637/642 638/641 +f 640/646 575/566 161/564 630/636 +f 637/642 640/646 630/636 179/635 +f 178/645 639/647 640/646 637/642 +f 639/647 30/69 575/566 640/646 +f 644/648 643/649 9/174 318/173 +f 641/650 644/648 318/173 86/170 +f 181/651 642/652 644/648 641/650 +f 642/652 180/653 643/649 644/648 +f 646/654 641/650 86/170 315/169 +f 569/558 646/654 315/169 23/168 +f 160/554 645/655 646/654 569/558 +f 645/655 181/651 641/650 646/654 +f 648/656 647/657 181/651 645/655 +f 565/552 648/656 645/655 160/554 +f 33/62 501/454 648/656 565/552 +f 501/454 142/452 647/657 648/656 +f 650/658 649/659 180/653 642/652 +f 647/657 650/658 642/652 181/651 +f 142/452 498/451 650/658 647/657 +f 498/451 27/450 649/659 650/658 +f 654/661 507/467 29/466 651/660 +f 652/663 654/661 651/660 182/662 +f 183/664 653/665 654/661 652/663 +f 653/665 144/468 507/467 654/661 +f 657/667 652/663 182/662 655/666 +f 340/203 657/667 655/666 12/200 +f 97/208 656/668 657/667 340/203 +f 656/668 183/664 652/663 657/667 +f 659/669 658/670 183/664 656/668 +f 351/222 659/669 656/668 97/208 +f 24/224 595/591 659/669 351/222 +f 595/591 167/587 658/670 659/669 +f 660/671 510/472 144/468 653/665 +f 658/670 660/671 653/665 183/664 +f 167/587 591/585 660/671 658/670 +f 591/585 34/111 510/472 660/671 +f 663/672 217/13 35/12 420/327 +f 661/673 663/672 420/327 118/322 +f 184/674 662/675 663/672 661/673 +f 662/675 56/14 217/13 663/672 +f 665/676 661/673 118/322 415/319 +f 380/267 665/676 415/319 13/268 +f 105/264 664/677 665/676 380/267 +f 664/677 184/674 661/673 665/676 +f 667/678 666/679 184/674 664/677 +f 377/263 667/678 664/677 105/264 +f 25/262 466/394 667/678 377/263 +f 466/394 136/399 666/679 667/678 +f 668/680 220/18 56/14 662/675 +f 666/679 668/680 662/675 184/674 +f 136/399 477/413 668/680 666/679 +f 477/413 41/19 220/18 668/680 +f 673/682 672/683 26/287 669/681 +f 670/685 673/682 669/681 185/684 +f 188/686 671/687 673/682 670/685 +f 671/687 187/688 672/683 673/682 +f 677/690 670/685 185/684 674/689 +f 675/691 677/690 674/689 16/367 +f 186/692 676/693 677/690 675/691 +f 676/693 188/686 670/685 677/690 +f 680/694 679/695 188/686 676/693 +f 678/696 680/694 676/693 186/692 +f 39/50 240/49 680/694 678/696 +f 240/49 62/46 679/695 680/694 +f 682/697 681/698 187/688 671/687 +f 679/695 682/697 671/687 188/686 +f 62/46 237/45 682/697 679/695 +f 237/45 42/44 681/698 682/697 +f 685/699 469/700 14/318 412/317 +f 683/701 685/699 412/317 115/314 +f 189/702 684/703 685/699 683/701 +f 684/703 134/704 469/700 685/699 +f 687/705 683/701 115/314 409/313 +f 580/569 687/705 409/313 31/312 +f 165/574 686/706 687/705 580/569 +f 686/706 189/702 683/701 687/705 +f 689/707 688/708 189/702 686/706 +f 589/583 689/707 686/706 165/574 +f 43/86 262/84 689/707 589/583 +f 262/84 69/79 688/708 689/707 +f 690/709 472/710 134/704 684/703 +f 688/708 690/709 684/703 189/702 +f 69/79 257/76 690/709 688/708 +f 257/76 38/75 472/710 690/709 +f 693/711 361/239 39/50 678/696 +f 691/712 693/711 678/696 186/692 +f 191/713 692/714 693/711 691/712 +f 692/714 100/240 361/239 693/711 +f 695/715 691/712 186/692 675/691 +f 450/370 695/715 675/691 16/367 +f 131/375 694/716 695/715 450/370 +f 694/716 191/713 691/712 695/715 +f 698/717 697/718 191/713 694/716 +f 461/389 698/717 694/716 131/375 +f 18/391 696/719 698/717 461/389 +f 696/719 190/720 697/718 698/717 +f 700/721 364/243 100/240 692/714 +f 697/718 700/721 692/714 191/713 +f 190/720 699/722 700/721 697/718 +f 699/722 37/244 364/243 700/721 +f 703/723 421/329 35/12 216/10 +f 701/724 703/723 216/10 55/5 +f 192/725 702/726 703/723 701/724 +f 702/726 119/330 421/329 703/723 +f 705/727 701/724 55/5 211/2 +f 255/74 705/727 211/2 1/1 +f 67/71 704/728 705/727 255/74 +f 704/728 192/725 701/724 705/727 +f 707/729 706/730 192/725 704/728 +f 252/70 707/729 704/728 67/71 +f 30/69 639/647 707/729 252/70 +f 639/647 178/645 706/730 707/729 +f 708/731 424/334 119/330 702/726 +f 706/730 708/731 702/726 192/725 +f 178/645 636/644 708/731 706/730 +f 636/644 44/335 424/334 708/731 +f 711/733 431/343 36/342 483/732 +f 709/735 711/733 483/732 138/734 +f 194/736 710/737 711/733 709/735 +f 710/737 123/346 431/343 711/733 +f 713/739 709/735 138/734 479/738 +f 308/741 713/739 479/738 6/740 +f 87/742 712/743 713/739 308/741 +f 712/743 194/736 709/735 713/739 +f 716/744 715/745 194/736 712/743 +f 319/746 716/744 712/743 87/742 +f 9/747 714/748 716/744 319/746 +f 714/748 193/749 715/745 716/744 +f 718/750 436/351 123/346 710/737 +f 715/745 718/750 710/737 194/736 +f 193/749 717/751 718/750 715/745 +f 717/751 40/353 436/351 718/750 +f 721/754 271/755 2/752 495/753 +f 719/757 721/754 495/753 141/756 +f 195/758 720/759 721/754 719/757 +f 720/759 72/760 271/755 721/754 +f 723/762 719/757 141/756 491/761 +f 224/24 723/762 491/761 20/25 +f 57/21 722/763 723/762 224/24 +f 722/763 195/758 719/757 723/762 +f 725/764 724/765 195/758 722/763 +f 221/20 725/764 722/763 57/21 +f 41/19 476/414 725/764 221/20 +f 476/414 135/411 724/765 725/764 +f 726/766 260/767 72/760 720/759 +f 724/765 726/766 720/759 195/758 +f 135/411 473/410 726/766 724/765 +f 473/410 38/409 260/767 726/766 +f 729/769 484/427 36/426 434/768 +f 727/771 729/769 434/768 126/770 +f 196/772 728/773 729/769 727/771 +f 728/773 139/428 484/427 729/769 +f 731/775 727/771 126/770 445/774 +f 396/292 731/775 445/774 15/293 +f 110/289 730/776 731/775 396/292 +f 730/776 196/772 727/771 731/775 +f 733/777 732/778 196/772 730/776 +f 393/288 733/777 730/776 110/289 +f 26/287 672/683 733/777 393/288 +f 672/683 187/688 732/778 733/777 +f 734/779 487/432 139/428 728/773 +f 732/778 734/779 728/773 196/772 +f 187/688 681/698 734/779 732/778 +f 681/698 42/44 487/432 734/779 +f 737/781 714/748 9/747 643/780 +f 735/783 737/781 643/780 180/782 +f 197/784 736/785 737/781 735/783 +f 736/785 193/749 714/748 737/781 +f 739/787 735/783 180/782 649/786 +f 266/92 739/787 649/786 27/93 +f 70/88 738/788 739/787 266/92 +f 738/788 197/784 735/783 739/787 +f 741/789 740/790 197/784 738/788 +f 263/87 741/789 738/788 70/88 +f 43/86 588/584 741/789 263/87 +f 588/584 164/581 740/790 741/789 +f 742/791 717/751 193/749 736/785 +f 740/790 742/791 736/785 197/784 +f 164/581 585/580 742/791 740/790 +f 585/580 40/353 717/751 742/791 +f 745/792 632/638 37/244 699/722 +f 743/793 745/792 699/722 190/720 +f 198/794 744/795 745/792 743/793 +f 744/795 177/639 632/638 745/792 +f 747/796 743/793 190/720 696/719 +f 605/601 747/796 696/719 18/391 +f 172/605 746/797 747/796 605/601 +f 746/797 198/794 743/793 747/796 +f 749/798 748/799 198/794 746/797 +f 615/616 749/798 746/797 172/605 +f 32/341 428/340 749/798 615/616 +f 428/340 120/337 748/799 749/798 +f 750/800 635/643 177/639 744/795 +f 748/799 750/800 744/795 198/794 +f 120/337 425/336 750/800 748/799 +f 425/336 44/335 635/643 750/800 +f 753/801 295/137 48/136 370/247 +f 751/802 753/801 370/247 106/252 +f 199/803 752/804 753/801 751/802 +f 752/804 80/138 295/137 753/801 +f 755/805 751/802 106/252 381/266 +f 418/321 755/805 381/266 13/268 +f 121/326 754/806 755/805 418/321 +f 754/806 199/803 751/802 755/805 +f 757/807 756/808 199/803 754/806 +f 429/339 757/807 754/806 121/326 +f 32/341 614/617 757/807 429/339 +f 614/617 171/614 756/808 757/807 +f 758/809 298/142 80/138 752/804 +f 756/808 758/809 752/804 199/803 +f 171/614 611/613 758/809 756/808 +f 611/613 53/143 298/142 758/809 +f 761/810 397/811 15/366 444/365 +f 759/812 761/810 444/365 125/362 +f 201/813 760/814 761/810 759/812 +f 760/814 111/815 397/811 761/810 +f 764/816 759/812 125/362 441/361 +f 762/817 764/816 441/361 17/360 +f 200/818 763/819 764/816 762/817 +f 763/819 201/813 759/812 764/816 +f 767/820 766/821 201/813 763/819 +f 765/822 767/820 763/819 200/818 +f 47/199 334/198 767/820 765/822 +f 334/198 91/195 766/821 767/820 +f 768/823 386/824 111/815 760/814 +f 766/821 768/823 760/814 201/813 +f 91/195 331/194 768/823 766/821 +f 331/194 49/193 386/824 768/823 +f 771/826 289/126 3/125 505/825 +f 769/828 771/826 505/825 145/827 +f 202/829 770/830 771/826 769/828 +f 770/830 79/129 289/126 771/826 +f 773/832 769/828 145/827 513/831 +f 549/527 773/832 513/831 19/528 +f 154/524 772/833 773/832 549/527 +f 772/833 202/829 769/828 773/832 +f 775/834 774/835 202/829 772/833 +f 546/523 775/834 772/833 154/524 +f 51/255 372/253 775/834 546/523 +f 372/253 103/248 774/835 775/834 +f 776/836 294/134 79/129 770/830 +f 774/835 776/836 770/830 202/829 +f 103/248 367/245 776/836 774/835 +f 367/245 48/136 294/134 776/836 +f 779/839 327/840 8/837 527/838 +f 777/842 779/839 527/838 150/841 +f 203/843 778/844 779/839 777/842 +f 778/844 90/845 327/840 779/839 +f 781/847 777/842 150/841 535/846 +f 563/550 781/847 535/846 22/551 +f 158/547 780/848 781/847 563/550 +f 780/848 203/843 777/842 781/847 +f 783/849 782/850 203/843 780/848 +f 560/546 783/849 780/848 158/547 +f 52/280 388/278 783/849 560/546 +f 388/278 108/273 782/850 783/849 +f 784/851 330/852 90/845 778/844 +f 782/850 784/851 778/844 203/843 +f 108/273 383/270 784/851 782/850 +f 383/270 49/269 330/852 784/851 +f 787/853 537/854 4/124 286/123 +f 785/855 787/853 286/123 76/120 +f 204/856 786/857 787/853 785/855 +f 786/857 152/858 537/854 787/853 +f 789/859 785/855 76/120 283/119 +f 627/632 789/859 283/119 28/118 +f 175/630 788/860 789/859 627/632 +f 788/860 204/856 785/855 789/859 +f 791/861 790/862 204/856 788/860 +f 624/629 791/861 788/860 175/630 +f 54/305 404/303 791/861 624/629 +f 404/303 113/298 790/862 791/861 +f 792/863 541/864 152/858 786/857 +f 790/862 792/863 786/857 204/856 +f 113/298 399/295 792/863 790/862 +f 399/295 45/294 541/864 792/863 +f 795/865 453/379 46/378 555/538 +f 793/866 795/865 555/538 156/533 +f 206/867 794/868 795/865 793/866 +f 794/868 129/380 453/379 795/865 +f 797/869 793/866 156/533 551/530 +f 342/870 797/869 551/530 7/529 +f 94/871 796/872 797/869 342/870 +f 796/872 206/867 793/866 797/869 +f 800/873 799/874 206/867 796/872 +f 337/875 800/873 796/872 94/871 +f 12/876 798/877 800/873 337/875 +f 798/877 205/878 799/874 800/873 +f 802/879 456/384 129/380 794/868 +f 799/874 802/879 794/868 206/867 +f 205/878 801/880 802/879 799/874 +f 801/880 50/385 456/384 802/879 +f 805/882 542/517 45/516 402/881 +f 803/884 805/882 402/881 116/883 +f 207/885 804/886 805/882 803/884 +f 804/886 153/518 542/517 805/882 +f 807/888 803/884 116/883 413/887 +f 468/400 807/888 413/887 14/402 +f 133/395 806/889 807/888 468/400 +f 806/889 207/885 803/884 807/888 +f 809/890 808/891 207/885 806/889 +f 463/392 809/890 806/889 133/395 +f 25/262 376/261 809/890 463/392 +f 376/261 104/257 808/891 809/890 +f 810/892 545/522 153/518 804/886 +f 808/891 810/892 804/886 207/885 +f 104/257 373/256 810/892 808/891 +f 373/256 51/255 545/522 810/892 +f 813/893 556/540 46/378 452/376 +f 811/894 813/893 452/376 128/371 +f 208/895 812/896 813/893 811/894 +f 812/896 157/541 556/540 813/893 +f 815/897 811/894 128/371 447/368 +f 674/689 815/897 447/368 16/367 +f 185/684 814/898 815/897 674/689 +f 814/898 208/895 811/894 815/897 +f 817/899 816/900 208/895 814/898 +f 669/681 817/899 814/898 185/684 +f 26/287 392/286 817/899 669/681 +f 392/286 109/282 816/900 817/899 +f 818/901 559/545 157/541 812/896 +f 816/900 818/901 812/896 208/895 +f 109/282 389/281 818/901 816/900 +f 389/281 52/280 559/545 818/901 +f 821/903 798/877 12/876 655/902 +f 819/905 821/903 655/902 182/904 +f 209/906 820/907 821/903 819/905 +f 820/907 205/878 798/877 821/903 +f 823/909 819/905 182/904 651/908 +f 302/148 823/909 651/908 29/149 +f 81/145 822/910 823/909 302/148 +f 822/910 209/906 819/905 823/909 +f 825/911 824/912 209/906 822/910 +f 299/144 825/911 822/910 81/145 +f 53/143 610/612 825/911 299/144 +f 610/612 170/608 824/912 825/911 +f 826/913 801/880 205/878 820/907 +f 824/912 826/913 820/907 209/906 +f 170/608 607/607 826/913 824/912 +f 607/607 50/385 801/880 826/913 +f 829/914 762/817 17/360 582/575 +f 827/915 829/914 582/575 163/570 +f 210/916 828/917 829/914 827/915 +f 828/917 200/818 762/817 829/914 +f 831/918 827/915 163/570 577/567 +f 408/311 831/918 577/567 31/312 +f 114/307 830/919 831/918 408/311 +f 830/919 210/916 827/915 831/918 +f 833/920 832/921 210/916 830/919 +f 405/306 833/920 830/919 114/307 +f 54/305 623/628 833/920 405/306 +f 623/628 174/624 832/921 833/920 +f 834/922 765/822 200/818 828/917 +f 832/921 834/922 828/917 210/916 +f 174/624 620/623 834/922 832/921 +f 620/623 47/199 765/822 834/922 +# 832 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj.meta new file mode 100644 index 0000000..3ce6520 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined002.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 4f6a3f0db7c7c654e89e08a04b980960 +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined002 + 100002: //RootNode + 400000: rocksCombined002 + 400002: //RootNode + 2300000: rocksCombined002 + 3300000: rocksCombined002 + 4300000: rocksCombined002 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj new file mode 100644 index 0000000..37edca0 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj @@ -0,0 +1,1616 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:34 + +mtllib rocksCombined003.mtl + +# +# object rocksCombined003 +# + +v 9.820919 2.199209 26.175415 +v 30.544348 2.990139 25.450714 +v 9.844143 2.560877 6.236580 +v 30.888781 2.681001 6.909088 +v 12.782524 38.938988 14.893288 +v 23.990486 39.072586 15.230957 +v 12.495644 38.823044 4.693588 +v 23.901411 39.231567 4.765396 +v 29.932608 17.373505 28.661964 +v 6.671028 16.060711 25.464546 +v 28.968723 13.245549 4.829330 +v 8.324268 13.182834 4.128304 +v 8.152355 1.750941 16.666580 +v 32.074657 2.436126 16.618462 +v 25.338409 40.568260 9.728394 +v 10.827759 39.971199 9.413383 +v 31.424622 13.876672 13.714844 +v 2.265640 12.863734 11.055809 +v 20.540710 1.725623 4.857597 +v 20.441582 2.337516 27.531624 +v 18.335140 40.608261 16.564598 +v 18.289478 39.336594 3.222572 +v 22.023520 16.895304 31.837395 +v 20.118137 13.293605 0.685387 +v 20.586361 1.445205 16.604156 +v 17.876728 41.668739 9.730888 +v 12.315075 26.746090 18.956696 +v 25.765474 26.037498 18.300560 +v 25.308594 26.349421 5.766548 +v 12.248528 26.718052 5.710342 +v 28.297382 26.063551 12.249016 +v 10.003521 26.735981 11.953430 +v 18.754608 26.725260 18.895081 +v 18.757557 26.222685 3.959229 +v 13.941788 0.947324 17.040092 +v 20.436798 1.152785 23.205627 +v 14.512695 2.130760 27.232635 +v 8.548321 1.636457 22.518051 +v 14.106888 1.011038 23.036270 +v 18.231102 41.892448 13.672043 +v 13.992672 42.032425 8.755836 +v 11.142326 39.781593 12.492889 +v 15.320553 39.671555 15.776924 +v 14.292809 41.543877 13.028183 +v 20.837254 7.857088 28.731194 +v 14.219040 16.735083 29.818756 +v 7.847828 5.737956 27.685989 +v 15.689671 7.189049 33.673393 +v 32.128246 6.986126 15.553947 +v 30.292032 14.365075 17.868294 +v 29.874134 7.414466 24.083885 +v 31.495611 2.587245 21.614372 +v 31.532450 7.383327 20.128029 +v 20.144493 6.837056 1.459595 +v 25.055502 13.455931 2.029495 +v 30.388283 7.128699 5.718361 +v 26.622189 1.926374 5.678490 +v 26.192757 6.501842 2.532677 +v 8.982342 1.370663 11.643867 +v 5.307114 5.831665 14.952812 +v 5.536572 13.050805 7.926865 +v 3.322941 5.690089 3.305672 +v 5.596111 6.475592 9.751404 +v 22.035679 26.803282 19.110222 +v 19.714024 21.451622 21.851021 +v 25.524689 17.991751 30.114723 +v 26.566080 20.279062 19.776230 +v 23.123852 20.251453 20.500252 +v 27.005289 19.932262 5.417694 +v 26.724407 26.435528 8.752060 +v 28.431995 19.920996 12.609680 +v 31.337835 13.511056 8.706024 +v 27.989571 19.607397 8.995224 +v 15.324493 26.331972 4.385231 +v 19.754292 20.097794 2.384026 +v 13.853249 13.084676 0.090820 +v 10.324646 21.704687 4.971695 +v 14.610725 21.037506 2.683472 +v 10.917927 26.533545 15.580292 +v 8.470161 20.423347 12.404312 +v 3.049953 14.848750 18.244881 +v 10.036057 23.487658 21.318611 +v 8.222008 22.030762 16.700462 +v 14.407623 1.270888 4.927444 +v 20.766092 0.341568 11.024269 +v 14.376976 0.686915 11.446503 +v 21.477392 39.441132 3.671387 +v 18.312431 41.511414 4.742569 +v 21.599876 41.024582 10.072838 +v 25.053209 40.938698 6.962479 +v 21.358414 40.872147 6.793953 +v 32.736053 1.921529 11.873222 +v 32.817566 6.876890 10.177185 +v 4.151932 5.510527 19.877174 +v 24.755484 33.926094 16.450096 +v 28.448812 25.330173 15.214584 +v 27.644665 34.328499 10.384140 +v 25.039165 40.297272 12.835487 +v 26.546268 34.030548 13.491714 +v 11.563404 39.671593 6.935974 +v 11.753361 33.719933 4.268898 +v 10.734482 26.860901 8.589851 +v 9.274757 33.256985 10.178070 +v 10.085865 33.414139 7.075806 +v 26.219370 2.531795 26.702293 +v 26.975288 1.492166 16.831612 +v 26.664167 1.252390 22.878647 +v 21.496872 40.313087 16.164246 +v 21.428286 40.797745 13.085564 +v 25.505581 8.111081 28.237236 +v 13.830944 6.043947 1.716576 +v 12.215157 33.346764 16.800308 +v 15.088959 26.522106 19.376144 +v 18.496834 34.455040 18.782745 +v 15.066551 34.247711 17.666252 +v 25.127386 33.922684 4.520828 +v 22.293413 26.198532 4.334991 +v 18.717777 33.313313 0.705154 +v 21.745358 33.569389 3.655396 +v 26.778761 0.632315 10.989105 +v 14.945141 39.377693 3.573753 +v 14.459953 41.217010 6.036285 +v 21.504307 33.809456 18.136673 +v 27.727060 35.063034 7.404556 +v 15.179825 33.574791 2.864830 +v 9.891113 33.616123 13.556427 +v 28.354843 20.421381 16.521576 +v 8.788460 20.796879 8.392776 +v 14.675953 23.678457 23.162788 +v 23.920120 19.957703 3.418900 +v 10.705467 1.017596 17.208191 +v 13.717697 0.579543 20.781921 +v 11.102428 0.992451 22.664566 +v 8.473209 1.084397 19.949203 +v 10.715073 0.668360 20.625359 +v 17.316345 1.302512 16.765450 +v 20.531147 1.285987 19.914391 +v 17.065578 0.960568 23.441116 +v 17.217911 1.013654 20.273140 +v 20.387253 1.342526 26.050644 +v 17.583412 2.248392 27.436409 +v 14.452278 1.226194 25.409004 +v 17.513596 1.210638 25.824821 +v 11.627609 2.276071 26.586754 +v 8.637348 1.694784 24.690079 +v 11.163097 1.307219 25.150711 +v 18.237160 41.540352 15.253845 +v 16.496685 41.260574 13.666718 +v 15.116428 40.792549 14.663574 +v 16.832634 40.166916 16.324806 +v 16.690861 41.088699 15.077591 +v 17.954166 41.769112 11.614548 +v 16.017292 41.848091 9.377602 +v 14.154396 41.693718 11.096550 +v 16.346470 41.469475 11.694199 +v 12.239037 41.244034 9.132385 +v 10.653454 40.076080 11.071129 +v 12.712814 40.885849 12.752266 +v 12.188362 41.416595 10.849724 +v 12.467304 39.303986 14.178528 +v 13.762108 39.454277 14.986320 +v 13.632328 40.505432 14.070068 +v 14.747387 4.253926 28.534851 +v 11.824715 5.819029 31.270470 +v 9.225124 3.219112 26.305733 +v 11.878761 3.844227 27.538551 +v 20.267342 4.346379 27.789291 +v 19.057404 8.001602 33.328209 +v 17.871803 4.146021 28.057945 +v 22.080582 13.118577 31.695480 +v 18.511517 15.504396 30.661003 +v 15.680244 11.372440 36.613144 +v 19.680023 13.445512 38.056763 +v 10.745071 16.723061 28.957405 +v 5.609997 9.940341 28.536430 +v 11.465797 10.997568 35.262848 +v 32.548553 4.400133 16.114120 +v 31.831392 7.244608 17.846680 +v 31.868227 4.646227 20.777283 +v 31.971790 2.385378 19.243896 +v 32.465530 4.411807 18.658180 +v 32.075760 10.595768 14.216446 +v 31.149212 14.300249 15.943779 +v 30.893682 10.576971 19.170815 +v 31.563457 10.817566 16.899689 +v 30.334673 15.915818 23.469002 +v 30.006239 12.419798 27.070045 +v 31.013769 7.431514 22.487801 +v 30.387434 10.692081 21.702217 +v 30.571821 4.666362 25.411438 +v 31.126095 2.552719 24.150688 +v 31.639360 4.593464 23.669708 +v 20.372334 3.943800 2.613335 +v 23.128340 6.584016 1.471565 +v 26.287115 3.925477 4.319916 +v 23.558939 1.746512 5.171043 +v 23.335096 3.456245 2.989601 +v 20.128994 9.780603 0.637718 +v 22.864719 13.421708 0.977486 +v 26.080791 9.676559 1.239342 +v 22.987757 9.927925 0.943001 +v 27.064798 12.957939 3.596703 +v 29.569975 10.042915 4.929291 +v 28.355829 6.730839 4.379189 +v 27.653103 9.702839 3.584221 +v 30.878868 4.258611 6.455772 +v 29.262583 2.230449 6.310684 +v 28.866774 4.123657 5.268250 +v 9.679260 2.159553 8.891144 +v 8.074486 3.569069 11.196609 +v 2.128254 5.530928 5.022194 +v 6.275990 3.485939 4.744064 +v 8.838524 4.241348 8.309059 +v 8.706818 1.921059 14.137466 +v 7.304745 3.894519 16.626907 +v 7.013882 6.152558 12.785728 +v 7.777542 3.391369 13.925659 +v 2.768131 8.719779 12.852699 +v 2.947392 12.274012 9.164322 +v 2.635628 8.949963 7.974449 +v 1.589714 8.506021 9.475510 +v 6.614750 13.667138 6.414780 +v 5.124062 8.694664 2.749817 +v 3.172283 8.929790 5.471283 +v 23.755371 26.598526 19.043129 +v 22.341719 23.430267 19.163872 +v 25.034674 20.243229 20.356216 +v 25.717045 23.190199 18.597733 +v 24.134758 23.318430 19.116379 +v 20.446999 26.853209 19.303391 +v 19.322071 24.162466 19.644341 +v 21.438147 20.616337 21.145828 +v 20.736862 23.647661 19.406418 +v 20.292683 17.743092 24.997086 +v 23.694973 17.412182 30.862221 +v 25.433578 19.100109 28.536781 +v 23.161448 18.593134 27.647621 +v 28.545441 17.553936 31.279884 +v 27.592936 17.236231 21.082191 +v 26.971455 18.353823 26.053894 +v 28.153448 16.642756 4.944595 +v 27.508945 19.720716 7.103653 +v 29.306028 16.909321 8.813286 +v 30.434046 13.698402 6.516075 +v 28.911243 16.844837 6.770546 +v 25.751276 23.040709 5.970551 +v 26.145838 26.392746 7.112015 +v 26.971508 22.947742 9.046730 +v 26.561213 23.021217 7.316872 +v 27.425455 26.344736 10.484962 +v 27.978287 22.837528 12.649620 +v 28.208666 19.757626 10.790840 +v 27.394718 22.795490 10.952217 +v 30.247749 17.388323 13.078140 +v 31.467592 13.404541 11.179138 +v 29.780798 17.129610 10.880882 +v 13.555515 26.581207 4.926231 +v 15.206093 23.595295 4.123962 +v 12.703884 20.426756 3.977257 +v 11.736061 23.769066 5.450760 +v 13.217041 23.502998 4.590843 +v 17.076679 26.129652 3.937630 +v 19.061264 23.129787 3.530846 +v 17.415668 21.036755 1.753899 +v 17.162815 23.272810 3.826866 +v 20.279255 16.883167 0.935364 +v 16.680912 13.091942 0.354317 +v 14.480412 16.973709 0.887527 +v 17.192951 17.445789 -0.000000 +v 10.811462 12.438313 0.875908 +v 9.559330 17.152840 4.734161 +v 11.978611 16.792568 2.764153 +v 11.361401 26.522627 17.703758 +v 10.322498 23.747904 16.039978 +v 8.589912 22.742422 19.418510 +v 11.901997 24.517551 19.184006 +v 10.832878 23.935112 17.817719 +v 10.465218 26.758121 13.931465 +v 9.110893 24.116522 12.570496 +v 8.399357 20.941952 13.722710 +v 9.699322 24.001146 14.407623 +v 6.645145 17.416931 12.739250 +v 0.305721 12.198967 12.083069 +v 5.614067 19.093779 18.005203 +v 6.198704 17.985779 14.623581 +v 1.257847 17.177391 24.046532 +v 8.757664 20.588209 23.132141 +v 6.151180 19.633646 20.313072 +v 11.360016 1.537903 5.554886 +v 14.417393 -0.000000 8.347008 +v 11.276630 0.473263 11.187424 +v 11.589832 0.839592 8.851173 +v 17.565399 1.427705 4.654114 +v 20.692900 0.526538 7.629021 +v 17.544209 0.545925 11.190285 +v 17.674873 0.342250 7.876152 +v 20.611542 1.219556 13.699814 +v 14.127060 1.043723 13.975479 +v 17.398117 1.152248 13.813591 +v 10.841446 0.876276 14.017952 +v 22.735102 39.332893 4.575798 +v 21.500990 40.774231 4.730644 +v 23.075840 40.940521 6.968178 +v 24.571434 40.331856 5.332626 +v 22.811941 40.564987 5.572197 +v 19.924595 39.602722 2.871063 +v 18.227612 40.606995 4.051552 +v 19.927101 41.021767 5.989807 +v 19.988266 40.979561 3.591949 +v 18.045441 41.025604 7.885376 +v 19.820881 40.761681 9.922997 +v 21.433676 40.750313 8.380852 +v 19.817604 40.872940 8.263710 +v 23.664927 41.695259 10.236900 +v 25.328949 41.021133 8.545952 +v 23.502615 41.612465 8.722885 +v 31.966431 7.053518 8.065659 +v 32.881149 3.970754 11.318245 +v 31.579678 2.227777 8.604233 +v 32.116837 4.402771 8.548401 +v 32.284225 10.327379 8.951424 +v 31.683586 10.345766 6.549248 +v 32.283123 7.018312 12.962677 +v 32.206390 10.504766 11.685989 +v 32.496552 1.832659 14.192924 +v 33.290173 3.674334 13.778625 +v 7.076492 3.189487 22.492043 +v 4.134083 5.308258 16.146378 +v 7.024300 3.599204 18.265671 +v 5.569561 5.354034 25.189568 +v 7.634106 3.173594 24.817863 +v 0.000000 8.432801 16.924095 +v 2.637379 10.350672 24.099411 +v 1.294971 8.131039 14.139275 +v 24.357035 37.122398 15.739273 +v 25.900930 33.944618 15.155716 +v 25.707575 37.603355 12.942131 +v 24.434523 39.766502 14.211700 +v 25.342306 37.403824 14.490570 +v 25.289370 29.893148 17.788048 +v 27.841700 25.385874 16.881546 +v 27.613031 29.548021 14.276283 +v 26.625135 29.660362 16.341476 +v 28.416037 25.687233 13.851570 +v 28.199364 30.244049 11.176666 +v 27.058645 34.121223 11.889145 +v 28.055515 29.753855 12.558830 +v 26.369989 38.016891 10.130890 +v 25.177107 40.363335 11.365303 +v 25.999218 37.707352 11.447968 +v 11.120464 39.962341 8.155106 +v 10.821732 37.061569 6.984726 +v 9.522865 33.222107 8.593033 +v 9.861267 36.902077 10.013069 +v 10.246777 37.149185 8.451065 +v 12.046875 39.332008 5.612373 +v 12.266529 36.887772 4.914238 +v 10.592087 33.750671 5.447037 +v 11.370598 36.985382 6.054924 +v 11.502701 29.821568 4.249313 +v 11.453197 26.820019 7.046600 +v 9.524021 29.905586 6.938934 +v 10.429638 29.800861 5.527847 +v 9.501122 26.918205 10.131821 +v 9.238132 30.285200 10.689880 +v 9.081333 30.124886 8.843773 +v 29.617344 1.562350 22.369781 +v 26.889610 1.429771 19.803253 +v 30.139816 1.506811 17.059555 +v 29.905281 1.544186 19.578217 +v 28.955912 2.622322 26.088081 +v 26.522821 1.582362 25.186150 +v 29.319534 1.718426 24.730812 +v 22.969248 2.332631 27.789513 +v 23.552111 1.249635 22.988388 +v 23.476389 1.613251 25.489395 +v 23.760141 1.544636 16.514091 +v 23.700270 1.506427 19.612549 +v 23.179001 40.835785 12.844688 +v 21.303740 40.913704 14.643440 +v 23.256989 39.830627 15.641747 +v 23.088120 40.642937 14.288605 +v 21.595955 41.113953 11.739166 +v 23.383209 41.128807 11.542496 +v 19.738331 41.313850 13.374870 +v 19.660995 40.989723 11.535736 +v 19.973633 40.025551 16.511978 +v 19.750641 41.345604 15.040512 +v 25.480930 4.569897 27.204475 +v 22.942690 8.121626 28.741829 +v 22.685186 4.425783 27.775574 +v 27.834808 7.710779 26.141258 +v 28.514496 4.616738 26.432442 +v 26.245016 13.034946 30.527496 +v 28.285172 13.065479 29.531380 +v 24.424589 13.118241 31.295959 +v 10.709686 5.530479 1.824883 +v 14.043797 3.264335 2.607628 +v 10.901493 2.837981 2.938461 +v 13.669048 9.194553 0.878906 +v 10.624592 8.708120 1.174309 +v 17.042252 6.496668 1.405846 +v 16.820763 9.564047 0.888443 +v 17.297771 3.572086 2.434906 +v 11.951759 37.390045 15.636246 +v 13.425819 33.625420 17.389565 +v 15.412693 37.387230 16.939972 +v 13.894924 36.952660 16.291924 +v 12.102470 29.461876 18.128700 +v 13.669079 26.828503 19.400612 +v 15.161179 29.531282 18.938698 +v 13.688744 29.443682 18.506317 +v 16.766479 26.479113 19.036667 +v 18.392380 30.753222 19.870178 +v 16.924271 34.421501 18.606247 +v 16.893970 30.271198 19.594200 +v 18.329826 37.713173 17.466354 +v 16.682926 37.794800 17.289757 +v 24.516445 37.275368 4.450790 +v 23.592039 33.744354 3.881096 +v 21.678591 36.901260 3.101265 +v 23.001049 36.908150 4.057610 +v 25.315014 30.042305 5.185394 +v 23.826735 26.336878 5.066299 +v 22.057947 29.580940 3.965218 +v 23.815573 29.713989 4.403702 +v 20.450741 26.269802 4.159920 +v 18.664478 29.563656 3.414352 +v 20.364201 33.203224 2.454529 +v 20.330212 29.571804 3.639023 +v 18.326687 37.027252 2.439705 +v 20.207390 37.291924 1.435913 +v 29.656073 1.196492 11.194923 +v 26.594261 1.110633 8.249474 +v 29.375406 1.465544 8.582512 +v 26.850878 1.338987 13.741249 +v 30.253132 1.090431 14.396126 +v 23.784790 0.347100 10.898514 +v 23.748381 1.308336 13.687950 +v 23.694607 0.539769 7.726273 +v 12.761963 40.723145 6.560295 +v 14.751144 40.730415 4.719460 +v 13.479424 39.244720 4.072594 +v 13.183174 40.449493 5.155609 +v 14.224426 41.652786 7.240288 +v 12.439693 40.904663 7.849518 +v 16.178158 41.664558 5.134377 +v 16.215118 42.136414 6.550552 +v 16.481468 39.730843 2.917740 +v 16.263279 40.959579 3.940178 +v 21.141176 37.748665 17.233604 +v 23.131594 33.841545 17.391289 +v 23.194557 37.328026 16.508980 +v 19.725174 34.615433 18.495697 +v 19.778488 37.538666 17.405281 +v 21.820482 30.246759 19.040176 +v 20.186947 30.379129 19.235756 +v 23.126059 30.100002 18.569008 +v 26.479338 34.298065 5.533569 +v 27.181921 30.264105 8.059937 +v 26.141209 30.087234 6.528442 +v 27.413589 39.432556 7.160156 +v 25.936489 38.328934 5.204124 +v 28.002932 34.913094 8.997963 +v 26.965439 38.671165 8.804237 +v 28.007524 30.501577 9.751221 +v 14.654110 36.920769 2.511574 +v 13.068401 33.829132 3.086861 +v 13.403999 36.841209 3.757507 +v 16.773640 33.631973 2.063576 +v 16.726639 36.738731 2.915054 +v 14.951168 29.918102 2.718719 +v 16.965557 29.664616 3.438171 +v 13.329510 29.848814 3.490295 +v 9.952976 37.007858 13.022827 +v 10.860340 33.328796 15.174072 +v 11.079571 37.024963 14.692299 +v 9.487572 33.354923 11.875000 +v 9.788139 37.135078 11.544868 +v 10.483120 30.030119 14.401962 +v 9.901047 30.269684 12.632195 +v 11.052582 29.778818 16.358376 +v 27.555706 20.426096 18.321892 +v 28.305935 22.847748 16.028618 +v 27.448725 23.026361 17.547012 +v 29.250172 17.485821 17.323128 +v 28.417715 17.548088 19.293846 +v 28.604708 20.179049 14.539185 +v 30.232632 17.611122 15.274086 +v 28.476725 22.785444 14.367607 +v 7.457069 17.175850 8.405060 +v 9.436646 21.291023 6.774437 +v 7.964474 17.238201 6.805550 +v 8.454529 20.390661 10.308807 +v 7.308743 16.952137 10.525955 +v 10.074123 23.986626 8.361122 +v 9.251263 23.760193 10.699760 +v 10.703808 24.136938 6.691154 +v 12.269978 23.788284 22.505814 +v 15.080048 24.744726 20.180344 +v 13.358871 24.921434 20.170067 +v 14.337624 20.376492 26.490669 +v 11.210007 20.606848 25.306992 +v 17.648296 22.507582 22.325348 +v 17.531166 18.820513 25.367729 +v 17.503624 24.402071 19.704773 +v 25.846941 20.115398 4.136139 +v 22.767630 23.118668 4.314003 +v 24.427155 22.987358 5.047737 +v 24.991371 16.855804 2.385506 +v 26.515652 16.481537 3.898605 +v 21.689888 19.967367 2.901573 +v 22.839365 16.934765 1.285141 +v 21.028988 23.209946 3.657936 +# 514 vertices + +vt 0.170660 0.098170 0.000000 +vt 0.169900 0.087550 0.000000 +vt 0.177030 0.086550 0.000000 +vt 0.177370 0.096960 0.000000 +vt 0.169140 0.076940 0.000000 +vt 0.176700 0.076150 0.000000 +vt 0.184260 0.075360 0.000000 +vt 0.184170 0.085550 0.000000 +vt 0.184070 0.095740 0.000000 +vt 0.168380 0.066320 0.000000 +vt 0.176370 0.065740 0.000000 +vt 0.167620 0.055700 0.000000 +vt 0.176040 0.055340 0.000000 +vt 0.184460 0.054970 0.000000 +vt 0.184360 0.065160 0.000000 +vt 0.192350 0.064580 0.000000 +vt 0.191820 0.074560 0.000000 +vt 0.192870 0.054610 0.000000 +vt 0.201290 0.054240 0.000000 +vt 0.200340 0.064010 0.000000 +vt 0.199390 0.073770 0.000000 +vt 0.191300 0.084540 0.000000 +vt 0.190780 0.094520 0.000000 +vt 0.198430 0.083540 0.000000 +vt 0.197480 0.093310 0.000000 +vt 0.167640 0.289110 0.000000 +vt 0.162900 0.289300 0.000000 +vt 0.161960 0.284380 0.000000 +vt 0.166390 0.284380 0.000000 +vt 0.158160 0.289490 0.000000 +vt 0.157520 0.284370 0.000000 +vt 0.156890 0.279260 0.000000 +vt 0.161020 0.279450 0.000000 +vt 0.165150 0.279650 0.000000 +vt 0.153410 0.289690 0.000000 +vt 0.153090 0.284370 0.000000 +vt 0.148670 0.289880 0.000000 +vt 0.148650 0.284370 0.000000 +vt 0.148630 0.278860 0.000000 +vt 0.152760 0.279060 0.000000 +vt 0.152430 0.273740 0.000000 +vt 0.156250 0.274140 0.000000 +vt 0.148610 0.273350 0.000000 +vt 0.148580 0.267840 0.000000 +vt 0.152100 0.268430 0.000000 +vt 0.155620 0.269020 0.000000 +vt 0.160080 0.274530 0.000000 +vt 0.163900 0.274920 0.000000 +vt 0.159140 0.269610 0.000000 +vt 0.162650 0.270200 0.000000 +vt 0.206600 0.095260 0.000000 +vt 0.203720 0.108630 0.000000 +vt 0.195040 0.106700 0.000000 +vt 0.215730 0.097210 0.000000 +vt 0.212400 0.110560 0.000000 +vt 0.209070 0.123910 0.000000 +vt 0.200830 0.122000 0.000000 +vt 0.192600 0.120100 0.000000 +vt 0.224850 0.099160 0.000000 +vt 0.221080 0.112490 0.000000 +vt 0.233980 0.101110 0.000000 +vt 0.229760 0.114420 0.000000 +vt 0.225530 0.127730 0.000000 +vt 0.217300 0.125820 0.000000 +vt 0.213520 0.139150 0.000000 +vt 0.205740 0.137260 0.000000 +vt 0.221310 0.141030 0.000000 +vt 0.217090 0.154340 0.000000 +vt 0.209750 0.152480 0.000000 +vt 0.202410 0.150610 0.000000 +vt 0.197950 0.135380 0.000000 +vt 0.190160 0.133490 0.000000 +vt 0.195060 0.148750 0.000000 +vt 0.187720 0.146890 0.000000 +vt 0.044840 0.092280 0.000000 +vt 0.048180 0.105520 0.000000 +vt 0.041210 0.105920 0.000000 +vt 0.037550 0.092740 0.000000 +vt 0.051520 0.118750 0.000000 +vt 0.044870 0.119100 0.000000 +vt 0.038220 0.119450 0.000000 +vt 0.034240 0.106330 0.000000 +vt 0.030270 0.093210 0.000000 +vt 0.054860 0.131990 0.000000 +vt 0.048530 0.132280 0.000000 +vt 0.058200 0.145220 0.000000 +vt 0.052190 0.145460 0.000000 +vt 0.046170 0.145700 0.000000 +vt 0.042200 0.132580 0.000000 +vt 0.035860 0.132870 0.000000 +vt 0.031570 0.119800 0.000000 +vt 0.040150 0.145940 0.000000 +vt 0.034140 0.146180 0.000000 +vt 0.029530 0.133170 0.000000 +vt 0.024920 0.120150 0.000000 +vt 0.027270 0.106740 0.000000 +vt 0.022980 0.093670 0.000000 +vt 0.020300 0.107140 0.000000 +vt 0.015690 0.094130 0.000000 +vt 0.108570 0.093270 0.000000 +vt 0.108770 0.106470 0.000000 +vt 0.100290 0.105900 0.000000 +vt 0.099640 0.092690 0.000000 +vt 0.108980 0.119670 0.000000 +vt 0.100950 0.119120 0.000000 +vt 0.092920 0.118580 0.000000 +vt 0.091820 0.105340 0.000000 +vt 0.090710 0.092100 0.000000 +vt 0.109190 0.132870 0.000000 +vt 0.101600 0.132340 0.000000 +vt 0.109390 0.146070 0.000000 +vt 0.102260 0.145560 0.000000 +vt 0.095130 0.145050 0.000000 +vt 0.094020 0.131820 0.000000 +vt 0.086440 0.131290 0.000000 +vt 0.084890 0.118030 0.000000 +vt 0.088000 0.144550 0.000000 +vt 0.080860 0.144040 0.000000 +vt 0.078860 0.130760 0.000000 +vt 0.076860 0.117490 0.000000 +vt 0.083340 0.104770 0.000000 +vt 0.081790 0.091520 0.000000 +vt 0.074860 0.104210 0.000000 +vt 0.072860 0.090930 0.000000 +vt 0.143760 0.096040 0.000000 +vt 0.150480 0.096570 0.000000 +vt 0.148910 0.109370 0.000000 +vt 0.142360 0.108940 0.000000 +vt 0.157210 0.097110 0.000000 +vt 0.155470 0.109810 0.000000 +vt 0.153720 0.122510 0.000000 +vt 0.147350 0.122170 0.000000 +vt 0.140970 0.121830 0.000000 +vt 0.163940 0.097640 0.000000 +vt 0.162020 0.110240 0.000000 +vt 0.168570 0.110680 0.000000 +vt 0.166480 0.123190 0.000000 +vt 0.160100 0.122850 0.000000 +vt 0.158190 0.135450 0.000000 +vt 0.151980 0.135210 0.000000 +vt 0.164390 0.135700 0.000000 +vt 0.162300 0.148200 0.000000 +vt 0.156270 0.148060 0.000000 +vt 0.150240 0.147920 0.000000 +vt 0.145780 0.134970 0.000000 +vt 0.139570 0.134730 0.000000 +vt 0.144210 0.147770 0.000000 +vt 0.138180 0.147630 0.000000 +vt 0.217360 0.219760 0.000000 +vt 0.212390 0.218740 0.000000 +vt 0.219250 0.204010 0.000000 +vt 0.224870 0.205220 0.000000 +vt 0.207420 0.217730 0.000000 +vt 0.213630 0.202790 0.000000 +vt 0.219840 0.187850 0.000000 +vt 0.226110 0.189270 0.000000 +vt 0.232380 0.190690 0.000000 +vt 0.202460 0.216710 0.000000 +vt 0.208010 0.201580 0.000000 +vt 0.197490 0.215700 0.000000 +vt 0.202390 0.200360 0.000000 +vt 0.207290 0.185020 0.000000 +vt 0.213560 0.186440 0.000000 +vt 0.219120 0.171300 0.000000 +vt 0.226040 0.172920 0.000000 +vt 0.212190 0.169680 0.000000 +vt 0.224670 0.156160 0.000000 +vt 0.232250 0.157980 0.000000 +vt 0.232970 0.174540 0.000000 +vt 0.239890 0.176160 0.000000 +vt 0.239830 0.159800 0.000000 +vt 0.247410 0.161620 0.000000 +vt 0.082290 0.160010 0.000000 +vt 0.076880 0.160270 0.000000 +vt 0.075200 0.144340 0.000000 +vt 0.083710 0.175980 0.000000 +vt 0.078560 0.176190 0.000000 +vt 0.073410 0.176410 0.000000 +vt 0.071470 0.160520 0.000000 +vt 0.069530 0.144630 0.000000 +vt 0.085130 0.191950 0.000000 +vt 0.080240 0.192120 0.000000 +vt 0.086550 0.207920 0.000000 +vt 0.081920 0.208050 0.000000 +vt 0.077290 0.208180 0.000000 +vt 0.075350 0.192290 0.000000 +vt 0.070460 0.192470 0.000000 +vt 0.068260 0.176620 0.000000 +vt 0.072650 0.208310 0.000000 +vt 0.068020 0.208440 0.000000 +vt 0.065570 0.192640 0.000000 +vt 0.063110 0.176830 0.000000 +vt 0.066070 0.160770 0.000000 +vt 0.063870 0.144930 0.000000 +vt 0.060660 0.161030 0.000000 +vt 0.132550 0.209230 0.000000 +vt 0.126760 0.209030 0.000000 +vt 0.127820 0.193580 0.000000 +vt 0.133960 0.193830 0.000000 +vt 0.120970 0.208820 0.000000 +vt 0.121670 0.193330 0.000000 +vt 0.122380 0.177830 0.000000 +vt 0.128870 0.178130 0.000000 +vt 0.135360 0.178430 0.000000 +vt 0.115180 0.208610 0.000000 +vt 0.115530 0.193070 0.000000 +vt 0.109390 0.208400 0.000000 +vt 0.109390 0.192820 0.000000 +vt 0.109390 0.177240 0.000000 +vt 0.115880 0.177530 0.000000 +vt 0.116240 0.162000 0.000000 +vt 0.123080 0.162340 0.000000 +vt 0.109390 0.161650 0.000000 +vt 0.116590 0.146460 0.000000 +vt 0.123780 0.146850 0.000000 +vt 0.129930 0.162690 0.000000 +vt 0.136770 0.163030 0.000000 +vt 0.130980 0.147240 0.000000 +vt 0.176060 0.209980 0.000000 +vt 0.170780 0.209760 0.000000 +vt 0.173430 0.194120 0.000000 +vt 0.178980 0.194200 0.000000 +vt 0.165510 0.209540 0.000000 +vt 0.167880 0.194040 0.000000 +vt 0.170260 0.178540 0.000000 +vt 0.176080 0.178490 0.000000 +vt 0.181890 0.178430 0.000000 +vt 0.160230 0.209320 0.000000 +vt 0.162330 0.193960 0.000000 +vt 0.154950 0.209100 0.000000 +vt 0.156790 0.193880 0.000000 +vt 0.158620 0.178650 0.000000 +vt 0.164440 0.178600 0.000000 +vt 0.166550 0.163240 0.000000 +vt 0.172630 0.163040 0.000000 +vt 0.160460 0.163430 0.000000 +vt 0.168660 0.147870 0.000000 +vt 0.175010 0.147540 0.000000 +vt 0.178720 0.162850 0.000000 +vt 0.184810 0.162660 0.000000 +vt 0.181370 0.147220 0.000000 +vt 0.140590 0.087040 0.000000 +vt 0.147920 0.087170 0.000000 +vt 0.137420 0.078050 0.000000 +vt 0.145350 0.077770 0.000000 +vt 0.153280 0.077490 0.000000 +vt 0.155250 0.087300 0.000000 +vt 0.134250 0.069060 0.000000 +vt 0.142790 0.068370 0.000000 +vt 0.131090 0.060060 0.000000 +vt 0.140220 0.058970 0.000000 +vt 0.149350 0.057880 0.000000 +vt 0.151320 0.067690 0.000000 +vt 0.159850 0.067000 0.000000 +vt 0.161210 0.077220 0.000000 +vt 0.158490 0.056790 0.000000 +vt 0.162570 0.087430 0.000000 +vt 0.133230 0.308610 0.000000 +vt 0.132020 0.303840 0.000000 +vt 0.136150 0.304370 0.000000 +vt 0.137050 0.309290 0.000000 +vt 0.130810 0.299070 0.000000 +vt 0.135260 0.299450 0.000000 +vt 0.139700 0.299830 0.000000 +vt 0.140290 0.304900 0.000000 +vt 0.140870 0.309960 0.000000 +vt 0.129600 0.294300 0.000000 +vt 0.134360 0.294540 0.000000 +vt 0.128390 0.289530 0.000000 +vt 0.133460 0.289620 0.000000 +vt 0.138530 0.289710 0.000000 +vt 0.139120 0.294770 0.000000 +vt 0.143870 0.295000 0.000000 +vt 0.144150 0.300210 0.000000 +vt 0.143600 0.289790 0.000000 +vt 0.148630 0.295240 0.000000 +vt 0.148590 0.300590 0.000000 +vt 0.144420 0.305420 0.000000 +vt 0.144690 0.310630 0.000000 +vt 0.148550 0.305950 0.000000 +vt 0.148510 0.311310 0.000000 +vt 0.068190 0.104540 0.000000 +vt 0.065850 0.091270 0.000000 +vt 0.070530 0.117800 0.000000 +vt 0.064190 0.118120 0.000000 +vt 0.061520 0.104860 0.000000 +vt 0.058850 0.091610 0.000000 +vt 0.072860 0.131070 0.000000 +vt 0.066860 0.131380 0.000000 +vt 0.060860 0.131680 0.000000 +vt 0.057860 0.118440 0.000000 +vt 0.054850 0.105190 0.000000 +vt 0.051850 0.091940 0.000000 +vt 0.175190 0.109690 0.000000 +vt 0.181810 0.108690 0.000000 +vt 0.179540 0.121640 0.000000 +vt 0.173010 0.122410 0.000000 +vt 0.188420 0.107700 0.000000 +vt 0.186070 0.120870 0.000000 +vt 0.183720 0.134040 0.000000 +vt 0.177280 0.134590 0.000000 +vt 0.170830 0.135140 0.000000 +vt 0.056970 0.269480 0.000000 +vt 0.055520 0.254220 0.000000 +vt 0.059540 0.254310 0.000000 +vt 0.060920 0.269600 0.000000 +vt 0.054070 0.238960 0.000000 +vt 0.058160 0.239020 0.000000 +vt 0.062240 0.239090 0.000000 +vt 0.063560 0.254410 0.000000 +vt 0.064880 0.269730 0.000000 +vt 0.052630 0.223700 0.000000 +vt 0.056770 0.223740 0.000000 +vt 0.051180 0.208450 0.000000 +vt 0.055390 0.208450 0.000000 +vt 0.059600 0.208450 0.000000 +vt 0.060920 0.223770 0.000000 +vt 0.065070 0.223800 0.000000 +vt 0.066320 0.239150 0.000000 +vt 0.063810 0.208450 0.000000 +vt 0.069210 0.223830 0.000000 +vt 0.070400 0.239210 0.000000 +vt 0.067580 0.254500 0.000000 +vt 0.068830 0.269850 0.000000 +vt 0.071590 0.254590 0.000000 +vt 0.072790 0.269980 0.000000 +vt 0.145070 0.268420 0.000000 +vt 0.146140 0.253600 0.000000 +vt 0.150180 0.253160 0.000000 +vt 0.141550 0.269000 0.000000 +vt 0.142100 0.254040 0.000000 +vt 0.142650 0.239080 0.000000 +vt 0.147210 0.238780 0.000000 +vt 0.151770 0.238470 0.000000 +vt 0.138030 0.269580 0.000000 +vt 0.138060 0.254490 0.000000 +vt 0.134520 0.270160 0.000000 +vt 0.134020 0.254930 0.000000 +vt 0.133530 0.239700 0.000000 +vt 0.138090 0.239390 0.000000 +vt 0.138120 0.224300 0.000000 +vt 0.143200 0.224130 0.000000 +vt 0.133040 0.224470 0.000000 +vt 0.138150 0.209200 0.000000 +vt 0.143750 0.209170 0.000000 +vt 0.148280 0.223960 0.000000 +vt 0.153360 0.223790 0.000000 +vt 0.149350 0.209130 0.000000 +vt 0.163910 0.015590 0.000000 +vt 0.171490 0.015850 0.000000 +vt 0.172620 0.025720 0.000000 +vt 0.164840 0.025620 0.000000 +vt 0.179070 0.016110 0.000000 +vt 0.180410 0.025820 0.000000 +vt 0.181760 0.035540 0.000000 +vt 0.173760 0.035590 0.000000 +vt 0.165760 0.035650 0.000000 +vt 0.186650 0.016360 0.000000 +vt 0.188200 0.025920 0.000000 +vt 0.194230 0.016620 0.000000 +vt 0.195990 0.026020 0.000000 +vt 0.197760 0.035430 0.000000 +vt 0.189760 0.035480 0.000000 +vt 0.191320 0.045040 0.000000 +vt 0.183110 0.045250 0.000000 +vt 0.199530 0.044830 0.000000 +vt 0.174900 0.045460 0.000000 +vt 0.166690 0.045670 0.000000 +vt 0.164100 0.308690 0.000000 +vt 0.160210 0.309340 0.000000 +vt 0.160880 0.304330 0.000000 +vt 0.164990 0.303790 0.000000 +vt 0.156310 0.310000 0.000000 +vt 0.156770 0.304870 0.000000 +vt 0.157230 0.299740 0.000000 +vt 0.161550 0.299320 0.000000 +vt 0.165870 0.298900 0.000000 +vt 0.152410 0.310650 0.000000 +vt 0.152660 0.305410 0.000000 +vt 0.152910 0.300170 0.000000 +vt 0.153160 0.294930 0.000000 +vt 0.157690 0.294620 0.000000 +vt 0.162230 0.294310 0.000000 +vt 0.166760 0.294000 0.000000 +vt 0.243210 0.103520 0.000000 +vt 0.238580 0.116680 0.000000 +vt 0.252450 0.105940 0.000000 +vt 0.247400 0.118950 0.000000 +vt 0.242350 0.131960 0.000000 +vt 0.233940 0.129840 0.000000 +vt 0.261690 0.108350 0.000000 +vt 0.256220 0.121210 0.000000 +vt 0.270930 0.110760 0.000000 +vt 0.265050 0.123480 0.000000 +vt 0.259170 0.136190 0.000000 +vt 0.250760 0.134080 0.000000 +vt 0.245290 0.146940 0.000000 +vt 0.237300 0.144970 0.000000 +vt 0.253290 0.148910 0.000000 +vt 0.229310 0.143000 0.000000 +vt 0.133970 0.108320 0.000000 +vt 0.134960 0.095350 0.000000 +vt 0.132970 0.121290 0.000000 +vt 0.124970 0.120750 0.000000 +vt 0.125570 0.107700 0.000000 +vt 0.126160 0.094650 0.000000 +vt 0.131980 0.134270 0.000000 +vt 0.124380 0.133800 0.000000 +vt 0.116780 0.133330 0.000000 +vt 0.116980 0.120210 0.000000 +vt 0.117170 0.107090 0.000000 +vt 0.117360 0.093960 0.000000 +vt 0.166010 0.255140 0.000000 +vt 0.170630 0.256440 0.000000 +vt 0.167030 0.271450 0.000000 +vt 0.169360 0.240090 0.000000 +vt 0.174230 0.241430 0.000000 +vt 0.179100 0.242770 0.000000 +vt 0.175250 0.257740 0.000000 +vt 0.171410 0.272700 0.000000 +vt 0.172710 0.225030 0.000000 +vt 0.177820 0.226420 0.000000 +vt 0.181420 0.211410 0.000000 +vt 0.186780 0.212840 0.000000 +vt 0.182940 0.227800 0.000000 +vt 0.188050 0.229190 0.000000 +vt 0.183960 0.244110 0.000000 +vt 0.192130 0.214270 0.000000 +vt 0.193160 0.230570 0.000000 +vt 0.188830 0.245450 0.000000 +vt 0.179880 0.259030 0.000000 +vt 0.175800 0.273950 0.000000 +vt 0.184500 0.260330 0.000000 +vt 0.180180 0.275200 0.000000 +vt 0.089470 0.270340 0.000000 +vt 0.088740 0.254730 0.000000 +vt 0.094420 0.254850 0.000000 +vt 0.095140 0.270450 0.000000 +vt 0.088010 0.239130 0.000000 +vt 0.093700 0.239250 0.000000 +vt 0.099390 0.239360 0.000000 +vt 0.100100 0.254960 0.000000 +vt 0.100800 0.270560 0.000000 +vt 0.087280 0.223520 0.000000 +vt 0.092980 0.223640 0.000000 +vt 0.092260 0.208040 0.000000 +vt 0.097970 0.208160 0.000000 +vt 0.098680 0.223760 0.000000 +vt 0.104380 0.223880 0.000000 +vt 0.105070 0.239480 0.000000 +vt 0.103680 0.208280 0.000000 +vt 0.110070 0.224000 0.000000 +vt 0.110760 0.239590 0.000000 +vt 0.105770 0.255080 0.000000 +vt 0.106470 0.270670 0.000000 +vt 0.111450 0.255190 0.000000 +vt 0.112140 0.270790 0.000000 +vt 0.133930 0.021920 0.000000 +vt 0.141420 0.020340 0.000000 +vt 0.141120 0.030000 0.000000 +vt 0.133220 0.031450 0.000000 +vt 0.148920 0.018760 0.000000 +vt 0.149030 0.028540 0.000000 +vt 0.149140 0.038320 0.000000 +vt 0.140820 0.039650 0.000000 +vt 0.132510 0.040990 0.000000 +vt 0.156410 0.017170 0.000000 +vt 0.156930 0.027080 0.000000 +vt 0.157450 0.036980 0.000000 +vt 0.157970 0.046890 0.000000 +vt 0.149240 0.048100 0.000000 +vt 0.140520 0.049310 0.000000 +vt 0.131800 0.050530 0.000000 +vt 0.136890 0.274590 0.000000 +vt 0.132980 0.275000 0.000000 +vt 0.140800 0.274180 0.000000 +vt 0.140040 0.279350 0.000000 +vt 0.135750 0.279600 0.000000 +vt 0.131450 0.279850 0.000000 +vt 0.144700 0.273760 0.000000 +vt 0.144330 0.279110 0.000000 +vt 0.143970 0.284450 0.000000 +vt 0.139290 0.284530 0.000000 +vt 0.134600 0.284610 0.000000 +vt 0.129920 0.284690 0.000000 +vt 0.198500 0.278720 0.000000 +vt 0.193920 0.277840 0.000000 +vt 0.198540 0.263070 0.000000 +vt 0.203220 0.263980 0.000000 +vt 0.189340 0.276960 0.000000 +vt 0.193860 0.262150 0.000000 +vt 0.198380 0.247340 0.000000 +vt 0.203160 0.248290 0.000000 +vt 0.207930 0.249240 0.000000 +vt 0.184760 0.276080 0.000000 +vt 0.189180 0.261240 0.000000 +vt 0.193610 0.246400 0.000000 +vt 0.198030 0.231560 0.000000 +vt 0.202900 0.232540 0.000000 +vt 0.207770 0.233520 0.000000 +vt 0.212640 0.234500 0.000000 +vt 0.082760 0.223600 0.000000 +vt 0.083610 0.239150 0.000000 +vt 0.079210 0.239170 0.000000 +vt 0.078250 0.223680 0.000000 +vt 0.084450 0.254700 0.000000 +vt 0.085300 0.270250 0.000000 +vt 0.081130 0.270160 0.000000 +vt 0.080170 0.254660 0.000000 +vt 0.075880 0.254630 0.000000 +vt 0.074810 0.239190 0.000000 +vt 0.076960 0.270070 0.000000 +vt 0.073730 0.223750 0.000000 +vt 0.128920 0.270320 0.000000 +vt 0.128380 0.255000 0.000000 +vt 0.123330 0.270470 0.000000 +vt 0.122740 0.255060 0.000000 +vt 0.122150 0.239650 0.000000 +vt 0.127840 0.239670 0.000000 +vt 0.117730 0.270630 0.000000 +vt 0.117090 0.255130 0.000000 +vt 0.116460 0.239620 0.000000 +vt 0.115820 0.224120 0.000000 +vt 0.121560 0.224230 0.000000 +vt 0.127300 0.224350 0.000000 +vt 0.162050 0.254650 0.000000 +vt 0.158090 0.254150 0.000000 +vt 0.160560 0.239280 0.000000 +vt 0.164960 0.239680 0.000000 +vt 0.154130 0.253650 0.000000 +vt 0.156160 0.238880 0.000000 +vt 0.158200 0.224100 0.000000 +vt 0.163030 0.224410 0.000000 +vt 0.167870 0.224720 0.000000 +vt 0.046920 0.192880 0.000000 +vt 0.051580 0.192820 0.000000 +vt 0.042660 0.177310 0.000000 +vt 0.047770 0.177190 0.000000 +vt 0.052890 0.177070 0.000000 +vt 0.056240 0.192760 0.000000 +vt 0.038400 0.161750 0.000000 +vt 0.043960 0.161570 0.000000 +vt 0.049530 0.161390 0.000000 +vt 0.055090 0.161210 0.000000 +vt 0.058000 0.176950 0.000000 +vt 0.060910 0.192700 0.000000 +vt 0.142690 0.163130 0.000000 +vt 0.148620 0.163230 0.000000 +vt 0.146990 0.178540 0.000000 +vt 0.141180 0.178490 0.000000 +vt 0.154540 0.163330 0.000000 +vt 0.152810 0.178600 0.000000 +vt 0.151080 0.193870 0.000000 +vt 0.145370 0.193860 0.000000 +vt 0.139670 0.193840 0.000000 +vt 0.184830 0.195740 0.000000 +vt 0.188240 0.180080 0.000000 +vt 0.194590 0.181730 0.000000 +vt 0.190680 0.197280 0.000000 +vt 0.191650 0.164410 0.000000 +vt 0.198500 0.166170 0.000000 +vt 0.205340 0.167920 0.000000 +vt 0.200940 0.183370 0.000000 +vt 0.196540 0.198820 0.000000 +vt 0.091190 0.192170 0.000000 +vt 0.090130 0.176290 0.000000 +vt 0.096550 0.176610 0.000000 +vt 0.097260 0.192380 0.000000 +vt 0.089060 0.160420 0.000000 +vt 0.095840 0.160830 0.000000 +vt 0.102610 0.161240 0.000000 +vt 0.102970 0.176920 0.000000 +vt 0.103320 0.192600 0.000000 +# 573 texture coords + +g rocksCombined003 +usemtl rocksSculpts +f 135/3 134/4 13/1 131/2 +f 132/6 135/3 131/2 35/5 +f 39/7 133/8 135/3 132/6 +f 133/8 38/9 134/4 135/3 +f 139/11 132/6 35/5 136/10 +f 137/13 139/11 136/10 25/12 +f 36/14 138/15 139/11 137/13 +f 138/15 39/7 132/6 139/11 +f 143/16 142/17 39/7 138/15 +f 140/18 143/16 138/15 36/14 +f 20/19 141/20 143/16 140/18 +f 141/20 37/21 142/17 143/16 +f 146/22 145/23 38/9 133/8 +f 142/17 146/22 133/8 39/7 +f 37/21 144/24 146/22 142/17 +f 144/24 1/25 145/23 146/22 +f 151/28 150/29 21/26 147/27 +f 148/31 151/28 147/27 40/30 +f 44/32 149/33 151/28 148/31 +f 149/33 43/34 150/29 151/28 +f 155/36 148/31 40/30 152/35 +f 153/38 155/36 152/35 26/37 +f 41/39 154/40 155/36 153/38 +f 154/40 44/32 148/31 155/36 +f 159/41 158/42 44/32 154/40 +f 156/43 159/41 154/40 41/39 +f 16/44 157/45 159/41 156/43 +f 157/45 42/46 158/42 159/41 +f 162/47 161/48 43/34 149/33 +f 158/42 162/47 149/33 44/32 +f 42/46 160/49 162/47 158/42 +f 160/49 5/50 161/48 162/47 +f 166/52 165/53 1/25 144/51 +f 163/55 166/52 144/51 37/54 +f 48/56 164/57 166/52 163/55 +f 164/57 47/58 165/53 166/52 +f 169/60 163/55 37/54 141/59 +f 167/62 169/60 141/59 20/61 +f 45/63 168/64 169/60 167/62 +f 168/64 48/56 163/55 169/60 +f 173/65 172/66 48/56 168/64 +f 170/67 173/65 168/64 45/63 +f 23/68 171/69 173/65 170/67 +f 171/69 46/70 172/66 173/65 +f 176/71 175/72 47/58 164/57 +f 172/66 176/71 164/57 48/56 +f 46/70 174/73 176/71 172/66 +f 174/73 10/74 175/72 176/71 +f 181/77 180/78 14/75 177/76 +f 178/80 181/77 177/76 49/79 +f 53/81 179/82 181/77 178/80 +f 179/82 52/83 180/78 181/77 +f 185/85 178/80 49/79 182/84 +f 183/87 185/85 182/84 17/86 +f 50/88 184/89 185/85 183/87 +f 184/89 53/81 178/80 185/85 +f 189/90 188/91 53/81 184/89 +f 186/92 189/90 184/89 50/88 +f 9/93 187/94 189/90 186/92 +f 187/94 51/95 188/91 189/90 +f 192/96 191/97 52/83 179/82 +f 188/91 192/96 179/82 53/81 +f 51/95 190/98 192/96 188/91 +f 190/98 2/99 191/97 192/96 +f 197/102 196/103 19/100 193/101 +f 194/105 197/102 193/101 54/104 +f 58/106 195/107 197/102 194/105 +f 195/107 57/108 196/103 197/102 +f 201/110 194/105 54/104 198/109 +f 199/112 201/110 198/109 24/111 +f 55/113 200/114 201/110 199/112 +f 200/114 58/106 194/105 201/110 +f 205/115 204/116 58/106 200/114 +f 202/117 205/115 200/114 55/113 +f 11/118 203/119 205/115 202/117 +f 203/119 56/120 204/116 205/115 +f 208/121 207/122 57/108 195/107 +f 204/116 208/121 195/107 58/106 +f 56/120 206/123 208/121 204/116 +f 206/123 4/124 207/122 208/121 +f 213/127 212/128 3/125 209/126 +f 210/130 213/127 209/126 59/129 +f 63/131 211/132 213/127 210/130 +f 211/132 62/133 212/128 213/127 +f 217/135 210/130 59/129 214/134 +f 215/136 217/135 214/134 13/1 +f 60/137 216/138 217/135 215/136 +f 216/138 63/131 210/130 217/135 +f 221/139 220/140 63/131 216/138 +f 218/141 221/139 216/138 60/137 +f 18/142 219/143 221/139 218/141 +f 219/143 61/144 220/140 221/139 +f 224/145 223/146 62/133 211/132 +f 220/140 224/145 211/132 63/131 +f 61/144 222/147 224/145 220/140 +f 222/147 12/148 223/146 224/145 +f 229/151 228/152 28/149 225/150 +f 226/154 229/151 225/150 64/153 +f 68/155 227/156 229/151 226/154 +f 227/156 67/157 228/152 229/151 +f 233/159 226/154 64/153 230/158 +f 231/161 233/159 230/158 33/160 +f 65/162 232/163 233/159 231/161 +f 232/163 68/155 226/154 233/159 +f 237/164 236/165 68/155 232/163 +f 234/166 237/164 232/163 65/162 +f 23/68 235/167 237/164 234/166 +f 235/167 66/168 236/165 237/164 +f 240/169 239/170 67/157 227/156 +f 236/165 240/169 227/156 68/155 +f 66/168 238/171 240/169 236/165 +f 238/171 9/172 239/170 240/169 +f 245/174 244/175 11/118 241/173 +f 242/177 245/174 241/173 69/176 +f 73/178 243/179 245/174 242/177 +f 243/179 72/180 244/175 245/174 +f 249/182 242/177 69/176 246/181 +f 247/184 249/182 246/181 29/183 +f 70/185 248/186 249/182 247/184 +f 248/186 73/178 242/177 249/182 +f 253/187 252/188 73/178 248/186 +f 250/189 253/187 248/186 70/185 +f 31/190 251/191 253/187 250/189 +f 251/191 71/192 252/188 253/187 +f 256/193 255/194 72/180 243/179 +f 252/188 256/193 243/179 73/178 +f 71/192 254/195 256/193 252/188 +f 254/195 17/86 255/194 256/193 +f 261/198 260/199 30/196 257/197 +f 258/201 261/198 257/197 74/200 +f 78/202 259/203 261/198 258/201 +f 259/203 77/204 260/199 261/198 +f 265/206 258/201 74/200 262/205 +f 263/208 265/206 262/205 34/207 +f 75/209 264/210 265/206 263/208 +f 264/210 78/202 258/201 265/206 +f 269/211 268/212 78/202 264/210 +f 266/213 269/211 264/210 75/209 +f 24/111 267/214 269/211 266/213 +f 267/214 76/215 268/212 269/211 +f 272/216 271/217 77/204 259/203 +f 268/212 272/216 259/203 78/202 +f 76/215 270/218 272/216 268/212 +f 270/218 12/148 271/217 272/216 +f 277/221 276/222 27/219 273/220 +f 274/224 277/221 273/220 79/223 +f 83/225 275/226 277/221 274/224 +f 275/226 82/227 276/222 277/221 +f 281/229 274/224 79/223 278/228 +f 279/231 281/229 278/228 32/230 +f 80/232 280/233 281/229 279/231 +f 280/233 83/225 274/224 281/229 +f 285/234 284/235 83/225 280/233 +f 282/236 285/234 280/233 80/232 +f 18/142 283/237 285/234 282/236 +f 283/237 81/238 284/235 285/234 +f 288/239 287/240 82/227 275/226 +f 284/235 288/239 275/226 83/225 +f 81/238 286/241 288/239 284/235 +f 286/241 10/74 287/240 288/239 +f 292/243 209/126 3/125 289/242 +f 290/245 292/243 289/242 84/244 +f 86/246 291/247 292/243 290/245 +f 291/247 59/129 209/126 292/243 +f 296/249 290/245 84/244 293/248 +f 294/251 296/249 293/248 19/250 +f 85/252 295/253 296/249 294/251 +f 295/253 86/246 290/245 296/249 +f 299/254 298/255 86/246 295/253 +f 297/256 299/254 295/253 85/252 +f 25/12 136/10 299/254 297/256 +f 136/10 35/5 298/255 299/254 +f 300/257 214/134 59/129 291/247 +f 298/255 300/257 291/247 86/246 +f 35/5 131/2 300/257 298/255 +f 131/2 13/1 214/134 300/257 +f 305/260 304/261 8/258 301/259 +f 302/263 305/260 301/259 87/262 +f 91/264 303/265 305/260 302/263 +f 303/265 90/266 304/261 305/260 +f 309/268 302/263 87/262 306/267 +f 307/270 309/268 306/267 22/269 +f 88/271 308/272 309/268 307/270 +f 308/272 91/264 302/263 309/268 +f 313/273 312/274 91/264 308/272 +f 310/275 313/273 308/272 88/271 +f 26/37 311/276 313/273 310/275 +f 311/276 89/277 312/274 313/273 +f 316/278 315/279 90/266 303/265 +f 312/274 316/278 303/265 91/264 +f 89/277 314/280 316/278 312/274 +f 314/280 15/281 315/279 316/278 +f 320/282 319/283 4/124 206/123 +f 317/284 320/282 206/123 56/120 +f 93/285 318/286 320/282 317/284 +f 318/286 92/287 319/283 320/282 +f 322/288 317/284 56/120 203/119 +f 244/175 322/288 203/119 11/118 +f 72/180 321/289 322/288 244/175 +f 321/289 93/285 317/284 322/288 +f 324/290 323/291 93/285 321/289 +f 255/194 324/290 321/289 72/180 +f 17/86 182/84 324/290 255/194 +f 182/84 49/79 323/291 324/290 +f 326/292 325/293 92/287 318/286 +f 323/291 326/292 318/286 93/285 +f 49/79 177/76 326/292 323/291 +f 177/76 14/75 325/293 326/292 +f 329/294 215/136 13/1 134/4 +f 327/295 329/294 134/4 38/9 +f 94/296 328/297 329/294 327/295 +f 328/297 60/137 215/136 329/294 +f 331/298 327/295 38/9 145/23 +f 165/53 331/298 145/23 1/25 +f 47/58 330/299 331/298 165/53 +f 330/299 94/296 327/295 331/298 +f 333/300 332/301 94/296 330/299 +f 175/72 333/300 330/299 47/58 +f 10/74 286/241 333/300 175/72 +f 286/241 81/238 332/301 333/300 +f 334/302 218/141 60/137 328/297 +f 332/301 334/302 328/297 94/296 +f 81/238 283/237 334/302 332/301 +f 283/237 18/142 218/141 334/302 +f 339/305 338/306 6/303 335/304 +f 336/308 339/305 335/304 95/307 +f 99/309 337/310 339/305 336/308 +f 337/310 98/311 338/306 339/305 +f 343/313 336/308 95/307 340/312 +f 341/315 343/313 340/312 28/314 +f 96/316 342/317 343/313 341/315 +f 342/317 99/309 336/308 343/313 +f 347/318 346/319 99/309 342/317 +f 344/320 347/318 342/317 96/316 +f 31/190 345/321 347/318 344/320 +f 345/321 97/322 346/319 347/318 +f 350/323 349/324 98/311 337/310 +f 346/319 350/323 337/310 99/309 +f 97/322 348/325 350/323 346/319 +f 348/325 15/326 349/324 350/323 +f 355/328 354/329 16/44 351/327 +f 352/331 355/328 351/327 100/330 +f 104/332 353/333 355/328 352/331 +f 353/333 103/334 354/329 355/328 +f 359/336 352/331 100/330 356/335 +f 357/338 359/336 356/335 7/337 +f 101/339 358/340 359/336 357/338 +f 358/340 104/332 352/331 359/336 +f 363/341 362/342 104/332 358/340 +f 360/343 363/341 358/340 101/339 +f 30/196 361/344 363/341 360/343 +f 361/344 102/345 362/342 363/341 +f 366/346 365/347 103/334 353/333 +f 362/342 366/346 353/333 104/332 +f 102/345 364/348 366/346 362/342 +f 364/348 32/230 365/347 366/346 +f 370/351 369/352 14/349 180/350 +f 367/354 370/351 180/350 52/353 +f 107/355 368/356 370/351 367/354 +f 368/356 106/357 369/352 370/351 +f 373/359 367/354 52/353 191/358 +f 371/361 373/359 191/358 2/360 +f 105/362 372/363 373/359 371/361 +f 372/363 107/355 367/354 373/359 +f 376/364 375/365 107/355 372/363 +f 374/366 376/364 372/363 105/362 +f 20/19 140/18 376/364 374/366 +f 140/18 36/14 375/365 376/364 +f 378/367 377/368 106/357 368/356 +f 375/365 378/367 368/356 107/355 +f 36/14 137/13 378/367 375/365 +f 137/13 25/12 377/368 378/367 +f 382/371 381/372 6/369 338/370 +f 379/374 382/371 338/370 98/373 +f 109/375 380/376 382/371 379/374 +f 380/376 108/377 381/372 382/371 +f 384/379 379/374 98/373 349/378 +f 314/280 384/379 349/378 15/281 +f 89/277 383/380 384/379 314/280 +f 383/380 109/375 379/374 384/379 +f 386/381 385/382 109/375 383/380 +f 311/276 386/381 383/380 89/277 +f 26/37 152/35 386/381 311/276 +f 152/35 40/30 385/382 386/381 +f 388/383 387/384 108/377 380/376 +f 385/382 388/383 380/376 109/375 +f 40/30 147/27 388/383 385/382 +f 147/27 21/26 387/384 388/383 +f 391/386 167/62 20/61 374/385 +f 389/388 391/386 374/385 105/387 +f 110/389 390/390 391/386 389/388 +f 390/390 45/63 167/62 391/386 +f 393/392 389/388 105/387 371/391 +f 190/394 393/392 371/391 2/393 +f 51/395 392/396 393/392 190/394 +f 392/396 110/389 389/388 393/392 +f 395/397 394/398 110/389 392/396 +f 187/399 395/397 392/396 51/395 +f 9/172 238/171 395/397 187/399 +f 238/171 66/168 394/398 395/397 +f 396/400 170/67 45/63 390/390 +f 394/398 396/400 390/390 110/389 +f 66/168 235/167 396/400 394/398 +f 235/167 23/68 170/67 396/400 +f 399/401 289/402 3/125 212/128 +f 397/403 399/401 212/128 62/133 +f 111/404 398/405 399/401 397/403 +f 398/405 84/406 289/402 399/401 +f 401/407 397/403 62/133 223/146 +f 270/218 401/407 223/146 12/148 +f 76/215 400/408 401/407 270/218 +f 400/408 111/404 397/403 401/407 +f 403/409 402/410 111/404 400/408 +f 267/214 403/409 400/408 76/215 +f 24/111 198/109 403/409 267/214 +f 198/109 54/104 402/410 403/409 +f 404/411 293/412 84/406 398/405 +f 402/410 404/411 398/405 111/404 +f 54/104 193/101 404/411 402/410 +f 193/101 19/100 293/412 404/411 +f 408/414 161/415 5/50 405/413 +f 406/417 408/414 405/413 112/416 +f 115/418 407/419 408/414 406/417 +f 407/419 43/420 161/415 408/414 +f 412/422 406/417 112/416 409/421 +f 410/423 412/422 409/421 27/219 +f 113/424 411/425 412/422 410/423 +f 411/425 115/418 406/417 412/422 +f 416/426 415/427 115/418 411/425 +f 413/428 416/426 411/425 113/424 +f 33/160 414/429 416/426 413/428 +f 414/429 114/430 415/427 416/426 +f 418/431 150/432 43/420 407/419 +f 415/427 418/431 407/419 115/418 +f 114/430 417/433 418/431 415/427 +f 417/433 21/434 150/432 418/431 +f 422/437 301/438 8/435 419/436 +f 420/440 422/437 419/436 116/439 +f 119/441 421/442 422/437 420/440 +f 421/442 87/443 301/438 422/437 +f 426/445 420/440 116/439 423/444 +f 424/446 426/445 423/444 29/183 +f 117/447 425/448 426/445 424/446 +f 425/448 119/441 420/440 426/445 +f 430/449 429/450 119/441 425/448 +f 427/451 430/449 425/448 117/447 +f 34/207 428/452 430/449 427/451 +f 428/452 118/453 429/450 430/449 +f 432/454 306/455 87/443 421/442 +f 429/450 432/454 421/442 119/441 +f 118/453 431/456 432/454 429/450 +f 431/456 22/457 306/455 432/454 +f 435/460 207/461 4/458 319/459 +f 433/463 435/460 319/459 92/462 +f 120/464 434/465 435/460 433/463 +f 434/465 57/466 207/461 435/460 +f 437/468 433/463 92/462 325/467 +f 369/352 437/468 325/467 14/349 +f 106/357 436/469 437/468 369/352 +f 436/469 120/464 433/463 437/468 +f 439/470 438/471 120/464 436/469 +f 377/368 439/470 436/469 106/357 +f 25/12 297/256 439/470 377/368 +f 297/256 85/252 438/471 439/470 +f 440/472 196/473 57/466 434/465 +f 438/471 440/472 434/465 120/464 +f 85/252 294/251 440/472 438/471 +f 294/251 19/250 196/473 440/472 +f 444/474 443/475 7/337 356/335 +f 441/476 444/474 356/335 100/330 +f 122/477 442/478 444/474 441/476 +f 442/478 121/479 443/475 444/474 +f 446/480 441/476 100/330 351/327 +f 156/43 446/480 351/327 16/44 +f 41/39 445/481 446/480 156/43 +f 445/481 122/477 441/476 446/480 +f 448/482 447/483 122/477 445/481 +f 153/38 448/482 445/481 41/39 +f 26/37 310/275 448/482 153/38 +f 310/275 88/271 447/483 448/482 +f 450/484 449/485 121/479 442/478 +f 447/483 450/484 442/478 122/477 +f 88/271 307/270 450/484 447/483 +f 307/270 22/269 449/485 450/484 +f 453/488 335/489 6/486 381/487 +f 451/491 453/488 381/487 108/490 +f 123/492 452/493 453/488 451/491 +f 452/493 95/494 335/489 453/488 +f 455/496 451/491 108/490 387/495 +f 417/433 455/496 387/495 21/434 +f 114/430 454/497 455/496 417/433 +f 454/497 123/492 451/491 455/496 +f 457/498 456/499 123/492 454/497 +f 414/429 457/498 454/497 114/430 +f 33/160 230/158 457/498 414/429 +f 230/158 64/153 456/499 457/498 +f 458/500 340/501 95/494 452/493 +f 456/499 458/500 452/493 123/492 +f 64/153 225/150 458/500 456/499 +f 225/150 28/149 340/501 458/500 +f 461/502 247/184 29/183 423/444 +f 459/503 461/502 423/444 116/439 +f 124/504 460/505 461/502 459/503 +f 460/505 70/185 247/184 461/502 +f 463/506 459/503 116/439 419/436 +f 304/507 463/506 419/436 8/435 +f 90/508 462/509 463/506 304/507 +f 462/509 124/504 459/503 463/506 +f 465/510 464/511 124/504 462/509 +f 315/512 465/510 462/509 90/508 +f 15/326 348/325 465/510 315/512 +f 348/325 97/322 464/511 465/510 +f 466/513 250/189 70/185 460/505 +f 464/511 466/513 460/505 124/504 +f 97/322 345/321 466/513 464/511 +f 345/321 31/190 250/189 466/513 +f 469/515 357/338 7/337 443/514 +f 467/517 469/515 443/514 121/516 +f 125/518 468/519 469/515 467/517 +f 468/519 101/339 357/338 469/515 +f 471/521 467/517 121/516 449/520 +f 431/456 471/521 449/520 22/457 +f 118/453 470/522 471/521 431/456 +f 470/522 125/518 467/517 471/521 +f 473/523 472/524 125/518 470/522 +f 428/452 473/523 470/522 118/453 +f 34/207 262/205 473/523 428/452 +f 262/205 74/200 472/524 473/523 +f 474/525 360/343 101/339 468/519 +f 472/524 474/525 468/519 125/518 +f 74/200 257/197 474/525 472/524 +f 257/197 30/196 360/343 474/525 +f 477/526 405/413 5/50 160/49 +f 475/527 477/526 160/49 42/46 +f 126/528 476/529 477/526 475/527 +f 476/529 112/416 405/413 477/526 +f 479/530 475/527 42/46 157/45 +f 354/329 479/530 157/45 16/44 +f 103/334 478/531 479/530 354/329 +f 478/531 126/528 475/527 479/530 +f 481/532 480/533 126/528 478/531 +f 365/347 481/532 478/531 103/334 +f 32/230 278/228 481/532 365/347 +f 278/228 79/223 480/533 481/532 +f 482/534 409/421 112/416 476/529 +f 480/533 482/534 476/529 126/528 +f 79/223 273/220 482/534 480/533 +f 273/220 27/219 409/421 482/534 +f 485/536 341/315 28/314 228/535 +f 483/538 485/536 228/535 67/537 +f 127/539 484/540 485/536 483/538 +f 484/540 96/316 341/315 485/536 +f 487/542 483/538 67/537 239/541 +f 186/92 487/542 239/541 9/93 +f 50/88 486/543 487/542 186/92 +f 486/543 127/539 483/538 487/542 +f 489/544 488/545 127/539 486/543 +f 183/87 489/544 486/543 50/88 +f 17/86 254/195 489/544 183/87 +f 254/195 71/192 488/545 489/544 +f 490/546 344/320 96/316 484/540 +f 488/545 490/546 484/540 127/539 +f 71/192 251/191 490/546 488/545 +f 251/191 31/190 344/320 490/546 +f 493/547 271/217 12/148 222/147 +f 491/548 493/547 222/147 61/144 +f 128/549 492/550 493/547 491/548 +f 492/550 77/204 271/217 493/547 +f 495/551 491/548 61/144 219/143 +f 282/236 495/551 219/143 18/142 +f 80/232 494/552 495/551 282/236 +f 494/552 128/549 491/548 495/551 +f 497/553 496/554 128/549 494/552 +f 279/231 497/553 494/552 80/232 +f 32/230 364/348 497/553 279/231 +f 364/348 102/345 496/554 497/553 +f 498/555 260/199 77/204 492/550 +f 496/554 498/555 492/550 128/549 +f 102/345 361/344 498/555 496/554 +f 361/344 30/196 260/199 498/555 +f 501/556 410/423 27/219 276/222 +f 499/557 501/556 276/222 82/227 +f 129/558 500/559 501/556 499/557 +f 500/559 113/424 410/423 501/556 +f 503/560 499/557 82/227 287/240 +f 174/73 503/560 287/240 10/74 +f 46/70 502/561 503/560 174/73 +f 502/561 129/558 499/557 503/560 +f 505/562 504/563 129/558 502/561 +f 171/69 505/562 502/561 46/70 +f 23/68 234/166 505/562 171/69 +f 234/166 65/162 504/563 505/562 +f 506/564 413/428 113/424 500/559 +f 504/563 506/564 500/559 129/558 +f 65/162 231/161 506/564 504/563 +f 231/161 33/160 413/428 506/564 +f 509/565 424/446 29/183 246/181 +f 507/566 509/565 246/181 69/176 +f 130/567 508/568 509/565 507/566 +f 508/568 117/447 424/446 509/565 +f 511/569 507/566 69/176 241/173 +f 202/117 511/569 241/173 11/118 +f 55/113 510/570 511/569 202/117 +f 510/570 130/567 507/566 511/569 +f 513/571 512/572 130/567 510/570 +f 199/112 513/571 510/570 55/113 +f 24/111 266/213 513/571 199/112 +f 266/213 75/209 512/572 513/571 +f 514/573 427/451 117/447 508/568 +f 512/572 514/573 508/568 130/567 +f 75/209 263/208 514/573 512/572 +f 263/208 34/207 427/451 514/573 +# 512 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj.meta new file mode 100644 index 0000000..fc6f96c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined003.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: e0cdf7da72a415d46bfc8f5b5f0eacc0 +timeCreated: 1484958684 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined003 + 100002: //RootNode + 400000: rocksCombined003 + 400002: //RootNode + 2300000: rocksCombined003 + 3300000: rocksCombined003 + 4300000: rocksCombined003 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj new file mode 100644 index 0000000..3793cef --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:42 + +mtllib rocksCombined004.mtl + +# +# object rocksCombined004 +# + +v 4.512604 0.858781 13.739670 +v 14.955826 1.022938 11.977179 +v 0.841309 1.103957 4.296004 +v 14.973373 0.990648 1.714174 +v 6.250275 6.769314 6.365707 +v 11.010544 6.808604 5.935592 +v 5.886841 6.475352 1.796815 +v 10.909790 6.431648 1.467052 +v 13.168839 4.698950 9.166750 +v 4.109222 4.630771 11.108322 +v 13.273331 4.492395 1.133518 +v 1.202911 4.676233 3.608369 +v 1.721710 0.811987 9.512638 +v 15.803436 0.775465 6.959103 +v 11.100616 6.557204 3.625309 +v 5.560730 6.839765 3.873430 +v 14.113525 4.678504 5.210151 +v 1.321518 4.835648 7.950792 +v 9.454926 0.783767 0.837177 +v 9.864792 0.378546 13.029198 +v 8.506561 6.816844 6.254872 +v 8.619675 6.487011 0.869856 +v 8.556122 4.811066 9.802710 +v 8.842072 4.460066 0.089211 +v 9.674850 0.472101 7.325245 +v 8.563889 6.793398 3.453714 +v 5.414810 0.461026 8.492098 +v 9.764145 0.395571 10.586296 +v 6.793625 0.063634 13.280991 +v 3.122116 0.723735 12.049349 +v 6.154709 0.367356 11.450111 +v 8.525726 6.861413 4.809530 +v 7.252090 6.723039 3.473553 +v 5.862503 6.885927 5.212708 +v 7.389252 6.624090 6.217536 +v 7.348633 6.854910 4.683213 +v 9.311523 2.023848 11.826279 +v 6.443680 4.745544 10.799255 +v 3.995285 2.506804 12.825281 +v 6.417282 2.310248 12.120478 +v 15.601151 2.756329 6.142137 +v 13.926758 4.797183 7.277554 +v 14.425934 2.603811 10.983618 +v 15.529968 0.822860 9.959707 +v 15.271988 2.723950 8.722025 +v 9.149521 2.536676 0.139387 +v 11.402695 4.465484 0.263576 +v 14.399139 2.571112 1.315339 +v 12.807770 0.791466 1.019140 +v 12.165802 2.543029 0.332420 +v 0.865799 0.846164 6.662705 +v 0.814774 2.593756 9.096121 +v 0.662445 4.841490 5.592903 +v 0.553772 2.698451 4.050338 +v 0.151535 2.643559 6.473828 +v 9.841278 6.930652 6.109858 +v 8.731644 6.088540 8.209412 +v 11.174789 4.625844 9.564857 +v 11.931366 5.973019 7.381905 +v 10.502029 5.913996 7.880535 +v 11.985672 5.679926 1.254994 +v 11.010773 6.526463 2.430517 +v 12.649841 5.811368 4.142534 +v 13.858063 4.619779 2.936931 +v 12.439072 5.760787 2.575203 +v 3.611877 5.800291 2.596256 +v 7.231094 6.504693 1.226785 +v 8.702332 5.648201 0.351473 +v 4.850266 4.541471 1.667069 +v 6.070999 5.713195 1.294714 +v 3.509277 5.892582 5.777167 +v 2.591263 4.716310 9.697317 +v 5.278534 5.993505 8.306549 +v 4.190567 6.175526 7.071438 +v 4.638107 0.860668 2.493391 +v 9.583694 0.449082 3.817613 +v 4.952332 0.486719 5.259027 +v 9.875610 6.506052 1.086327 +v 8.590881 6.824654 1.973094 +v 9.820663 6.802683 3.475053 +v 9.782562 6.714513 2.203077 +v 15.480270 0.832904 4.004890 +v 15.040085 2.593529 3.565806 +v 2.313660 2.523140 11.226913 +v 11.011383 6.871106 4.889600 +v 12.582703 6.063362 5.981526 +v 5.773026 6.686305 2.607168 +v 3.201797 5.849199 4.169900 +v 12.792191 0.889391 12.645788 +v 13.122955 0.485925 7.109773 +v 13.036118 0.470424 10.376966 +v 9.778137 7.011183 4.844923 +v 12.242310 2.232897 11.596910 +v 4.591904 2.623234 1.837892 +v 6.965897 5.891960 8.427111 +v 10.582504 5.666675 0.537036 +v 13.038010 0.461612 3.812071 +v 7.250900 6.806380 2.104782 +v 3.281677 0.501716 9.145269 +v 5.779510 0.450998 10.011425 +v 4.435577 0.368009 11.786186 +v 2.365036 0.768992 10.816593 +v 3.820358 0.475414 10.552332 +v 7.620850 0.466295 7.819590 +v 9.728775 0.489447 9.011953 +v 7.977875 0.309415 10.895893 +v 7.808548 0.473047 9.445095 +v 9.758881 0.099039 12.053833 +v 8.354095 0.214270 13.207447 +v 6.601761 0.053829 12.591528 +v 8.214310 -0.000000 12.251451 +v 5.471054 0.602680 13.704420 +v 3.906906 0.732512 13.181210 +v 5.100830 0.354151 13.035069 +v 8.387604 6.976098 5.423723 +v 7.941666 6.772182 4.740101 +v 7.401413 6.857750 5.377075 +v 7.919571 6.770012 6.304348 +v 7.903305 6.886575 5.358107 +v 8.504883 6.949694 4.188953 +v 7.866714 6.788011 3.458713 +v 7.289993 6.762296 4.074819 +v 7.906799 6.742724 4.138806 +v 6.487503 6.911412 3.435889 +v 5.656250 6.872269 4.545883 +v 6.682556 6.856540 4.745914 +v 6.576874 6.915952 4.069520 +v 6.091797 6.822289 5.847553 +v 6.789871 6.683794 6.270440 +v 6.774994 6.825953 5.439320 +v 6.747864 0.924498 12.945242 +v 5.255463 2.404145 12.697449 +v 4.282837 1.348791 13.500860 +v 5.381470 1.257180 13.514801 +v 9.781189 0.896802 12.849562 +v 7.770309 2.138511 11.949570 +v 8.286057 0.842424 12.992561 +v 8.844193 3.448359 10.620947 +v 7.542511 4.859545 10.303495 +v 6.317825 3.930990 11.271046 +v 7.431610 3.682577 10.822678 +v 5.306427 4.593636 11.114706 +v 3.983398 3.694496 11.971079 +v 5.200241 3.754572 11.765720 +v 15.898575 1.585081 6.602746 +v 15.402832 2.709221 7.461617 +v 15.675446 1.610957 9.386007 +v 15.651932 0.829137 8.428211 +v 15.890579 1.650718 7.876707 +v 14.835083 3.777964 5.736346 +v 14.076004 4.802244 6.260142 +v 14.619736 3.874205 7.918070 +v 14.757385 3.797954 6.772626 +v 13.609100 4.655125 8.315205 +v 13.826797 3.711000 10.145084 +v 14.993103 2.624787 10.075855 +v 14.345016 3.767567 9.213770 +v 14.873062 1.671436 11.743353 +v 15.278763 0.884144 11.238096 +v 15.357895 1.610814 10.717756 +v 9.318771 1.527327 0.274374 +v 10.802094 2.531147 0.058646 +v 12.525360 1.534020 0.478419 +v 11.268509 0.779690 0.755907 +v 11.064743 1.522130 0.198589 +v 8.980042 3.567270 0.085097 +v 10.256165 4.454570 0.012769 +v 11.791138 3.573220 0.263505 +v 10.529510 3.561592 0.000000 +v 12.462006 4.479404 0.602080 +v 13.852081 3.601206 1.195305 +v 13.431931 2.557620 0.704632 +v 12.958755 3.587741 0.621320 +v 14.865433 1.584196 1.472079 +v 14.194382 0.835222 1.355945 +v 13.873810 1.554116 0.855787 +v 0.584869 0.823163 5.283864 +v 0.254898 1.637403 6.755287 +v 0.014633 2.660657 5.284850 +v 0.519516 1.710267 4.176413 +v 0.000000 1.640644 5.418880 +v 1.250198 0.846264 8.119787 +v 1.099564 1.568761 9.408146 +v 0.420517 2.632857 7.817162 +v 0.539352 1.538157 8.185659 +v 0.903976 3.906161 8.642197 +v 1.006577 4.887040 6.887860 +v 0.161499 3.839114 6.152977 +v 0.396652 3.883112 7.543559 +v 0.594299 4.695697 4.547854 +v 0.627625 3.799172 3.779563 +v 0.100204 3.811482 4.975526 +v 10.496353 6.930438 6.088005 +v 10.124252 6.366339 6.980728 +v 11.261581 5.922827 7.662249 +v 11.387024 6.436592 6.583135 +v 10.845413 6.359106 6.815646 +v 9.047363 6.914882 6.233262 +v 8.639999 6.491430 7.178588 +v 9.585449 6.049548 8.084337 +v 9.322235 6.454535 7.116115 +v 8.646500 5.701525 9.186874 +v 9.711472 4.786990 9.571941 +v 10.868484 5.439394 8.786140 +v 9.698212 5.667152 8.967319 +v 12.412979 4.677886 9.567299 +v 12.542953 5.375046 8.202257 +v 11.813110 5.399432 8.600248 +v 12.644699 5.155053 1.165754 +v 12.294785 5.691659 1.900922 +v 13.141129 5.181265 2.837493 +v 13.678452 4.518368 1.962682 +v 13.001343 5.167149 1.919005 +v 11.350082 6.148170 1.359130 +v 10.947189 6.503697 1.856288 +v 11.696335 6.180569 2.550365 +v 11.592880 6.164680 1.895138 +v 11.073685 6.536093 3.032212 +v 11.817703 6.283284 3.834581 +v 12.514877 5.729608 3.472824 +v 11.774124 6.220477 3.197479 +v 13.361313 5.344265 4.734517 +v 13.967163 4.635145 4.038112 +v 13.274307 5.227474 3.708121 +v 2.279205 5.298514 3.188752 +v 4.635117 5.796349 1.860945 +v 5.393005 5.216102 1.448998 +v 2.780487 4.589083 2.676640 +v 3.546875 5.253622 2.313312 +v 4.943329 6.314078 1.960611 +v 6.515076 6.508811 1.495946 +v 6.743332 6.161612 1.173581 +v 5.778595 6.189645 1.591998 +v 7.938721 6.493057 0.993388 +v 8.655640 6.129582 0.543764 +v 7.452240 5.667869 0.729027 +v 7.737747 6.141500 0.778303 +v 8.756271 5.122899 0.191348 +v 6.979919 4.492802 0.714058 +v 7.168564 5.150104 0.711102 +v 5.128174 6.365921 6.054083 +v 4.619766 6.069445 7.792367 +v 6.009232 6.518589 6.992254 +v 5.515350 6.454151 6.604459 +v 4.567993 6.413639 4.714563 +v 3.862808 5.996587 6.460988 +v 4.804108 6.382301 5.413139 +v 2.392670 5.620476 6.889831 +v 1.955978 4.805160 8.882536 +v 3.283020 5.539601 8.542118 +v 2.798676 5.544127 7.788210 +v 3.140549 4.719175 10.506342 +v 4.623764 5.402323 9.789455 +v 3.862000 5.618376 9.183434 +v 2.226151 0.935487 3.521129 +v 4.770111 0.543572 3.678498 +v 2.597061 0.554718 6.111100 +v 2.347839 0.622150 4.623110 +v 7.183716 0.814292 1.493032 +v 9.535873 0.483532 2.113494 +v 7.378311 0.463192 4.403725 +v 7.278564 0.507006 2.739513 +v 9.626846 0.459214 5.587419 +v 5.153015 0.473268 6.897858 +v 7.484055 0.463522 6.130911 +v 2.894821 0.527756 7.653494 +v 10.462601 6.494255 1.285473 +v 9.776520 6.662834 1.593027 +v 10.382401 6.670774 2.319239 +v 10.352020 6.640929 1.743425 +v 9.262054 6.498268 0.917046 +v 8.626328 6.750686 1.287887 +v 9.110031 6.835360 2.038595 +v 9.202362 6.683671 1.429759 +v 8.504272 6.829373 2.751054 +v 9.185822 6.933125 3.468597 +v 9.722824 6.843746 2.825782 +v 9.210098 6.842217 2.741370 +v 10.377670 6.807316 3.522372 +v 10.423508 6.695773 2.913950 +v 14.867722 2.582767 2.323853 +v 15.528305 1.583294 3.848393 +v 15.313873 0.852870 2.608853 +v 15.352509 1.578395 2.515429 +v 14.480576 3.699542 3.229316 +v 14.288437 3.612795 2.129534 +v 15.245422 2.632543 4.751156 +v 14.652725 3.753185 4.348422 +v 15.648132 0.824140 5.398070 +v 15.673004 1.592596 5.198339 +v 2.414093 1.495821 11.792572 +v 1.623505 2.560066 10.131315 +v 1.647232 1.553482 10.602236 +v 3.098816 2.522877 12.235512 +v 3.378693 1.452899 12.846834 +v 2.269302 3.712048 10.509155 +v 3.083786 3.648355 11.504372 +v 1.570801 3.659175 9.668137 +v 12.355652 6.054656 6.799221 +v 11.876175 6.633962 5.358164 +v 11.008209 6.876485 5.364192 +v 11.658142 6.590705 6.035973 +v 13.260971 5.466373 6.567767 +v 12.954422 5.368562 7.460561 +v 12.709335 6.006035 5.083133 +v 13.369797 5.472367 5.663161 +v 11.042313 6.687478 4.249641 +v 11.840805 6.329424 4.537813 +v 5.589401 6.802467 3.208477 +v 4.497971 6.394998 3.271093 +v 3.309708 5.887721 4.978582 +v 4.457428 6.440392 3.974753 +v 5.892059 6.587129 2.081658 +v 3.287979 5.830229 3.353920 +v 4.562790 6.378938 2.560463 +v 1.918900 5.610821 4.943246 +v 1.862854 5.334176 4.087988 +v 2.121887 5.655616 5.922024 +v 14.553360 0.480624 10.303553 +v 13.096252 0.488583 8.743492 +v 14.710846 0.481892 7.161406 +v 14.652359 0.501290 8.693630 +v 14.169815 0.902817 12.375971 +v 12.956024 0.565200 11.783831 +v 14.390411 0.599190 11.593140 +v 11.374420 0.610389 12.802872 +v 11.445007 0.500135 10.439827 +v 11.440231 0.391810 11.901363 +v 11.475037 0.478799 7.128298 +v 11.466721 0.496117 8.800894 +v 10.382645 6.879982 4.742915 +v 9.739883 7.056612 5.370390 +v 10.336533 7.052753 5.338011 +v 9.798019 6.906286 4.173771 +v 10.398209 6.806108 4.132079 +v 9.178726 6.921120 4.816900 +v 9.147095 6.949715 4.216448 +v 9.083786 7.079781 5.465271 +v 12.565674 1.418143 12.510487 +v 10.686768 1.893577 11.719786 +v 11.205338 0.971677 12.660427 +v 13.535477 2.492806 11.547749 +v 13.897766 1.679607 12.269434 +v 11.648621 3.394360 10.514769 +v 12.948761 3.613609 10.560902 +v 10.102890 3.351881 10.575327 +v 2.231613 2.674510 2.846735 +v 4.589920 1.611832 1.967909 +v 2.170197 1.667083 3.054579 +v 4.631760 3.654119 1.768277 +v 2.377090 3.705814 2.842407 +v 7.015152 2.571246 0.811410 +v 6.949936 3.601975 0.752251 +v 7.097000 1.561036 0.943327 +v 7.244171 6.291710 7.247332 +v 7.853760 5.889368 8.389477 +v 7.892563 6.443762 7.294308 +v 6.075485 5.874420 8.509310 +v 6.525909 6.443445 7.150808 +v 6.662201 5.324742 9.743322 +v 5.577118 5.392393 9.849800 +v 7.715851 5.424917 9.472204 +v 11.369232 5.669008 0.837091 +v 10.171814 6.150833 0.753508 +v 10.839035 6.150267 1.008000 +v 10.991638 5.129898 0.377511 +v 11.927170 5.142920 0.687892 +v 9.707642 5.647139 0.345074 +v 9.982224 5.119333 0.143343 +v 9.445908 6.130507 0.578442 +v 14.541428 0.503770 3.911794 +v 12.961472 0.493348 2.218374 +v 14.412445 0.548489 2.466182 +v 13.096497 0.474072 5.468771 +v 14.623093 0.521741 5.505207 +v 11.421173 0.450676 3.680412 +v 11.455780 0.463968 5.416595 +v 11.374252 0.481895 2.009458 +v 6.679276 6.725466 2.316883 +v 7.390533 6.654928 1.617236 +v 6.745117 6.664883 1.783874 +v 7.248367 6.721992 2.846163 +v 6.539871 6.807747 2.871987 +v 7.906784 6.752916 2.080644 +v 7.883682 6.832962 2.710276 +v 7.956558 6.677092 1.459753 +# 386 vertices + +vt 0.927570 0.745830 0.000000 +vt 0.928980 0.737600 0.000000 +vt 0.933600 0.737990 0.000000 +vt 0.932050 0.745470 0.000000 +vt 0.930400 0.729370 0.000000 +vt 0.935150 0.730500 0.000000 +vt 0.939900 0.731630 0.000000 +vt 0.938220 0.738370 0.000000 +vt 0.936530 0.745120 0.000000 +vt 0.931820 0.721140 0.000000 +vt 0.936700 0.723010 0.000000 +vt 0.933230 0.712910 0.000000 +vt 0.938250 0.715530 0.000000 +vt 0.943270 0.718150 0.000000 +vt 0.941580 0.724890 0.000000 +vt 0.946470 0.726760 0.000000 +vt 0.944650 0.732760 0.000000 +vt 0.948280 0.720760 0.000000 +vt 0.953300 0.723380 0.000000 +vt 0.951350 0.728640 0.000000 +vt 0.949400 0.733900 0.000000 +vt 0.942830 0.738760 0.000000 +vt 0.941020 0.744760 0.000000 +vt 0.947450 0.739150 0.000000 +vt 0.945500 0.744410 0.000000 +vt 0.926100 0.795940 0.000000 +vt 0.923430 0.796360 0.000000 +vt 0.922860 0.794510 0.000000 +vt 0.925550 0.794240 0.000000 +vt 0.920750 0.796780 0.000000 +vt 0.920170 0.794790 0.000000 +vt 0.919590 0.792800 0.000000 +vt 0.922290 0.792670 0.000000 +vt 0.925000 0.792530 0.000000 +vt 0.918080 0.797190 0.000000 +vt 0.917480 0.795060 0.000000 +vt 0.915400 0.797610 0.000000 +vt 0.914790 0.795340 0.000000 +vt 0.914180 0.793070 0.000000 +vt 0.916890 0.792930 0.000000 +vt 0.916290 0.790800 0.000000 +vt 0.919010 0.790810 0.000000 +vt 0.913570 0.790800 0.000000 +vt 0.912960 0.788520 0.000000 +vt 0.915690 0.788670 0.000000 +vt 0.918420 0.788830 0.000000 +vt 0.921730 0.790820 0.000000 +vt 0.924440 0.790830 0.000000 +vt 0.921160 0.788980 0.000000 +vt 0.923890 0.789130 0.000000 +vt 0.949780 0.747580 0.000000 +vt 0.946360 0.752870 0.000000 +vt 0.942300 0.749660 0.000000 +vt 0.954060 0.750760 0.000000 +vt 0.950430 0.756080 0.000000 +vt 0.946800 0.761400 0.000000 +vt 0.942950 0.758150 0.000000 +vt 0.939100 0.754910 0.000000 +vt 0.958340 0.753940 0.000000 +vt 0.954490 0.759290 0.000000 +vt 0.962610 0.757110 0.000000 +vt 0.958550 0.762500 0.000000 +vt 0.954490 0.767880 0.000000 +vt 0.950640 0.764640 0.000000 +vt 0.946800 0.769990 0.000000 +vt 0.943160 0.766710 0.000000 +vt 0.950430 0.773260 0.000000 +vt 0.946370 0.778650 0.000000 +vt 0.942950 0.775340 0.000000 +vt 0.939530 0.772030 0.000000 +vt 0.939530 0.763440 0.000000 +vt 0.935900 0.760170 0.000000 +vt 0.936110 0.768720 0.000000 +vt 0.932690 0.765420 0.000000 +vt 0.836320 0.761320 0.000000 +vt 0.840480 0.766150 0.000000 +vt 0.836460 0.768070 0.000000 +vt 0.832020 0.763410 0.000000 +vt 0.844640 0.770990 0.000000 +vt 0.840900 0.772730 0.000000 +vt 0.837150 0.774460 0.000000 +vt 0.832430 0.769980 0.000000 +vt 0.827710 0.765500 0.000000 +vt 0.848800 0.775820 0.000000 +vt 0.845330 0.777380 0.000000 +vt 0.852960 0.780660 0.000000 +vt 0.849770 0.782040 0.000000 +vt 0.846590 0.783430 0.000000 +vt 0.841870 0.778940 0.000000 +vt 0.838410 0.780500 0.000000 +vt 0.833410 0.776200 0.000000 +vt 0.843410 0.784810 0.000000 +vt 0.840230 0.786190 0.000000 +vt 0.834950 0.782060 0.000000 +vt 0.829670 0.777930 0.000000 +vt 0.828410 0.771890 0.000000 +vt 0.823410 0.767590 0.000000 +vt 0.824390 0.773810 0.000000 +vt 0.819100 0.769680 0.000000 +vt 0.873560 0.752600 0.000000 +vt 0.875310 0.758530 0.000000 +vt 0.870480 0.758880 0.000000 +vt 0.868410 0.753080 0.000000 +vt 0.877070 0.764460 0.000000 +vt 0.872550 0.764680 0.000000 +vt 0.868040 0.764890 0.000000 +vt 0.865650 0.759220 0.000000 +vt 0.863270 0.753550 0.000000 +vt 0.878830 0.770390 0.000000 +vt 0.874630 0.770480 0.000000 +vt 0.880580 0.776320 0.000000 +vt 0.876700 0.776280 0.000000 +vt 0.872820 0.776240 0.000000 +vt 0.870430 0.770570 0.000000 +vt 0.866230 0.770650 0.000000 +vt 0.863530 0.765110 0.000000 +vt 0.868930 0.776200 0.000000 +vt 0.865050 0.776160 0.000000 +vt 0.862030 0.770740 0.000000 +vt 0.859010 0.765330 0.000000 +vt 0.860820 0.759570 0.000000 +vt 0.858120 0.754030 0.000000 +vt 0.855990 0.759910 0.000000 +vt 0.852980 0.754500 0.000000 +vt 0.911170 0.745670 0.000000 +vt 0.915270 0.745710 0.000000 +vt 0.914710 0.750640 0.000000 +vt 0.910950 0.750620 0.000000 +vt 0.919370 0.745750 0.000000 +vt 0.918470 0.750670 0.000000 +vt 0.917570 0.755590 0.000000 +vt 0.914150 0.755570 0.000000 +vt 0.910730 0.755560 0.000000 +vt 0.923470 0.745790 0.000000 +vt 0.922220 0.750700 0.000000 +vt 0.925980 0.750720 0.000000 +vt 0.924400 0.755610 0.000000 +vt 0.920980 0.755600 0.000000 +vt 0.919740 0.760510 0.000000 +vt 0.916670 0.760500 0.000000 +vt 0.922820 0.760510 0.000000 +vt 0.921230 0.765400 0.000000 +vt 0.918500 0.765410 0.000000 +vt 0.915770 0.765420 0.000000 +vt 0.913590 0.760500 0.000000 +vt 0.910520 0.760500 0.000000 +vt 0.913030 0.765430 0.000000 +vt 0.910300 0.765440 0.000000 +vt 0.941680 0.797290 0.000000 +vt 0.939840 0.796070 0.000000 +vt 0.943980 0.793480 0.000000 +vt 0.946200 0.794990 0.000000 +vt 0.938000 0.794840 0.000000 +vt 0.941760 0.791970 0.000000 +vt 0.945530 0.789100 0.000000 +vt 0.948130 0.790890 0.000000 +vt 0.950730 0.792680 0.000000 +vt 0.936150 0.793610 0.000000 +vt 0.939550 0.790460 0.000000 +vt 0.934310 0.792380 0.000000 +vt 0.937330 0.788940 0.000000 +vt 0.940340 0.785510 0.000000 +vt 0.942940 0.787300 0.000000 +vt 0.946330 0.784150 0.000000 +vt 0.949300 0.786230 0.000000 +vt 0.943360 0.782080 0.000000 +vt 0.949720 0.781000 0.000000 +vt 0.953070 0.783360 0.000000 +vt 0.952280 0.788300 0.000000 +vt 0.955250 0.790380 0.000000 +vt 0.956420 0.785720 0.000000 +vt 0.959770 0.788070 0.000000 +vt 0.867620 0.779410 0.000000 +vt 0.864760 0.780460 0.000000 +vt 0.862030 0.777280 0.000000 +vt 0.870190 0.782670 0.000000 +vt 0.867500 0.783630 0.000000 +vt 0.864810 0.784600 0.000000 +vt 0.861900 0.781500 0.000000 +vt 0.859000 0.778410 0.000000 +vt 0.872760 0.785930 0.000000 +vt 0.870230 0.786810 0.000000 +vt 0.875330 0.789180 0.000000 +vt 0.872970 0.789980 0.000000 +vt 0.870610 0.790780 0.000000 +vt 0.867710 0.787690 0.000000 +vt 0.865190 0.788570 0.000000 +vt 0.862120 0.785560 0.000000 +vt 0.868260 0.791580 0.000000 +vt 0.865900 0.792380 0.000000 +vt 0.862660 0.789450 0.000000 +vt 0.859430 0.786520 0.000000 +vt 0.859050 0.782550 0.000000 +vt 0.855980 0.779540 0.000000 +vt 0.856190 0.783590 0.000000 +vt 0.908450 0.771560 0.000000 +vt 0.901980 0.773590 0.000000 +vt 0.902870 0.768160 0.000000 +vt 0.906590 0.777670 0.000000 +vt 0.901090 0.779020 0.000000 +vt 0.895590 0.780370 0.000000 +vt 0.895520 0.775620 0.000000 +vt 0.895440 0.770880 0.000000 +vt 0.904740 0.783790 0.000000 +vt 0.900200 0.784450 0.000000 +vt 0.902880 0.789900 0.000000 +vt 0.899310 0.789880 0.000000 +vt 0.895740 0.789850 0.000000 +vt 0.895670 0.785110 0.000000 +vt 0.891130 0.785770 0.000000 +vt 0.890090 0.781720 0.000000 +vt 0.892170 0.789830 0.000000 +vt 0.888600 0.789810 0.000000 +vt 0.886600 0.786440 0.000000 +vt 0.884590 0.783060 0.000000 +vt 0.889050 0.777660 0.000000 +vt 0.888010 0.773600 0.000000 +vt 0.882590 0.779690 0.000000 +vt 0.923330 0.783090 0.000000 +vt 0.926090 0.783200 0.000000 +vt 0.920560 0.782970 0.000000 +vt 0.922690 0.777120 0.000000 +vt 0.925490 0.777190 0.000000 +vt 0.928290 0.777270 0.000000 +vt 0.917790 0.782860 0.000000 +vt 0.915030 0.782740 0.000000 +vt 0.917100 0.776960 0.000000 +vt 0.919900 0.777040 0.000000 +vt 0.922000 0.771220 0.000000 +vt 0.924830 0.771260 0.000000 +vt 0.919160 0.771180 0.000000 +vt 0.924100 0.765400 0.000000 +vt 0.926960 0.765410 0.000000 +vt 0.927660 0.771300 0.000000 +vt 0.930490 0.771340 0.000000 +vt 0.929830 0.765410 0.000000 +vt 0.910750 0.735270 0.000000 +vt 0.915300 0.735850 0.000000 +vt 0.910320 0.724870 0.000000 +vt 0.915340 0.725990 0.000000 +vt 0.920360 0.727120 0.000000 +vt 0.919860 0.736440 0.000000 +vt 0.909900 0.714470 0.000000 +vt 0.915380 0.716130 0.000000 +vt 0.909480 0.704060 0.000000 +vt 0.915420 0.706280 0.000000 +vt 0.921360 0.708490 0.000000 +vt 0.920860 0.717800 0.000000 +vt 0.926340 0.719470 0.000000 +vt 0.925380 0.728240 0.000000 +vt 0.927290 0.710700 0.000000 +vt 0.924420 0.737020 0.000000 +vt 0.908640 0.806440 0.000000 +vt 0.907610 0.804540 0.000000 +vt 0.909740 0.804490 0.000000 +vt 0.910570 0.806480 0.000000 +vt 0.906580 0.802640 0.000000 +vt 0.908910 0.802510 0.000000 +vt 0.911230 0.802370 0.000000 +vt 0.911870 0.804440 0.000000 +vt 0.912500 0.806520 0.000000 +vt 0.905550 0.800740 0.000000 +vt 0.908070 0.800520 0.000000 +vt 0.904520 0.798840 0.000000 +vt 0.907240 0.798540 0.000000 +vt 0.909960 0.798230 0.000000 +vt 0.910600 0.800300 0.000000 +vt 0.913120 0.800080 0.000000 +vt 0.913560 0.802240 0.000000 +vt 0.912680 0.797920 0.000000 +vt 0.915640 0.799860 0.000000 +vt 0.915880 0.802100 0.000000 +vt 0.913990 0.804400 0.000000 +vt 0.914430 0.806560 0.000000 +vt 0.916120 0.804350 0.000000 +vt 0.916360 0.806600 0.000000 +vt 0.852120 0.761470 0.000000 +vt 0.848810 0.756200 0.000000 +vt 0.855420 0.766740 0.000000 +vt 0.851830 0.768160 0.000000 +vt 0.848240 0.763030 0.000000 +vt 0.844650 0.757910 0.000000 +vt 0.858720 0.772010 0.000000 +vt 0.855410 0.773280 0.000000 +vt 0.852110 0.774550 0.000000 +vt 0.848230 0.769570 0.000000 +vt 0.844360 0.764590 0.000000 +vt 0.840490 0.759610 0.000000 +vt 0.930060 0.750460 0.000000 +vt 0.934140 0.750190 0.000000 +vt 0.931750 0.755260 0.000000 +vt 0.928070 0.755440 0.000000 +vt 0.938220 0.749930 0.000000 +vt 0.935420 0.755090 0.000000 +vt 0.932630 0.760250 0.000000 +vt 0.929360 0.760340 0.000000 +vt 0.926090 0.760420 0.000000 +vt 0.858260 0.795620 0.000000 +vt 0.853750 0.793260 0.000000 +vt 0.855980 0.792310 0.000000 +vt 0.860170 0.794810 0.000000 +vt 0.849240 0.790910 0.000000 +vt 0.851790 0.789810 0.000000 +vt 0.854340 0.788710 0.000000 +vt 0.858210 0.791360 0.000000 +vt 0.862080 0.794000 0.000000 +vt 0.844740 0.788550 0.000000 +vt 0.847600 0.787310 0.000000 +vt 0.850460 0.786070 0.000000 +vt 0.853330 0.784830 0.000000 +vt 0.856880 0.787620 0.000000 +vt 0.860430 0.790400 0.000000 +vt 0.863990 0.793190 0.000000 +vt 0.910440 0.788870 0.000000 +vt 0.912450 0.783000 0.000000 +vt 0.907920 0.789210 0.000000 +vt 0.909880 0.783260 0.000000 +vt 0.911840 0.777320 0.000000 +vt 0.914470 0.777140 0.000000 +vt 0.905400 0.789560 0.000000 +vt 0.907310 0.783530 0.000000 +vt 0.909220 0.777490 0.000000 +vt 0.911130 0.771460 0.000000 +vt 0.913810 0.771370 0.000000 +vt 0.916480 0.771280 0.000000 +vt 0.943070 0.691010 0.000000 +vt 0.947420 0.693590 0.000000 +vt 0.945130 0.699080 0.000000 +vt 0.940610 0.696490 0.000000 +vt 0.951770 0.696170 0.000000 +vt 0.949640 0.701670 0.000000 +vt 0.947520 0.707160 0.000000 +vt 0.942830 0.704560 0.000000 +vt 0.938150 0.701960 0.000000 +vt 0.956120 0.698750 0.000000 +vt 0.954160 0.704250 0.000000 +vt 0.960470 0.701330 0.000000 +vt 0.958680 0.706840 0.000000 +vt 0.956890 0.712360 0.000000 +vt 0.952200 0.709760 0.000000 +vt 0.950240 0.715260 0.000000 +vt 0.945390 0.712650 0.000000 +vt 0.955090 0.717870 0.000000 +vt 0.940540 0.710040 0.000000 +vt 0.935690 0.707430 0.000000 +vt 0.924080 0.804880 0.000000 +vt 0.922150 0.805310 0.000000 +vt 0.922470 0.803070 0.000000 +vt 0.924590 0.802650 0.000000 +vt 0.920220 0.805740 0.000000 +vt 0.920350 0.803500 0.000000 +vt 0.920490 0.801260 0.000000 +vt 0.922790 0.800830 0.000000 +vt 0.925090 0.800410 0.000000 +vt 0.918290 0.806170 0.000000 +vt 0.918240 0.803920 0.000000 +vt 0.918180 0.801680 0.000000 +vt 0.918130 0.799440 0.000000 +vt 0.920620 0.799020 0.000000 +vt 0.923110 0.798600 0.000000 +vt 0.925600 0.798180 0.000000 +vt 0.967260 0.760630 0.000000 +vt 0.962880 0.765720 0.000000 +vt 0.971910 0.764140 0.000000 +vt 0.967200 0.768950 0.000000 +vt 0.962490 0.773750 0.000000 +vt 0.958490 0.770820 0.000000 +vt 0.976560 0.767660 0.000000 +vt 0.971520 0.772170 0.000000 +vt 0.981210 0.771170 0.000000 +vt 0.975850 0.775400 0.000000 +vt 0.970490 0.779620 0.000000 +vt 0.966490 0.776690 0.000000 +vt 0.961450 0.781200 0.000000 +vt 0.957780 0.778550 0.000000 +vt 0.965130 0.783850 0.000000 +vt 0.954110 0.775910 0.000000 +vt 0.902040 0.752600 0.000000 +vt 0.901760 0.747410 0.000000 +vt 0.902320 0.757780 0.000000 +vt 0.893900 0.760010 0.000000 +vt 0.893130 0.754570 0.000000 +vt 0.892360 0.749140 0.000000 +vt 0.902590 0.762970 0.000000 +vt 0.894670 0.765450 0.000000 +vt 0.886750 0.767920 0.000000 +vt 0.885480 0.762230 0.000000 +vt 0.884220 0.756550 0.000000 +vt 0.882960 0.750870 0.000000 +vt 0.931710 0.791560 0.000000 +vt 0.934520 0.787510 0.000000 +vt 0.929100 0.790750 0.000000 +vt 0.931710 0.786070 0.000000 +vt 0.934320 0.781390 0.000000 +vt 0.937330 0.783450 0.000000 +vt 0.926500 0.789940 0.000000 +vt 0.928900 0.784640 0.000000 +vt 0.931310 0.779330 0.000000 +vt 0.933710 0.774030 0.000000 +vt 0.936930 0.776710 0.000000 +vt 0.940140 0.779400 0.000000 +vt 0.876220 0.786050 0.000000 +vt 0.878650 0.789340 0.000000 +vt 0.873790 0.782770 0.000000 +vt 0.877390 0.782870 0.000000 +vt 0.879680 0.786180 0.000000 +vt 0.881960 0.789500 0.000000 +vt 0.871360 0.779480 0.000000 +vt 0.875100 0.779550 0.000000 +vt 0.878840 0.779620 0.000000 +vt 0.880990 0.782960 0.000000 +vt 0.883140 0.786310 0.000000 +vt 0.885280 0.789650 0.000000 +vt 0.923330 0.684750 0.000000 +vt 0.928260 0.686310 0.000000 +vt 0.925050 0.691300 0.000000 +vt 0.919870 0.689580 0.000000 +vt 0.933200 0.687880 0.000000 +vt 0.930240 0.693030 0.000000 +vt 0.927280 0.698180 0.000000 +vt 0.921840 0.696290 0.000000 +vt 0.916410 0.694400 0.000000 +vt 0.938130 0.689450 0.000000 +vt 0.935420 0.694760 0.000000 +vt 0.932710 0.700070 0.000000 +vt 0.930000 0.705380 0.000000 +vt 0.924320 0.703330 0.000000 +vt 0.918630 0.701280 0.000000 +vt 0.912950 0.699230 0.000000 +vt 0.905860 0.791800 0.000000 +vt 0.903290 0.792140 0.000000 +vt 0.908430 0.791470 0.000000 +vt 0.908940 0.793720 0.000000 +vt 0.906320 0.794050 0.000000 +vt 0.903700 0.794370 0.000000 +vt 0.911000 0.791130 0.000000 +vt 0.911560 0.793390 0.000000 +vt 0.912120 0.795660 0.000000 +vt 0.909450 0.795970 0.000000 +vt 0.906780 0.796290 0.000000 +vt 0.904110 0.796610 0.000000 +# 441 texture coords + +g rocksCombined004 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj.meta new file mode 100644 index 0000000..2794912 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined004.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: b38c8cc99ce4d54498d04b88ea3d5ede +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined004 + 100002: //RootNode + 400000: rocksCombined004 + 400002: //RootNode + 2300000: rocksCombined004 + 3300000: rocksCombined004 + 4300000: rocksCombined004 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj new file mode 100644 index 0000000..92d933c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:43 + +mtllib rocksCombined005.mtl + +# +# object rocksCombined005 +# + +v 4.852905 0.725120 14.633221 +v 15.446793 0.712742 14.604183 +v 1.595123 0.689460 1.880581 +v 12.031067 0.698042 1.847576 +v 3.830750 6.646486 6.450359 +v 8.397186 6.281476 6.417709 +v 3.333282 6.204822 1.566845 +v 7.964249 6.349007 1.470650 +v 13.638351 4.283173 11.675095 +v 4.668793 5.125414 11.404663 +v 10.681229 4.229728 1.028397 +v 2.132004 4.190146 1.295685 +v 0.760788 0.361012 7.494869 +v 13.003006 0.551389 7.362209 +v 8.257538 6.579521 3.900040 +v 2.615677 6.618942 3.650272 +v 11.901047 4.602710 5.464985 +v 0.893372 4.565493 5.669800 +v 6.863419 0.472285 0.757133 +v 10.397049 0.630120 15.686825 +v 6.151108 6.432726 6.569393 +v 5.646606 6.239403 0.958981 +v 9.580963 5.433914 13.092197 +v 6.236710 4.146526 0.007641 +v 7.211548 0.174953 7.493210 +v 5.499832 6.876140 3.660088 +v 3.766022 0.173633 7.499496 +v 8.860504 0.220013 12.030453 +v 7.358826 0.570083 15.422691 +v 2.597809 0.433343 11.325577 +v 5.564392 0.187713 11.880653 +v 5.708664 6.733891 5.062607 +v 4.370514 6.756174 3.571133 +v 3.230179 6.831844 5.270294 +v 4.818329 6.596945 6.418297 +v 4.400955 6.905136 5.017616 +v 10.349319 2.541908 15.339710 +v 7.340393 4.741914 12.813766 +v 4.845139 2.568745 13.813412 +v 7.618240 2.514497 14.973125 +v 12.869415 2.398183 6.567879 +v 12.740753 4.180202 8.680473 +v 15.015442 2.394773 13.647030 +v 14.485413 0.541196 11.467506 +v 14.050369 2.287471 10.276371 +v 6.581268 2.223506 0.054173 +v 8.419357 4.185565 0.342461 +v 11.681366 2.214264 1.195190 +v 9.854614 0.492049 1.185150 +v 9.212646 2.243003 0.497299 +v 0.871506 0.416167 4.075947 +v 0.146210 2.175916 6.500965 +v 1.223434 4.194297 3.005646 +v 1.672394 2.265252 1.472794 +v 0.665207 2.183359 3.633018 +v 7.245331 6.448004 6.480724 +v 7.982468 5.907875 9.619389 +v 12.057419 4.853841 12.763634 +v 10.900223 5.616859 8.632942 +v 9.578537 5.810005 9.291840 +v 9.156326 5.550807 1.257133 +v 8.159821 6.508276 2.684723 +v 10.055115 5.953786 4.611668 +v 11.636856 4.445003 2.752396 +v 9.835571 5.777313 2.917393 +v 2.716034 5.409225 1.335293 +v 4.440353 6.294419 1.114594 +v 5.939117 5.347425 0.381039 +v 4.043365 4.166733 0.426613 +v 4.276840 5.357427 0.725357 +v 1.801788 5.673872 4.582333 +v 2.622192 4.822323 9.009308 +v 4.394440 5.966654 8.904446 +v 2.630371 6.117620 7.097691 +v 3.856415 0.491127 1.185150 +v 6.900940 0.144200 3.742157 +v 3.622696 0.156476 3.977825 +v 6.879776 6.233112 1.227097 +v 5.538025 6.613505 2.202934 +v 6.868118 6.835545 3.782604 +v 6.764832 6.582057 2.463509 +v 12.606506 0.504539 4.099400 +v 12.525269 2.595072 3.231300 +v 2.357285 2.295035 10.229809 +v 8.331223 6.547342 5.201679 +v 10.602997 5.804292 6.787907 +v 3.032013 6.379408 2.455196 +v 2.112137 5.540518 2.572788 +v 13.426529 0.576089 15.418907 +v 10.497787 0.185097 7.508907 +v 12.044525 0.207371 11.882397 +v 6.805618 6.641842 4.994637 +v 12.989853 2.630944 14.861546 +v 3.949783 2.243219 0.497871 +v 6.098145 5.987766 9.285870 +v 7.580902 5.515178 0.634914 +v 10.099915 0.101683 3.955086 +v 4.345810 6.589193 2.256809 +v 1.969437 0.061913 7.484371 +v 4.520111 0.184617 9.615902 +v 3.844910 0.216911 11.660240 +v 1.499771 0.392435 9.379021 +v 2.735504 0.104131 9.498985 +v 5.505676 0.174819 7.497952 +v 7.910645 0.196143 9.688190 +v 7.230087 0.213867 11.983833 +v 6.228500 0.193238 9.665779 +v 9.773300 0.291548 14.258266 +v 8.725357 0.529506 15.691269 +v 6.605988 0.247490 14.036995 +v 8.087448 0.208544 14.186909 +v 5.893356 0.552994 15.163845 +v 3.853760 0.540543 13.464840 +v 5.103714 0.283908 13.821640 +v 5.786148 6.624347 5.673203 +v 5.137177 6.867896 5.110241 +v 4.539581 6.763820 5.640465 +v 5.500610 6.484769 6.622528 +v 5.211517 6.641873 5.668800 +v 5.563751 6.853213 4.400455 +v 4.918137 6.664407 3.576645 +v 4.257584 6.899010 4.246483 +v 4.989655 6.727352 4.327610 +v 3.482193 6.935604 3.572163 +v 2.867691 6.829330 4.361691 +v 3.676880 7.052965 4.970539 +v 3.526230 7.010892 4.303543 +v 3.424149 6.719628 5.817642 +v 4.242905 6.588661 6.394657 +v 3.929474 6.746995 5.556396 +v 7.674911 1.338402 15.492664 +v 6.280121 2.593217 14.695667 +v 4.892990 1.338095 14.452999 +v 6.242447 1.291135 15.228817 +v 10.552750 1.407153 15.816486 +v 8.986969 2.596404 15.238457 +v 9.048981 1.376702 15.749928 +v 10.230438 4.227908 14.646259 +v 8.466965 5.056409 12.927387 +v 7.571503 3.991421 14.073246 +v 8.919235 3.978710 14.325195 +v 6.065323 4.967750 12.444370 +v 4.713150 3.942204 12.776562 +v 6.425278 3.917922 13.789772 +v 13.180801 1.228570 7.035130 +v 13.298523 2.277212 8.295193 +v 14.534531 1.284606 10.946125 +v 13.687805 0.494859 9.311207 +v 13.770569 1.222607 8.857540 +v 12.532867 3.748254 6.078465 +v 12.208344 4.422043 7.083633 +v 13.512695 3.285899 9.485714 +v 12.853882 3.334129 7.752201 +v 13.436356 4.177673 10.383423 +v 14.553741 3.515719 12.693977 +v 14.809250 2.320710 12.167881 +v 14.388519 3.248005 11.290340 +v 15.467804 1.304973 14.395126 +v 15.233276 0.567673 13.475750 +v 15.288940 1.283649 12.930687 +v 6.745270 1.214537 0.191803 +v 7.897003 2.229661 0.192860 +v 9.572220 1.234530 0.644329 +v 8.360550 0.478421 0.890751 +v 8.158981 1.220699 0.333103 +v 6.410706 3.254027 -0.000000 +v 7.331238 4.151961 0.110435 +v 8.794464 3.308537 0.328850 +v 7.623672 3.259842 0.133030 +v 9.502609 4.236310 0.590355 +v 11.082001 3.353470 1.079700 +v 10.467972 2.305578 0.741409 +v 9.991425 3.368874 0.549248 +v 11.944199 1.305166 1.554592 +v 11.297455 0.449520 1.450024 +v 10.951965 1.209972 0.950237 +v 1.233673 0.545335 2.767776 +v 0.476181 1.146008 3.921021 +v 1.105011 2.270615 2.479691 +v 1.529846 1.284930 1.642460 +v 0.955536 1.273436 2.679226 +v 0.392410 0.183151 5.687954 +v 0.034790 1.006838 7.067410 +v 0.014938 2.086443 5.043911 +v 0.000000 0.982048 5.522087 +v 0.464279 3.519613 6.063553 +v 0.769760 4.356910 4.136135 +v 0.863037 3.256203 3.252995 +v 0.436127 3.322120 4.594028 +v 1.517624 4.199476 2.034866 +v 1.875443 3.296004 1.343204 +v 1.316055 3.297806 2.233685 +v 7.914566 6.396998 6.395657 +v 8.293152 6.003164 7.864952 +v 10.452835 5.614788 9.197159 +v 9.357346 6.035794 7.360336 +v 8.943146 5.972804 7.697971 +v 6.750153 6.432949 6.547771 +v 7.040466 6.303190 7.866623 +v 8.806946 5.858410 9.512196 +v 7.667938 6.107542 7.865078 +v 8.948410 5.823679 11.409634 +v 11.001419 5.509199 13.029438 +v 10.952332 5.521337 11.147812 +v 9.992737 5.973328 11.373913 +v 13.182373 4.452733 12.373798 +v 12.383209 5.197593 10.058456 +v 11.910126 5.256587 10.659782 +v 10.031616 5.067600 1.042721 +v 9.597580 5.690755 1.984432 +v 10.579102 5.158065 2.928246 +v 11.131485 4.352560 1.900208 +v 10.293915 5.116162 1.928288 +v 8.437103 6.002724 1.374168 +v 8.120605 6.501009 2.137188 +v 8.980301 6.216854 2.760864 +v 8.806427 6.086498 2.071518 +v 8.182693 6.556433 3.193909 +v 9.032211 6.336398 4.204121 +v 9.904861 5.878684 3.727131 +v 9.012283 6.245771 3.480980 +v 11.039444 5.365796 5.031342 +v 11.648712 4.567107 4.035885 +v 10.838287 5.291042 3.852692 +v 2.429153 4.856813 1.305725 +v 3.471756 5.388271 0.924515 +v 4.146805 4.830765 0.542564 +v 2.978241 4.179759 0.759464 +v 3.206268 4.846753 0.826935 +v 3.027863 5.918929 1.434986 +v 3.829269 6.244608 1.398766 +v 4.301239 5.884370 0.888039 +v 3.591263 5.903050 1.114235 +v 5.035065 6.236603 1.033478 +v 5.753403 5.903789 0.609035 +v 5.122238 5.351564 0.463150 +v 5.048798 5.869037 0.661240 +v 6.050598 4.819576 0.124245 +v 5.144791 4.153636 0.148270 +v 5.119385 4.818594 0.284073 +v 2.779724 6.485657 6.081833 +v 3.455185 5.996930 8.159794 +v 3.877350 6.411008 7.425739 +v 3.279404 6.549842 6.866108 +v 2.268982 6.267525 4.070461 +v 2.108078 5.936042 5.839111 +v 2.356430 6.551311 4.949371 +v 1.215561 5.363932 5.214561 +v 1.552750 4.829005 7.300507 +v 2.599945 5.685645 8.135784 +v 1.772568 5.616096 6.654778 +v 3.715851 4.764280 10.433342 +v 4.750961 5.544432 10.206059 +v 3.700424 5.575608 9.492256 +v 2.446716 0.536476 1.524483 +v 3.752655 0.191098 2.384338 +v 2.021576 0.081487 4.030525 +v 2.244934 0.200496 2.596470 +v 5.361389 0.477971 0.890751 +v 6.905121 0.174889 2.035809 +v 5.270630 0.147528 3.815826 +v 5.333496 0.179572 2.144588 +v 6.930862 0.158235 5.543999 +v 3.540985 0.166483 5.664059 +v 5.248337 0.160070 5.581390 +v 1.842987 0.142425 5.718479 +v 7.435272 6.312946 1.341190 +v 6.727173 6.481252 1.765450 +v 7.446335 6.687023 2.606468 +v 7.384430 6.639325 1.977821 +v 6.281693 6.227051 1.072830 +v 5.477142 6.564019 1.516140 +v 6.115738 6.572953 2.310284 +v 6.046356 6.542315 1.567787 +v 5.531021 6.693444 2.984192 +v 6.163132 6.867809 3.710289 +v 6.760590 6.686525 3.097385 +v 6.124557 6.651930 3.016544 +v 7.518967 6.689528 3.694794 +v 7.499374 6.689751 3.185154 +v 12.220612 2.392792 2.134003 +v 12.714447 1.290360 3.885929 +v 12.391525 0.553263 2.723515 +v 12.471344 1.365445 2.538395 +v 12.224838 3.460955 2.848560 +v 11.867447 3.437799 1.789429 +v 12.889679 2.707880 4.803600 +v 12.333130 3.738482 4.277206 +v 12.837219 0.413220 5.679913 +v 13.048859 1.190282 5.293163 +v 2.283432 1.201686 10.845860 +v 0.821289 2.377671 8.505440 +v 0.829926 1.152200 9.095577 +v 3.178680 2.234483 12.042049 +v 3.512970 1.247147 12.862114 +v 2.398849 3.608901 9.625160 +v 3.519089 3.559289 11.190762 +v 1.188217 3.679944 7.897758 +v 10.861206 5.591077 7.766785 +v 9.322205 6.257069 5.854877 +v 8.279282 6.435256 5.811287 +v 9.409637 6.225618 6.711067 +v 11.720978 4.942438 7.758614 +v 12.304733 5.121426 8.837730 +v 10.333923 5.950311 5.726089 +v 11.343063 5.248154 6.334213 +v 8.275299 6.531478 4.596844 +v 9.158890 6.280544 4.978580 +v 2.681641 6.552258 2.790001 +v 2.492203 6.125372 2.295258 +v 1.679749 5.607858 3.466667 +v 2.176498 6.172627 3.122650 +v 3.274887 6.275366 1.956680 +v 2.278442 5.518366 1.828480 +v 2.869293 6.027876 1.798428 +v 1.591446 4.936607 2.783119 +v 1.863983 4.872244 2.010113 +v 1.167892 5.085198 3.747040 +v 13.535049 0.241366 11.747322 +v 11.163895 0.197086 9.615932 +v 12.033875 0.229133 7.505035 +v 12.681961 0.240852 9.539516 +v 14.797348 0.584261 15.119053 +v 12.903671 0.263516 14.034611 +v 14.346207 0.287363 13.837006 +v 11.673599 0.693145 15.755356 +v 10.461380 0.216564 11.984261 +v 11.252640 0.279059 14.202362 +v 8.868652 0.179318 7.497753 +v 9.550140 0.197175 9.665607 +v 7.504486 6.632394 4.908295 +v 6.836288 6.714122 5.686855 +v 7.481995 6.552752 5.522518 +v 6.871918 6.714522 4.311069 +v 7.557617 6.559669 4.357578 +v 6.304230 6.771188 5.145992 +v 6.138947 6.810071 4.349319 +v 6.278488 6.660472 5.726948 +v 13.267395 1.480047 15.649376 +v 11.877228 2.542959 15.199696 +v 11.897369 1.460196 15.868690 +v 14.307480 2.458694 14.428360 +v 14.715805 1.422703 15.215904 +v 12.721054 3.851296 13.848804 +v 13.972961 3.661908 13.396511 +v 11.539658 4.208398 14.471226 +v 2.677902 2.255313 0.863811 +v 3.916214 1.234344 0.644199 +v 2.560669 1.255251 1.023609 +v 3.983322 3.273521 0.428871 +v 2.810852 3.286768 0.784386 +v 5.265503 2.229668 0.192833 +v 5.196991 3.260165 0.134029 +v 5.330948 1.220641 0.333103 +v 5.647263 6.427916 7.845200 +v 6.949463 5.809610 9.741337 +v 6.352188 6.334296 7.888847 +v 5.298782 5.974167 9.140469 +v 4.797684 6.344311 7.706909 +v 6.741470 5.469906 11.265175 +v 5.762146 5.430248 10.833374 +v 7.720261 5.612321 11.455494 +v 8.442932 5.523927 0.896549 +v 7.143478 5.928071 0.868328 +v 7.869644 5.929425 1.099854 +v 8.010956 4.849298 0.445152 +v 9.008286 4.929230 0.707329 +v 6.695709 5.435726 0.408932 +v 7.047333 4.822023 0.250690 +v 6.464233 5.918188 0.712273 +v 11.705078 0.029651 4.063976 +v 10.008087 0.187818 2.376343 +v 11.494232 0.194872 2.591125 +v 10.193329 0.144359 5.660374 +v 11.850372 0.000000 5.723133 +v 8.501816 0.150231 3.815800 +v 8.570358 0.164009 5.581406 +v 8.461380 0.180982 2.144558 +v 3.620834 6.582308 2.326107 +v 4.405365 6.483867 1.648399 +v 3.859833 6.383666 1.861328 +v 4.466385 6.727537 2.934273 +v 3.620560 6.639400 2.958084 +v 5.108383 6.750751 2.180580 +v 5.039551 6.767615 2.929131 +v 4.912674 6.529550 1.572971 +# 386 vertices + +vt 0.744620 0.466860 0.000000 +vt 0.745280 0.461640 0.000000 +vt 0.751570 0.459240 0.000000 +vt 0.750690 0.464410 0.000000 +vt 0.745930 0.456430 0.000000 +vt 0.752440 0.454060 0.000000 +vt 0.758950 0.451690 0.000000 +vt 0.757860 0.456830 0.000000 +vt 0.756760 0.461970 0.000000 +vt 0.746580 0.451210 0.000000 +vt 0.753320 0.448880 0.000000 +vt 0.747230 0.445990 0.000000 +vt 0.754190 0.443710 0.000000 +vt 0.761150 0.441420 0.000000 +vt 0.760050 0.446560 0.000000 +vt 0.766790 0.444230 0.000000 +vt 0.765470 0.449330 0.000000 +vt 0.768110 0.439140 0.000000 +vt 0.775070 0.436860 0.000000 +vt 0.773530 0.441910 0.000000 +vt 0.771980 0.446960 0.000000 +vt 0.764150 0.454420 0.000000 +vt 0.762820 0.459520 0.000000 +vt 0.770430 0.452020 0.000000 +vt 0.768890 0.457070 0.000000 +vt 0.749130 0.501030 0.000000 +vt 0.746850 0.501140 0.000000 +vt 0.746500 0.499450 0.000000 +vt 0.748780 0.499460 0.000000 +vt 0.744570 0.501250 0.000000 +vt 0.744230 0.499450 0.000000 +vt 0.743880 0.497640 0.000000 +vt 0.746160 0.497760 0.000000 +vt 0.748440 0.497880 0.000000 +vt 0.742290 0.501360 0.000000 +vt 0.741950 0.499440 0.000000 +vt 0.740010 0.501470 0.000000 +vt 0.739670 0.499440 0.000000 +vt 0.739330 0.497400 0.000000 +vt 0.741600 0.497520 0.000000 +vt 0.741260 0.495600 0.000000 +vt 0.743540 0.495830 0.000000 +vt 0.738990 0.495360 0.000000 +vt 0.738650 0.493330 0.000000 +vt 0.740920 0.493680 0.000000 +vt 0.743190 0.494030 0.000000 +vt 0.745810 0.496070 0.000000 +vt 0.748090 0.496300 0.000000 +vt 0.745470 0.494370 0.000000 +vt 0.747740 0.494720 0.000000 +vt 0.773380 0.457760 0.000000 +vt 0.772280 0.463180 0.000000 +vt 0.768090 0.462550 0.000000 +vt 0.777870 0.458460 0.000000 +vt 0.776460 0.463810 0.000000 +vt 0.775050 0.469150 0.000000 +vt 0.771170 0.468600 0.000000 +vt 0.767290 0.468040 0.000000 +vt 0.782350 0.459150 0.000000 +vt 0.780640 0.464430 0.000000 +vt 0.786840 0.459850 0.000000 +vt 0.784830 0.465060 0.000000 +vt 0.782810 0.470270 0.000000 +vt 0.778930 0.469710 0.000000 +vt 0.777220 0.474990 0.000000 +vt 0.773650 0.474500 0.000000 +vt 0.780790 0.475480 0.000000 +vt 0.778780 0.480690 0.000000 +vt 0.775510 0.480270 0.000000 +vt 0.772240 0.479850 0.000000 +vt 0.770070 0.474010 0.000000 +vt 0.766500 0.473520 0.000000 +vt 0.768970 0.479430 0.000000 +vt 0.765700 0.479010 0.000000 +vt 0.685530 0.457490 0.000000 +vt 0.686840 0.462990 0.000000 +vt 0.680700 0.461410 0.000000 +vt 0.679190 0.455940 0.000000 +vt 0.688150 0.468500 0.000000 +vt 0.682210 0.466890 0.000000 +vt 0.676270 0.465280 0.000000 +vt 0.674560 0.459840 0.000000 +vt 0.672840 0.454390 0.000000 +vt 0.689460 0.474000 0.000000 +vt 0.683720 0.472360 0.000000 +vt 0.690780 0.479500 0.000000 +vt 0.685240 0.477840 0.000000 +vt 0.679700 0.476170 0.000000 +vt 0.677980 0.470730 0.000000 +vt 0.672240 0.469090 0.000000 +vt 0.670330 0.463680 0.000000 +vt 0.674160 0.474510 0.000000 +vt 0.668620 0.472840 0.000000 +vt 0.666500 0.467460 0.000000 +vt 0.664390 0.462070 0.000000 +vt 0.668410 0.458260 0.000000 +vt 0.666500 0.452840 0.000000 +vt 0.662270 0.456680 0.000000 +vt 0.660160 0.451290 0.000000 +vt 0.716260 0.463480 0.000000 +vt 0.716080 0.468510 0.000000 +vt 0.712200 0.467290 0.000000 +vt 0.712180 0.462210 0.000000 +vt 0.715910 0.473530 0.000000 +vt 0.712220 0.472360 0.000000 +vt 0.708530 0.471200 0.000000 +vt 0.708320 0.466070 0.000000 +vt 0.708110 0.460940 0.000000 +vt 0.715740 0.478550 0.000000 +vt 0.712240 0.477440 0.000000 +vt 0.715570 0.483570 0.000000 +vt 0.712260 0.482510 0.000000 +vt 0.708940 0.481460 0.000000 +vt 0.708730 0.476330 0.000000 +vt 0.705230 0.475220 0.000000 +vt 0.704830 0.470040 0.000000 +vt 0.705620 0.480400 0.000000 +vt 0.702310 0.479340 0.000000 +vt 0.701720 0.474100 0.000000 +vt 0.701140 0.468870 0.000000 +vt 0.704440 0.464850 0.000000 +vt 0.704040 0.459670 0.000000 +vt 0.700550 0.463640 0.000000 +vt 0.699970 0.458400 0.000000 +vt 0.731220 0.465780 0.000000 +vt 0.734570 0.466050 0.000000 +vt 0.733860 0.470490 0.000000 +vt 0.730560 0.470370 0.000000 +vt 0.737920 0.466320 0.000000 +vt 0.737160 0.470620 0.000000 +vt 0.736390 0.474910 0.000000 +vt 0.733150 0.474930 0.000000 +vt 0.729900 0.474960 0.000000 +vt 0.741270 0.466590 0.000000 +vt 0.740460 0.470740 0.000000 +vt 0.743750 0.470860 0.000000 +vt 0.742880 0.474870 0.000000 +vt 0.739640 0.474890 0.000000 +vt 0.738820 0.479040 0.000000 +vt 0.735630 0.479210 0.000000 +vt 0.742010 0.478870 0.000000 +vt 0.741140 0.482870 0.000000 +vt 0.738000 0.483190 0.000000 +vt 0.734860 0.483500 0.000000 +vt 0.732440 0.479380 0.000000 +vt 0.729240 0.479550 0.000000 +vt 0.731720 0.483820 0.000000 +vt 0.728580 0.484130 0.000000 +vt 0.765260 0.500520 0.000000 +vt 0.763350 0.499740 0.000000 +vt 0.769690 0.495770 0.000000 +vt 0.771950 0.496610 0.000000 +vt 0.761440 0.498960 0.000000 +vt 0.767430 0.494920 0.000000 +vt 0.773430 0.490880 0.000000 +vt 0.776040 0.491790 0.000000 +vt 0.778650 0.492710 0.000000 +vt 0.759530 0.498170 0.000000 +vt 0.765170 0.494070 0.000000 +vt 0.757620 0.497390 0.000000 +vt 0.762910 0.493220 0.000000 +vt 0.768200 0.489040 0.000000 +vt 0.770810 0.489960 0.000000 +vt 0.776450 0.485850 0.000000 +vt 0.779420 0.486840 0.000000 +vt 0.773490 0.484860 0.000000 +vt 0.782090 0.481740 0.000000 +vt 0.785410 0.482800 0.000000 +vt 0.782380 0.487820 0.000000 +vt 0.785350 0.488810 0.000000 +vt 0.788730 0.483850 0.000000 +vt 0.792050 0.484900 0.000000 +vt 0.703700 0.482530 0.000000 +vt 0.700970 0.482610 0.000000 +vt 0.699420 0.479380 0.000000 +vt 0.705100 0.485730 0.000000 +vt 0.702520 0.485850 0.000000 +vt 0.699940 0.485970 0.000000 +vt 0.698240 0.482690 0.000000 +vt 0.696540 0.479420 0.000000 +vt 0.706490 0.488920 0.000000 +vt 0.704070 0.489080 0.000000 +vt 0.707890 0.492110 0.000000 +vt 0.705610 0.492310 0.000000 +vt 0.703330 0.492510 0.000000 +vt 0.701640 0.489240 0.000000 +vt 0.699210 0.489400 0.000000 +vt 0.697360 0.486090 0.000000 +vt 0.701060 0.492710 0.000000 +vt 0.698780 0.492910 0.000000 +vt 0.696780 0.489560 0.000000 +vt 0.694780 0.486210 0.000000 +vt 0.695510 0.482770 0.000000 +vt 0.693660 0.479460 0.000000 +vt 0.692780 0.482860 0.000000 +vt 0.728960 0.486530 0.000000 +vt 0.725830 0.486440 0.000000 +vt 0.725330 0.483990 0.000000 +vt 0.729340 0.488930 0.000000 +vt 0.726330 0.488890 0.000000 +vt 0.723320 0.488860 0.000000 +vt 0.722700 0.486360 0.000000 +vt 0.722080 0.483850 0.000000 +vt 0.729710 0.491320 0.000000 +vt 0.726820 0.491340 0.000000 +vt 0.730090 0.493720 0.000000 +vt 0.727320 0.493790 0.000000 +vt 0.724550 0.493860 0.000000 +vt 0.723930 0.491360 0.000000 +vt 0.721040 0.491370 0.000000 +vt 0.720300 0.488820 0.000000 +vt 0.721780 0.493930 0.000000 +vt 0.719010 0.494000 0.000000 +vt 0.718150 0.491390 0.000000 +vt 0.717290 0.488780 0.000000 +vt 0.719570 0.486270 0.000000 +vt 0.718830 0.483710 0.000000 +vt 0.716430 0.486180 0.000000 +vt 0.748990 0.490770 0.000000 +vt 0.752230 0.490790 0.000000 +vt 0.745750 0.490750 0.000000 +vt 0.748310 0.487480 0.000000 +vt 0.752510 0.487170 0.000000 +vt 0.756720 0.486870 0.000000 +vt 0.742510 0.490730 0.000000 +vt 0.739270 0.490710 0.000000 +vt 0.739900 0.488100 0.000000 +vt 0.744100 0.487790 0.000000 +vt 0.745690 0.484850 0.000000 +vt 0.750860 0.484210 0.000000 +vt 0.740520 0.485480 0.000000 +vt 0.747280 0.481900 0.000000 +vt 0.753420 0.480940 0.000000 +vt 0.756040 0.483570 0.000000 +vt 0.761210 0.482940 0.000000 +vt 0.759560 0.479970 0.000000 +vt 0.730170 0.460750 0.000000 +vt 0.733950 0.460980 0.000000 +vt 0.729130 0.455730 0.000000 +vt 0.733330 0.455900 0.000000 +vt 0.737530 0.456080 0.000000 +vt 0.737730 0.461200 0.000000 +vt 0.728080 0.450700 0.000000 +vt 0.732700 0.450830 0.000000 +vt 0.727030 0.445670 0.000000 +vt 0.732080 0.445750 0.000000 +vt 0.737130 0.445830 0.000000 +vt 0.737330 0.450950 0.000000 +vt 0.741950 0.451080 0.000000 +vt 0.741730 0.456250 0.000000 +vt 0.742180 0.445910 0.000000 +vt 0.741500 0.461420 0.000000 +vt 0.733610 0.508500 0.000000 +vt 0.732880 0.506780 0.000000 +vt 0.734700 0.506920 0.000000 +vt 0.735250 0.508700 0.000000 +vt 0.732160 0.505050 0.000000 +vt 0.734140 0.505140 0.000000 +vt 0.736120 0.505220 0.000000 +vt 0.736510 0.507060 0.000000 +vt 0.736890 0.508900 0.000000 +vt 0.731430 0.503330 0.000000 +vt 0.733580 0.503350 0.000000 +vt 0.730700 0.501600 0.000000 +vt 0.733030 0.501570 0.000000 +vt 0.735350 0.501540 0.000000 +vt 0.735740 0.503380 0.000000 +vt 0.737900 0.503400 0.000000 +vt 0.738110 0.505300 0.000000 +vt 0.737680 0.501500 0.000000 +vt 0.740050 0.503430 0.000000 +vt 0.740090 0.505390 0.000000 +vt 0.738320 0.507200 0.000000 +vt 0.738530 0.509100 0.000000 +vt 0.740130 0.507350 0.000000 +vt 0.740170 0.509310 0.000000 +vt 0.697130 0.463480 0.000000 +vt 0.696360 0.458170 0.000000 +vt 0.697890 0.468780 0.000000 +vt 0.694650 0.468680 0.000000 +vt 0.693700 0.463310 0.000000 +vt 0.692750 0.457950 0.000000 +vt 0.698660 0.474080 0.000000 +vt 0.695590 0.474050 0.000000 +vt 0.692530 0.474030 0.000000 +vt 0.691400 0.468590 0.000000 +vt 0.690270 0.463150 0.000000 +vt 0.689140 0.457720 0.000000 +vt 0.749840 0.468790 0.000000 +vt 0.755920 0.466710 0.000000 +vt 0.755090 0.471450 0.000000 +vt 0.748990 0.473160 0.000000 +vt 0.762010 0.464630 0.000000 +vt 0.761190 0.469750 0.000000 +vt 0.760380 0.474860 0.000000 +vt 0.754250 0.476200 0.000000 +vt 0.748130 0.477530 0.000000 +vt 0.691200 0.494350 0.000000 +vt 0.685550 0.488970 0.000000 +vt 0.688360 0.489120 0.000000 +vt 0.693090 0.493990 0.000000 +vt 0.679910 0.483600 0.000000 +vt 0.683620 0.484250 0.000000 +vt 0.687340 0.484900 0.000000 +vt 0.691160 0.489260 0.000000 +vt 0.694990 0.493630 0.000000 +vt 0.674260 0.478220 0.000000 +vt 0.678890 0.479380 0.000000 +vt 0.683520 0.480540 0.000000 +vt 0.688150 0.481700 0.000000 +vt 0.691060 0.485550 0.000000 +vt 0.693970 0.489410 0.000000 +vt 0.696880 0.493270 0.000000 +vt 0.736510 0.493430 0.000000 +vt 0.736880 0.490870 0.000000 +vt 0.734370 0.493520 0.000000 +vt 0.734490 0.491020 0.000000 +vt 0.734620 0.488510 0.000000 +vt 0.737260 0.488310 0.000000 +vt 0.732230 0.493620 0.000000 +vt 0.732100 0.491170 0.000000 +vt 0.731980 0.488720 0.000000 +vt 0.731850 0.486270 0.000000 +vt 0.734740 0.486010 0.000000 +vt 0.737630 0.485750 0.000000 +vt 0.748820 0.425370 0.000000 +vt 0.755240 0.423190 0.000000 +vt 0.754980 0.428320 0.000000 +vt 0.748420 0.430520 0.000000 +vt 0.761670 0.421010 0.000000 +vt 0.761540 0.426110 0.000000 +vt 0.761410 0.431220 0.000000 +vt 0.754720 0.433450 0.000000 +vt 0.748020 0.435680 0.000000 +vt 0.768090 0.418830 0.000000 +vt 0.768100 0.423910 0.000000 +vt 0.774520 0.416650 0.000000 +vt 0.774660 0.421700 0.000000 +vt 0.774790 0.426760 0.000000 +vt 0.768100 0.428990 0.000000 +vt 0.768110 0.434060 0.000000 +vt 0.761280 0.436320 0.000000 +vt 0.774930 0.431810 0.000000 +vt 0.754450 0.438580 0.000000 +vt 0.747630 0.440830 0.000000 +vt 0.746870 0.508470 0.000000 +vt 0.745200 0.508680 0.000000 +vt 0.745610 0.506790 0.000000 +vt 0.747430 0.506610 0.000000 +vt 0.743520 0.508890 0.000000 +vt 0.743780 0.506980 0.000000 +vt 0.744050 0.505070 0.000000 +vt 0.746020 0.504910 0.000000 +vt 0.748000 0.504750 0.000000 +vt 0.741850 0.509100 0.000000 +vt 0.741960 0.507160 0.000000 +vt 0.742070 0.505230 0.000000 +vt 0.742180 0.503300 0.000000 +vt 0.744310 0.503160 0.000000 +vt 0.746440 0.503030 0.000000 +vt 0.748560 0.502890 0.000000 +vt 0.791490 0.461320 0.000000 +vt 0.789140 0.466420 0.000000 +vt 0.796150 0.462790 0.000000 +vt 0.793460 0.467790 0.000000 +vt 0.790780 0.472790 0.000000 +vt 0.786790 0.471530 0.000000 +vt 0.800800 0.464260 0.000000 +vt 0.797780 0.469160 0.000000 +vt 0.805450 0.465730 0.000000 +vt 0.802100 0.470520 0.000000 +vt 0.798750 0.475320 0.000000 +vt 0.794760 0.474050 0.000000 +vt 0.791750 0.478950 0.000000 +vt 0.788100 0.477790 0.000000 +vt 0.795400 0.480110 0.000000 +vt 0.784440 0.476640 0.000000 +vt 0.726940 0.469900 0.000000 +vt 0.727480 0.465210 0.000000 +vt 0.726410 0.474600 0.000000 +vt 0.722910 0.474240 0.000000 +vt 0.723320 0.469440 0.000000 +vt 0.723740 0.464630 0.000000 +vt 0.725870 0.479300 0.000000 +vt 0.722490 0.479050 0.000000 +vt 0.719120 0.478800 0.000000 +vt 0.719410 0.473890 0.000000 +vt 0.719700 0.468970 0.000000 +vt 0.720000 0.464060 0.000000 +vt 0.755150 0.496720 0.000000 +vt 0.760240 0.492610 0.000000 +vt 0.752680 0.496060 0.000000 +vt 0.757570 0.492000 0.000000 +vt 0.762460 0.487950 0.000000 +vt 0.765330 0.488500 0.000000 +vt 0.750210 0.495390 0.000000 +vt 0.754900 0.491400 0.000000 +vt 0.759590 0.487410 0.000000 +vt 0.764280 0.483420 0.000000 +vt 0.767350 0.483900 0.000000 +vt 0.770420 0.484380 0.000000 +vt 0.709410 0.489540 0.000000 +vt 0.710670 0.492580 0.000000 +vt 0.708150 0.486490 0.000000 +vt 0.711200 0.487260 0.000000 +vt 0.712320 0.490150 0.000000 +vt 0.713450 0.493050 0.000000 +vt 0.706880 0.483440 0.000000 +vt 0.710070 0.484360 0.000000 +vt 0.713250 0.485270 0.000000 +vt 0.714240 0.488020 0.000000 +vt 0.715240 0.490770 0.000000 +vt 0.716230 0.493530 0.000000 +vt 0.731670 0.426260 0.000000 +vt 0.735960 0.426030 0.000000 +vt 0.734990 0.430960 0.000000 +vt 0.730510 0.431110 0.000000 +vt 0.740240 0.425810 0.000000 +vt 0.739460 0.430820 0.000000 +vt 0.738690 0.435820 0.000000 +vt 0.734020 0.435890 0.000000 +vt 0.729350 0.435970 0.000000 +vt 0.744530 0.425590 0.000000 +vt 0.743940 0.430670 0.000000 +vt 0.743360 0.435750 0.000000 +vt 0.742770 0.440830 0.000000 +vt 0.737910 0.440830 0.000000 +vt 0.733050 0.440820 0.000000 +vt 0.728190 0.440820 0.000000 +vt 0.732430 0.495610 0.000000 +vt 0.730240 0.495690 0.000000 +vt 0.734610 0.495530 0.000000 +vt 0.734860 0.497530 0.000000 +vt 0.732630 0.497600 0.000000 +vt 0.730390 0.497660 0.000000 +vt 0.736800 0.495450 0.000000 +vt 0.737090 0.497470 0.000000 +vt 0.737390 0.499490 0.000000 +vt 0.735110 0.499530 0.000000 +vt 0.732830 0.499580 0.000000 +vt 0.730550 0.499630 0.000000 +# 441 texture coords + +g rocksCombined005 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj.meta new file mode 100644 index 0000000..bbe0f89 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined005.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 15b993c435b403942bad7988a7c35ac0 +timeCreated: 1484958682 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined005 + 100002: //RootNode + 400000: rocksCombined005 + 400002: //RootNode + 2300000: rocksCombined005 + 3300000: rocksCombined005 + 4300000: rocksCombined005 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj new file mode 100644 index 0000000..c4f0f8f --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:41 + +mtllib rocksCombined006.mtl + +# +# object rocksCombined006 +# + +v 1.303024 0.733684 10.802902 +v 11.146133 0.510481 11.982441 +v 0.783386 0.627338 1.715988 +v 11.109695 0.629794 1.879826 +v 2.520386 6.297688 5.857086 +v 7.093079 7.011476 6.092258 +v 2.559158 6.264787 1.619419 +v 7.044220 7.570740 1.633568 +v 9.506134 4.129516 9.206627 +v 1.583435 4.510997 8.364922 +v 9.408081 4.275707 1.299911 +v 1.287003 4.142361 1.187492 +v 0.469452 0.476991 5.916409 +v 11.818329 0.439068 7.043129 +v 7.277573 7.718651 3.822239 +v 1.911423 6.539275 3.508694 +v 9.893982 4.130712 5.306454 +v 0.548965 4.302427 4.101315 +v 5.959137 0.411065 0.747265 +v 6.698074 0.562351 11.877119 +v 4.867767 7.076034 6.181587 +v 4.789017 7.567140 1.011440 +v 5.959335 4.764090 9.421320 +v 5.336136 4.217314 0.020851 +v 6.102737 0.113742 7.051941 +v 4.709564 7.928849 3.582260 +v 2.971436 0.115989 6.560253 +v 6.472305 0.102001 9.963491 +v 3.624680 0.542960 11.486746 +v 0.858490 0.456063 8.722717 +v 3.208069 0.096288 9.423941 +v 4.754333 7.520985 4.932175 +v 3.318878 7.315572 3.635735 +v 2.170258 6.408821 4.807987 +v 3.545441 6.769070 6.057053 +v 3.292694 7.206944 4.867325 +v 6.443176 2.424415 10.966364 +v 3.926193 4.948048 9.131401 +v 1.485764 2.307059 9.962006 +v 3.674454 2.424947 10.740452 +v 11.376572 2.102639 6.327827 +v 9.579758 4.076617 7.557175 +v 10.593063 2.095644 10.943382 +v 11.616943 0.367311 9.958607 +v 11.183807 1.908888 8.872871 +v 5.670929 2.162286 0.054195 +v 7.539490 4.248279 0.428478 +v 10.542877 2.263850 1.393364 +v 8.944397 0.430432 1.184628 +v 8.302414 2.181995 0.497902 +v 0.448456 0.465104 3.517292 +v 0.074646 2.130132 5.027115 +v 0.545990 4.240050 2.539532 +v 0.835388 2.208174 1.361950 +v 0.117386 2.155141 3.042431 +v 5.910233 7.116684 6.267227 +v 4.970963 6.021963 7.567188 +v 7.826233 4.285067 9.479494 +v 8.185532 5.775523 7.540295 +v 6.633362 5.523403 7.880005 +v 8.006683 6.163697 1.351345 +v 7.146576 7.738929 2.594677 +v 8.591843 6.347359 4.449188 +v 9.879318 4.255188 3.141960 +v 8.498489 6.170284 2.839970 +v 1.945099 5.405228 1.325691 +v 3.565628 6.922795 1.262428 +v 5.035049 6.066182 0.388035 +v 3.132767 4.176909 0.428471 +v 3.366501 5.724869 0.725384 +v 1.116898 5.645398 3.676105 +v 0.620132 4.563932 6.337925 +v 1.959518 5.808501 7.037636 +v 1.160889 5.735909 5.452774 +v 2.982544 0.429532 1.125118 +v 6.027100 0.082980 3.682705 +v 2.931473 0.095252 3.620453 +v 6.003387 7.710644 1.261593 +v 4.742477 7.939275 2.234177 +v 5.900253 8.063736 3.571606 +v 5.920700 8.042238 2.384960 +v 11.621902 0.474174 4.147934 +v 11.165802 2.015755 3.684483 +v 0.433929 2.235406 7.480564 +v 7.229263 7.346133 5.023560 +v 8.473221 6.053104 6.028996 +v 2.188217 6.454848 2.376122 +v 1.354370 5.522666 2.360172 +v 9.372360 0.478798 12.223099 +v 9.297256 0.105966 7.121758 +v 9.445435 -0.000000 10.213898 +v 5.982559 7.718895 4.982304 +v 8.656525 2.251203 11.277817 +v 3.039429 2.181995 0.497902 +v 3.792877 6.100190 7.406055 +v 6.703613 6.153533 0.725361 +v 9.158295 0.079677 3.937347 +v 3.497986 7.208378 2.366859 +v 1.492645 0.164121 6.264828 +v 3.107697 0.124161 7.984257 +v 1.895355 0.164178 9.112217 +v 0.640518 0.476793 7.271225 +v 1.658783 0.169025 7.666939 +v 4.531281 0.113602 6.836842 +v 6.242981 0.134675 8.529991 +v 4.981613 0.101919 9.747562 +v 4.691223 0.131701 8.295807 +v 6.622696 0.222843 11.190918 +v 5.264923 0.553967 11.667753 +v 3.443085 0.186113 10.745214 +v 5.129227 0.219619 10.967878 +v 2.403122 0.538927 11.147135 +v 1.067505 0.544136 10.026936 +v 2.170624 0.233343 10.425299 +v 4.754593 7.406639 5.460102 +v 4.065933 7.393255 4.872490 +v 3.344772 7.003312 5.523430 +v 4.185242 7.017125 6.250401 +v 3.996613 7.231949 5.620777 +v 4.713928 7.795098 4.232471 +v 4.064926 7.586390 3.622559 +v 3.264984 7.233544 4.303616 +v 4.082016 7.443812 4.242935 +v 2.535217 6.852976 3.593380 +v 1.979141 6.481387 4.160374 +v 2.740646 6.761610 4.767223 +v 2.618912 6.799463 4.194759 +v 2.340988 6.398841 5.373024 +v 2.906799 6.500628 5.941841 +v 2.790451 6.773580 5.308968 +v 3.691559 1.307662 11.386652 +v 2.530655 2.262329 10.625481 +v 1.413666 1.272160 10.479467 +v 2.420685 1.299740 11.103415 +v 6.674606 1.314464 11.690855 +v 5.009857 2.491035 10.847273 +v 5.271378 1.304609 11.524059 +v 6.123444 3.829273 10.261532 +v 5.074707 4.706131 9.328524 +v 3.736145 3.621391 9.931826 +v 4.950592 3.861704 10.069914 +v 2.651794 4.789420 8.954414 +v 1.531219 3.547413 9.147076 +v 2.569855 3.584688 9.921450 +v 11.845413 1.140804 6.772675 +v 11.320816 1.896773 7.605373 +v 11.679672 1.200295 9.456078 +v 11.802689 0.455033 8.520378 +v 11.801895 1.125050 8.208118 +v 10.543213 3.025070 5.669472 +v 9.723892 4.177272 6.401962 +v 10.372940 3.188575 8.287682 +v 10.421616 3.113271 7.052605 +v 9.808945 4.105359 8.552765 +v 10.147629 3.204661 10.081232 +v 11.049545 2.066645 9.923456 +v 10.508240 3.224677 9.272099 +v 11.038254 1.194827 11.705374 +v 11.490768 0.500292 11.312580 +v 11.510162 1.128727 10.760475 +v 5.835693 1.153317 0.190605 +v 6.986664 2.168448 0.192890 +v 8.661987 1.172987 0.643879 +v 7.450974 0.417201 0.889557 +v 7.248749 1.159478 0.332989 +v 5.500366 3.209120 -0.000000 +v 6.437836 4.233682 0.148277 +v 7.927765 3.230187 0.428928 +v 6.714081 3.216552 0.134045 +v 8.598633 4.262125 0.767548 +v 9.979111 3.295851 1.337917 +v 9.567154 2.196506 0.871178 +v 9.093414 3.243148 0.787235 +v 10.998520 1.224324 1.639801 +v 10.330719 0.474443 1.521740 +v 10.009445 1.193677 1.022324 +v 0.532654 0.487514 2.426033 +v 0.110489 1.184506 3.336109 +v 0.394485 2.209175 2.124035 +v 0.691422 1.221547 1.511105 +v 0.263748 1.211093 2.312782 +v 0.422424 0.472574 4.681526 +v 0.160110 1.225278 5.453430 +v 0.000000 2.129477 3.966454 +v 0.130508 1.209799 4.371525 +v 0.140930 3.235511 4.365639 +v 0.459442 4.316009 3.346264 +v 0.328140 3.271580 2.791546 +v 0.193817 3.262118 3.661251 +v 0.842667 4.189132 1.806141 +v 1.041229 3.239795 1.242390 +v 0.561630 3.261384 1.932564 +v 6.581238 7.046009 6.153271 +v 6.054321 6.688430 7.077694 +v 7.538208 5.586222 7.795723 +v 7.520706 6.700546 6.796890 +v 6.861771 6.694202 7.056847 +v 5.424652 7.209188 6.228249 +v 4.971985 6.529958 6.882217 +v 5.673920 5.727701 7.816868 +v 5.379166 6.596355 7.063274 +v 5.496918 5.228399 8.652302 +v 6.834702 4.468081 9.411514 +v 7.254364 4.870384 8.586258 +v 6.317810 4.977182 8.625309 +v 8.787903 4.099764 9.488615 +v 8.792755 4.775563 8.286823 +v 8.165222 4.701735 8.533791 +v 8.750977 5.223794 1.295799 +v 8.385284 6.177405 2.050564 +v 9.143570 5.128544 2.910992 +v 9.787689 4.268564 2.137737 +v 8.954559 5.122529 1.947655 +v 7.487976 7.047248 1.522697 +v 7.081024 7.702721 2.022797 +v 7.830536 7.078646 2.724670 +v 7.729630 7.068734 2.061218 +v 7.207428 7.724209 3.199177 +v 8.062424 7.158836 4.155190 +v 8.488831 6.205673 3.613232 +v 7.956284 7.121454 3.394424 +v 9.151321 5.202252 4.893997 +v 9.715759 3.962252 4.114231 +v 9.032684 5.077703 3.867737 +v 1.598328 4.831509 1.236641 +v 2.563812 5.531183 0.994408 +v 3.236465 4.992768 0.542583 +v 2.075455 4.156570 0.748280 +v 2.301529 4.902519 0.825665 +v 2.297913 5.904773 1.493038 +v 2.976105 6.548688 1.451660 +v 3.492233 6.413415 0.938026 +v 2.816910 6.118971 1.174046 +v 4.178299 7.292336 1.089699 +v 4.894547 6.927935 0.641094 +v 4.200760 5.919323 0.493488 +v 4.193512 6.707707 0.733898 +v 5.182434 5.161065 0.166924 +v 4.234451 4.197996 0.148285 +v 4.209427 5.087541 0.284355 +v 1.678024 6.075233 5.038242 +v 1.397629 5.776309 6.435421 +v 2.302826 6.150171 6.266525 +v 1.914185 6.087475 5.808353 +v 1.420883 6.056280 3.576153 +v 1.125381 5.658591 4.564980 +v 1.517807 6.117438 4.327896 +v 0.671829 5.323631 3.812000 +v 0.441971 4.500261 5.037971 +v 0.814285 5.346084 5.967426 +v 0.722519 5.328820 4.881443 +v 0.906967 4.509761 7.563061 +v 1.760498 5.262676 7.848961 +v 1.106415 5.304594 7.033051 +v 1.594818 0.472954 1.423946 +v 2.956482 0.129499 2.197735 +v 1.465500 0.149131 3.605953 +v 1.512405 0.183829 2.354858 +v 4.470032 0.416751 0.859795 +v 6.013779 0.113668 2.004860 +v 4.474426 0.086308 3.629765 +v 4.482590 0.118351 2.047707 +v 6.041382 0.097015 5.414639 +v 2.917892 0.105249 5.098557 +v 4.472794 0.098850 5.266296 +v 1.443100 0.157335 4.918179 +v 6.593979 7.693224 1.452370 +v 5.903717 7.988013 1.770340 +v 6.515671 8.007195 2.485378 +v 6.484085 7.961322 1.909634 +v 5.397018 7.685687 1.089642 +v 4.766190 7.943341 1.508369 +v 5.332169 8.017005 2.297970 +v 5.325272 7.962539 1.637787 +v 4.725616 7.935143 2.937252 +v 5.254395 7.961844 3.613167 +v 5.949661 8.035417 3.018677 +v 5.349945 8.052489 2.957954 +v 6.579224 7.922639 3.650032 +v 6.560730 7.992328 3.082893 +v 11.016830 2.253777 2.469994 +v 11.662537 1.193356 4.013546 +v 11.448471 0.492886 2.774570 +v 11.484329 1.219517 2.682095 +v 10.519135 3.169270 3.417099 +v 10.421127 3.331288 2.257816 +v 11.244034 1.746271 4.691460 +v 10.530350 3.030919 4.479565 +v 11.721863 0.484322 5.645462 +v 11.922134 1.156458 5.176849 +v 0.276917 1.259676 8.040916 +v 0.236450 2.184689 6.185093 +v 0.149094 1.240307 6.624069 +v 0.780655 2.299291 8.808800 +v 0.790253 1.243712 9.457785 +v 0.389175 3.417069 6.779194 +v 0.863281 3.444083 8.088520 +v 0.244873 3.400462 5.556797 +v 8.380981 5.928559 6.952553 +v 7.877121 6.773211 5.432690 +v 7.233536 7.146300 5.606377 +v 7.812805 6.707909 6.152805 +v 9.048538 5.274782 6.900570 +v 9.001816 5.076645 7.808697 +v 8.523926 6.170980 5.166874 +v 9.224792 5.305617 5.795933 +v 7.340439 7.660435 4.416000 +v 7.883209 6.893090 4.784927 +v 2.029114 6.511921 2.950741 +v 1.591232 6.027049 2.247883 +v 1.132874 5.741733 2.937614 +v 1.405701 6.122948 2.898193 +v 2.452362 6.303472 1.981392 +v 1.593887 5.379251 1.758621 +v 1.958893 5.893950 1.837620 +v 0.870834 5.098746 2.425804 +v 1.259079 4.820398 1.793915 +v 0.675369 5.351649 2.995560 +v 10.741531 0.142764 10.125502 +v 9.320663 0.098439 8.709682 +v 10.755524 0.028444 7.148113 +v 10.997253 0.005120 8.601810 +v 10.508392 0.477896 12.223156 +v 9.412277 0.108757 11.447874 +v 10.707138 0.224602 11.488852 +v 8.039642 0.549601 12.030323 +v 7.976334 0.089843 10.098629 +v 8.052933 0.198475 11.353758 +v 7.693634 0.118103 7.164463 +v 7.795013 0.135857 8.650623 +v 6.689133 7.743520 4.928890 +v 5.993088 7.412766 5.557774 +v 6.697983 7.316059 5.458485 +v 5.829300 7.926032 4.195709 +v 6.513046 7.888957 4.235821 +v 5.462860 7.675926 4.918571 +v 5.366821 7.828920 4.242428 +v 5.434204 7.320849 5.565166 +v 9.171844 1.270508 12.061960 +v 7.563980 2.303739 11.047689 +v 7.888123 1.296205 11.808332 +v 9.704300 2.151858 11.311544 +v 10.165695 1.130473 12.047319 +v 8.211731 3.251236 10.375031 +v 9.169266 3.142706 10.445267 +v 7.186829 3.550484 10.287848 +v 1.776871 2.196363 0.855270 +v 3.010437 1.172872 0.636452 +v 1.664185 1.192704 0.996128 +v 3.072952 3.221333 0.428856 +v 1.908203 3.230954 0.769646 +v 4.355164 2.168448 0.192890 +v 4.286652 3.212103 0.134060 +v 4.422943 1.159421 0.329277 +v 3.694839 6.438554 6.744930 +v 4.421646 6.073439 7.357716 +v 4.355118 6.733200 6.862179 +v 2.851471 5.863881 7.293823 +v 2.989639 6.174589 6.599373 +v 3.948318 5.738667 8.210827 +v 2.693192 5.387151 8.017578 +v 4.741714 5.565364 8.363037 +v 7.507050 6.165360 1.001614 +v 6.295746 7.047676 0.937984 +v 6.971024 7.053114 1.177299 +v 7.128387 5.215998 0.542591 +v 8.064560 5.228918 0.852428 +v 5.869339 6.133657 0.493481 +v 6.155411 5.199154 0.284355 +v 5.595261 7.024790 0.733883 +v 10.682877 0.153541 3.930370 +v 9.098068 0.132416 2.383999 +v 10.548523 0.187930 2.631248 +v 9.237152 0.113534 5.620747 +v 10.771240 0.174255 5.620239 +v 7.596024 0.089011 3.808456 +v 7.632721 0.102788 5.530651 +v 7.553406 0.119762 2.140781 +v 2.883118 6.806078 2.436501 +v 3.562531 7.161247 1.748817 +v 2.974731 6.744746 1.884010 +v 3.421997 7.267426 2.991398 +v 2.652420 6.831767 3.031940 +v 4.122665 7.730115 2.228928 +v 4.083298 7.663670 2.954514 +v 4.152237 7.561726 1.621456 +# 386 vertices + +vt 0.542000 0.798980 0.000000 +vt 0.543460 0.794160 0.000000 +vt 0.547450 0.793850 0.000000 +vt 0.546040 0.798680 0.000000 +vt 0.544930 0.789340 0.000000 +vt 0.548860 0.789020 0.000000 +vt 0.552790 0.788690 0.000000 +vt 0.551440 0.793540 0.000000 +vt 0.550090 0.798380 0.000000 +vt 0.546390 0.784520 0.000000 +vt 0.550270 0.784190 0.000000 +vt 0.547850 0.779700 0.000000 +vt 0.551670 0.779350 0.000000 +vt 0.555490 0.779010 0.000000 +vt 0.554140 0.783850 0.000000 +vt 0.558020 0.783510 0.000000 +vt 0.556720 0.788370 0.000000 +vt 0.559310 0.778660 0.000000 +vt 0.563130 0.778310 0.000000 +vt 0.561890 0.783180 0.000000 +vt 0.560660 0.788040 0.000000 +vt 0.555430 0.793220 0.000000 +vt 0.554140 0.798080 0.000000 +vt 0.559420 0.792910 0.000000 +vt 0.558180 0.797780 0.000000 +vt 0.545670 0.833610 0.000000 +vt 0.543140 0.834610 0.000000 +vt 0.542490 0.832730 0.000000 +vt 0.544850 0.832030 0.000000 +vt 0.540620 0.835610 0.000000 +vt 0.540120 0.833420 0.000000 +vt 0.539630 0.831240 0.000000 +vt 0.541830 0.830840 0.000000 +vt 0.544030 0.830440 0.000000 +vt 0.538090 0.836610 0.000000 +vt 0.537760 0.834120 0.000000 +vt 0.535560 0.837610 0.000000 +vt 0.535400 0.834820 0.000000 +vt 0.535230 0.832030 0.000000 +vt 0.537430 0.831630 0.000000 +vt 0.537100 0.829140 0.000000 +vt 0.539140 0.829050 0.000000 +vt 0.535070 0.829240 0.000000 +vt 0.534900 0.826450 0.000000 +vt 0.536770 0.826660 0.000000 +vt 0.538640 0.826860 0.000000 +vt 0.541170 0.828950 0.000000 +vt 0.543210 0.828860 0.000000 +vt 0.540510 0.827070 0.000000 +vt 0.542390 0.827280 0.000000 +vt 0.562350 0.800310 0.000000 +vt 0.559630 0.805000 0.000000 +vt 0.555750 0.802630 0.000000 +vt 0.566520 0.802840 0.000000 +vt 0.563510 0.807370 0.000000 +vt 0.560490 0.811910 0.000000 +vt 0.556900 0.809700 0.000000 +vt 0.553310 0.807480 0.000000 +vt 0.570690 0.805370 0.000000 +vt 0.567390 0.809750 0.000000 +vt 0.574860 0.807890 0.000000 +vt 0.571260 0.812120 0.000000 +vt 0.567660 0.816350 0.000000 +vt 0.564080 0.814130 0.000000 +vt 0.560770 0.818510 0.000000 +vt 0.557470 0.816450 0.000000 +vt 0.564060 0.820570 0.000000 +vt 0.560460 0.824800 0.000000 +vt 0.557460 0.822890 0.000000 +vt 0.554450 0.820990 0.000000 +vt 0.554180 0.814390 0.000000 +vt 0.550880 0.812330 0.000000 +vt 0.551450 0.819080 0.000000 +vt 0.548440 0.817180 0.000000 +vt 0.480170 0.799790 0.000000 +vt 0.482570 0.804730 0.000000 +vt 0.478850 0.805340 0.000000 +vt 0.476220 0.800440 0.000000 +vt 0.484970 0.809670 0.000000 +vt 0.481470 0.810230 0.000000 +vt 0.477970 0.810800 0.000000 +vt 0.475130 0.805950 0.000000 +vt 0.472280 0.801100 0.000000 +vt 0.487360 0.814610 0.000000 +vt 0.484090 0.815130 0.000000 +vt 0.489760 0.819560 0.000000 +vt 0.486720 0.820030 0.000000 +vt 0.483670 0.820500 0.000000 +vt 0.480820 0.815650 0.000000 +vt 0.477550 0.816160 0.000000 +vt 0.474480 0.811360 0.000000 +vt 0.480620 0.820960 0.000000 +vt 0.477580 0.821430 0.000000 +vt 0.474280 0.816680 0.000000 +vt 0.470980 0.811920 0.000000 +vt 0.471400 0.806560 0.000000 +vt 0.468330 0.801750 0.000000 +vt 0.467680 0.807160 0.000000 +vt 0.464380 0.802410 0.000000 +vt 0.513180 0.798640 0.000000 +vt 0.513660 0.803510 0.000000 +vt 0.509420 0.803200 0.000000 +vt 0.508680 0.798300 0.000000 +vt 0.514150 0.808380 0.000000 +vt 0.510170 0.808100 0.000000 +vt 0.506190 0.807820 0.000000 +vt 0.505190 0.802890 0.000000 +vt 0.504190 0.797960 0.000000 +vt 0.514630 0.813260 0.000000 +vt 0.510910 0.813000 0.000000 +vt 0.515110 0.818130 0.000000 +vt 0.511650 0.817910 0.000000 +vt 0.508180 0.817680 0.000000 +vt 0.507180 0.812750 0.000000 +vt 0.503460 0.812490 0.000000 +vt 0.502210 0.807540 0.000000 +vt 0.504710 0.817450 0.000000 +vt 0.501250 0.817230 0.000000 +vt 0.499740 0.812240 0.000000 +vt 0.498230 0.807250 0.000000 +vt 0.500950 0.802580 0.000000 +vt 0.499700 0.797620 0.000000 +vt 0.496720 0.802270 0.000000 +vt 0.495200 0.797280 0.000000 +vt 0.530620 0.798460 0.000000 +vt 0.533470 0.798590 0.000000 +vt 0.532560 0.803250 0.000000 +vt 0.529920 0.803130 0.000000 +vt 0.536310 0.798720 0.000000 +vt 0.535190 0.803360 0.000000 +vt 0.534070 0.808000 0.000000 +vt 0.531650 0.807900 0.000000 +vt 0.529220 0.807810 0.000000 +vt 0.539150 0.798850 0.000000 +vt 0.537830 0.803470 0.000000 +vt 0.540460 0.803590 0.000000 +vt 0.538920 0.808190 0.000000 +vt 0.536500 0.808100 0.000000 +vt 0.535170 0.812720 0.000000 +vt 0.532960 0.812640 0.000000 +vt 0.537390 0.812800 0.000000 +vt 0.535850 0.817410 0.000000 +vt 0.533840 0.817340 0.000000 +vt 0.531840 0.817280 0.000000 +vt 0.530740 0.812560 0.000000 +vt 0.528520 0.812480 0.000000 +vt 0.529830 0.817220 0.000000 +vt 0.527820 0.817150 0.000000 +vt 0.554690 0.836180 0.000000 +vt 0.553320 0.834950 0.000000 +vt 0.557030 0.833430 0.000000 +vt 0.558690 0.834700 0.000000 +vt 0.551960 0.833710 0.000000 +vt 0.555360 0.832160 0.000000 +vt 0.558770 0.830610 0.000000 +vt 0.560740 0.831910 0.000000 +vt 0.562700 0.833210 0.000000 +vt 0.550590 0.832480 0.000000 +vt 0.553700 0.830900 0.000000 +vt 0.549220 0.831240 0.000000 +vt 0.552030 0.829630 0.000000 +vt 0.554840 0.828020 0.000000 +vt 0.556810 0.829320 0.000000 +vt 0.559920 0.827740 0.000000 +vt 0.562180 0.829070 0.000000 +vt 0.557650 0.826410 0.000000 +vt 0.563030 0.826160 0.000000 +vt 0.565590 0.827520 0.000000 +vt 0.564440 0.830390 0.000000 +vt 0.566710 0.831720 0.000000 +vt 0.568150 0.828880 0.000000 +vt 0.570720 0.830230 0.000000 +vt 0.503060 0.821790 0.000000 +vt 0.500370 0.822350 0.000000 +vt 0.498380 0.817810 0.000000 +vt 0.504860 0.826360 0.000000 +vt 0.502370 0.826890 0.000000 +vt 0.499880 0.827420 0.000000 +vt 0.497690 0.822900 0.000000 +vt 0.495510 0.818390 0.000000 +vt 0.506670 0.830920 0.000000 +vt 0.504370 0.831430 0.000000 +vt 0.508480 0.835490 0.000000 +vt 0.506370 0.835970 0.000000 +vt 0.504260 0.836450 0.000000 +vt 0.502070 0.831930 0.000000 +vt 0.499770 0.832440 0.000000 +vt 0.497390 0.827950 0.000000 +vt 0.502150 0.836920 0.000000 +vt 0.500040 0.837400 0.000000 +vt 0.497470 0.832940 0.000000 +vt 0.494900 0.828480 0.000000 +vt 0.495010 0.823460 0.000000 +vt 0.492630 0.818970 0.000000 +vt 0.492330 0.824020 0.000000 +vt 0.527610 0.819770 0.000000 +vt 0.524720 0.820450 0.000000 +vt 0.524650 0.817400 0.000000 +vt 0.527390 0.822390 0.000000 +vt 0.524780 0.823510 0.000000 +vt 0.522180 0.824640 0.000000 +vt 0.521830 0.821140 0.000000 +vt 0.521470 0.817640 0.000000 +vt 0.527170 0.825000 0.000000 +vt 0.524850 0.826570 0.000000 +vt 0.526950 0.827620 0.000000 +vt 0.524920 0.829630 0.000000 +vt 0.522900 0.831640 0.000000 +vt 0.522540 0.828140 0.000000 +vt 0.520220 0.829710 0.000000 +vt 0.519580 0.825770 0.000000 +vt 0.520870 0.833640 0.000000 +vt 0.518840 0.835650 0.000000 +vt 0.517910 0.831270 0.000000 +vt 0.516980 0.826890 0.000000 +vt 0.518940 0.821830 0.000000 +vt 0.518290 0.817890 0.000000 +vt 0.516050 0.822510 0.000000 +vt 0.541710 0.824610 0.000000 +vt 0.543900 0.824750 0.000000 +vt 0.539520 0.824470 0.000000 +vt 0.540400 0.822080 0.000000 +vt 0.542910 0.822150 0.000000 +vt 0.545410 0.822230 0.000000 +vt 0.537330 0.824330 0.000000 +vt 0.535140 0.824190 0.000000 +vt 0.535380 0.821930 0.000000 +vt 0.537890 0.822000 0.000000 +vt 0.538440 0.819680 0.000000 +vt 0.541270 0.819690 0.000000 +vt 0.535610 0.819670 0.000000 +vt 0.539000 0.817350 0.000000 +vt 0.542150 0.817290 0.000000 +vt 0.544100 0.819690 0.000000 +vt 0.546930 0.819700 0.000000 +vt 0.545300 0.817240 0.000000 +vt 0.529760 0.793520 0.000000 +vt 0.533180 0.793680 0.000000 +vt 0.528890 0.788580 0.000000 +vt 0.532900 0.788770 0.000000 +vt 0.536910 0.788960 0.000000 +vt 0.536610 0.793840 0.000000 +vt 0.528020 0.783640 0.000000 +vt 0.532610 0.783860 0.000000 +vt 0.527160 0.778700 0.000000 +vt 0.532330 0.778950 0.000000 +vt 0.537500 0.779200 0.000000 +vt 0.537210 0.784080 0.000000 +vt 0.541800 0.784300 0.000000 +vt 0.540920 0.789150 0.000000 +vt 0.542680 0.779450 0.000000 +vt 0.540030 0.794000 0.000000 +vt 0.531380 0.845470 0.000000 +vt 0.530390 0.843810 0.000000 +vt 0.532100 0.843630 0.000000 +vt 0.532980 0.845340 0.000000 +vt 0.529400 0.842150 0.000000 +vt 0.531220 0.841930 0.000000 +vt 0.533030 0.841710 0.000000 +vt 0.533810 0.843450 0.000000 +vt 0.534580 0.845200 0.000000 +vt 0.528410 0.840490 0.000000 +vt 0.530330 0.840230 0.000000 +vt 0.527420 0.838830 0.000000 +vt 0.529450 0.838530 0.000000 +vt 0.531490 0.838220 0.000000 +vt 0.532260 0.839960 0.000000 +vt 0.534190 0.839700 0.000000 +vt 0.534850 0.841490 0.000000 +vt 0.533530 0.837910 0.000000 +vt 0.536120 0.839440 0.000000 +vt 0.536670 0.841260 0.000000 +vt 0.535510 0.843270 0.000000 +vt 0.536180 0.845060 0.000000 +vt 0.537220 0.843090 0.000000 +vt 0.537770 0.844920 0.000000 +vt 0.493180 0.802880 0.000000 +vt 0.491450 0.797910 0.000000 +vt 0.494910 0.807860 0.000000 +vt 0.491600 0.808460 0.000000 +vt 0.489640 0.803500 0.000000 +vt 0.487690 0.798530 0.000000 +vt 0.496640 0.812830 0.000000 +vt 0.493550 0.813430 0.000000 +vt 0.490460 0.814020 0.000000 +vt 0.488280 0.809070 0.000000 +vt 0.486110 0.804110 0.000000 +vt 0.483930 0.799160 0.000000 +vt 0.544280 0.803350 0.000000 +vt 0.548110 0.803110 0.000000 +vt 0.546120 0.807840 0.000000 +vt 0.542520 0.808020 0.000000 +vt 0.551930 0.802870 0.000000 +vt 0.549720 0.807660 0.000000 +vt 0.547510 0.812450 0.000000 +vt 0.544130 0.812560 0.000000 +vt 0.540760 0.812680 0.000000 +vt 0.489280 0.834490 0.000000 +vt 0.486350 0.831230 0.000000 +vt 0.489130 0.831660 0.000000 +vt 0.491970 0.835220 0.000000 +vt 0.483430 0.827960 0.000000 +vt 0.486300 0.828090 0.000000 +vt 0.489160 0.828220 0.000000 +vt 0.491910 0.832090 0.000000 +vt 0.494660 0.835950 0.000000 +vt 0.480500 0.824700 0.000000 +vt 0.483460 0.824530 0.000000 +vt 0.486420 0.824360 0.000000 +vt 0.489370 0.824190 0.000000 +vt 0.492030 0.828350 0.000000 +vt 0.494690 0.832510 0.000000 +vt 0.497350 0.836680 0.000000 +vt 0.532910 0.826740 0.000000 +vt 0.533150 0.824390 0.000000 +vt 0.530930 0.827040 0.000000 +vt 0.531150 0.824600 0.000000 +vt 0.531380 0.822160 0.000000 +vt 0.533380 0.822040 0.000000 +vt 0.528940 0.827330 0.000000 +vt 0.529160 0.824800 0.000000 +vt 0.529380 0.822270 0.000000 +vt 0.529610 0.819740 0.000000 +vt 0.531610 0.819720 0.000000 +vt 0.533610 0.819690 0.000000 +vt 0.549260 0.758670 0.000000 +vt 0.553460 0.759410 0.000000 +vt 0.553010 0.764390 0.000000 +vt 0.548910 0.763930 0.000000 +vt 0.557660 0.760140 0.000000 +vt 0.557120 0.764860 0.000000 +vt 0.556570 0.769570 0.000000 +vt 0.552560 0.769380 0.000000 +vt 0.548560 0.769190 0.000000 +vt 0.561860 0.760870 0.000000 +vt 0.561220 0.765320 0.000000 +vt 0.566050 0.761600 0.000000 +vt 0.565320 0.765780 0.000000 +vt 0.564590 0.769960 0.000000 +vt 0.560580 0.769760 0.000000 +vt 0.559950 0.774210 0.000000 +vt 0.556030 0.774290 0.000000 +vt 0.563860 0.774130 0.000000 +vt 0.552120 0.774370 0.000000 +vt 0.548200 0.774450 0.000000 +vt 0.547210 0.840910 0.000000 +vt 0.544850 0.841910 0.000000 +vt 0.544420 0.840090 0.000000 +vt 0.546820 0.839080 0.000000 +vt 0.542490 0.842920 0.000000 +vt 0.542020 0.841090 0.000000 +vt 0.541550 0.839260 0.000000 +vt 0.543990 0.838260 0.000000 +vt 0.546440 0.837260 0.000000 +vt 0.540130 0.843920 0.000000 +vt 0.539620 0.842090 0.000000 +vt 0.539110 0.840260 0.000000 +vt 0.538600 0.838440 0.000000 +vt 0.541080 0.837440 0.000000 +vt 0.543570 0.836440 0.000000 +vt 0.546050 0.835440 0.000000 +vt 0.578470 0.810080 0.000000 +vt 0.574610 0.814100 0.000000 +vt 0.582070 0.812280 0.000000 +vt 0.577950 0.816090 0.000000 +vt 0.573830 0.819900 0.000000 +vt 0.570750 0.818120 0.000000 +vt 0.585670 0.814470 0.000000 +vt 0.581290 0.818070 0.000000 +vt 0.589270 0.816660 0.000000 +vt 0.584630 0.820050 0.000000 +vt 0.579990 0.823450 0.000000 +vt 0.576910 0.821670 0.000000 +vt 0.572530 0.825270 0.000000 +vt 0.569710 0.823710 0.000000 +vt 0.575350 0.826840 0.000000 +vt 0.566890 0.822140 0.000000 +vt 0.525860 0.803230 0.000000 +vt 0.526260 0.798500 0.000000 +vt 0.525450 0.807950 0.000000 +vt 0.521680 0.808090 0.000000 +vt 0.521790 0.803320 0.000000 +vt 0.521900 0.798550 0.000000 +vt 0.525050 0.812670 0.000000 +vt 0.521580 0.812870 0.000000 +vt 0.518100 0.813060 0.000000 +vt 0.517910 0.808240 0.000000 +vt 0.517730 0.803420 0.000000 +vt 0.517540 0.798590 0.000000 +vt 0.547510 0.830250 0.000000 +vt 0.550000 0.828410 0.000000 +vt 0.545810 0.829260 0.000000 +vt 0.547970 0.827190 0.000000 +vt 0.550130 0.825120 0.000000 +vt 0.552490 0.826570 0.000000 +vt 0.544100 0.828270 0.000000 +vt 0.545930 0.825970 0.000000 +vt 0.547770 0.823680 0.000000 +vt 0.549610 0.821380 0.000000 +vt 0.552290 0.823060 0.000000 +vt 0.554970 0.824730 0.000000 +vt 0.509480 0.831010 0.000000 +vt 0.511070 0.835530 0.000000 +vt 0.507890 0.826490 0.000000 +vt 0.510920 0.826620 0.000000 +vt 0.512290 0.831100 0.000000 +vt 0.513660 0.835570 0.000000 +vt 0.506300 0.821970 0.000000 +vt 0.509550 0.822150 0.000000 +vt 0.512800 0.822330 0.000000 +vt 0.513950 0.826760 0.000000 +vt 0.515100 0.831180 0.000000 +vt 0.516250 0.835610 0.000000 +vt 0.532140 0.759370 0.000000 +vt 0.536420 0.759200 0.000000 +vt 0.535390 0.764130 0.000000 +vt 0.530890 0.764200 0.000000 +vt 0.540700 0.759020 0.000000 +vt 0.539900 0.764070 0.000000 +vt 0.539100 0.769110 0.000000 +vt 0.534370 0.769070 0.000000 +vt 0.529650 0.769040 0.000000 +vt 0.544980 0.758850 0.000000 +vt 0.544400 0.764000 0.000000 +vt 0.543830 0.769150 0.000000 +vt 0.543250 0.774300 0.000000 +vt 0.538300 0.774160 0.000000 +vt 0.533350 0.774010 0.000000 +vt 0.528400 0.773870 0.000000 +vt 0.529070 0.830130 0.000000 +vt 0.527060 0.830420 0.000000 +vt 0.531070 0.829830 0.000000 +vt 0.531210 0.832630 0.000000 +vt 0.529190 0.832930 0.000000 +vt 0.527180 0.833230 0.000000 +vt 0.533070 0.829540 0.000000 +vt 0.533220 0.832330 0.000000 +vt 0.533370 0.835120 0.000000 +vt 0.531350 0.835420 0.000000 +vt 0.529320 0.835730 0.000000 +vt 0.527300 0.836030 0.000000 +# 441 texture coords + +g rocksCombined006 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj.meta new file mode 100644 index 0000000..538013b --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined006.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 8d09c56b22d1335409a1baf8f5f4c62c +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined006 + 100002: //RootNode + 400000: rocksCombined006 + 400002: //RootNode + 2300000: rocksCombined006 + 3300000: rocksCombined006 + 4300000: rocksCombined006 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj new file mode 100644 index 0000000..8e77cec --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:35 + +mtllib rocksCombined007.mtl + +# +# object rocksCombined007 +# + +v 10.964703 2.060703 25.383419 +v 27.345358 2.287138 25.392433 +v 10.536152 1.271329 6.894779 +v 26.973978 1.838933 6.931145 +v 11.103951 20.842213 16.753548 +v 24.601980 21.264244 17.863293 +v 11.608601 19.819855 3.507980 +v 23.405148 20.246456 3.874157 +v 26.654343 12.452011 22.252811 +v 7.223885 12.361035 25.957598 +v 25.959488 10.536985 4.714584 +v 9.149376 10.743029 3.703514 +v 9.288887 1.572495 16.394135 +v 28.313782 1.375544 16.467304 +v 25.188971 21.463074 10.488922 +v 9.683239 21.328789 10.300652 +v 30.005114 11.720065 11.978653 +v 1.191059 11.736303 13.211700 +v 19.348122 1.305485 5.095966 +v 19.127502 1.775406 26.702358 +v 17.360989 21.840412 18.458179 +v 17.894985 21.221207 1.418579 +v 17.286808 12.617261 25.420935 +v 18.386940 10.776003 1.956051 +v 18.885681 0.451855 16.397835 +v 17.214161 23.495960 9.433140 +v 14.034691 0.303236 16.518818 +v 19.091141 0.745996 22.666981 +v 14.294323 1.539571 26.401890 +v 9.838219 1.530044 21.652962 +v 14.298622 0.723565 22.196411 +v 17.156010 23.347626 14.230587 +v 13.481266 22.859428 9.401630 +v 10.435760 20.920307 13.509720 +v 14.215893 21.485229 17.547626 +v 13.488178 23.031548 14.000629 +v 18.512707 6.170641 26.640205 +v 13.345634 13.133209 24.148373 +v 7.458885 6.283208 28.257807 +v 9.912464 6.895611 30.999619 +v 33.985226 7.139886 12.619797 +v 28.404415 12.198421 17.405140 +v 30.828659 7.680997 26.414116 +v 27.755434 1.442427 21.414101 +v 34.583794 8.483827 22.906490 +v 19.289135 4.743452 3.395260 +v 22.263653 10.947813 2.907936 +v 26.632460 5.833847 5.763752 +v 23.384829 1.268544 5.716591 +v 22.811480 5.403375 4.195049 +v 9.277714 1.244262 10.556686 +v 1.965927 6.987067 14.923798 +v 6.423832 10.649800 7.801720 +v 9.956635 5.064674 5.604183 +v 8.149025 5.396818 9.272793 +v 20.985378 21.464394 18.834671 +v 17.162098 18.364292 22.234596 +v 22.549570 12.130909 24.783875 +v 25.983379 17.574989 19.605740 +v 21.329487 17.518902 21.494308 +v 25.457439 16.083839 3.797230 +v 24.206852 20.968472 6.628139 +v 26.901960 16.405464 11.780174 +v 28.683119 11.500249 7.901558 +v 26.269480 16.388687 7.420826 +v 10.555428 15.796952 3.813690 +v 14.017090 20.633717 2.078651 +v 18.223373 15.835506 0.337646 +v 13.834541 10.748566 2.734627 +v 13.829716 16.059303 1.589355 +v 7.394989 17.073181 11.004398 +v 6.984035 11.560653 18.154072 +v 10.622612 18.089722 19.441044 +v 8.735466 17.251587 15.217041 +v 14.724907 1.224496 5.875774 +v 19.278469 0.336635 10.310257 +v 14.271446 0.507913 10.774544 +v 20.930576 21.215370 2.308319 +v 17.606155 22.798775 5.283577 +v 20.943172 22.387627 9.879341 +v 20.710896 22.228550 5.674049 +v 27.984335 1.350688 10.882538 +v 32.164146 6.878822 7.986961 +v 6.257225 6.709216 20.263596 +v 25.159998 21.500370 14.864616 +v 26.762283 17.049606 15.992287 +v 10.715416 20.711491 6.649593 +v 8.475052 16.525928 7.079655 +v 23.409224 1.662235 26.420279 +v 24.239689 0.048992 16.758747 +v 24.023186 0.529068 22.381268 +v 20.952110 23.199078 14.313019 +v 24.328787 6.459373 26.871738 +v 14.716141 5.232739 4.062511 +v 13.324638 18.622658 20.896561 +v 22.584843 16.025841 1.256886 +v 23.560551 0.336169 10.636936 +v 13.701298 22.306267 5.843189 +v 11.263947 0.719557 16.482986 +v 13.980816 0.411618 19.447441 +v 11.799995 0.780813 21.974968 +v 9.196777 1.416024 19.083836 +v 11.433121 0.679652 19.186779 +v 16.876408 0.315642 16.582218 +v 18.864403 0.511975 19.501289 +v 16.543430 0.612419 22.489544 +v 16.610142 0.404512 19.528034 +v 19.165073 0.859683 25.291130 +v 16.658539 1.650766 26.520586 +v 14.363396 0.970937 24.801043 +v 16.729336 0.932370 24.932724 +v 12.285973 1.673458 25.987207 +v 10.406296 1.712122 24.060211 +v 11.944660 0.910849 24.592749 +v 16.837845 23.212479 16.826027 +v 15.501778 22.819778 14.253323 +v 13.619331 22.573578 16.090145 +v 15.717918 21.599812 17.723099 +v 15.232327 22.990635 16.105869 +v 17.231785 23.155521 12.065296 +v 15.542744 22.893982 9.718540 +v 13.379990 22.662724 11.669209 +v 15.454502 23.021645 11.911217 +v 11.312275 22.559303 10.024265 +v 10.166897 21.192806 12.200459 +v 11.752865 21.910789 13.102245 +v 11.536236 22.400276 11.727726 +v 10.749866 21.110672 15.443817 +v 12.588726 21.097027 17.257786 +v 12.096664 22.006882 15.186333 +v 13.592087 3.306107 27.496586 +v 8.417240 6.282537 29.933981 +v 8.641224 3.760078 27.149118 +v 10.406586 3.498415 28.308617 +v 18.829018 3.746214 27.283020 +v 14.102978 6.612081 28.736097 +v 16.598083 3.435703 26.820013 +v 18.084145 8.886742 25.893198 +v 15.285828 13.194325 24.757587 +v 10.278091 9.885060 29.409378 +v 15.707001 9.631547 25.571396 +v 11.044250 12.770642 23.757401 +v 6.599705 9.228998 28.853680 +v 7.887260 9.619293 30.290016 +v 29.033003 3.378393 15.792084 +v 31.801867 7.058187 18.610600 +v 31.357971 4.169807 22.273266 +v 28.087603 1.465139 18.978863 +v 29.651236 3.248040 18.423046 +v 33.186043 9.701622 11.430576 +v 28.538704 11.638166 14.813255 +v 31.267620 10.181805 20.020649 +v 30.678839 9.539301 15.128986 +v 28.024433 12.529837 19.949650 +v 31.572042 10.973500 26.589867 +v 33.289581 8.273510 25.303543 +v 33.136730 11.362919 23.996387 +v 28.397991 4.224359 25.597649 +v 27.453362 1.497170 23.771648 +v 30.568457 4.486508 24.466209 +v 19.246815 2.940391 3.952812 +v 20.979599 5.167645 3.719837 +v 23.034569 3.023244 4.627659 +v 21.344059 1.304374 5.250362 +v 21.167450 3.033001 4.137218 +v 18.933849 7.566697 2.691151 +v 20.611149 11.035860 2.267262 +v 22.616655 7.850587 3.702179 +v 20.758247 7.500793 3.192387 +v 24.422630 10.501546 3.644466 +v 26.169262 8.358466 5.181934 +v 24.811869 5.586966 4.853386 +v 24.580109 8.141394 4.214134 +v 27.001991 3.322695 6.406025 +v 25.567032 1.406913 6.311932 +v 25.218578 3.164162 5.298096 +v 9.948196 1.101927 8.500790 +v 8.516434 3.107340 10.291660 +v 8.937065 5.243869 7.185364 +v 10.383072 2.996608 6.453381 +v 9.108921 2.774156 8.059647 +v 9.075092 1.488411 13.330601 +v 7.628719 3.350127 15.532291 +v 5.417595 5.964842 12.333813 +v 8.130619 3.296202 12.822250 +v 0.928059 9.624338 14.574696 +v 3.495125 11.374883 10.816257 +v 7.752266 7.661281 8.955021 +v 4.184479 8.712501 11.513783 +v 7.354927 10.376163 5.429264 +v 8.871037 7.671455 4.054855 +v 7.820904 7.722388 6.255783 +v 23.117643 21.531963 18.123268 +v 20.991982 19.902527 20.047215 +v 24.171831 17.639721 20.722904 +v 25.144306 19.454346 18.542263 +v 23.516993 19.585228 19.493824 +v 18.904652 22.005062 18.817745 +v 17.637390 20.326263 20.106647 +v 19.200165 17.653343 22.047298 +v 19.009945 20.662613 20.354717 +v 16.825901 16.039410 23.819702 +v 19.460270 11.930346 25.076824 +v 21.545940 14.952132 23.106800 +v 19.087887 15.377179 23.438408 +v 25.098467 12.470572 24.395008 +v 26.523300 15.395716 20.705635 +v 24.517853 15.305968 22.557323 +v 25.730345 13.305592 4.149090 +v 26.096510 16.284731 5.368980 +v 26.793407 13.633574 7.970135 +v 26.760935 10.906216 6.429508 +v 26.496464 13.531959 5.993629 +v 24.374569 18.793415 3.537487 +v 23.819614 20.770367 4.891418 +v 25.610226 18.926910 6.991909 +v 25.057207 18.866272 4.968212 +v 24.624149 21.139610 8.407707 +v 26.365248 19.321766 11.037918 +v 26.468021 16.318737 9.559986 +v 25.958242 19.047020 8.917843 +v 27.493570 13.871216 12.300507 +v 31.356401 11.898211 9.143753 +v 26.911749 13.855745 10.170826 +v 9.570999 13.264155 3.672840 +v 11.998089 15.789343 2.461216 +v 13.531857 13.246760 1.903034 +v 11.392200 10.825550 2.546593 +v 11.313313 13.536803 2.561710 +v 11.362942 18.418343 3.920891 +v 12.493156 20.381413 2.878090 +v 13.964649 18.491146 1.340363 +v 12.416679 18.482731 2.534538 +v 15.720226 21.059258 1.367584 +v 17.751705 18.797138 -0.000000 +v 15.982555 16.006813 0.761520 +v 15.639275 18.841694 0.169678 +v 18.399128 13.590406 1.466393 +v 16.109612 10.504147 1.896664 +v 16.038616 13.347885 1.735146 +v 9.420959 19.476585 14.320019 +v 9.692722 17.287952 17.577648 +v 11.006874 19.566757 18.006573 +v 9.820671 19.729496 16.240494 +v 8.685951 19.757744 10.665558 +v 7.862179 17.086250 12.915340 +v 8.947742 19.593475 12.572586 +v 3.043953 14.094495 12.016663 +v 0.475727 11.960288 15.874893 +v 8.214104 14.303193 16.841354 +v 2.610580 13.904320 14.375755 +v 7.812710 11.894472 21.797661 +v 10.368988 15.502842 21.060177 +v 9.382095 14.550993 19.151524 +v 12.160545 1.037724 6.362755 +v 14.522770 0.553518 7.994423 +v 11.552670 0.430061 11.049118 +v 11.735130 0.361639 8.323215 +v 17.098141 1.274500 5.324734 +v 19.396660 0.578483 7.380154 +v 17.128281 -0.000000 10.426842 +v 17.103340 0.566998 7.562603 +v 19.039459 0.399745 13.362015 +v 14.085571 0.322805 13.755436 +v 16.973240 0.163057 13.540508 +v 11.397705 0.686174 13.868542 +v 22.516090 21.009346 2.874592 +v 20.834549 22.256172 3.509480 +v 22.411367 21.782162 6.250427 +v 22.252979 21.786083 4.154430 +v 19.507168 21.066738 2.045177 +v 17.610817 22.276512 3.180603 +v 19.233139 22.685711 5.289055 +v 19.242420 21.977409 3.421696 +v 17.470303 23.790241 6.868446 +v 19.064629 22.596062 9.822918 +v 20.811653 22.200874 7.831642 +v 19.175316 22.801388 7.384453 +v 22.662992 22.185482 10.002312 +v 22.557083 21.776680 8.175037 +v 27.736012 6.121449 7.187820 +v 28.558590 3.396489 10.325470 +v 27.530989 1.520685 8.540165 +v 28.008036 3.554965 7.944107 +v 32.128403 9.556105 7.262119 +v 27.374075 8.451527 6.668240 +v 35.238632 7.448798 9.217247 +v 33.888226 9.801221 8.553276 +v 28.258417 1.284891 13.610386 +v 30.350201 3.420581 12.625546 +v 8.262787 3.665447 21.082180 +v 0.462536 7.384187 17.301884 +v 8.000797 3.563658 18.184422 +v 7.332722 6.540777 25.414656 +v 8.412670 3.855020 24.854532 +v 6.102833 9.257542 19.783348 +v 6.028309 9.335203 25.403309 +v 0.000000 9.850179 17.017887 +v 26.561430 17.283508 18.075657 +v 26.473133 19.253284 15.430111 +v 24.594202 21.135227 16.539146 +v 26.063015 19.282154 17.253578 +v 27.545397 14.919891 16.541321 +v 27.236696 14.971317 18.754524 +v 26.977507 16.655270 13.983250 +v 27.773975 14.742859 14.247391 +v 26.030170 21.776543 12.981983 +v 26.761515 19.441196 13.475151 +v 10.328854 20.627632 8.615864 +v 9.500359 19.000412 6.965923 +v 7.761612 17.119083 8.940571 +v 8.955452 19.265965 8.798607 +v 11.054386 20.574509 4.821068 +v 9.325066 16.024824 5.288639 +v 10.358753 18.509449 5.297073 +v 6.855106 13.616860 7.473206 +v 8.253815 13.004368 5.350063 +v 5.118317 14.217273 9.934162 +v 26.248289 0.613281 21.977955 +v 24.155903 0.561899 19.681339 +v 26.470364 0.707066 16.593887 +v 26.580202 0.636937 19.516907 +v 25.865026 1.787605 26.052080 +v 23.716696 0.798014 24.688808 +v 25.965929 0.699011 24.395830 +v 21.228710 1.723166 26.574804 +v 21.564915 0.667131 22.765167 +v 21.390087 0.881676 25.053814 +v 21.535515 0.232402 16.523865 +v 21.739136 0.385998 19.844948 +v 22.784052 22.699707 14.328854 +v 20.869621 22.702171 16.447372 +v 22.943075 22.131962 16.576550 +v 20.929440 22.587299 11.967541 +v 22.893122 22.745003 12.256264 +v 18.775421 23.209068 14.322460 +v 19.057720 23.076534 11.956738 +v 18.546227 23.150879 16.876518 +v 22.892267 3.641803 26.615332 +v 20.281727 5.896125 26.595308 +v 20.846855 3.654392 27.236366 +v 27.637276 7.012606 26.775015 +v 25.958317 3.922878 26.178162 +v 24.738340 9.276097 26.664436 +v 27.732164 10.198303 26.469097 +v 20.003429 8.674500 26.389648 +v 12.197849 5.492515 4.800701 +v 14.895561 2.737220 4.795403 +v 12.373608 2.525666 5.296383 +v 14.005821 8.320017 3.175533 +v 11.414410 8.206255 3.346657 +v 17.045559 5.093745 3.646187 +v 16.404655 8.004368 2.719307 +v 17.194672 2.789667 4.194580 +v 14.203014 19.999668 19.032639 +v 15.091431 18.672188 21.182755 +v 15.804058 20.262772 19.211876 +v 11.884674 18.047825 20.529285 +v 12.506775 19.725174 18.789715 +v 13.178650 15.885776 22.619247 +v 11.451504 16.133610 21.732502 +v 14.833878 15.825836 23.228020 +v 23.838863 16.422329 2.617123 +v 21.300320 18.875336 1.791229 +v 22.898148 18.953896 2.773632 +v 22.322041 13.623307 2.061974 +v 24.422188 13.541485 2.777905 +v 20.587070 15.952804 0.118412 +v 20.413376 13.652949 1.477348 +v 19.957596 18.387085 0.420971 +v 26.133421 0.604749 10.966255 +v 23.523872 0.499808 7.857803 +v 25.864426 0.688356 8.311947 +v 23.850302 0.336513 13.595783 +v 26.354221 0.554872 13.749088 +v 21.363537 0.403796 10.374664 +v 21.380112 0.383782 13.413704 +v 21.385120 0.547644 7.475269 +v 12.078579 21.590706 6.166538 +v 13.931519 21.784134 3.625999 +v 12.452850 21.432701 4.404636 +v 13.428356 22.601009 7.898029 +v 11.598618 21.926765 8.185745 +v 15.322857 22.951492 5.080532 +v 15.388054 23.089066 7.341618 +v 15.761276 22.338341 3.193905 +# 386 vertices + +vt 0.421220 0.080390 0.000000 +vt 0.420940 0.071890 0.000000 +vt 0.428230 0.071050 0.000000 +vt 0.428160 0.079340 0.000000 +vt 0.420650 0.063390 0.000000 +vt 0.428310 0.062760 0.000000 +vt 0.435960 0.062120 0.000000 +vt 0.435530 0.070210 0.000000 +vt 0.435100 0.078290 0.000000 +vt 0.420370 0.054900 0.000000 +vt 0.428380 0.054470 0.000000 +vt 0.420090 0.046400 0.000000 +vt 0.428450 0.046180 0.000000 +vt 0.436820 0.045950 0.000000 +vt 0.436390 0.054040 0.000000 +vt 0.444400 0.053610 0.000000 +vt 0.443610 0.061490 0.000000 +vt 0.445180 0.045730 0.000000 +vt 0.453550 0.045510 0.000000 +vt 0.452410 0.053180 0.000000 +vt 0.451260 0.060850 0.000000 +vt 0.442830 0.069360 0.000000 +vt 0.442040 0.077240 0.000000 +vt 0.450120 0.068520 0.000000 +vt 0.448980 0.076190 0.000000 +vt 0.433840 0.189690 0.000000 +vt 0.427700 0.190500 0.000000 +vt 0.426160 0.185460 0.000000 +vt 0.432010 0.184950 0.000000 +vt 0.421570 0.191310 0.000000 +vt 0.420310 0.185970 0.000000 +vt 0.419050 0.180630 0.000000 +vt 0.424620 0.180420 0.000000 +vt 0.430190 0.180210 0.000000 +vt 0.415440 0.192120 0.000000 +vt 0.414460 0.186480 0.000000 +vt 0.409300 0.192930 0.000000 +vt 0.408610 0.186990 0.000000 +vt 0.407920 0.181050 0.000000 +vt 0.413490 0.180840 0.000000 +vt 0.412510 0.175200 0.000000 +vt 0.417790 0.175300 0.000000 +vt 0.407220 0.175110 0.000000 +vt 0.406530 0.169170 0.000000 +vt 0.411530 0.169570 0.000000 +vt 0.416530 0.169960 0.000000 +vt 0.423080 0.175390 0.000000 +vt 0.428360 0.175480 0.000000 +vt 0.421540 0.170350 0.000000 +vt 0.426540 0.170740 0.000000 +vt 0.456360 0.077900 0.000000 +vt 0.453480 0.089750 0.000000 +vt 0.446420 0.088070 0.000000 +vt 0.463740 0.079620 0.000000 +vt 0.460540 0.091440 0.000000 +vt 0.457340 0.103260 0.000000 +vt 0.450600 0.101610 0.000000 +vt 0.443860 0.099950 0.000000 +vt 0.471110 0.081330 0.000000 +vt 0.467600 0.093120 0.000000 +vt 0.478490 0.083040 0.000000 +vt 0.474660 0.094800 0.000000 +vt 0.470820 0.106560 0.000000 +vt 0.464080 0.104910 0.000000 +vt 0.460560 0.116700 0.000000 +vt 0.454140 0.115080 0.000000 +vt 0.466980 0.118320 0.000000 +vt 0.463150 0.130090 0.000000 +vt 0.457040 0.128490 0.000000 +vt 0.450940 0.126900 0.000000 +vt 0.447720 0.113460 0.000000 +vt 0.441290 0.111840 0.000000 +vt 0.444840 0.125310 0.000000 +vt 0.438730 0.123720 0.000000 +vt 0.309790 0.067430 0.000000 +vt 0.310680 0.079640 0.000000 +vt 0.303790 0.078700 0.000000 +vt 0.302610 0.066470 0.000000 +vt 0.311580 0.091850 0.000000 +vt 0.304980 0.090920 0.000000 +vt 0.298380 0.089990 0.000000 +vt 0.296910 0.077760 0.000000 +vt 0.295440 0.065520 0.000000 +vt 0.312470 0.104060 0.000000 +vt 0.306160 0.103150 0.000000 +vt 0.313370 0.116270 0.000000 +vt 0.307350 0.115370 0.000000 +vt 0.301320 0.114470 0.000000 +vt 0.299850 0.102230 0.000000 +vt 0.293540 0.101310 0.000000 +vt 0.291780 0.089060 0.000000 +vt 0.295300 0.113560 0.000000 +vt 0.289280 0.112660 0.000000 +vt 0.287230 0.100400 0.000000 +vt 0.285180 0.088140 0.000000 +vt 0.290020 0.076810 0.000000 +vt 0.288260 0.064570 0.000000 +vt 0.283130 0.075870 0.000000 +vt 0.281080 0.063610 0.000000 +vt 0.365640 0.076320 0.000000 +vt 0.364720 0.088240 0.000000 +vt 0.357890 0.086980 0.000000 +vt 0.358600 0.075010 0.000000 +vt 0.363790 0.100150 0.000000 +vt 0.357180 0.098950 0.000000 +vt 0.350560 0.097740 0.000000 +vt 0.351070 0.085720 0.000000 +vt 0.351570 0.073710 0.000000 +vt 0.362860 0.112060 0.000000 +vt 0.356460 0.110910 0.000000 +vt 0.361940 0.123980 0.000000 +vt 0.355750 0.122880 0.000000 +vt 0.349560 0.121780 0.000000 +vt 0.350060 0.109760 0.000000 +vt 0.343660 0.108610 0.000000 +vt 0.343950 0.096540 0.000000 +vt 0.343370 0.120680 0.000000 +vt 0.337180 0.119580 0.000000 +vt 0.337260 0.107450 0.000000 +vt 0.337340 0.095330 0.000000 +vt 0.344240 0.084470 0.000000 +vt 0.344530 0.072400 0.000000 +vt 0.337420 0.083210 0.000000 +vt 0.337490 0.071090 0.000000 +vt 0.393250 0.079290 0.000000 +vt 0.400240 0.079570 0.000000 +vt 0.398480 0.091110 0.000000 +vt 0.391580 0.090980 0.000000 +vt 0.407230 0.079840 0.000000 +vt 0.405370 0.091250 0.000000 +vt 0.403520 0.102650 0.000000 +vt 0.396720 0.102660 0.000000 +vt 0.389920 0.102660 0.000000 +vt 0.414230 0.080120 0.000000 +vt 0.412270 0.091380 0.000000 +vt 0.419170 0.091510 0.000000 +vt 0.417110 0.102630 0.000000 +vt 0.410310 0.102640 0.000000 +vt 0.408350 0.113900 0.000000 +vt 0.401660 0.114050 0.000000 +vt 0.415050 0.113750 0.000000 +vt 0.413000 0.124870 0.000000 +vt 0.406400 0.125160 0.000000 +vt 0.399800 0.125450 0.000000 +vt 0.394960 0.114200 0.000000 +vt 0.388260 0.114350 0.000000 +vt 0.393200 0.125740 0.000000 +vt 0.386600 0.126030 0.000000 +vt 0.466960 0.181830 0.000000 +vt 0.461960 0.180480 0.000000 +vt 0.466850 0.169100 0.000000 +vt 0.472130 0.170520 0.000000 +vt 0.456970 0.179130 0.000000 +vt 0.461570 0.167680 0.000000 +vt 0.466180 0.156230 0.000000 +vt 0.471740 0.157710 0.000000 +vt 0.477300 0.159200 0.000000 +vt 0.451970 0.177780 0.000000 +vt 0.456300 0.166260 0.000000 +vt 0.446980 0.176430 0.000000 +vt 0.451020 0.164840 0.000000 +vt 0.455060 0.153260 0.000000 +vt 0.460620 0.154740 0.000000 +vt 0.464950 0.143230 0.000000 +vt 0.470790 0.144780 0.000000 +vt 0.459110 0.141670 0.000000 +vt 0.469270 0.131710 0.000000 +vt 0.475390 0.133330 0.000000 +vt 0.476630 0.146330 0.000000 +vt 0.482470 0.147890 0.000000 +vt 0.481510 0.134950 0.000000 +vt 0.487640 0.136570 0.000000 +vt 0.337470 0.131780 0.000000 +vt 0.331660 0.130950 0.000000 +vt 0.331230 0.118750 0.000000 +vt 0.337770 0.143970 0.000000 +vt 0.332100 0.143150 0.000000 +vt 0.326430 0.142330 0.000000 +vt 0.325850 0.130130 0.000000 +vt 0.325270 0.117930 0.000000 +vt 0.338060 0.156170 0.000000 +vt 0.332540 0.155360 0.000000 +vt 0.338360 0.168370 0.000000 +vt 0.332980 0.167560 0.000000 +vt 0.327600 0.166740 0.000000 +vt 0.327020 0.154540 0.000000 +vt 0.321490 0.153720 0.000000 +vt 0.320770 0.141520 0.000000 +vt 0.322210 0.165930 0.000000 +vt 0.316830 0.165120 0.000000 +vt 0.315970 0.152910 0.000000 +vt 0.315100 0.140700 0.000000 +vt 0.320040 0.129310 0.000000 +vt 0.319320 0.117100 0.000000 +vt 0.314230 0.128480 0.000000 +vt 0.386850 0.137640 0.000000 +vt 0.380670 0.137250 0.000000 +vt 0.380430 0.125520 0.000000 +vt 0.387100 0.149250 0.000000 +vt 0.380900 0.148970 0.000000 +vt 0.374700 0.148700 0.000000 +vt 0.374480 0.136850 0.000000 +vt 0.374270 0.125010 0.000000 +vt 0.387350 0.160850 0.000000 +vt 0.381130 0.160700 0.000000 +vt 0.387600 0.172460 0.000000 +vt 0.381370 0.172420 0.000000 +vt 0.375130 0.172390 0.000000 +vt 0.374920 0.160540 0.000000 +vt 0.368700 0.160390 0.000000 +vt 0.368500 0.148420 0.000000 +vt 0.368900 0.172350 0.000000 +vt 0.362660 0.172320 0.000000 +vt 0.362480 0.160230 0.000000 +vt 0.362300 0.148150 0.000000 +vt 0.368300 0.136460 0.000000 +vt 0.368100 0.124490 0.000000 +vt 0.362120 0.136060 0.000000 +vt 0.424230 0.158760 0.000000 +vt 0.429590 0.158980 0.000000 +vt 0.418870 0.158540 0.000000 +vt 0.421200 0.147130 0.000000 +vt 0.426920 0.147180 0.000000 +vt 0.432630 0.147230 0.000000 +vt 0.413510 0.158320 0.000000 +vt 0.408150 0.158100 0.000000 +vt 0.409760 0.147020 0.000000 +vt 0.415480 0.147080 0.000000 +vt 0.417460 0.135830 0.000000 +vt 0.423530 0.135710 0.000000 +vt 0.411380 0.135950 0.000000 +vt 0.419430 0.124590 0.000000 +vt 0.425860 0.124300 0.000000 +vt 0.429610 0.135590 0.000000 +vt 0.435680 0.135470 0.000000 +vt 0.432300 0.124010 0.000000 +vt 0.390890 0.071760 0.000000 +vt 0.398410 0.071800 0.000000 +vt 0.388540 0.064230 0.000000 +vt 0.396570 0.064020 0.000000 +vt 0.404600 0.063810 0.000000 +vt 0.405920 0.071830 0.000000 +vt 0.386190 0.056700 0.000000 +vt 0.394740 0.056250 0.000000 +vt 0.383840 0.049170 0.000000 +vt 0.392900 0.048480 0.000000 +vt 0.401960 0.047780 0.000000 +vt 0.403280 0.055800 0.000000 +vt 0.411830 0.055350 0.000000 +vt 0.412630 0.063600 0.000000 +vt 0.411030 0.047090 0.000000 +vt 0.413430 0.071860 0.000000 +vt 0.391620 0.214080 0.000000 +vt 0.389410 0.209180 0.000000 +vt 0.394820 0.209270 0.000000 +vt 0.396620 0.214330 0.000000 +vt 0.387210 0.204280 0.000000 +vt 0.393020 0.204200 0.000000 +vt 0.398830 0.204130 0.000000 +vt 0.400230 0.209350 0.000000 +vt 0.401620 0.214570 0.000000 +vt 0.385000 0.199370 0.000000 +vt 0.391220 0.199140 0.000000 +vt 0.382800 0.194470 0.000000 +vt 0.389430 0.194080 0.000000 +vt 0.396050 0.193700 0.000000 +vt 0.397440 0.198920 0.000000 +vt 0.403660 0.198690 0.000000 +vt 0.404650 0.204060 0.000000 +vt 0.402680 0.193310 0.000000 +vt 0.409880 0.198460 0.000000 +vt 0.410460 0.203990 0.000000 +vt 0.405630 0.209440 0.000000 +vt 0.406620 0.214810 0.000000 +vt 0.411040 0.209520 0.000000 +vt 0.411620 0.215050 0.000000 +vt 0.330730 0.082320 0.000000 +vt 0.330570 0.070170 0.000000 +vt 0.330900 0.094460 0.000000 +vt 0.324460 0.093590 0.000000 +vt 0.324050 0.081420 0.000000 +vt 0.323640 0.069260 0.000000 +vt 0.331060 0.106610 0.000000 +vt 0.324860 0.105760 0.000000 +vt 0.318670 0.104910 0.000000 +vt 0.318020 0.092720 0.000000 +vt 0.317370 0.080530 0.000000 +vt 0.316710 0.068340 0.000000 +vt 0.425980 0.090650 0.000000 +vt 0.432790 0.089790 0.000000 +vt 0.430480 0.101290 0.000000 +vt 0.423800 0.101960 0.000000 +vt 0.439600 0.088930 0.000000 +vt 0.437170 0.100620 0.000000 +vt 0.434730 0.112320 0.000000 +vt 0.428170 0.112800 0.000000 +vt 0.421610 0.113270 0.000000 +vt 0.296670 0.161830 0.000000 +vt 0.294820 0.149540 0.000000 +vt 0.300110 0.150380 0.000000 +vt 0.301710 0.162650 0.000000 +vt 0.292980 0.137240 0.000000 +vt 0.298510 0.138110 0.000000 +vt 0.304040 0.138970 0.000000 +vt 0.305400 0.151220 0.000000 +vt 0.306750 0.163470 0.000000 +vt 0.291130 0.124950 0.000000 +vt 0.296900 0.125840 0.000000 +vt 0.302680 0.126720 0.000000 +vt 0.308460 0.127600 0.000000 +vt 0.309570 0.139830 0.000000 +vt 0.310680 0.152060 0.000000 +vt 0.311790 0.164300 0.000000 +vt 0.401800 0.170000 0.000000 +vt 0.402950 0.158790 0.000000 +vt 0.397070 0.170820 0.000000 +vt 0.397750 0.159480 0.000000 +vt 0.398430 0.148140 0.000000 +vt 0.404100 0.147580 0.000000 +vt 0.392330 0.171640 0.000000 +vt 0.392550 0.160160 0.000000 +vt 0.392770 0.148690 0.000000 +vt 0.392980 0.137220 0.000000 +vt 0.399110 0.136790 0.000000 +vt 0.405250 0.136370 0.000000 +vt 0.418580 0.014130 0.000000 +vt 0.425960 0.014440 0.000000 +vt 0.426580 0.022370 0.000000 +vt 0.418960 0.022200 0.000000 +vt 0.433340 0.014750 0.000000 +vt 0.434210 0.022550 0.000000 +vt 0.435080 0.030350 0.000000 +vt 0.427210 0.030310 0.000000 +vt 0.419330 0.030260 0.000000 +vt 0.440720 0.015050 0.000000 +vt 0.441830 0.022720 0.000000 +vt 0.448100 0.015360 0.000000 +vt 0.449460 0.022900 0.000000 +vt 0.450820 0.030440 0.000000 +vt 0.442950 0.030390 0.000000 +vt 0.444070 0.038060 0.000000 +vt 0.435950 0.038150 0.000000 +vt 0.452190 0.037970 0.000000 +vt 0.427830 0.038240 0.000000 +vt 0.419710 0.038330 0.000000 +vt 0.431250 0.210460 0.000000 +vt 0.426350 0.211610 0.000000 +vt 0.426680 0.206330 0.000000 +vt 0.431900 0.205270 0.000000 +vt 0.421440 0.212760 0.000000 +vt 0.421470 0.207400 0.000000 +vt 0.421500 0.202030 0.000000 +vt 0.427020 0.201050 0.000000 +vt 0.432550 0.200080 0.000000 +vt 0.416530 0.213900 0.000000 +vt 0.416250 0.208460 0.000000 +vt 0.415980 0.203010 0.000000 +vt 0.415710 0.197570 0.000000 +vt 0.421540 0.196670 0.000000 +vt 0.427360 0.195780 0.000000 +vt 0.433190 0.194880 0.000000 +vt 0.485900 0.085050 0.000000 +vt 0.481750 0.096710 0.000000 +vt 0.493320 0.087050 0.000000 +vt 0.488840 0.098620 0.000000 +vt 0.484350 0.110190 0.000000 +vt 0.477590 0.108380 0.000000 +vt 0.500730 0.089060 0.000000 +vt 0.495920 0.100530 0.000000 +vt 0.508140 0.091060 0.000000 +vt 0.503010 0.102440 0.000000 +vt 0.497890 0.113820 0.000000 +vt 0.491120 0.112000 0.000000 +vt 0.486320 0.123480 0.000000 +vt 0.479870 0.121760 0.000000 +vt 0.492760 0.125190 0.000000 +vt 0.473430 0.120040 0.000000 +vt 0.384870 0.090290 0.000000 +vt 0.386340 0.078550 0.000000 +vt 0.383390 0.102040 0.000000 +vt 0.376860 0.101410 0.000000 +vt 0.378150 0.089610 0.000000 +vt 0.379440 0.077810 0.000000 +vt 0.381910 0.113780 0.000000 +vt 0.375560 0.113210 0.000000 +vt 0.369210 0.112640 0.000000 +vt 0.370320 0.100780 0.000000 +vt 0.371430 0.088920 0.000000 +vt 0.372540 0.077070 0.000000 +vt 0.441870 0.175010 0.000000 +vt 0.445660 0.163380 0.000000 +vt 0.436760 0.173580 0.000000 +vt 0.440300 0.161910 0.000000 +vt 0.443850 0.150240 0.000000 +vt 0.449460 0.151750 0.000000 +vt 0.431650 0.172160 0.000000 +vt 0.434940 0.160450 0.000000 +vt 0.438240 0.148740 0.000000 +vt 0.441540 0.137020 0.000000 +vt 0.447390 0.138570 0.000000 +vt 0.453250 0.140120 0.000000 +vt 0.344170 0.157190 0.000000 +vt 0.344440 0.169360 0.000000 +vt 0.343900 0.145020 0.000000 +vt 0.350040 0.146060 0.000000 +vt 0.350270 0.158200 0.000000 +vt 0.350510 0.170340 0.000000 +vt 0.343640 0.132850 0.000000 +vt 0.349800 0.133920 0.000000 +vt 0.355960 0.134990 0.000000 +vt 0.356170 0.147100 0.000000 +vt 0.356380 0.159220 0.000000 +vt 0.356590 0.171330 0.000000 +vt 0.389260 0.018450 0.000000 +vt 0.396590 0.017370 0.000000 +vt 0.395670 0.025150 0.000000 +vt 0.387910 0.026130 0.000000 +vt 0.403920 0.016290 0.000000 +vt 0.403430 0.024160 0.000000 +vt 0.402940 0.032040 0.000000 +vt 0.394750 0.032920 0.000000 +vt 0.386550 0.033810 0.000000 +vt 0.411250 0.015210 0.000000 +vt 0.411200 0.023180 0.000000 +vt 0.411140 0.031150 0.000000 +vt 0.411080 0.039120 0.000000 +vt 0.402450 0.039910 0.000000 +vt 0.393830 0.040700 0.000000 +vt 0.385200 0.041490 0.000000 +vt 0.391610 0.177250 0.000000 +vt 0.386400 0.177960 0.000000 +vt 0.396810 0.176540 0.000000 +vt 0.396560 0.182260 0.000000 +vt 0.390880 0.182860 0.000000 +vt 0.385200 0.183460 0.000000 +vt 0.402020 0.175830 0.000000 +vt 0.402240 0.181650 0.000000 +vt 0.402460 0.187480 0.000000 +vt 0.396310 0.187980 0.000000 +vt 0.390150 0.188470 0.000000 +vt 0.384000 0.188970 0.000000 +# 441 texture coords + +g rocksCombined007 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj.meta new file mode 100644 index 0000000..7500cd9 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined007.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: d80eafca38da38b4ab0d3f8c339cd21d +timeCreated: 1484958684 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined007 + 100002: //RootNode + 400000: rocksCombined007 + 400002: //RootNode + 2300000: rocksCombined007 + 3300000: rocksCombined007 + 4300000: rocksCombined007 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj new file mode 100644 index 0000000..89b0aa2 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:36 + +mtllib rocksCombined008.mtl + +# +# object rocksCombined008 +# + +v 7.110207 1.141730 25.318413 +v 21.665909 1.584376 24.287104 +v 8.134468 1.728494 4.462513 +v 21.819998 1.666365 4.805959 +v 10.551201 15.847735 13.122950 +v 17.013746 16.027000 13.500446 +v 9.925919 15.988008 2.916963 +v 16.920603 15.948421 3.948786 +v 21.101648 12.068750 19.805435 +v 8.224899 11.453432 19.257574 +v 20.199657 10.292729 3.969982 +v 7.879494 10.835123 2.782233 +v 6.940067 1.339416 14.336479 +v 22.342932 1.555780 14.670742 +v 17.718113 16.682224 9.031877 +v 8.882378 16.413162 7.717909 +v 21.517748 10.943830 11.511055 +v 6.511086 10.121129 10.897735 +v 15.034691 1.193531 3.383413 +v 15.046616 1.672721 25.991550 +v 13.611195 16.111012 13.278904 +v 13.492279 15.756968 2.615408 +v 14.415283 13.621738 23.411848 +v 13.987656 10.519829 -0.000000 +v 15.036156 0.422328 15.061865 +v 13.394672 16.396164 7.767171 +v 10.412434 0.003613 14.536968 +v 15.036255 0.718309 21.325977 +v 10.846157 1.673385 25.879087 +v 4.757057 1.204984 20.301624 +v 10.973747 0.497096 21.073256 +v 13.471519 16.556671 10.828948 +v 11.295193 16.774878 7.445663 +v 9.432114 16.355228 10.508026 +v 11.919739 16.359957 13.321138 +v 11.586769 16.841539 10.341660 +v 14.676128 9.959373 27.331127 +v 11.182129 11.234495 20.846558 +v 6.934330 6.325927 22.447624 +v 11.356606 6.095644 24.267321 +v 26.699331 6.667333 13.195036 +v 21.059147 11.387167 16.152748 +v 22.345184 6.487588 22.767891 +v 22.053446 1.426268 20.264759 +v 21.656969 5.842251 18.179516 +v 14.519180 5.557842 0.993802 +v 16.900949 10.739956 1.412176 +v 22.136456 5.676037 3.389326 +v 18.776684 1.168975 4.077818 +v 17.949572 5.833665 1.992961 +v 7.360744 1.103995 8.800580 +v 1.149647 6.537417 11.007113 +v 2.568687 11.612022 4.900126 +v 7.654758 5.902085 3.553736 +v 2.938057 5.985408 6.345125 +v 15.338070 16.192593 13.251867 +v 13.934849 14.608536 17.409655 +v 17.290661 13.781502 22.529980 +v 18.211313 13.817068 16.020218 +v 16.384010 14.904178 17.091518 +v 18.468636 13.709538 3.567662 +v 17.313791 16.531067 5.667359 +v 18.889374 13.516635 10.425185 +v 20.625225 10.299382 7.930938 +v 18.984573 13.466951 7.271498 +v 8.682926 14.568228 1.870899 +v 11.361305 15.810536 2.104696 +v 13.475391 13.137631 0.522096 +v 10.845325 10.892631 0.703517 +v 11.171593 13.478699 1.196676 +v 7.309464 14.452191 9.142426 +v 4.561134 11.384330 15.637993 +v 9.456882 14.077011 15.378330 +v 7.322353 14.852313 11.966537 +v 11.291389 1.201886 3.950015 +v 15.008373 0.557434 8.369480 +v 10.833767 0.426513 8.459661 +v 15.222229 15.886834 3.252625 +v 13.396454 16.238018 5.124853 +v 15.166924 16.703156 7.896802 +v 15.066174 16.320539 5.305031 +v 26.972649 1.848325 8.912615 +v 27.280434 6.427444 7.819132 +v 0.715439 6.511204 18.797737 +v 17.272942 16.418119 11.355244 +v 18.609507 13.743814 13.159100 +v 9.438774 16.086006 5.005205 +v 8.276783 14.148727 5.481525 +v 18.925123 1.340366 25.547995 +v 19.019196 0.714210 14.885342 +v 19.031887 0.618989 21.104692 +v 15.539642 16.976669 11.314823 +v 18.268375 8.405832 25.473982 +v 11.142731 5.444448 1.828351 +v 11.497528 14.240212 16.660046 +v 15.903820 13.516456 2.364173 +v 19.343657 0.004326 9.078639 +v 11.179611 16.427956 4.649505 +v 8.516476 0.510372 14.647804 +v 10.412949 0.106888 17.670902 +v 8.716370 0.171843 20.842630 +v 4.422836 1.434226 17.415140 +v 8.379234 0.446145 17.633724 +v 12.824860 0.402688 14.739656 +v 14.988365 0.604292 18.198597 +v 13.035748 0.694366 21.245766 +v 12.897373 0.716809 18.016006 +v 15.098930 0.829753 24.237484 +v 12.738461 1.983675 26.233944 +v 11.177071 0.672636 24.091885 +v 13.171803 0.787188 24.160042 +v 8.844669 0.985695 25.640390 +v 6.459393 0.783198 23.561020 +v 8.068283 0.186724 24.276577 +v 13.608902 17.009148 12.102509 +v 12.471703 16.881308 10.684891 +v 11.828903 16.761904 12.280989 +v 12.674255 16.245892 13.513372 +v 12.666801 17.036543 12.213516 +v 13.323395 16.692890 9.114732 +v 12.410660 16.746494 7.420740 +v 11.397636 16.903887 8.908173 +v 12.353554 16.970547 8.904816 +v 9.906185 16.810722 7.353339 +v 8.976410 16.488716 8.789639 +v 10.539764 16.873533 10.297825 +v 9.825390 17.473042 8.695615 +v 10.340370 15.804262 12.347733 +v 11.147373 16.086296 13.118921 +v 11.101952 16.223465 12.067760 +v 10.845985 3.761635 25.973740 +v 8.804207 5.935773 24.102196 +v 7.713364 2.645217 24.433973 +v 8.683571 3.068426 25.932333 +v 14.540321 4.017618 26.134693 +v 13.035187 8.306330 26.087931 +v 12.755589 3.856055 26.017145 +v 14.804153 12.419017 25.710777 +v 12.685070 12.707413 22.212059 +v 10.890648 9.551733 22.743637 +v 13.214321 10.838387 24.509045 +v 9.483944 11.566124 20.242550 +v 7.662685 9.252043 20.717411 +v 9.145012 9.178812 21.928501 +v 24.667948 3.740414 14.050237 +v 23.780014 6.397620 15.738758 +v 22.145950 3.185239 19.402330 +v 22.201534 1.493583 17.537186 +v 22.261976 3.361423 16.691555 +v 27.418615 9.449548 12.453497 +v 22.595438 11.114800 13.885256 +v 22.490698 9.040297 17.251886 +v 25.669907 9.432784 14.850477 +v 21.640823 11.787771 18.436979 +v 23.556328 9.859594 21.743694 +v 23.125242 6.239505 21.051888 +v 24.708651 9.877858 20.224552 +v 21.331566 3.196977 23.617035 +v 22.007708 1.315830 22.878212 +v 21.905140 3.158594 21.809551 +v 14.838879 3.038039 2.125106 +v 16.177780 5.607601 1.207802 +v 18.504145 3.458984 2.099668 +v 16.868483 1.165388 3.679212 +v 16.526211 3.252880 1.991990 +v 14.236908 8.072896 0.359343 +v 15.406166 10.532646 0.684106 +v 17.496498 8.647959 1.202289 +v 15.814804 8.133721 0.602866 +v 18.663593 10.555675 2.275262 +v 21.034952 8.037701 3.985465 +v 20.297333 5.597705 2.629920 +v 19.702120 8.334995 2.306884 +v 22.018454 2.879633 4.410309 +v 20.904387 1.465702 4.032398 +v 20.727831 2.780390 3.354133 +v 7.691387 0.967224 6.406998 +v 5.564999 2.751985 7.584735 +v 5.071964 6.091715 4.769023 +v 8.262783 3.155048 4.442760 +v 7.183277 2.943304 6.138066 +v 7.045338 1.194991 11.635431 +v 6.118149 3.074271 13.725872 +v 1.041973 6.075861 8.094063 +v 4.294147 3.024536 10.160452 +v 1.439354 8.860589 10.489730 +v 2.297234 11.517573 7.185586 +v 1.575649 9.082685 5.251370 +v 0.000000 9.150274 7.108073 +v 5.120136 11.288863 3.580760 +v 6.406574 8.867145 2.505116 +v 3.626106 9.093857 3.494505 +v 16.322506 16.279387 13.360445 +v 15.776199 15.682879 15.025286 +v 17.546417 14.778522 16.596788 +v 17.570417 15.434832 14.327568 +v 16.908728 15.546503 14.980938 +v 14.531685 16.006947 13.531197 +v 13.556496 15.611123 14.977795 +v 15.222424 14.643872 17.435150 +v 14.548294 15.974879 14.759281 +v 14.191032 13.807151 20.093609 +v 15.833885 14.008069 23.601624 +v 16.777824 12.731766 18.561554 +v 15.543320 13.102433 19.109531 +v 18.550610 11.771546 19.901989 +v 18.959452 13.060509 17.556896 +v 17.936258 13.345985 18.213039 +v 19.471626 12.173471 3.753254 +v 19.004818 13.543157 5.528915 +v 19.848288 11.925566 7.797222 +v 20.574333 10.293841 5.804175 +v 19.736675 12.040588 5.641421 +v 17.367260 14.899354 3.797445 +v 17.161610 16.436005 4.448401 +v 18.311466 15.217010 6.611229 +v 18.059225 15.236255 4.827255 +v 17.544081 16.612944 7.395816 +v 18.250452 15.040499 9.821548 +v 18.980103 13.338151 9.160666 +v 18.400700 15.218241 8.113317 +v 19.706713 12.266154 10.870026 +v 20.678598 10.651577 9.566299 +v 19.734718 12.101916 9.328803 +v 8.696316 12.639085 2.581258 +v 9.984787 13.940523 1.542593 +v 11.029949 12.260845 0.983861 +v 9.722794 10.720569 1.893695 +v 9.735691 12.496949 1.663898 +v 9.476025 15.581660 2.515371 +v 10.621426 15.773954 2.683881 +v 11.460384 14.857654 1.588398 +v 10.534126 15.140339 2.137003 +v 12.216053 15.764673 1.919447 +v 13.451519 14.637033 1.661955 +v 12.263916 13.265879 0.692962 +v 12.233612 14.438405 1.044292 +v 13.777409 12.168730 0.021709 +v 12.441872 10.829106 0.009240 +v 12.415970 12.187630 0.348002 +v 8.409790 15.640007 10.834975 +v 8.522686 14.549178 14.004045 +v 9.847485 15.354948 13.619022 +v 9.224052 15.651036 13.225729 +v 8.275585 15.236307 8.256117 +v 7.097908 14.679938 10.353757 +v 8.035458 15.609326 9.331303 +v 6.504391 13.143112 9.914673 +v 4.937756 10.711796 13.557149 +v 6.919033 13.027808 13.807999 +v 6.469467 12.885783 11.889766 +v 7.367218 11.446015 17.422495 +v 8.986889 12.816478 17.382803 +v 8.136932 12.799208 15.786263 +v 9.347832 1.148527 4.215476 +v 11.172749 0.358193 6.306061 +v 8.783047 0.403889 8.752360 +v 9.278526 0.438204 6.605830 +v 13.187466 1.236060 3.598142 +v 15.070465 0.517051 5.704209 +v 12.944355 0.486162 8.272170 +v 13.152267 0.497290 5.974341 +v 15.177460 0.218428 11.937984 +v 10.674229 0.356440 11.608908 +v 12.869274 0.208051 11.440498 +v 8.574234 0.450805 11.789271 +v 16.082485 15.920082 3.620123 +v 15.050110 16.162819 4.244128 +v 16.027851 16.444746 5.338082 +v 15.922695 16.236017 4.428963 +v 14.372166 15.983571 2.659757 +v 13.419598 16.257427 3.619795 +v 14.236782 16.215635 5.230474 +v 14.255314 16.115891 3.985908 +v 13.339775 16.581379 6.272725 +v 14.281719 16.513245 7.727050 +v 15.127541 16.631477 6.354808 +v 14.248569 16.712067 6.129253 +v 16.550724 17.015114 8.545059 +v 16.203194 16.713764 6.568480 +v 22.492704 5.867748 5.528729 +v 28.548666 3.778919 8.706727 +v 22.297428 1.586195 6.263955 +v 24.745834 3.217039 6.148264 +v 21.696884 8.583982 7.721937 +v 21.470350 8.085095 5.963072 +v 29.162079 6.768847 10.584697 +v 26.358751 9.095296 9.968290 +v 25.363449 1.679232 11.815609 +v 27.373035 3.894328 11.337732 +v 1.200062 3.667928 20.101992 +v 3.055130 6.183213 15.220591 +v 3.301193 3.365005 16.736488 +v 0.784592 6.392270 21.508656 +v 3.489525 3.328067 22.788172 +v 1.470699 9.521557 17.724907 +v 3.768341 9.369833 19.433983 +v 3.016014 8.795954 14.942974 +v 18.491625 13.723343 14.715733 +v 18.019131 15.315917 12.204689 +v 17.087442 16.350189 12.614079 +v 17.852020 15.439910 13.363831 +v 19.599859 12.501171 14.544182 +v 19.498457 12.679757 16.341938 +v 18.694834 13.595266 11.682807 +v 19.649370 12.494035 12.574915 +v 17.520798 16.528967 10.278186 +v 18.192421 15.275707 11.079099 +v 9.208073 16.072882 6.326928 +v 8.753086 15.350780 5.210721 +v 7.729095 14.278892 7.380676 +v 8.469215 15.325266 6.746145 +v 9.738686 16.057762 3.806658 +v 8.373318 14.380742 3.630592 +v 9.110085 15.433296 3.703650 +v 7.687881 12.360048 6.021317 +v 7.914841 12.626754 3.882586 +v 7.301018 12.551464 8.112074 +v 20.909822 0.668519 20.846172 +v 19.007153 0.718607 17.964502 +v 20.985723 0.815481 14.909981 +v 21.160700 0.647041 18.073322 +v 20.715330 1.267637 25.085030 +v 19.067327 0.626486 23.916519 +v 20.961382 0.580506 23.586414 +v 16.993073 1.512415 25.837595 +v 17.037968 0.681225 21.267559 +v 17.062584 0.767347 24.135462 +v 17.089916 0.485707 15.016216 +v 16.999866 0.723408 18.043545 +v 16.644178 17.071724 11.411833 +v 15.417839 16.835661 12.260078 +v 16.351208 16.873379 12.259007 +v 15.344135 16.593849 9.630429 +v 16.767885 16.947891 10.248392 +v 14.402554 16.745049 10.807224 +v 14.250557 16.497334 9.422813 +v 14.531631 16.652752 12.409178 +v 18.533541 3.646024 25.332609 +v 16.355398 11.192064 27.972742 +v 16.640617 3.889775 25.818556 +v 20.170567 6.291236 23.590969 +v 20.183195 3.360139 24.711105 +v 17.722876 13.020013 24.911522 +v 20.971167 9.797159 22.269260 +v 16.291363 13.867476 26.137478 +v 9.608803 5.660253 2.697892 +v 11.228741 2.860048 2.577345 +v 9.569824 3.007159 3.351691 +v 11.021748 8.174471 1.127061 +v 9.532871 8.453002 1.900636 +v 12.929546 5.542844 1.571145 +v 12.702114 8.173992 0.915803 +v 13.125362 3.018847 2.415020 +v 11.544064 15.414886 14.675070 +v 12.560200 14.664052 16.898613 +v 12.423203 15.731761 14.817613 +v 10.165092 14.228189 15.839624 +v 10.633564 15.266655 14.289746 +v 11.321461 13.373325 18.734835 +v 10.013561 13.032929 18.456718 +v 12.889641 13.240503 19.365494 +v 17.006615 13.556918 2.863859 +v 15.385696 14.541354 2.882727 +v 16.270985 14.550811 3.320211 +v 16.424768 12.328158 1.845590 +v 17.748857 12.281824 2.477679 +v 14.778019 13.403213 1.919532 +v 15.178303 12.398901 1.137630 +v 14.500690 14.659196 2.371271 +v 24.146618 0.847414 9.126915 +v 19.244465 -0.000000 6.068351 +v 21.288044 0.439082 6.090518 +v 20.339401 0.604308 11.900735 +v 22.634974 0.883394 11.960452 +v 17.267729 0.057446 8.770928 +v 17.235273 0.165699 11.967279 +v 16.964680 0.567548 5.742616 +v 10.124809 16.645821 4.736273 +v 11.308098 16.135191 3.400324 +v 10.492531 16.135098 3.629550 +v 11.082443 16.909462 6.009077 +v 10.009655 16.566811 6.046912 +v 12.376175 16.574123 4.805902 +v 12.343578 16.738323 6.234789 +v 12.309872 16.212641 3.422891 +# 386 vertices + +vt 0.574400 0.236560 0.000000 +vt 0.575640 0.229400 0.000000 +vt 0.584130 0.230350 0.000000 +vt 0.582510 0.237250 0.000000 +vt 0.576880 0.222230 0.000000 +vt 0.585740 0.223440 0.000000 +vt 0.594600 0.224650 0.000000 +vt 0.592610 0.231300 0.000000 +vt 0.590620 0.237940 0.000000 +vt 0.578130 0.215070 0.000000 +vt 0.587360 0.216540 0.000000 +vt 0.579370 0.207910 0.000000 +vt 0.588980 0.209640 0.000000 +vt 0.598590 0.211370 0.000000 +vt 0.596600 0.218010 0.000000 +vt 0.605830 0.219480 0.000000 +vt 0.603460 0.225860 0.000000 +vt 0.608200 0.213090 0.000000 +vt 0.617810 0.214820 0.000000 +vt 0.615070 0.220940 0.000000 +vt 0.612320 0.227070 0.000000 +vt 0.601090 0.232250 0.000000 +vt 0.598720 0.238630 0.000000 +vt 0.609570 0.233200 0.000000 +vt 0.606830 0.239330 0.000000 +vt 0.559390 0.318820 0.000000 +vt 0.555280 0.318180 0.000000 +vt 0.555120 0.315770 0.000000 +vt 0.559080 0.316530 0.000000 +vt 0.551170 0.317540 0.000000 +vt 0.551160 0.315000 0.000000 +vt 0.551150 0.312470 0.000000 +vt 0.554960 0.313350 0.000000 +vt 0.558770 0.314240 0.000000 +vt 0.547060 0.316900 0.000000 +vt 0.547200 0.314240 0.000000 +vt 0.542950 0.316260 0.000000 +vt 0.543240 0.313480 0.000000 +vt 0.543520 0.310690 0.000000 +vt 0.547340 0.311580 0.000000 +vt 0.547480 0.308920 0.000000 +vt 0.551140 0.309930 0.000000 +vt 0.543810 0.307910 0.000000 +vt 0.544100 0.305130 0.000000 +vt 0.547610 0.306260 0.000000 +vt 0.551130 0.307390 0.000000 +vt 0.554800 0.310940 0.000000 +vt 0.558470 0.311950 0.000000 +vt 0.554640 0.308520 0.000000 +vt 0.558160 0.309650 0.000000 +vt 0.612230 0.243180 0.000000 +vt 0.604770 0.254010 0.000000 +vt 0.599860 0.250470 0.000000 +vt 0.617630 0.247030 0.000000 +vt 0.609670 0.257560 0.000000 +vt 0.601710 0.268090 0.000000 +vt 0.597300 0.264850 0.000000 +vt 0.592890 0.261610 0.000000 +vt 0.623040 0.250880 0.000000 +vt 0.614580 0.261110 0.000000 +vt 0.628440 0.254740 0.000000 +vt 0.619490 0.264660 0.000000 +vt 0.610530 0.274570 0.000000 +vt 0.606120 0.271330 0.000000 +vt 0.597660 0.281560 0.000000 +vt 0.593750 0.278620 0.000000 +vt 0.601570 0.284490 0.000000 +vt 0.592620 0.294410 0.000000 +vt 0.589200 0.291780 0.000000 +vt 0.585790 0.289150 0.000000 +vt 0.589840 0.275680 0.000000 +vt 0.585930 0.272750 0.000000 +vt 0.582370 0.286520 0.000000 +vt 0.578960 0.283890 0.000000 +vt 0.457380 0.226270 0.000000 +vt 0.461450 0.238540 0.000000 +vt 0.453610 0.239260 0.000000 +vt 0.448960 0.227070 0.000000 +vt 0.465520 0.250810 0.000000 +vt 0.458270 0.251440 0.000000 +vt 0.451010 0.252070 0.000000 +vt 0.445770 0.239970 0.000000 +vt 0.440530 0.227870 0.000000 +vt 0.469590 0.263070 0.000000 +vt 0.462920 0.263620 0.000000 +vt 0.473660 0.275340 0.000000 +vt 0.467580 0.275810 0.000000 +vt 0.461490 0.276280 0.000000 +vt 0.456250 0.264170 0.000000 +vt 0.449580 0.264730 0.000000 +vt 0.443760 0.252710 0.000000 +vt 0.455410 0.276750 0.000000 +vt 0.449320 0.277220 0.000000 +vt 0.442920 0.265280 0.000000 +vt 0.436510 0.253340 0.000000 +vt 0.437940 0.240690 0.000000 +vt 0.432110 0.228670 0.000000 +vt 0.430100 0.241400 0.000000 +vt 0.423690 0.229460 0.000000 +vt 0.516970 0.226160 0.000000 +vt 0.516330 0.238600 0.000000 +vt 0.510260 0.237930 0.000000 +vt 0.510350 0.225510 0.000000 +vt 0.515680 0.251030 0.000000 +vt 0.510170 0.250350 0.000000 +vt 0.504650 0.249680 0.000000 +vt 0.504190 0.237270 0.000000 +vt 0.503730 0.224860 0.000000 +vt 0.515040 0.263460 0.000000 +vt 0.510070 0.262770 0.000000 +vt 0.514400 0.275890 0.000000 +vt 0.509980 0.275200 0.000000 +vt 0.505560 0.274500 0.000000 +vt 0.505110 0.262090 0.000000 +vt 0.500140 0.261400 0.000000 +vt 0.499130 0.249000 0.000000 +vt 0.501150 0.273800 0.000000 +vt 0.496730 0.273100 0.000000 +vt 0.495170 0.260710 0.000000 +vt 0.493610 0.248320 0.000000 +vt 0.498120 0.236600 0.000000 +vt 0.497120 0.224200 0.000000 +vt 0.492060 0.235940 0.000000 +vt 0.490500 0.223550 0.000000 +vt 0.542210 0.229800 0.000000 +vt 0.550260 0.231490 0.000000 +vt 0.547190 0.243480 0.000000 +vt 0.539660 0.241990 0.000000 +vt 0.558310 0.233180 0.000000 +vt 0.554720 0.244970 0.000000 +vt 0.551140 0.256770 0.000000 +vt 0.544130 0.255480 0.000000 +vt 0.537120 0.254180 0.000000 +vt 0.566350 0.234870 0.000000 +vt 0.562250 0.246470 0.000000 +vt 0.569780 0.247960 0.000000 +vt 0.565150 0.259360 0.000000 +vt 0.558150 0.258070 0.000000 +vt 0.554040 0.269660 0.000000 +vt 0.547550 0.268570 0.000000 +vt 0.560530 0.270760 0.000000 +vt 0.555910 0.282160 0.000000 +vt 0.549940 0.281260 0.000000 +vt 0.543970 0.280360 0.000000 +vt 0.541070 0.267470 0.000000 +vt 0.534580 0.266370 0.000000 +vt 0.538000 0.279460 0.000000 +vt 0.532030 0.278560 0.000000 +vt 0.576370 0.325060 0.000000 +vt 0.574440 0.323100 0.000000 +vt 0.581550 0.318320 0.000000 +vt 0.583860 0.320590 0.000000 +vt 0.572510 0.321140 0.000000 +vt 0.579250 0.316050 0.000000 +vt 0.585990 0.310970 0.000000 +vt 0.588670 0.313550 0.000000 +vt 0.591350 0.316120 0.000000 +vt 0.570570 0.319180 0.000000 +vt 0.576940 0.313780 0.000000 +vt 0.568640 0.317210 0.000000 +vt 0.574640 0.311510 0.000000 +vt 0.580630 0.305810 0.000000 +vt 0.583310 0.308390 0.000000 +vt 0.589680 0.303000 0.000000 +vt 0.592730 0.305880 0.000000 +vt 0.586620 0.300110 0.000000 +vt 0.596040 0.297600 0.000000 +vt 0.599470 0.300800 0.000000 +vt 0.595780 0.308770 0.000000 +vt 0.598830 0.311650 0.000000 +vt 0.602890 0.303990 0.000000 +vt 0.606320 0.307180 0.000000 +vt 0.498120 0.279750 0.000000 +vt 0.492870 0.280260 0.000000 +vt 0.490960 0.273660 0.000000 +vt 0.499520 0.286400 0.000000 +vt 0.494770 0.286860 0.000000 +vt 0.490030 0.287310 0.000000 +vt 0.487610 0.280760 0.000000 +vt 0.485190 0.274220 0.000000 +vt 0.500910 0.293050 0.000000 +vt 0.496680 0.293450 0.000000 +vt 0.502310 0.299700 0.000000 +vt 0.498580 0.300050 0.000000 +vt 0.494860 0.300400 0.000000 +vt 0.492440 0.293850 0.000000 +vt 0.488210 0.294250 0.000000 +vt 0.485280 0.287760 0.000000 +vt 0.491140 0.300750 0.000000 +vt 0.487410 0.301090 0.000000 +vt 0.483970 0.294650 0.000000 +vt 0.480540 0.288220 0.000000 +vt 0.482350 0.281270 0.000000 +vt 0.479430 0.274780 0.000000 +vt 0.477100 0.281780 0.000000 +vt 0.531650 0.284700 0.000000 +vt 0.527440 0.284100 0.000000 +vt 0.527620 0.277890 0.000000 +vt 0.531260 0.290840 0.000000 +vt 0.527260 0.290300 0.000000 +vt 0.523270 0.289750 0.000000 +vt 0.523240 0.283490 0.000000 +vt 0.523220 0.277230 0.000000 +vt 0.530880 0.296990 0.000000 +vt 0.527080 0.296500 0.000000 +vt 0.530490 0.303130 0.000000 +vt 0.526900 0.302700 0.000000 +vt 0.523320 0.302270 0.000000 +vt 0.523290 0.296010 0.000000 +vt 0.519500 0.295530 0.000000 +vt 0.519270 0.289200 0.000000 +vt 0.519730 0.301850 0.000000 +vt 0.516140 0.301420 0.000000 +vt 0.515700 0.295040 0.000000 +vt 0.515270 0.288660 0.000000 +vt 0.519040 0.282880 0.000000 +vt 0.518810 0.276560 0.000000 +vt 0.514830 0.282280 0.000000 +vt 0.559280 0.302250 0.000000 +vt 0.563360 0.303210 0.000000 +vt 0.555200 0.301300 0.000000 +vt 0.559280 0.295210 0.000000 +vt 0.563920 0.295990 0.000000 +vt 0.568560 0.296770 0.000000 +vt 0.551130 0.300340 0.000000 +vt 0.547050 0.299390 0.000000 +vt 0.550000 0.293640 0.000000 +vt 0.554640 0.294430 0.000000 +vt 0.558160 0.288510 0.000000 +vt 0.563360 0.289120 0.000000 +vt 0.552950 0.287900 0.000000 +vt 0.561670 0.282590 0.000000 +vt 0.567430 0.283020 0.000000 +vt 0.568560 0.289720 0.000000 +vt 0.573760 0.290330 0.000000 +vt 0.573200 0.283460 0.000000 +vt 0.540970 0.222980 0.000000 +vt 0.549640 0.224580 0.000000 +vt 0.539740 0.216160 0.000000 +vt 0.549020 0.217680 0.000000 +vt 0.558310 0.219200 0.000000 +vt 0.558310 0.226190 0.000000 +vt 0.538500 0.209330 0.000000 +vt 0.548410 0.210770 0.000000 +vt 0.537270 0.202510 0.000000 +vt 0.547790 0.203860 0.000000 +vt 0.558320 0.205210 0.000000 +vt 0.558310 0.212200 0.000000 +vt 0.568220 0.213640 0.000000 +vt 0.567600 0.220710 0.000000 +vt 0.568840 0.206560 0.000000 +vt 0.566980 0.227790 0.000000 +vt 0.528710 0.323010 0.000000 +vt 0.527960 0.320490 0.000000 +vt 0.531350 0.321360 0.000000 +vt 0.531790 0.323900 0.000000 +vt 0.527220 0.317970 0.000000 +vt 0.530910 0.318830 0.000000 +vt 0.534600 0.319690 0.000000 +vt 0.534730 0.322240 0.000000 +vt 0.534870 0.324790 0.000000 +vt 0.526470 0.315450 0.000000 +vt 0.530470 0.316290 0.000000 +vt 0.525730 0.312920 0.000000 +vt 0.530040 0.313760 0.000000 +vt 0.534340 0.314590 0.000000 +vt 0.534470 0.317140 0.000000 +vt 0.538470 0.317990 0.000000 +vt 0.538290 0.320550 0.000000 +vt 0.538640 0.315430 0.000000 +vt 0.542470 0.318840 0.000000 +vt 0.541990 0.321410 0.000000 +vt 0.538120 0.323110 0.000000 +vt 0.537950 0.325680 0.000000 +vt 0.541510 0.323990 0.000000 +vt 0.541030 0.326570 0.000000 +vt 0.484400 0.236590 0.000000 +vt 0.482220 0.224230 0.000000 +vt 0.486590 0.248940 0.000000 +vt 0.479570 0.249570 0.000000 +vt 0.476750 0.237240 0.000000 +vt 0.473940 0.224910 0.000000 +vt 0.488780 0.261300 0.000000 +vt 0.482380 0.261890 0.000000 +vt 0.475980 0.262480 0.000000 +vt 0.472540 0.250190 0.000000 +vt 0.469100 0.237890 0.000000 +vt 0.465660 0.225590 0.000000 +vt 0.577300 0.248580 0.000000 +vt 0.584820 0.249210 0.000000 +vt 0.579020 0.260480 0.000000 +vt 0.572090 0.259920 0.000000 +vt 0.592340 0.249840 0.000000 +vt 0.585960 0.261040 0.000000 +vt 0.579580 0.272250 0.000000 +vt 0.573230 0.271750 0.000000 +vt 0.566880 0.271260 0.000000 +vt 0.473990 0.302120 0.000000 +vt 0.467820 0.295890 0.000000 +vt 0.471860 0.295580 0.000000 +vt 0.477340 0.301860 0.000000 +vt 0.461660 0.289670 0.000000 +vt 0.466380 0.289300 0.000000 +vt 0.471100 0.288940 0.000000 +vt 0.475900 0.295270 0.000000 +vt 0.480700 0.301610 0.000000 +vt 0.455490 0.283440 0.000000 +vt 0.460890 0.283030 0.000000 +vt 0.466290 0.282610 0.000000 +vt 0.471700 0.282190 0.000000 +vt 0.475820 0.288580 0.000000 +vt 0.479940 0.294960 0.000000 +vt 0.484060 0.301350 0.000000 +vt 0.540700 0.304630 0.000000 +vt 0.543010 0.298790 0.000000 +vt 0.537300 0.304130 0.000000 +vt 0.538970 0.298190 0.000000 +vt 0.540630 0.292240 0.000000 +vt 0.545320 0.292940 0.000000 +vt 0.533900 0.303630 0.000000 +vt 0.534920 0.297590 0.000000 +vt 0.535950 0.291540 0.000000 +vt 0.536970 0.285500 0.000000 +vt 0.542300 0.286300 0.000000 +vt 0.547630 0.287100 0.000000 +vt 0.583930 0.180540 0.000000 +vt 0.592290 0.182460 0.000000 +vt 0.591460 0.189250 0.000000 +vt 0.582790 0.187390 0.000000 +vt 0.600640 0.184370 0.000000 +vt 0.600130 0.191120 0.000000 +vt 0.599620 0.197870 0.000000 +vt 0.590630 0.196050 0.000000 +vt 0.581650 0.194230 0.000000 +vt 0.609000 0.186280 0.000000 +vt 0.608800 0.192980 0.000000 +vt 0.617360 0.188200 0.000000 +vt 0.617470 0.194850 0.000000 +vt 0.617590 0.201510 0.000000 +vt 0.608600 0.199690 0.000000 +vt 0.608400 0.206390 0.000000 +vt 0.599100 0.204620 0.000000 +vt 0.617700 0.208160 0.000000 +vt 0.589810 0.202840 0.000000 +vt 0.580510 0.201070 0.000000 +vt 0.553960 0.327930 0.000000 +vt 0.550730 0.327590 0.000000 +vt 0.551870 0.325240 0.000000 +vt 0.555320 0.325650 0.000000 +vt 0.547490 0.327250 0.000000 +vt 0.548410 0.324820 0.000000 +vt 0.549330 0.322390 0.000000 +vt 0.553000 0.322890 0.000000 +vt 0.556680 0.323380 0.000000 +vt 0.544260 0.326910 0.000000 +vt 0.544960 0.324400 0.000000 +vt 0.545660 0.321900 0.000000 +vt 0.546360 0.319400 0.000000 +vt 0.550250 0.319970 0.000000 +vt 0.554140 0.320530 0.000000 +vt 0.558030 0.321100 0.000000 +vt 0.633440 0.259220 0.000000 +vt 0.624090 0.268820 0.000000 +vt 0.638430 0.263710 0.000000 +vt 0.628690 0.272980 0.000000 +vt 0.618950 0.282250 0.000000 +vt 0.614740 0.278410 0.000000 +vt 0.643430 0.268190 0.000000 +vt 0.633300 0.277140 0.000000 +vt 0.648430 0.272670 0.000000 +vt 0.637900 0.281300 0.000000 +vt 0.627370 0.289930 0.000000 +vt 0.623160 0.286090 0.000000 +vt 0.613030 0.295040 0.000000 +vt 0.609210 0.291520 0.000000 +vt 0.616850 0.298560 0.000000 +vt 0.605390 0.288010 0.000000 +vt 0.533830 0.241140 0.000000 +vt 0.535900 0.228890 0.000000 +vt 0.531760 0.253390 0.000000 +vt 0.526400 0.252600 0.000000 +vt 0.528000 0.240290 0.000000 +vt 0.529590 0.227980 0.000000 +vt 0.529690 0.265640 0.000000 +vt 0.524810 0.264920 0.000000 +vt 0.519930 0.264190 0.000000 +vt 0.521040 0.251820 0.000000 +vt 0.522160 0.239440 0.000000 +vt 0.523280 0.227070 0.000000 +vt 0.566020 0.315320 0.000000 +vt 0.571820 0.309440 0.000000 +vt 0.563400 0.313430 0.000000 +vt 0.569000 0.307360 0.000000 +vt 0.574590 0.301290 0.000000 +vt 0.577610 0.303550 0.000000 +vt 0.560780 0.311540 0.000000 +vt 0.566180 0.305290 0.000000 +vt 0.571580 0.299030 0.000000 +vt 0.576970 0.292770 0.000000 +vt 0.580190 0.295220 0.000000 +vt 0.583410 0.297670 0.000000 +vt 0.504610 0.293550 0.000000 +vt 0.505770 0.300130 0.000000 +vt 0.503460 0.286970 0.000000 +vt 0.507390 0.287530 0.000000 +vt 0.508310 0.294050 0.000000 +vt 0.509220 0.300560 0.000000 +vt 0.502300 0.280380 0.000000 +vt 0.506480 0.281010 0.000000 +vt 0.510660 0.281650 0.000000 +vt 0.511330 0.288090 0.000000 +vt 0.512010 0.294540 0.000000 +vt 0.512680 0.300990 0.000000 +vt 0.549590 0.177670 0.000000 +vt 0.558180 0.178390 0.000000 +vt 0.555580 0.184760 0.000000 +vt 0.546510 0.183880 0.000000 +vt 0.566760 0.179110 0.000000 +vt 0.564650 0.185630 0.000000 +vt 0.562540 0.192160 0.000000 +vt 0.552980 0.191120 0.000000 +vt 0.543430 0.190090 0.000000 +vt 0.575340 0.179820 0.000000 +vt 0.573720 0.186510 0.000000 +vt 0.572090 0.193190 0.000000 +vt 0.570470 0.199880 0.000000 +vt 0.560430 0.198690 0.000000 +vt 0.550390 0.197490 0.000000 +vt 0.540350 0.196300 0.000000 +vt 0.532930 0.306160 0.000000 +vt 0.529300 0.305580 0.000000 +vt 0.536560 0.306740 0.000000 +vt 0.535820 0.309360 0.000000 +vt 0.531970 0.308690 0.000000 +vt 0.528110 0.308030 0.000000 +vt 0.540190 0.307330 0.000000 +vt 0.539670 0.310030 0.000000 +vt 0.539160 0.312730 0.000000 +vt 0.535080 0.311980 0.000000 +vt 0.531000 0.311230 0.000000 +vt 0.526920 0.310480 0.000000 +# 441 texture coords + +g rocksCombined008 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj.meta new file mode 100644 index 0000000..085449a --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined008.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 0faba08109ae8c94bac359d349595e04 +timeCreated: 1484958682 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined008 + 100002: //RootNode + 400000: rocksCombined008 + 400002: //RootNode + 2300000: rocksCombined008 + 3300000: rocksCombined008 + 4300000: rocksCombined008 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj new file mode 100644 index 0000000..6da16a3 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj @@ -0,0 +1,1228 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:37 + +mtllib rocksCombined009.mtl + +# +# object rocksCombined009 +# + +v 6.809261 1.465528 16.262241 +v 20.462044 2.844458 16.753773 +v 8.413776 1.981924 4.072922 +v 20.034897 2.484838 4.348667 +v 6.626457 21.403473 10.394680 +v 17.027706 20.157173 10.234898 +v 7.503494 21.173885 1.807613 +v 16.968342 20.503330 2.454769 +v 21.902342 12.908176 15.318344 +v 2.968468 14.244748 16.300049 +v 19.322323 11.579767 3.441532 +v 7.392574 11.672723 1.782635 +v 5.490471 0.957699 9.573528 +v 21.466499 1.355916 10.547764 +v 17.654751 21.624599 6.536846 +v 5.663834 22.052418 6.171734 +v 23.130041 11.761643 9.338531 +v 4.078915 11.152702 7.813850 +v 14.067814 1.884843 3.032440 +v 14.164845 1.786434 17.393433 +v 13.020676 21.426594 12.054634 +v 12.912472 21.714005 0.697407 +v 10.809654 14.594239 19.793156 +v 13.669548 11.463511 1.267849 +v 13.790565 0.147463 10.187649 +v 12.803116 23.357960 6.151180 +v 9.969795 0.909905 10.016338 +v 14.217236 0.956394 14.026371 +v 10.109112 1.497218 16.861153 +v 6.061630 0.743152 13.311085 +v 10.020714 0.227926 13.475765 +v 13.212566 22.830120 9.017666 +v 8.893715 23.335117 5.516533 +v 6.488491 21.011120 7.786541 +v 10.544445 21.851681 11.423176 +v 9.251621 23.713886 9.260120 +v 13.716103 8.113111 19.686718 +v 6.322853 14.778084 17.662594 +v 2.266052 8.981012 19.619732 +v 6.767448 11.606054 22.608021 +v 22.656931 6.749887 9.322433 +v 24.018974 11.553592 10.660397 +v 24.944448 6.936167 15.741161 +v 20.817162 1.894638 13.979282 +v 28.068533 6.026738 11.699936 +v 13.999535 6.057830 2.122738 +v 16.540161 11.321499 2.225174 +v 19.560577 6.559400 3.885601 +v 16.903389 1.883276 3.424492 +v 16.639679 6.129095 2.558449 +v 7.144588 1.039963 6.128185 +v 0.301579 7.139930 7.285297 +v 5.837326 11.434243 4.631310 +v 7.435257 6.213906 2.302345 +v 6.000572 6.289755 5.135452 +v 15.548439 20.831436 10.906948 +v 12.847172 17.947762 14.655361 +v 17.314453 13.113109 16.832230 +v 18.104530 17.695324 12.276463 +v 15.913704 17.771557 13.335110 +v 18.202194 16.698067 2.864960 +v 17.259617 20.831097 4.149693 +v 19.024311 17.270885 7.316120 +v 20.235683 11.952758 5.901844 +v 18.913879 16.670055 5.031929 +v 7.286388 16.722408 1.472324 +v 10.419788 21.893639 1.247612 +v 13.282227 16.793850 0.879112 +v 10.104805 11.377794 0.852703 +v 9.765896 16.689260 0.216831 +v 4.809513 17.384384 7.323048 +v 2.998413 12.181534 11.724728 +v 5.400780 18.750172 12.030312 +v 4.811306 17.504456 9.898563 +v 10.517891 1.646817 3.453857 +v 13.996056 1.077313 6.273869 +v 10.085823 0.953839 6.453735 +v 15.244358 21.058975 1.625450 +v 12.952320 22.929462 3.102112 +v 15.450451 22.479946 6.209396 +v 15.391354 21.906364 3.647121 +v 20.808079 2.127952 7.023407 +v 20.614376 7.152834 6.432522 +v 1.170044 7.839341 14.412811 +v 16.894093 20.533020 8.459579 +v 18.590656 17.945499 9.936169 +v 6.943596 21.538853 3.596016 +v 6.144855 16.814003 4.732418 +v 17.890949 2.106936 16.997555 +v 17.742989 0.866822 10.556946 +v 17.878761 1.335485 14.045341 +v 15.602463 21.601223 8.581554 +v 20.779255 7.568062 17.561497 +v 10.626389 6.002936 2.215733 +v 9.502785 18.803352 13.708351 +v 16.144161 17.044773 1.349335 +v 17.155266 1.172017 6.594090 +v 9.264194 23.073914 2.610653 +v 7.639191 0.398146 9.818420 +v 9.660461 0.408292 11.659042 +v 7.261108 -0.000000 13.454029 +v 5.206631 0.886579 11.465824 +v 7.598080 0.389976 11.671581 +v 11.995239 0.409140 10.192162 +v 14.022846 0.795551 12.098740 +v 12.072128 0.295646 14.012760 +v 12.083176 0.583927 11.865429 +v 14.184235 1.080271 15.941933 +v 12.383698 1.844512 16.967060 +v 10.046734 0.396817 15.616726 +v 12.360950 0.901415 15.804905 +v 7.831287 1.166600 16.363277 +v 6.557732 1.153367 15.177528 +v 7.546474 0.012562 15.362820 +v 13.089508 22.656197 10.795486 +v 11.604389 23.316639 9.453594 +v 10.388874 22.718697 10.475864 +v 11.494503 21.876568 11.789516 +v 11.482700 22.773239 10.784386 +v 12.957710 22.948967 7.539516 +v 11.071308 23.473557 6.060154 +v 9.097359 23.725616 7.453533 +v 11.438992 23.547371 7.700188 +v 6.620396 22.742302 5.158463 +v 5.989578 21.592098 7.077438 +v 7.567303 22.021568 7.893475 +v 6.847538 22.616589 6.250244 +v 6.309624 21.654400 9.434269 +v 8.787952 21.852726 10.591599 +v 7.985924 22.911133 9.826820 +v 9.843098 3.871700 18.161293 +v 4.447815 10.244027 20.313965 +v 2.813076 6.003430 19.265503 +v 6.482891 4.222272 17.692486 +v 14.014992 3.746745 17.684303 +v 9.750622 11.825048 24.746128 +v 12.172722 4.050350 17.740978 +v 12.190269 13.242067 21.976421 +v 9.512493 15.265691 20.013866 +v 5.902706 13.324667 19.962906 +v 9.848206 13.677868 22.672596 +v 5.047493 14.161749 16.619114 +v 1.402050 12.045201 18.083382 +v 4.093102 12.382213 18.569798 +v 21.637119 3.915874 10.153854 +v 27.137577 6.449819 9.836277 +v 24.373709 3.621902 13.105057 +v 21.185715 1.640979 12.210762 +v 21.982571 3.298218 12.036697 +v 26.019350 9.066364 8.168594 +v 23.675840 11.429383 9.472633 +v 26.893650 9.484973 11.120422 +v 27.706823 9.356884 9.134872 +v 22.931498 12.865684 13.236145 +v 22.970398 10.173438 16.517235 +v 26.832081 5.989845 14.162201 +v 25.226027 10.034886 14.272808 +v 20.775181 4.464572 16.949932 +v 21.087473 2.123417 15.914555 +v 22.364355 4.144521 15.309704 +v 14.067104 3.669678 2.383385 +v 15.207848 5.998971 2.199306 +v 16.596779 3.626902 2.729416 +v 15.635990 1.888819 3.172470 +v 15.444469 3.662938 2.475880 +v 13.841846 8.675932 1.480492 +v 15.011562 11.398594 1.590584 +v 16.718925 8.718999 2.461956 +v 15.118977 8.617294 2.022358 +v 18.144077 11.378131 2.764465 +v 19.299820 9.025427 3.785679 +v 18.265629 6.381226 3.177856 +v 18.293724 8.853671 3.000305 +v 19.945732 4.008637 4.073776 +v 18.874863 2.070596 3.887558 +v 18.593925 3.875976 3.326199 +v 7.694950 1.247020 4.554382 +v 6.205193 3.206134 5.569466 +v 7.006214 6.468119 3.951145 +v 7.617188 3.121169 2.751942 +v 7.263268 3.358927 4.557796 +v 6.726265 1.073317 7.907730 +v 0.000000 3.703896 7.626884 +v 3.452782 6.763844 5.966900 +v 3.899570 3.346369 6.479828 +v 1.762730 9.193441 7.659122 +v 4.503025 11.345371 6.089363 +v 5.967361 9.295331 5.035988 +v 4.201908 9.437263 6.320404 +v 6.840603 11.672040 3.129009 +v 7.441761 9.125612 1.957726 +v 6.721931 9.470494 3.283234 +v 16.583477 20.587708 10.584957 +v 15.784439 19.561420 12.165340 +v 17.214699 17.718788 12.871117 +v 17.631840 19.483524 11.114494 +v 16.885735 19.554062 11.715317 +v 14.372768 21.025089 11.488205 +v 13.331085 19.910873 13.328869 +v 14.276333 17.759480 14.235901 +v 14.407314 19.610645 12.951729 +v 12.253086 16.592331 17.040615 +v 15.064537 12.977422 16.790596 +v 16.367397 15.704058 15.251614 +v 14.446060 15.720490 15.751171 +v 19.923958 13.053087 16.546501 +v 19.653843 15.258857 13.555595 +v 17.943489 15.612916 14.668846 +v 19.005127 14.293970 3.095028 +v 18.792336 16.627081 3.904068 +v 19.652664 14.560879 5.336300 +v 19.973038 11.800005 4.538757 +v 19.422253 14.226501 4.142422 +v 17.473576 19.103119 2.532528 +v 17.068954 20.783905 3.098671 +v 18.122650 19.081997 4.590961 +v 17.862782 19.048222 3.480694 +v 17.436550 21.113033 5.257042 +v 18.144936 19.904236 6.688644 +v 19.052750 16.794195 6.186256 +v 18.408752 19.390507 5.666706 +v 19.911575 14.696098 8.017921 +v 20.693893 12.514747 7.265915 +v 19.866859 14.936322 6.604160 +v 7.406113 13.835345 1.745869 +v 8.367821 16.711960 0.730171 +v 9.805950 13.810557 0.451527 +v 8.452293 11.391250 0.837448 +v 8.378223 14.064936 0.665413 +v 7.212746 19.473652 1.860619 +v 8.493912 21.676495 1.733227 +v 10.214237 19.621418 0.797043 +v 8.238628 19.508011 1.187595 +v 11.778336 21.906517 0.750866 +v 13.347012 19.572956 0.504387 +v 11.479500 16.825363 -0.000000 +v 11.841251 19.811390 0.285473 +v 13.478073 14.073950 0.755623 +v 12.136784 11.404024 1.195549 +v 11.820297 13.863796 0.423988 +v 4.990761 20.098938 9.287498 +v 4.575531 18.122612 11.179882 +v 6.188549 20.535172 11.186306 +v 4.922653 20.415611 10.472664 +v 4.954193 20.090206 6.936722 +v 5.659260 17.256668 8.695847 +v 5.802570 19.712250 8.037575 +v 4.711681 14.378394 7.584866 +v 3.980618 10.778337 9.464935 +v 5.084709 14.427911 10.646858 +v 4.642761 14.231791 9.247505 +v 2.550945 13.801778 13.984310 +v 4.936226 16.313128 12.863091 +v 4.195015 15.765280 11.481579 +v 9.405266 1.820913 4.001335 +v 10.263939 0.966219 4.730305 +v 8.755672 0.980177 6.590794 +v 9.152943 1.153419 5.201954 +v 12.281471 1.784822 3.139477 +v 14.040905 1.172162 4.430008 +v 12.127522 1.067200 6.336727 +v 12.167187 1.099085 4.501820 +v 13.919460 1.021984 8.161381 +v 9.966942 1.002786 8.270458 +v 12.105499 1.075747 8.223209 +v 7.981071 0.545961 7.896290 +v 16.294514 20.918175 2.039726 +v 15.269291 21.846066 2.434673 +v 16.317822 21.608864 3.864948 +v 16.234108 21.538681 2.785019 +v 14.069874 21.245106 1.200535 +v 12.927895 22.749878 1.641533 +v 14.226276 22.707481 3.221905 +v 14.147964 22.628960 1.836666 +v 13.004990 22.982800 4.619114 +v 14.188694 23.026527 6.197769 +v 15.489769 21.823254 4.931263 +v 14.345264 22.420326 4.738373 +v 16.584743 22.244370 6.299522 +v 16.432976 21.789829 5.022091 +v 20.387699 7.021083 4.888645 +v 20.993015 3.994188 6.866253 +v 20.508202 2.166232 5.398586 +v 20.648849 3.993928 5.301746 +v 19.960304 9.675570 6.152737 +v 19.873333 9.649141 4.696224 +v 20.800758 7.203172 8.114944 +v 20.094074 9.623892 7.701416 +v 21.169460 1.819828 8.735180 +v 21.226400 3.989623 8.491829 +v 2.159157 5.113235 15.138279 +v 2.127251 7.351223 10.934731 +v 1.153011 3.281348 9.726883 +v 1.397663 8.601789 17.768871 +v 1.687302 6.243018 18.350128 +v 2.028046 9.983581 13.215305 +v 1.337200 11.132187 16.020748 +v 2.848759 8.921775 10.488247 +v 18.469761 17.729137 11.168213 +v 17.612865 19.385792 8.871696 +v 16.877922 20.169205 9.349014 +v 17.819069 19.457272 10.119678 +v 21.330149 14.595873 10.681507 +v 21.102554 14.801550 12.049980 +v 18.664879 17.834763 8.629429 +v 21.197592 14.579100 9.239052 +v 17.205448 21.014584 7.442993 +v 17.987801 20.007320 7.821346 +v 5.574913 22.330868 5.097576 +v 6.633999 19.287636 4.912395 +v 5.151630 17.260702 5.867451 +v 5.193054 19.932350 5.703510 +v 7.195282 21.560738 2.572620 +v 7.407707 16.556065 4.154461 +v 7.731945 18.967411 4.520947 +v 6.250645 14.049301 4.555096 +v 6.720455 13.952452 2.972141 +v 4.968491 14.359320 5.833443 +v 19.362179 1.456103 14.085690 +v 17.937019 1.069550 12.436001 +v 19.920750 0.996693 10.652985 +v 19.625629 1.320648 12.349178 +v 19.450054 2.297809 16.914440 +v 18.047264 1.185145 16.080349 +v 19.612164 1.324638 15.960545 +v 16.214172 1.944497 17.433624 +v 16.102577 1.210236 14.031315 +v 16.283710 1.141673 16.145195 +v 15.644932 0.381599 10.306141 +v 16.030468 0.816498 12.346333 +v 16.281532 21.261436 8.434982 +v 15.680031 21.499191 9.780731 +v 16.404942 20.987057 9.432270 +v 15.477512 22.078697 7.495884 +v 16.479870 21.995331 7.520191 +v 14.646168 21.866505 8.766190 +v 14.252823 22.209949 7.481400 +v 14.690556 21.997700 10.266705 +v 17.925400 4.037491 17.484272 +v 16.367146 8.034092 18.857925 +v 16.075367 3.888795 17.644024 +v 22.443781 7.532910 16.841984 +v 20.151814 4.380822 17.357437 +v 19.444096 10.563742 17.287651 +v 21.782898 10.060493 16.862881 +v 16.627239 11.025071 18.059326 +v 8.679386 5.757924 1.327850 +v 10.601593 3.462860 2.822899 +v 9.199387 3.291746 2.862190 +v 10.270786 8.533960 1.306156 +v 8.567997 8.575178 1.043339 +v 12.466953 6.039406 1.715889 +v 12.398010 8.780735 1.536755 +v 12.498596 3.591113 2.559849 +v 10.270710 20.315460 12.375813 +v 11.296711 18.327038 14.397854 +v 11.517624 20.649277 12.648174 +v 7.311035 18.862499 12.972324 +v 7.340870 21.217377 11.911949 +v 8.668297 16.313242 15.452732 +v 6.270592 16.204201 13.988266 +v 10.170303 16.772032 16.944134 +v 17.264664 16.877155 2.050709 +v 15.607872 19.404236 1.289459 +v 16.686935 19.221611 1.872158 +v 16.233845 14.036643 1.790344 +v 17.937664 14.469225 2.257710 +v 14.548328 16.825573 1.028610 +v 14.732639 14.125036 1.164398 +v 14.436127 19.498447 0.773792 +v 19.400387 1.346270 6.911743 +v 17.019947 1.131625 4.737202 +v 19.179146 1.376153 5.171001 +v 17.470856 0.954523 8.549747 +v 19.811958 0.949517 8.756104 +v 15.512516 1.024636 6.309361 +v 15.487396 0.913149 8.207741 +v 15.610794 1.169858 4.538628 +v 7.641022 22.800346 2.914078 +v 9.830879 22.477779 1.878757 +v 8.281113 22.214554 2.202778 +v 9.026932 23.233761 3.932835 +v 7.032738 23.009014 4.329113 +v 11.203686 23.195175 2.502533 +v 11.261963 23.216965 4.262741 +v 11.529186 22.756336 1.608967 +# 386 vertices + +vt 0.592350 0.372820 0.000000 +vt 0.592220 0.366740 0.000000 +vt 0.596770 0.366200 0.000000 +vt 0.596650 0.372130 0.000000 +vt 0.592090 0.360660 0.000000 +vt 0.596890 0.360270 0.000000 +vt 0.601690 0.359890 0.000000 +vt 0.601320 0.365670 0.000000 +vt 0.600950 0.371450 0.000000 +vt 0.591960 0.354580 0.000000 +vt 0.597010 0.354340 0.000000 +vt 0.591830 0.348500 0.000000 +vt 0.597120 0.348410 0.000000 +vt 0.602420 0.348330 0.000000 +vt 0.602050 0.354110 0.000000 +vt 0.607100 0.353870 0.000000 +vt 0.606480 0.359500 0.000000 +vt 0.607710 0.348240 0.000000 +vt 0.613010 0.348150 0.000000 +vt 0.612140 0.353640 0.000000 +vt 0.611280 0.359120 0.000000 +vt 0.605870 0.365130 0.000000 +vt 0.605250 0.370760 0.000000 +vt 0.610410 0.364600 0.000000 +vt 0.609550 0.370080 0.000000 +vt 0.601620 0.477680 0.000000 +vt 0.597680 0.478160 0.000000 +vt 0.596660 0.474530 0.000000 +vt 0.600420 0.474250 0.000000 +vt 0.593740 0.478640 0.000000 +vt 0.592910 0.474810 0.000000 +vt 0.592080 0.470990 0.000000 +vt 0.595650 0.470910 0.000000 +vt 0.599210 0.470830 0.000000 +vt 0.589800 0.479120 0.000000 +vt 0.589160 0.475090 0.000000 +vt 0.585850 0.479600 0.000000 +vt 0.585410 0.475370 0.000000 +vt 0.584960 0.471140 0.000000 +vt 0.588520 0.471070 0.000000 +vt 0.587890 0.467040 0.000000 +vt 0.591260 0.467160 0.000000 +vt 0.584510 0.466910 0.000000 +vt 0.584070 0.462680 0.000000 +vt 0.587250 0.463010 0.000000 +vt 0.590430 0.463340 0.000000 +vt 0.594630 0.467290 0.000000 +vt 0.598000 0.467410 0.000000 +vt 0.593610 0.463660 0.000000 +vt 0.596790 0.463990 0.000000 +vt 0.614880 0.370930 0.000000 +vt 0.613260 0.382690 0.000000 +vt 0.608160 0.381840 0.000000 +vt 0.620210 0.371770 0.000000 +vt 0.618360 0.383540 0.000000 +vt 0.616520 0.395310 0.000000 +vt 0.611650 0.394460 0.000000 +vt 0.606770 0.393610 0.000000 +vt 0.625530 0.372620 0.000000 +vt 0.623470 0.384390 0.000000 +vt 0.630860 0.373460 0.000000 +vt 0.628570 0.385240 0.000000 +vt 0.626270 0.397020 0.000000 +vt 0.621400 0.396170 0.000000 +vt 0.619330 0.407940 0.000000 +vt 0.614680 0.407080 0.000000 +vt 0.623980 0.408800 0.000000 +vt 0.621680 0.420580 0.000000 +vt 0.617260 0.419720 0.000000 +vt 0.612840 0.418850 0.000000 +vt 0.610030 0.406230 0.000000 +vt 0.605390 0.405370 0.000000 +vt 0.608420 0.417990 0.000000 +vt 0.604000 0.417130 0.000000 +vt 0.520030 0.364640 0.000000 +vt 0.520080 0.376610 0.000000 +vt 0.515750 0.375960 0.000000 +vt 0.515520 0.363980 0.000000 +vt 0.520130 0.388590 0.000000 +vt 0.515980 0.387940 0.000000 +vt 0.511830 0.387300 0.000000 +vt 0.511420 0.375310 0.000000 +vt 0.511020 0.363320 0.000000 +vt 0.520190 0.400560 0.000000 +vt 0.516210 0.399920 0.000000 +vt 0.520240 0.412540 0.000000 +vt 0.516450 0.411910 0.000000 +vt 0.512650 0.411270 0.000000 +vt 0.512240 0.399280 0.000000 +vt 0.508270 0.398650 0.000000 +vt 0.507690 0.386650 0.000000 +vt 0.508860 0.410640 0.000000 +vt 0.505070 0.410010 0.000000 +vt 0.504300 0.398010 0.000000 +vt 0.503540 0.386000 0.000000 +vt 0.507100 0.374650 0.000000 +vt 0.506510 0.362660 0.000000 +vt 0.502770 0.374000 0.000000 +vt 0.502010 0.361990 0.000000 +vt 0.556480 0.369740 0.000000 +vt 0.555470 0.381560 0.000000 +vt 0.550760 0.380830 0.000000 +vt 0.551640 0.368980 0.000000 +vt 0.554460 0.393370 0.000000 +vt 0.549880 0.392680 0.000000 +vt 0.545290 0.391980 0.000000 +vt 0.546050 0.380110 0.000000 +vt 0.546800 0.368230 0.000000 +vt 0.553450 0.405190 0.000000 +vt 0.548990 0.404530 0.000000 +vt 0.552440 0.417010 0.000000 +vt 0.548110 0.416370 0.000000 +vt 0.543780 0.415740 0.000000 +vt 0.544530 0.403860 0.000000 +vt 0.540070 0.403200 0.000000 +vt 0.540700 0.391290 0.000000 +vt 0.539450 0.415110 0.000000 +vt 0.535110 0.414470 0.000000 +vt 0.535620 0.402530 0.000000 +vt 0.536120 0.390600 0.000000 +vt 0.541330 0.379380 0.000000 +vt 0.541960 0.367480 0.000000 +vt 0.536620 0.378660 0.000000 +vt 0.537120 0.366720 0.000000 +vt 0.575140 0.371890 0.000000 +vt 0.579440 0.372120 0.000000 +vt 0.578090 0.383700 0.000000 +vt 0.573760 0.383570 0.000000 +vt 0.583750 0.372350 0.000000 +vt 0.582420 0.383830 0.000000 +vt 0.581090 0.395300 0.000000 +vt 0.576740 0.395270 0.000000 +vt 0.572390 0.395240 0.000000 +vt 0.588050 0.372580 0.000000 +vt 0.586750 0.383960 0.000000 +vt 0.591070 0.384080 0.000000 +vt 0.589800 0.395350 0.000000 +vt 0.585440 0.395330 0.000000 +vt 0.584140 0.406700 0.000000 +vt 0.579770 0.406770 0.000000 +vt 0.588520 0.406620 0.000000 +vt 0.587240 0.417890 0.000000 +vt 0.582840 0.418070 0.000000 +vt 0.578440 0.418240 0.000000 +vt 0.575390 0.406850 0.000000 +vt 0.571020 0.406920 0.000000 +vt 0.574040 0.418420 0.000000 +vt 0.569640 0.418600 0.000000 +vt 0.626370 0.468820 0.000000 +vt 0.622690 0.468430 0.000000 +vt 0.625800 0.456840 0.000000 +vt 0.629680 0.457250 0.000000 +vt 0.619010 0.468040 0.000000 +vt 0.621920 0.456420 0.000000 +vt 0.624830 0.444800 0.000000 +vt 0.628910 0.445240 0.000000 +vt 0.632990 0.445680 0.000000 +vt 0.615330 0.467660 0.000000 +vt 0.618040 0.456010 0.000000 +vt 0.611660 0.467270 0.000000 +vt 0.614160 0.455600 0.000000 +vt 0.616670 0.443920 0.000000 +vt 0.620750 0.444360 0.000000 +vt 0.623460 0.432710 0.000000 +vt 0.627740 0.433180 0.000000 +vt 0.619170 0.432250 0.000000 +vt 0.626170 0.421070 0.000000 +vt 0.630650 0.421560 0.000000 +vt 0.632030 0.433640 0.000000 +vt 0.636310 0.434110 0.000000 +vt 0.635140 0.422050 0.000000 +vt 0.639620 0.422540 0.000000 +vt 0.535040 0.426470 0.000000 +vt 0.531350 0.425990 0.000000 +vt 0.531400 0.413990 0.000000 +vt 0.534970 0.438480 0.000000 +vt 0.531300 0.437990 0.000000 +vt 0.527630 0.437490 0.000000 +vt 0.527650 0.425500 0.000000 +vt 0.527680 0.413500 0.000000 +vt 0.534900 0.450480 0.000000 +vt 0.531250 0.449980 0.000000 +vt 0.534830 0.462480 0.000000 +vt 0.531210 0.461980 0.000000 +vt 0.527580 0.461480 0.000000 +vt 0.527610 0.449490 0.000000 +vt 0.523960 0.448990 0.000000 +vt 0.523960 0.437000 0.000000 +vt 0.523960 0.460980 0.000000 +vt 0.520330 0.460480 0.000000 +vt 0.520310 0.448490 0.000000 +vt 0.520290 0.436510 0.000000 +vt 0.523960 0.425010 0.000000 +vt 0.523960 0.413020 0.000000 +vt 0.520260 0.424520 0.000000 +vt 0.570280 0.430090 0.000000 +vt 0.565870 0.429800 0.000000 +vt 0.565340 0.418200 0.000000 +vt 0.570920 0.441580 0.000000 +vt 0.566400 0.441390 0.000000 +vt 0.561880 0.441200 0.000000 +vt 0.561460 0.429500 0.000000 +vt 0.561040 0.417800 0.000000 +vt 0.571560 0.453070 0.000000 +vt 0.566930 0.452980 0.000000 +vt 0.572200 0.464560 0.000000 +vt 0.567460 0.464570 0.000000 +vt 0.562720 0.464590 0.000000 +vt 0.562300 0.452890 0.000000 +vt 0.557670 0.452800 0.000000 +vt 0.557360 0.441000 0.000000 +vt 0.557980 0.464600 0.000000 +vt 0.553240 0.464620 0.000000 +vt 0.553040 0.452720 0.000000 +vt 0.552840 0.440810 0.000000 +vt 0.557050 0.429200 0.000000 +vt 0.556740 0.417410 0.000000 +vt 0.552640 0.428910 0.000000 +vt 0.595160 0.452080 0.000000 +vt 0.598590 0.452270 0.000000 +vt 0.591730 0.451880 0.000000 +vt 0.593020 0.440420 0.000000 +vt 0.596710 0.440490 0.000000 +vt 0.600400 0.440560 0.000000 +vt 0.588290 0.451680 0.000000 +vt 0.584860 0.451480 0.000000 +vt 0.585650 0.440290 0.000000 +vt 0.589340 0.440350 0.000000 +vt 0.590380 0.429030 0.000000 +vt 0.594320 0.428970 0.000000 +vt 0.586440 0.429090 0.000000 +vt 0.591430 0.417700 0.000000 +vt 0.595620 0.417510 0.000000 +vt 0.598260 0.428910 0.000000 +vt 0.602200 0.428850 0.000000 +vt 0.599810 0.417320 0.000000 +vt 0.573580 0.366480 0.000000 +vt 0.578240 0.366550 0.000000 +vt 0.572030 0.361080 0.000000 +vt 0.577040 0.360980 0.000000 +vt 0.582060 0.360870 0.000000 +vt 0.582900 0.366610 0.000000 +vt 0.570470 0.355680 0.000000 +vt 0.575840 0.355400 0.000000 +vt 0.568920 0.350270 0.000000 +vt 0.574640 0.349830 0.000000 +vt 0.580370 0.349390 0.000000 +vt 0.581210 0.355130 0.000000 +vt 0.586590 0.354850 0.000000 +vt 0.587070 0.360760 0.000000 +vt 0.586100 0.348940 0.000000 +vt 0.587560 0.366670 0.000000 +vt 0.574390 0.494300 0.000000 +vt 0.573030 0.490760 0.000000 +vt 0.576480 0.490940 0.000000 +vt 0.577570 0.494590 0.000000 +vt 0.571680 0.487220 0.000000 +vt 0.575380 0.487300 0.000000 +vt 0.579080 0.487370 0.000000 +vt 0.579920 0.491120 0.000000 +vt 0.580750 0.494870 0.000000 +vt 0.570330 0.483680 0.000000 +vt 0.574290 0.483650 0.000000 +vt 0.568970 0.480140 0.000000 +vt 0.573190 0.480010 0.000000 +vt 0.577410 0.479870 0.000000 +vt 0.578250 0.483620 0.000000 +vt 0.582210 0.483590 0.000000 +vt 0.582790 0.487450 0.000000 +vt 0.581630 0.479740 0.000000 +vt 0.586170 0.483570 0.000000 +vt 0.586490 0.487530 0.000000 +vt 0.583360 0.491310 0.000000 +vt 0.583940 0.495160 0.000000 +vt 0.586810 0.491490 0.000000 +vt 0.587120 0.495450 0.000000 +vt 0.532480 0.378150 0.000000 +vt 0.532840 0.366200 0.000000 +vt 0.532120 0.390090 0.000000 +vt 0.528120 0.389590 0.000000 +vt 0.528350 0.377640 0.000000 +vt 0.528570 0.365680 0.000000 +vt 0.531760 0.402040 0.000000 +vt 0.527900 0.401550 0.000000 +vt 0.524040 0.401060 0.000000 +vt 0.524130 0.389090 0.000000 +vt 0.524210 0.377120 0.000000 +vt 0.524300 0.365160 0.000000 +vt 0.595350 0.383520 0.000000 +vt 0.599620 0.382960 0.000000 +vt 0.598290 0.394480 0.000000 +vt 0.594040 0.394920 0.000000 +vt 0.603890 0.382400 0.000000 +vt 0.602530 0.394040 0.000000 +vt 0.601170 0.405680 0.000000 +vt 0.596950 0.405990 0.000000 +vt 0.592730 0.406310 0.000000 +vt 0.507310 0.458080 0.000000 +vt 0.506750 0.446060 0.000000 +vt 0.510140 0.446670 0.000000 +vt 0.510560 0.458680 0.000000 +vt 0.506190 0.434040 0.000000 +vt 0.509710 0.434660 0.000000 +vt 0.513240 0.435280 0.000000 +vt 0.513530 0.447280 0.000000 +vt 0.513820 0.459280 0.000000 +vt 0.505630 0.422030 0.000000 +vt 0.509290 0.422650 0.000000 +vt 0.512940 0.423280 0.000000 +vt 0.516600 0.423900 0.000000 +vt 0.516760 0.435890 0.000000 +vt 0.516920 0.447890 0.000000 +vt 0.517080 0.459880 0.000000 +vt 0.581100 0.463150 0.000000 +vt 0.581540 0.451880 0.000000 +vt 0.578130 0.463620 0.000000 +vt 0.578210 0.452280 0.000000 +vt 0.578290 0.440930 0.000000 +vt 0.581970 0.440610 0.000000 +vt 0.575170 0.464090 0.000000 +vt 0.574890 0.452670 0.000000 +vt 0.574610 0.441260 0.000000 +vt 0.574320 0.429840 0.000000 +vt 0.578360 0.429590 0.000000 +vt 0.582400 0.429340 0.000000 +vt 0.590900 0.325400 0.000000 +vt 0.595580 0.325680 0.000000 +vt 0.595970 0.331360 0.000000 +vt 0.591130 0.331180 0.000000 +vt 0.600270 0.325950 0.000000 +vt 0.600810 0.331550 0.000000 +vt 0.601340 0.337140 0.000000 +vt 0.596350 0.337050 0.000000 +vt 0.591360 0.336950 0.000000 +vt 0.604950 0.326230 0.000000 +vt 0.605640 0.331730 0.000000 +vt 0.609640 0.326500 0.000000 +vt 0.610480 0.331910 0.000000 +vt 0.611320 0.337330 0.000000 +vt 0.606330 0.337230 0.000000 +vt 0.607020 0.342740 0.000000 +vt 0.601880 0.342730 0.000000 +vt 0.612170 0.342740 0.000000 +vt 0.596740 0.342730 0.000000 +vt 0.591600 0.342730 0.000000 +vt 0.599750 0.492600 0.000000 +vt 0.596590 0.493310 0.000000 +vt 0.596860 0.489520 0.000000 +vt 0.600220 0.488870 0.000000 +vt 0.593430 0.494020 0.000000 +vt 0.593510 0.490180 0.000000 +vt 0.593590 0.486330 0.000000 +vt 0.597140 0.485730 0.000000 +vt 0.600690 0.485140 0.000000 +vt 0.590280 0.494730 0.000000 +vt 0.590160 0.490830 0.000000 +vt 0.590040 0.486930 0.000000 +vt 0.589920 0.483030 0.000000 +vt 0.593660 0.482490 0.000000 +vt 0.597410 0.481950 0.000000 +vt 0.601160 0.481410 0.000000 +vt 0.636310 0.374120 0.000000 +vt 0.633770 0.385850 0.000000 +vt 0.641750 0.374770 0.000000 +vt 0.638980 0.386470 0.000000 +vt 0.636200 0.398160 0.000000 +vt 0.631240 0.397590 0.000000 +vt 0.647200 0.375430 0.000000 +vt 0.644190 0.387080 0.000000 +vt 0.652650 0.376080 0.000000 +vt 0.649390 0.387700 0.000000 +vt 0.646140 0.399310 0.000000 +vt 0.641170 0.398740 0.000000 +vt 0.638150 0.410390 0.000000 +vt 0.633430 0.409860 0.000000 +vt 0.642880 0.410920 0.000000 +vt 0.628700 0.409330 0.000000 +vt 0.569190 0.383060 0.000000 +vt 0.570470 0.371350 0.000000 +vt 0.567910 0.394780 0.000000 +vt 0.563430 0.394310 0.000000 +vt 0.564620 0.382560 0.000000 +vt 0.565810 0.370810 0.000000 +vt 0.566630 0.406490 0.000000 +vt 0.562240 0.406060 0.000000 +vt 0.557840 0.405620 0.000000 +vt 0.558950 0.393840 0.000000 +vt 0.560050 0.382060 0.000000 +vt 0.561150 0.370280 0.000000 +vt 0.607940 0.466450 0.000000 +vt 0.610270 0.454770 0.000000 +vt 0.604220 0.465630 0.000000 +vt 0.606380 0.453930 0.000000 +vt 0.608530 0.442240 0.000000 +vt 0.612600 0.443080 0.000000 +vt 0.600510 0.464810 0.000000 +vt 0.602490 0.453100 0.000000 +vt 0.604460 0.441400 0.000000 +vt 0.606440 0.429700 0.000000 +vt 0.610690 0.430550 0.000000 +vt 0.614930 0.431400 0.000000 +vt 0.539440 0.451040 0.000000 +vt 0.539430 0.463020 0.000000 +vt 0.539440 0.439060 0.000000 +vt 0.543910 0.439650 0.000000 +vt 0.543970 0.451600 0.000000 +vt 0.544030 0.463550 0.000000 +vt 0.539440 0.427080 0.000000 +vt 0.543840 0.427690 0.000000 +vt 0.548240 0.428300 0.000000 +vt 0.548370 0.440230 0.000000 +vt 0.548500 0.452160 0.000000 +vt 0.548640 0.464090 0.000000 +vt 0.572280 0.328320 0.000000 +vt 0.576940 0.327590 0.000000 +vt 0.576360 0.333150 0.000000 +vt 0.571440 0.333810 0.000000 +vt 0.581590 0.326860 0.000000 +vt 0.581290 0.332490 0.000000 +vt 0.580980 0.338120 0.000000 +vt 0.575790 0.338710 0.000000 +vt 0.570600 0.339300 0.000000 +vt 0.586250 0.326130 0.000000 +vt 0.586210 0.331840 0.000000 +vt 0.586170 0.337540 0.000000 +vt 0.586140 0.343240 0.000000 +vt 0.580680 0.343760 0.000000 +vt 0.575220 0.344270 0.000000 +vt 0.569760 0.344790 0.000000 +vt 0.574670 0.468070 0.000000 +vt 0.571390 0.468450 0.000000 +vt 0.577950 0.467680 0.000000 +vt 0.577770 0.471750 0.000000 +vt 0.574180 0.472050 0.000000 +vt 0.570590 0.472350 0.000000 +vt 0.581230 0.467300 0.000000 +vt 0.581370 0.471450 0.000000 +vt 0.581500 0.475590 0.000000 +vt 0.577590 0.475810 0.000000 +vt 0.573690 0.476030 0.000000 +vt 0.569780 0.476250 0.000000 +# 441 texture coords + +g rocksCombined009 +usemtl rocksSculpts +f 103/3 102/4 13/1 99/2 +f 100/6 103/3 99/2 27/5 +f 31/7 101/8 103/3 100/6 +f 101/8 30/9 102/4 103/3 +f 107/11 100/6 27/5 104/10 +f 105/13 107/11 104/10 25/12 +f 28/14 106/15 107/11 105/13 +f 106/15 31/7 100/6 107/11 +f 111/16 110/17 31/7 106/15 +f 108/18 111/16 106/15 28/14 +f 20/19 109/20 111/16 108/18 +f 109/20 29/21 110/17 111/16 +f 114/22 113/23 30/9 101/8 +f 110/17 114/22 101/8 31/7 +f 29/21 112/24 114/22 110/17 +f 112/24 1/25 113/23 114/22 +f 119/28 118/29 21/26 115/27 +f 116/31 119/28 115/27 32/30 +f 36/32 117/33 119/28 116/31 +f 117/33 35/34 118/29 119/28 +f 123/36 116/31 32/30 120/35 +f 121/38 123/36 120/35 26/37 +f 33/39 122/40 123/36 121/38 +f 122/40 36/32 116/31 123/36 +f 127/41 126/42 36/32 122/40 +f 124/43 127/41 122/40 33/39 +f 16/44 125/45 127/41 124/43 +f 125/45 34/46 126/42 127/41 +f 130/47 129/48 35/34 117/33 +f 126/42 130/47 117/33 36/32 +f 34/46 128/49 130/47 126/42 +f 128/49 5/50 129/48 130/47 +f 134/52 133/53 1/25 112/51 +f 131/55 134/52 112/51 29/54 +f 40/56 132/57 134/52 131/55 +f 132/57 39/58 133/53 134/52 +f 137/60 131/55 29/54 109/59 +f 135/62 137/60 109/59 20/61 +f 37/63 136/64 137/60 135/62 +f 136/64 40/56 131/55 137/60 +f 141/65 140/66 40/56 136/64 +f 138/67 141/65 136/64 37/63 +f 23/68 139/69 141/65 138/67 +f 139/69 38/70 140/66 141/65 +f 144/71 143/72 39/58 132/57 +f 140/66 144/71 132/57 40/56 +f 38/70 142/73 144/71 140/66 +f 142/73 10/74 143/72 144/71 +f 149/77 148/78 14/75 145/76 +f 146/80 149/77 145/76 41/79 +f 45/81 147/82 149/77 146/80 +f 147/82 44/83 148/78 149/77 +f 153/85 146/80 41/79 150/84 +f 151/87 153/85 150/84 17/86 +f 42/88 152/89 153/85 151/87 +f 152/89 45/81 146/80 153/85 +f 157/90 156/91 45/81 152/89 +f 154/92 157/90 152/89 42/88 +f 9/93 155/94 157/90 154/92 +f 155/94 43/95 156/91 157/90 +f 160/96 159/97 44/83 147/82 +f 156/91 160/96 147/82 45/81 +f 43/95 158/98 160/96 156/91 +f 158/98 2/99 159/97 160/96 +f 165/102 164/103 19/100 161/101 +f 162/105 165/102 161/101 46/104 +f 50/106 163/107 165/102 162/105 +f 163/107 49/108 164/103 165/102 +f 169/110 162/105 46/104 166/109 +f 167/112 169/110 166/109 24/111 +f 47/113 168/114 169/110 167/112 +f 168/114 50/106 162/105 169/110 +f 173/115 172/116 50/106 168/114 +f 170/117 173/115 168/114 47/113 +f 11/118 171/119 173/115 170/117 +f 171/119 48/120 172/116 173/115 +f 176/121 175/122 49/108 163/107 +f 172/116 176/121 163/107 50/106 +f 48/120 174/123 176/121 172/116 +f 174/123 4/124 175/122 176/121 +f 181/127 180/128 3/125 177/126 +f 178/130 181/127 177/126 51/129 +f 55/131 179/132 181/127 178/130 +f 179/132 54/133 180/128 181/127 +f 185/135 178/130 51/129 182/134 +f 183/136 185/135 182/134 13/1 +f 52/137 184/138 185/135 183/136 +f 184/138 55/131 178/130 185/135 +f 189/139 188/140 55/131 184/138 +f 186/141 189/139 184/138 52/137 +f 18/142 187/143 189/139 186/141 +f 187/143 53/144 188/140 189/139 +f 192/145 191/146 54/133 179/132 +f 188/140 192/145 179/132 55/131 +f 53/144 190/147 192/145 188/140 +f 190/147 12/148 191/146 192/145 +f 197/151 196/152 6/149 193/150 +f 194/154 197/151 193/150 56/153 +f 60/155 195/156 197/151 194/154 +f 195/156 59/157 196/152 197/151 +f 201/159 194/154 56/153 198/158 +f 199/161 201/159 198/158 21/160 +f 57/162 200/163 201/159 199/161 +f 200/163 60/155 194/154 201/159 +f 205/164 204/165 60/155 200/163 +f 202/166 205/164 200/163 57/162 +f 23/68 203/167 205/164 202/166 +f 203/167 58/168 204/165 205/164 +f 208/169 207/170 59/157 195/156 +f 204/165 208/169 195/156 60/155 +f 58/168 206/171 208/169 204/165 +f 206/171 9/172 207/170 208/169 +f 213/174 212/175 11/118 209/173 +f 210/177 213/174 209/173 61/176 +f 65/178 211/179 213/174 210/177 +f 211/179 64/180 212/175 213/174 +f 217/182 210/177 61/176 214/181 +f 215/184 217/182 214/181 8/183 +f 62/185 216/186 217/182 215/184 +f 216/186 65/178 210/177 217/182 +f 221/187 220/188 65/178 216/186 +f 218/189 221/187 216/186 62/185 +f 15/190 219/191 221/187 218/189 +f 219/191 63/192 220/188 221/187 +f 224/193 223/194 64/180 211/179 +f 220/188 224/193 211/179 65/178 +f 63/192 222/195 224/193 220/188 +f 222/195 17/86 223/194 224/193 +f 229/197 228/198 12/148 225/196 +f 226/200 229/197 225/196 66/199 +f 70/201 227/202 229/197 226/200 +f 227/202 69/203 228/198 229/197 +f 233/205 226/200 66/199 230/204 +f 231/207 233/205 230/204 7/206 +f 67/208 232/209 233/205 231/207 +f 232/209 70/201 226/200 233/205 +f 237/210 236/211 70/201 232/209 +f 234/212 237/210 232/209 67/208 +f 22/213 235/214 237/210 234/212 +f 235/214 68/215 236/211 237/210 +f 240/216 239/217 69/203 227/202 +f 236/211 240/216 227/202 70/201 +f 68/215 238/218 240/216 236/211 +f 238/218 24/111 239/217 240/216 +f 244/219 243/220 5/50 128/49 +f 241/221 244/219 128/49 34/46 +f 74/222 242/223 244/219 241/221 +f 242/223 73/224 243/220 244/219 +f 247/225 241/221 34/46 125/45 +f 245/226 247/225 125/45 16/44 +f 71/227 246/228 247/225 245/226 +f 246/228 74/222 241/221 247/225 +f 251/229 250/230 74/222 246/228 +f 248/231 251/229 246/228 71/227 +f 18/142 249/232 251/229 248/231 +f 249/232 72/233 250/230 251/229 +f 254/234 253/235 73/224 242/223 +f 250/230 254/234 242/223 74/222 +f 72/233 252/236 254/234 250/230 +f 252/236 10/74 253/235 254/234 +f 258/238 177/126 3/125 255/237 +f 256/240 258/238 255/237 75/239 +f 77/241 257/242 258/238 256/240 +f 257/242 51/129 177/126 258/238 +f 262/244 256/240 75/239 259/243 +f 260/246 262/244 259/243 19/245 +f 76/247 261/248 262/244 260/246 +f 261/248 77/241 256/240 262/244 +f 265/249 264/250 77/241 261/248 +f 263/251 265/249 261/248 76/247 +f 25/12 104/10 265/249 263/251 +f 104/10 27/5 264/250 265/249 +f 266/252 182/134 51/129 257/242 +f 264/250 266/252 257/242 77/241 +f 27/5 99/2 266/252 264/250 +f 99/2 13/1 182/134 266/252 +f 270/255 215/256 8/253 267/254 +f 268/258 270/255 267/254 78/257 +f 81/259 269/260 270/255 268/258 +f 269/260 62/261 215/256 270/255 +f 274/263 268/258 78/257 271/262 +f 272/265 274/263 271/262 22/264 +f 79/266 273/267 274/263 272/265 +f 273/267 81/259 268/258 274/263 +f 278/268 277/269 81/259 273/267 +f 275/270 278/268 273/267 79/266 +f 26/37 276/271 278/268 275/270 +f 276/271 80/272 277/269 278/268 +f 280/273 218/274 62/261 269/260 +f 277/269 280/273 269/260 81/259 +f 80/272 279/275 280/273 277/269 +f 279/275 15/276 218/274 280/273 +f 284/277 283/278 4/124 174/123 +f 281/279 284/277 174/123 48/120 +f 83/280 282/281 284/277 281/279 +f 282/281 82/282 283/278 284/277 +f 286/283 281/279 48/120 171/119 +f 212/175 286/283 171/119 11/118 +f 64/180 285/284 286/283 212/175 +f 285/284 83/280 281/279 286/283 +f 288/285 287/286 83/280 285/284 +f 223/194 288/285 285/284 64/180 +f 17/86 150/84 288/285 223/194 +f 150/84 41/79 287/286 288/285 +f 290/287 289/288 82/282 282/281 +f 287/286 290/287 282/281 83/280 +f 41/79 145/76 290/287 287/286 +f 145/76 14/75 289/288 290/287 +f 293/289 183/136 13/1 102/4 +f 291/290 293/289 102/4 30/9 +f 84/291 292/292 293/289 291/290 +f 292/292 52/137 183/136 293/289 +f 295/293 291/290 30/9 113/23 +f 133/53 295/293 113/23 1/25 +f 39/58 294/294 295/293 133/53 +f 294/294 84/291 291/290 295/293 +f 297/295 296/296 84/291 294/294 +f 143/72 297/295 294/294 39/58 +f 10/74 252/236 297/295 143/72 +f 252/236 72/233 296/296 297/295 +f 298/297 186/141 52/137 292/292 +f 296/296 298/297 292/292 84/291 +f 72/233 249/232 298/297 296/296 +f 249/232 18/142 186/141 298/297 +f 302/300 301/301 6/298 196/299 +f 299/303 302/300 196/299 59/302 +f 86/304 300/305 302/300 299/303 +f 300/305 85/306 301/301 302/300 +f 304/308 299/303 59/302 207/307 +f 154/92 304/308 207/307 9/93 +f 42/88 303/309 304/308 154/92 +f 303/309 86/304 299/303 304/308 +f 306/310 305/311 86/304 303/309 +f 151/87 306/310 303/309 42/88 +f 17/86 222/195 306/310 151/87 +f 222/195 63/192 305/311 306/310 +f 308/312 307/313 85/306 300/305 +f 305/311 308/312 300/305 86/304 +f 63/192 219/191 308/312 305/311 +f 219/191 15/190 307/313 308/312 +f 312/315 245/226 16/44 309/314 +f 310/317 312/315 309/314 87/316 +f 88/318 311/319 312/315 310/317 +f 311/319 71/227 245/226 312/315 +f 315/321 310/317 87/316 313/320 +f 230/204 315/321 313/320 7/206 +f 66/199 314/322 315/321 230/204 +f 314/322 88/318 310/317 315/321 +f 317/323 316/324 88/318 314/322 +f 225/196 317/323 314/322 66/199 +f 12/148 190/147 317/323 225/196 +f 190/147 53/144 316/324 317/323 +f 318/325 248/231 71/227 311/319 +f 316/324 318/325 311/319 88/318 +f 53/144 187/143 318/325 316/324 +f 187/143 18/142 248/231 318/325 +f 322/328 321/329 14/326 148/327 +f 319/331 322/328 148/327 44/330 +f 91/332 320/333 322/328 319/331 +f 320/333 90/334 321/329 322/328 +f 325/336 319/331 44/330 159/335 +f 323/338 325/336 159/335 2/337 +f 89/339 324/340 325/336 323/338 +f 324/340 91/332 319/331 325/336 +f 328/341 327/342 91/332 324/340 +f 326/343 328/341 324/340 89/339 +f 20/19 108/18 328/341 326/343 +f 108/18 28/14 327/342 328/341 +f 330/344 329/345 90/334 320/333 +f 327/342 330/344 320/333 91/332 +f 28/14 105/13 330/344 327/342 +f 105/13 25/12 329/345 330/344 +f 333/348 193/349 6/346 301/347 +f 331/351 333/348 301/347 85/350 +f 92/352 332/353 333/348 331/351 +f 332/353 56/354 193/349 333/348 +f 335/356 331/351 85/350 307/355 +f 279/275 335/356 307/355 15/276 +f 80/272 334/357 335/356 279/275 +f 334/357 92/352 331/351 335/356 +f 337/358 336/359 92/352 334/357 +f 276/271 337/358 334/357 80/272 +f 26/37 120/35 337/358 276/271 +f 120/35 32/30 336/359 337/358 +f 338/360 198/361 56/354 332/353 +f 336/359 338/360 332/353 92/352 +f 32/30 115/27 338/360 336/359 +f 115/27 21/26 198/361 338/360 +f 341/363 135/62 20/61 326/362 +f 339/365 341/363 326/362 89/364 +f 93/366 340/367 341/363 339/365 +f 340/367 37/63 135/62 341/363 +f 343/369 339/365 89/364 323/368 +f 158/371 343/369 323/368 2/370 +f 43/372 342/373 343/369 158/371 +f 342/373 93/366 339/365 343/369 +f 345/374 344/375 93/366 342/373 +f 155/376 345/374 342/373 43/372 +f 9/172 206/171 345/374 155/376 +f 206/171 58/168 344/375 345/374 +f 346/377 138/67 37/63 340/367 +f 344/375 346/377 340/367 93/366 +f 58/168 203/167 346/377 344/375 +f 203/167 23/68 138/67 346/377 +f 349/378 255/379 3/125 180/128 +f 347/380 349/378 180/128 54/133 +f 94/381 348/382 349/378 347/380 +f 348/382 75/383 255/379 349/378 +f 351/384 347/380 54/133 191/146 +f 228/198 351/384 191/146 12/148 +f 69/203 350/385 351/384 228/198 +f 350/385 94/381 347/380 351/384 +f 353/386 352/387 94/381 350/385 +f 239/217 353/386 350/385 69/203 +f 24/111 166/109 353/386 239/217 +f 166/109 46/104 352/387 353/386 +f 354/388 259/389 75/383 348/382 +f 352/387 354/388 348/382 94/381 +f 46/104 161/101 354/388 352/387 +f 161/101 19/100 259/389 354/388 +f 357/391 199/161 21/160 118/390 +f 355/393 357/391 118/390 35/392 +f 95/394 356/395 357/391 355/393 +f 356/395 57/162 199/161 357/391 +f 359/397 355/393 35/392 129/396 +f 243/220 359/397 129/396 5/50 +f 73/224 358/398 359/397 243/220 +f 358/398 95/394 355/393 359/397 +f 361/399 360/400 95/394 358/398 +f 253/235 361/399 358/398 73/224 +f 10/74 142/73 361/399 253/235 +f 142/73 38/70 360/400 361/399 +f 362/401 202/166 57/162 356/395 +f 360/400 362/401 356/395 95/394 +f 38/70 139/69 362/401 360/400 +f 139/69 23/68 202/166 362/401 +f 365/402 267/403 8/183 214/181 +f 363/404 365/402 214/181 61/176 +f 96/405 364/406 365/402 363/404 +f 364/406 78/407 267/403 365/402 +f 367/408 363/404 61/176 209/173 +f 170/117 367/408 209/173 11/118 +f 47/113 366/409 367/408 170/117 +f 366/409 96/405 363/404 367/408 +f 369/410 368/411 96/405 366/409 +f 167/112 369/410 366/409 47/113 +f 24/111 238/218 369/410 167/112 +f 238/218 68/215 368/411 369/410 +f 370/412 271/413 78/407 364/406 +f 368/411 370/412 364/406 96/405 +f 68/215 235/214 370/412 368/411 +f 235/214 22/213 271/413 370/412 +f 373/416 175/417 4/414 283/415 +f 371/419 373/416 283/415 82/418 +f 97/420 372/421 373/416 371/419 +f 372/421 49/422 175/417 373/416 +f 375/424 371/419 82/418 289/423 +f 321/329 375/424 289/423 14/326 +f 90/334 374/425 375/424 321/329 +f 374/425 97/420 371/419 375/424 +f 377/426 376/427 97/420 374/425 +f 329/345 377/426 374/425 90/334 +f 25/12 263/251 377/426 329/345 +f 263/251 76/247 376/427 377/426 +f 378/428 164/429 49/422 372/421 +f 376/427 378/428 372/421 97/420 +f 76/247 260/246 378/428 376/427 +f 260/246 19/245 164/429 378/428 +f 381/430 231/431 7/206 313/320 +f 379/432 381/430 313/320 87/316 +f 98/433 380/434 381/430 379/432 +f 380/434 67/435 231/431 381/430 +f 383/436 379/432 87/316 309/314 +f 124/43 383/436 309/314 16/44 +f 33/39 382/437 383/436 124/43 +f 382/437 98/433 379/432 383/436 +f 385/438 384/439 98/433 382/437 +f 121/38 385/438 382/437 33/39 +f 26/37 275/270 385/438 121/38 +f 275/270 79/266 384/439 385/438 +f 386/440 234/441 67/435 380/434 +f 384/439 386/440 380/434 98/433 +f 79/266 272/265 386/440 384/439 +f 272/265 22/264 234/441 386/440 +# 384 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj.meta new file mode 100644 index 0000000..746f3d9 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined009.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: c34272b7bd842184fa22d262ba1eaec7 +timeCreated: 1484958684 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined009 + 100002: //RootNode + 400000: rocksCombined009 + 400002: //RootNode + 2300000: rocksCombined009 + 3300000: rocksCombined009 + 4300000: rocksCombined009 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj new file mode 100644 index 0000000..c6b7367 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj @@ -0,0 +1,2012 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:32 + +mtllib rocksCombined010.mtl + +# +# object rocksCombined010 +# + +v 7.395447 1.953232 80.512306 +v 24.425186 3.260872 77.905289 +v 10.774086 3.763556 5.168640 +v 24.062004 3.766741 5.326218 +v 11.694481 28.441849 65.741562 +v 18.994034 28.356766 66.959579 +v 13.060783 27.416470 5.132935 +v 18.733147 27.556633 5.208374 +v 24.835747 14.163071 75.804184 +v 8.128372 15.845724 70.415169 +v 21.714081 13.354494 4.318848 +v 10.747307 13.296144 3.727615 +v 5.620316 3.647397 41.331558 +v 25.039253 3.356057 42.162338 +v 19.456184 28.122326 34.980591 +v 13.763412 28.456982 34.238007 +v 34.218536 14.291512 36.443481 +v 8.327324 13.029131 38.295349 +v 17.384644 3.339555 3.053238 +v 17.972557 2.766742 80.373055 +v 15.830261 28.674648 67.200150 +v 15.650475 28.606163 2.516769 +v 17.138847 14.979447 76.538391 +v 16.469482 13.002404 0.072983 +v 14.440285 2.922413 41.925827 +v 16.142387 29.182907 34.314667 +v 24.911163 3.382352 22.706070 +v 11.993118 28.492420 18.121094 +v 23.557198 14.417360 20.002380 +v 9.576218 3.432788 21.896286 +v 18.146935 28.995602 17.673325 +v 9.910248 13.589858 19.963181 +v 17.443016 2.476733 21.845535 +v 15.339790 30.604412 17.164688 +v 9.750076 2.896677 61.090324 +v 19.586258 28.543175 51.710136 +v 3.942917 13.620041 56.163307 +v 26.351631 2.179962 60.769012 +v 13.532471 26.886631 52.445160 +v 32.680801 14.269455 53.089874 +v 17.521790 1.293154 61.531418 +v 16.148918 28.917358 51.770714 +v 8.760094 1.060375 69.582558 +v 13.806709 1.908034 61.857613 +v 17.687454 1.905083 73.044365 +v 14.137932 1.902783 80.709427 +v 12.969604 0.445815 71.057518 +v 14.077003 28.793179 66.605247 +v 15.820084 30.909977 59.856911 +v 15.146141 28.207520 51.979568 +v 11.345543 29.414230 59.926369 +v 13.705193 30.721054 59.333160 +v 17.794907 7.663238 80.703331 +v 14.160538 15.663086 76.339195 +v 2.746437 9.766756 75.602776 +v 13.538689 7.949025 81.894775 +v 27.662956 7.062922 57.406120 +v 31.120354 16.477200 67.865120 +v 24.714546 7.467714 77.379471 +v 25.901711 2.118703 71.256798 +v 33.442978 8.358610 73.313309 +v 16.935417 7.677535 0.595276 +v 19.443863 13.037765 1.498749 +v 24.313248 7.616527 4.196579 +v 21.085205 3.364912 3.904846 +v 20.333931 7.635842 1.930817 +v 1.657326 3.155734 12.829437 +v 4.596252 7.810191 20.927399 +v 5.278038 14.892886 10.238007 +v 10.514961 7.666590 4.345810 +v 3.940140 7.038206 12.160126 +v 17.521629 28.658775 67.252975 +v 16.461586 20.786575 72.878510 +v 20.243774 13.591095 76.622108 +v 20.901154 20.976597 70.363075 +v 19.209381 20.497887 72.169586 +v 18.651993 28.995026 11.080597 +v 19.502365 21.094639 19.579941 +v 22.473015 13.835619 11.657227 +v 20.040787 20.969883 4.117767 +v 20.435005 21.592728 10.801666 +v 10.237541 22.275082 4.188278 +v 14.249527 28.158001 3.293381 +v 16.113495 21.304031 1.474518 +v 13.684761 13.167185 0.834518 +v 14.024384 21.595016 2.217316 +v 10.369385 21.464397 53.446167 +v 6.145035 13.479708 65.048187 +v 11.331841 21.373619 69.326172 +v 6.116135 22.993103 62.381653 +v 13.384956 2.599107 21.877350 +v 11.649925 4.631932 32.106552 +v 8.849060 3.199399 41.705750 +v 0.920044 6.578958 31.684250 +v 4.753471 5.680152 31.885925 +v 16.831993 30.883720 17.080551 +v 15.833389 29.734188 25.959824 +v 17.818687 29.257614 34.460571 +v 19.128181 28.387657 26.560486 +v 17.590431 29.850132 25.952957 +v 24.406532 7.889583 21.775604 +v 25.140617 13.653715 28.334991 +v 29.168785 6.600073 40.143280 +v 25.599594 2.627091 32.146317 +v 25.340363 7.459712 30.872742 +v 9.331604 3.102279 51.724274 +v 5.802948 6.971704 59.194084 +v 9.770882 13.216785 47.674500 +v 5.296585 7.519410 39.916092 +v 8.685936 7.394761 49.387657 +v 22.937180 22.977901 54.125473 +v 26.534683 14.791668 47.064194 +v 22.892403 22.148972 36.584961 +v 19.152245 27.468338 43.502640 +v 22.764870 22.621441 45.174194 +v 12.078331 28.382813 26.590439 +v 10.568222 20.812603 20.142487 +v 7.174881 14.739528 28.255142 +v 12.435364 21.211330 35.836716 +v 10.996475 21.102669 27.691376 +v 21.529205 2.533049 42.035507 +v 24.941544 3.272657 51.224365 +v 22.081841 0.986924 60.397980 +v 17.454872 2.497272 52.060463 +v 21.598351 2.438864 51.727280 +v 19.657478 29.493572 59.903786 +v 17.326881 29.270618 51.486771 +v 17.522614 30.853798 59.547066 +v 21.557426 3.123371 79.515152 +v 21.316544 6.948707 79.607140 +v 13.587715 3.191429 3.409302 +v 13.678131 7.581561 1.971527 +v 13.921280 20.869919 72.380417 +v 17.209221 28.095364 2.813431 +v 18.312859 20.988914 2.201294 +v 24.897865 3.459590 12.968857 +v 21.608849 2.429941 22.285538 +v 12.042351 2.032472 11.349304 +v 21.603088 2.060591 12.502640 +v 11.597809 29.253658 10.630798 +v 13.691658 30.564217 17.653381 +v 15.672813 30.673740 10.686951 +v 13.306580 31.106991 10.412704 +v 1.784119 10.387906 30.844116 +v 21.441963 21.286755 27.600082 +v 5.065102 2.120959 12.069168 +v 17.215630 30.256313 10.846893 +v 24.739868 7.809915 13.067032 +v 4.568222 23.317749 9.527878 +v 21.921043 1.889173 31.635147 +v 14.552032 29.614166 34.400986 +v 14.149239 29.763042 26.009613 +v 13.205505 2.615572 51.739891 +v 13.767357 27.823059 43.305405 +v 15.832710 29.124088 43.039703 +v 14.187935 29.212662 42.890091 +v 25.793297 7.183849 49.183281 +v 12.513145 20.494293 45.662308 +v 6.814751 6.608964 64.839378 +v 22.079079 22.877487 62.409264 +v 22.075996 1.598104 72.327950 +v 17.578148 28.956234 42.997162 +v 8.464653 1.765234 75.024979 +v 9.977287 0.000000 69.952080 +v 14.123955 0.644058 77.625519 +v 8.328430 1.879200 82.000404 +v 11.483925 0.983771 76.251274 +v 9.595306 2.319773 64.686722 +v 11.558937 2.395323 61.833038 +v 13.959358 1.834134 66.260117 +v 11.542053 1.077504 65.391083 +v 15.739426 2.223009 62.523331 +v 17.593384 2.348586 67.534126 +v 15.398109 1.179430 71.933701 +v 15.765610 2.193902 66.822052 +v 18.358917 1.454060 78.020317 +v 16.136772 1.808129 80.805382 +v 16.401711 0.679646 78.322632 +v 13.086113 28.715984 66.237434 +v 13.796219 30.726234 63.133743 +v 12.873558 30.308628 59.302528 +v 11.394592 28.986576 63.462395 +v 12.649086 30.220200 63.053680 +v 14.901764 28.875858 66.852348 +v 15.438614 31.646229 62.980751 +v 14.810112 30.786945 59.683487 +v 14.647583 31.173820 63.122406 +v 14.807625 30.713684 55.229309 +v 15.630089 28.547237 51.842941 +v 14.022583 29.700581 55.011307 +v 14.304726 30.193848 55.126793 +v 14.611946 27.735527 52.068321 +v 12.553833 28.475079 55.181152 +v 13.664413 29.401375 55.012741 +v 12.955750 3.990281 82.597771 +v 7.821182 9.791319 81.303291 +v 6.097092 4.646308 79.205460 +v 9.346794 4.504641 82.583893 +v 17.727219 4.964041 80.468819 +v 15.891884 8.432374 81.675125 +v 16.117592 4.489817 81.281883 +v 17.806160 11.501117 78.978081 +v 15.679695 15.295778 76.188950 +v 13.545067 13.618909 80.046959 +v 15.946312 12.344254 79.717056 +v 11.163322 17.418350 74.520607 +v 4.032715 12.800563 72.559013 +v 9.097588 14.573828 78.576813 +v 27.796585 4.703819 59.524666 +v 29.439743 7.262093 63.199699 +v 29.305389 3.956507 71.564980 +v 28.783493 0.377566 66.205925 +v 29.297707 2.452527 65.375626 +v 30.071609 9.882787 55.396782 +v 27.790962 15.099237 59.477676 +v 34.068344 12.127584 71.128769 +v 30.337280 10.930660 60.497154 +v 29.431259 15.510464 74.625458 +v 26.574234 10.524904 77.627426 +v 30.208168 8.165907 76.713196 +v 31.199326 11.846405 76.123871 +v 24.229439 4.727013 77.764069 +v 24.915100 3.050123 75.737839 +v 25.347160 4.453192 74.331421 +v 17.237900 5.098793 1.565811 +v 18.669617 7.622852 1.281464 +v 20.765930 5.281705 2.265900 +v 19.222763 3.363193 3.335236 +v 18.984634 5.143323 1.814346 +v 16.812256 9.904278 0.683228 +v 17.964554 13.437522 0.836365 +v 19.997063 9.946831 1.641357 +v 18.378670 9.899524 0.997284 +v 20.846466 13.482141 2.565857 +v 22.613228 10.462049 4.350311 +v 22.026093 7.568459 2.637146 +v 21.811417 10.389523 2.385300 +v 24.535461 5.515407 4.432495 +v 23.168549 3.279279 4.404160 +v 22.957634 5.391574 2.670914 +v 8.574539 3.251306 7.751022 +v 1.896629 4.661058 12.841934 +v 9.217285 7.750180 7.295746 +v 10.416084 5.256885 4.644836 +v 7.073456 5.030461 7.633163 +v 0.384186 2.952823 17.178940 +v 4.265228 5.322423 21.300995 +v 2.024193 7.114681 16.863571 +v 0.000000 4.599553 17.072128 +v 6.339828 10.718979 20.416290 +v 9.735992 13.524456 16.424820 +v 6.605148 10.438913 11.319351 +v 5.178627 10.356979 16.710754 +v 3.551765 15.602919 5.837769 +v 10.875397 10.089251 3.955185 +v 9.364769 10.817371 7.118134 +v 18.348450 28.607513 67.145256 +v 17.981354 25.694450 70.316902 +v 20.253044 20.546890 71.666092 +v 19.617172 25.685024 68.117180 +v 18.864830 25.733490 69.767159 +v 16.719315 28.567436 67.331642 +v 16.124710 25.448818 70.459518 +v 17.817123 20.748566 72.565674 +v 17.058975 25.589779 70.525604 +v 17.085533 17.001909 74.508835 +v 18.978523 14.164426 76.956764 +v 19.466270 16.812744 74.828712 +v 18.255508 16.879566 74.706169 +v 21.924881 13.716288 76.456528 +v 21.985725 17.339764 72.879250 +v 20.848885 16.877930 74.425354 +v 18.728874 28.459122 7.883011 +v 19.529243 25.768005 10.979401 +v 20.326187 21.252720 7.385468 +v 19.285896 25.141239 4.486221 +v 19.523804 25.546246 7.743973 +v 18.647690 29.550808 14.745255 +v 19.719490 25.974213 18.788300 +v 20.040627 21.520092 14.988251 +v 19.308044 26.101162 14.530258 +v 21.553001 17.566593 19.945175 +v 21.793877 13.863811 16.805328 +v 21.374123 17.369854 10.771317 +v 21.585052 17.401255 15.693695 +v 21.873878 13.379272 7.243713 +v 21.006721 17.326101 4.200684 +v 21.171707 17.073013 7.281601 +v 8.907280 17.915510 3.474838 +v 12.660606 22.051769 2.648727 +v 13.918877 16.833927 1.919266 +v 12.194389 12.917878 1.834778 +v 12.452568 16.715200 2.232300 +v 12.304512 25.495041 4.372681 +v 13.375824 27.894623 3.705261 +v 14.286659 25.156990 2.419662 +v 13.296066 25.104271 2.749710 +v 15.016472 28.424984 2.858551 +v 15.902534 25.602848 1.786499 +v 15.094841 21.315754 1.793381 +v 15.113091 25.306664 2.071960 +v 16.217957 16.950563 0.987289 +v 14.900009 13.198767 -0.000000 +v 15.134071 16.881985 1.492386 +v 8.386040 27.082516 60.569489 +v 9.239540 21.814522 66.544228 +v 11.254799 24.965584 68.131989 +v 9.199829 26.344387 64.690765 +v 11.945045 25.317104 52.683617 +v 6.667992 23.250225 58.021393 +v 9.752861 26.737865 56.354172 +v 8.566505 17.575308 55.159424 +v 6.277992 13.203631 62.554901 +v 6.026520 17.608456 63.656647 +v 6.396652 17.770233 58.834099 +v 6.518936 14.393596 67.469452 +v 10.925064 18.086617 69.839958 +v 7.981415 17.817081 67.492615 +v 11.426003 2.736246 22.063034 +v 8.697456 4.204440 27.038025 +v 2.738258 5.846687 31.567703 +v 4.843658 5.092135 27.160187 +v 6.306664 4.451687 27.292496 +v 15.414787 2.558596 21.704346 +v 17.069046 2.645130 26.290070 +v 8.071732 5.371342 31.910706 +v 11.714500 3.881829 26.651154 +v 17.597099 2.180408 36.997314 +v 11.706238 3.075387 41.726715 +v 13.646278 2.381077 37.226624 +v 15.567833 2.463784 36.934738 +v 6.876816 3.193768 41.621460 +v 9.877579 2.998580 36.959259 +v 11.001556 2.518734 37.210083 +v 17.603226 30.829777 17.191849 +v 16.975296 29.783073 22.367371 +v 18.369789 29.594662 26.048203 +v 18.819328 28.824947 22.949722 +v 17.670502 29.597115 22.610703 +v 16.123993 30.662029 17.053024 +v 15.531166 30.089893 22.312088 +v 16.664116 29.780231 26.082504 +v 16.314209 29.968853 22.347717 +v 15.975723 29.472839 30.558884 +v 17.047096 29.214626 34.278214 +v 17.507172 29.624172 30.845184 +v 16.714302 29.548084 30.713699 +v 18.502159 29.101543 34.692825 +v 19.542656 28.355743 30.622101 +v 18.498489 29.647800 30.741623 +v 25.011253 5.293122 22.311386 +v 24.822952 7.626432 26.166061 +v 25.874825 4.590390 31.794510 +v 24.942924 3.401625 27.302414 +v 25.320740 5.107484 26.905243 +v 23.904518 10.576284 21.050186 +v 24.276428 14.050078 24.009659 +v 25.665215 10.147117 29.654739 +v 24.447456 10.369991 25.359482 +v 31.926682 13.757770 31.372070 +v 32.402901 10.098789 37.803162 +v 27.260666 7.110942 35.131149 +v 29.729378 9.972116 33.870148 +v 26.848602 4.701820 41.534576 +v 25.148300 3.173238 36.926651 +v 25.594337 4.878769 36.284851 +v 5.977890 3.970037 46.065384 +v 8.316147 4.762861 50.643700 +v 1.538353 8.483894 43.989182 +v 5.136856 5.079102 40.790268 +v 2.645576 5.716873 45.059464 +v 9.659233 3.026470 56.660782 +v 8.524490 4.319697 60.020439 +v 6.062973 7.465951 53.993553 +v 8.646439 4.701059 55.748062 +v 2.714874 10.464708 57.438713 +v 7.217751 13.581011 51.229652 +v 8.965950 10.187023 48.454605 +v 6.405281 10.359226 52.459328 +v 11.247223 12.678650 43.903519 +v 5.244316 10.949633 38.993317 +v 4.936623 10.600133 44.334122 +v 20.942192 26.249081 52.766029 +v 22.510597 22.900085 48.710724 +v 20.827644 25.140980 44.397980 +v 19.722351 27.960583 47.588562 +v 20.912186 25.781673 47.634842 +v 25.288857 19.646862 54.470245 +v 27.561348 15.019525 50.722946 +v 25.124802 18.957016 45.996994 +v 25.422218 19.416229 49.643349 +v 30.770111 14.383544 41.807663 +v 27.173508 18.068810 36.744095 +v 23.693962 22.872856 40.908661 +v 25.377579 18.416388 41.820053 +v 20.368050 25.072277 35.484024 +v 19.663429 27.847748 39.093979 +v 20.852982 25.336540 40.157257 +v 12.813560 28.317337 30.788666 +v 11.494278 25.003536 27.269440 +v 12.303009 21.389763 30.910934 +v 13.069389 25.365536 34.720596 +v 12.338875 25.427002 30.918030 +v 11.803001 28.492741 22.523102 +v 10.030434 25.331505 19.311172 +v 10.368034 20.997757 23.412552 +v 11.173607 25.408737 22.914780 +v 10.371162 16.926285 20.238342 +v 9.839203 13.884583 23.300354 +v 11.279472 17.077139 27.961288 +v 9.926308 17.280262 23.279999 +v 7.561890 14.361710 33.245483 +v 11.639236 17.066668 37.599670 +v 11.943153 16.808966 31.979248 +v 19.487823 2.486935 42.060028 +v 21.697502 2.446057 47.449509 +v 19.569221 2.293513 51.714264 +v 17.414780 2.465732 46.916840 +v 19.547997 2.409259 47.304733 +v 23.604393 2.625238 42.280060 +v 25.072388 3.257335 46.818329 +v 23.793999 2.351571 51.645119 +v 23.949036 2.286458 47.072678 +v 25.208076 2.896123 55.790245 +v 24.862114 0.905628 61.060677 +v 21.555000 2.423353 56.365509 +v 24.037781 1.937596 56.146461 +v 19.992035 0.286677 60.301102 +v 17.442848 1.726613 55.908501 +v 19.588860 2.161906 56.084503 +v 19.368965 28.852612 64.314438 +v 18.682098 31.143887 59.123817 +v 17.446655 31.522099 63.308723 +v 18.539711 31.128548 63.495384 +v 19.344536 28.795090 55.486809 +v 18.349136 29.835178 51.244766 +v 16.348351 30.640606 55.156975 +v 18.188194 29.761154 55.243858 +v 16.605286 29.174854 51.679756 +v 16.629890 30.902988 59.826599 +v 15.407204 30.827724 55.208824 +v 16.383568 31.638706 63.060287 +v 19.814827 3.064954 79.951668 +v 21.502640 4.661835 80.119980 +v 19.374771 7.251617 79.966888 +v 19.540031 4.868050 80.400925 +v 23.051544 3.381368 78.721649 +v 22.855530 6.984436 78.780907 +v 22.898018 4.874819 79.145798 +v 20.253555 10.326104 77.454117 +v 21.984497 10.157660 77.308113 +v 19.049637 10.794840 78.071373 +v 11.751038 7.731259 2.630066 +v 13.733162 5.144884 2.327240 +v 11.809242 3.333254 4.182877 +v 11.898453 5.203945 3.079544 +v 13.284126 10.324133 1.485565 +v 12.108093 10.223813 2.446304 +v 15.382797 7.513816 1.388672 +v 14.792084 9.934343 0.718140 +v 15.513786 3.279738 3.044754 +v 15.485962 5.090799 1.669357 +v 14.046951 25.181736 69.983604 +v 15.086082 20.706833 72.953972 +v 15.164368 25.319084 70.237350 +v 12.756104 21.451694 71.136475 +v 12.538322 25.144825 69.434860 +v 14.415047 18.288841 72.887222 +v 12.593544 18.596275 71.712326 +v 16.080826 17.200148 74.163109 +v 19.299118 20.886616 2.610245 +v 17.773491 25.023724 2.321518 +v 18.189728 28.064587 4.205078 +v 18.613983 24.987804 2.711838 +v 18.871376 17.069073 1.942505 +v 20.101074 17.375645 2.335632 +v 17.203064 20.760506 1.520523 +v 17.624191 16.879171 1.529739 +v 16.496246 28.105206 2.646713 +v 16.813171 24.930946 1.781982 +v 24.899765 3.054492 8.566193 +v 23.326248 2.522396 12.581528 +v 21.342552 2.556880 6.925034 +v 23.271515 2.637050 7.685532 +v 24.910446 3.331121 17.932526 +v 23.634216 2.574523 22.711990 +v 21.569427 2.407852 17.460373 +v 23.509399 2.557808 17.721771 +v 19.551781 2.383470 22.005051 +v 10.786865 1.967554 16.563812 +v 19.477127 1.959472 11.989868 +v 19.461533 2.415071 16.742157 +v 17.438263 2.449914 6.167053 +v 19.487022 2.237192 6.111465 +v 12.741829 28.261787 7.673386 +v 12.700439 30.777672 10.835968 +v 13.872414 29.469887 6.660080 +v 13.394676 29.223206 7.272675 +v 10.553230 29.173618 13.369064 +v 12.213173 30.027370 17.671127 +v 12.666687 30.517899 13.070663 +v 11.793137 30.419891 13.228256 +v 14.428230 30.716236 17.496414 +v 15.514755 30.518280 13.270279 +v 14.611320 31.255871 10.555771 +v 14.629700 30.521255 13.331421 +v 15.556931 29.557873 6.329010 +v 14.835045 29.884468 6.723251 +v 0.746597 8.326160 31.373978 +v 6.168777 8.907524 25.649948 +v 4.794243 6.797005 26.797104 +v 2.691086 9.817581 35.071304 +v 8.418175 5.007241 36.180023 +v 4.442253 12.278923 29.437241 +v 3.453049 12.712914 34.334061 +v 8.310455 11.285205 23.877930 +v 22.082092 21.436344 32.128418 +v 20.402214 25.723213 26.946030 +v 20.542671 25.421589 31.504288 +v 23.206696 17.394049 28.306198 +v 30.346451 17.420246 30.787872 +v 21.045303 21.366745 23.515854 +v 22.330818 17.405361 23.824875 +v 20.060196 25.740471 23.180161 +v 13.569870 2.688065 6.880722 +v 2.849525 2.395339 12.616577 +v 11.451874 2.737708 7.341858 +v 8.000732 2.063117 11.503830 +v 15.472878 2.524376 6.218811 +v 4.546181 2.336074 16.678055 +v 7.387726 2.154833 16.669952 +v 2.661446 2.149047 17.055511 +v 17.286507 29.454418 7.227280 +v 17.952156 30.285484 11.039398 +v 17.993263 29.389359 7.580353 +v 16.471169 30.249531 10.690811 +v 16.446045 29.415405 6.667542 +v 16.962257 30.603741 13.756866 +v 16.251511 30.670494 13.398666 +v 17.718430 30.502438 14.180161 +v 24.150444 8.247171 7.628815 +v 25.033463 5.709126 13.198349 +v 25.229340 5.245810 8.316177 +v 23.181450 10.585476 12.135284 +v 22.945038 10.622584 7.550293 +v 24.189217 7.900183 17.400757 +v 23.378708 10.705684 17.043945 +v 25.058876 5.258142 17.768875 +v 6.700806 22.864815 6.608673 +v 11.031090 25.951401 10.487030 +v 11.319473 25.946724 7.457703 +v 2.420448 19.772827 9.334091 +v 4.637596 19.170425 5.959839 +v 10.634590 21.352207 14.415955 +v 10.299248 17.124899 15.867615 +v 10.078575 25.895687 13.613403 +v 24.412743 1.800743 32.178864 +v 21.821091 2.371720 26.813736 +v 23.808708 2.557035 27.399994 +v 21.721596 2.277134 37.378586 +v 23.771873 2.277807 37.182495 +v 19.526604 2.441051 31.997543 +v 19.503220 2.363124 37.068939 +v 19.669388 2.431080 26.777481 +v 13.233505 29.509636 26.060928 +v 13.952995 29.941475 22.204315 +v 12.780571 29.851624 22.318161 +v 14.045326 29.601063 34.255508 +v 14.545105 29.418743 30.253052 +v 13.921318 29.296520 30.112442 +v 15.319839 29.356834 34.419022 +v 15.017395 29.690300 25.895660 +v 15.235313 29.411331 30.413742 +v 14.746063 30.036335 22.252151 +v 11.205544 2.716557 51.577698 +v 13.407684 2.385923 56.610390 +v 11.381783 2.508093 56.619675 +v 8.300560 3.369488 46.368530 +v 8.025223 3.087600 46.604599 +v 15.342834 2.636405 51.775787 +v 14.238693 2.679300 46.928391 +v 15.591827 2.369981 56.785088 +v 14.447327 28.823372 38.695770 +v 14.665070 29.280910 43.028183 +v 16.266266 29.137695 38.772125 +v 15.321335 28.859825 38.732010 +v 14.128906 27.580818 38.697845 +v 13.514816 29.124290 42.889801 +v 14.150719 28.692974 38.558151 +v 14.837303 26.733273 48.032669 +v 15.371124 28.202145 47.367920 +v 15.266495 27.997097 47.566025 +v 16.430748 28.658943 47.273117 +v 16.009171 28.325256 47.281296 +v 29.521248 6.888526 44.029800 +v 25.659409 5.032084 49.827888 +v 25.574684 4.981038 45.898636 +v 26.065292 10.440724 48.433502 +v 31.826027 10.188272 42.656006 +v 26.757278 7.286218 53.881340 +v 26.995079 10.165237 52.344215 +v 26.072212 4.720011 54.768204 +v 12.848595 24.757290 44.530609 +v 11.307381 21.317230 50.262589 +v 13.422218 24.562565 49.301369 +v 12.304276 20.930931 40.770233 +v 13.575233 24.725876 39.519608 +v 10.940758 16.630730 47.275253 +v 12.036949 16.734188 42.474823 +v 9.350090 17.460262 50.246590 +v 6.995850 3.343438 65.543900 +v 7.648674 6.163810 62.902824 +v 8.803398 4.230788 63.771210 +v 3.905060 7.423123 68.131073 +v 6.630302 4.294626 73.091713 +v 6.646065 9.943865 65.198204 +v 4.864120 10.386528 67.447334 +v 6.899170 9.718912 63.032516 +v 21.278412 21.867519 66.889984 +v 20.738579 26.357018 61.294670 +v 20.137154 25.881649 65.488388 +v 24.726372 20.014000 63.657654 +v 24.715759 19.017963 70.760963 +v 21.521309 22.466442 58.382332 +v 24.663452 19.612888 59.033340 +v 20.581604 26.099571 57.364037 +v 21.608505 2.480486 76.651138 +v 24.082054 1.622969 71.894081 +v 23.448334 2.496865 76.298058 +v 20.006874 1.822861 72.946678 +v 19.888214 2.337898 77.128639 +v 22.546776 0.699435 67.558838 +v 20.181389 1.105056 67.699989 +v 25.501999 0.577237 67.498085 +v 18.230591 28.667839 43.114944 +v 17.828880 29.438122 47.501358 +v 18.767128 29.338680 47.115936 +v 17.989166 29.439842 38.797974 +v 18.921661 29.075298 38.747650 +v 16.893326 28.994446 42.986938 +v 17.109695 29.262096 38.712662 +v 16.875397 29.008648 47.254517 +# 642 vertices + +vt 0.831470 0.858760 0.000000 +vt 0.817750 0.858640 0.000000 +vt 0.818990 0.852350 0.000000 +vt 0.832840 0.852580 0.000000 +vt 0.804040 0.858520 0.000000 +vt 0.805130 0.852120 0.000000 +vt 0.806220 0.845720 0.000000 +vt 0.820220 0.846060 0.000000 +vt 0.834210 0.846410 0.000000 +vt 0.790320 0.858410 0.000000 +vt 0.791270 0.851890 0.000000 +vt 0.776600 0.858290 0.000000 +vt 0.777410 0.851660 0.000000 +vt 0.778230 0.845030 0.000000 +vt 0.792220 0.845370 0.000000 +vt 0.793180 0.838860 0.000000 +vt 0.807310 0.839310 0.000000 +vt 0.779040 0.838400 0.000000 +vt 0.779850 0.831770 0.000000 +vt 0.794130 0.832340 0.000000 +vt 0.808410 0.832910 0.000000 +vt 0.821450 0.839770 0.000000 +vt 0.835590 0.840230 0.000000 +vt 0.822680 0.833490 0.000000 +vt 0.836960 0.834060 0.000000 +vt 0.786610 0.980070 0.000000 +vt 0.787270 0.982320 0.000000 +vt 0.776120 0.982060 0.000000 +vt 0.775570 0.979750 0.000000 +vt 0.787940 0.984560 0.000000 +vt 0.776680 0.984370 0.000000 +vt 0.765410 0.984180 0.000000 +vt 0.764970 0.981800 0.000000 +vt 0.764530 0.979420 0.000000 +vt 0.788610 0.986800 0.000000 +vt 0.777230 0.986680 0.000000 +vt 0.789280 0.989040 0.000000 +vt 0.777790 0.988990 0.000000 +vt 0.766300 0.988940 0.000000 +vt 0.765850 0.986560 0.000000 +vt 0.754480 0.986440 0.000000 +vt 0.754150 0.984000 0.000000 +vt 0.754810 0.988890 0.000000 +vt 0.743320 0.988840 0.000000 +vt 0.743100 0.986330 0.000000 +vt 0.742880 0.983810 0.000000 +vt 0.753820 0.981550 0.000000 +vt 0.753490 0.979100 0.000000 +vt 0.742660 0.981290 0.000000 +vt 0.742450 0.978770 0.000000 +vt 0.837150 0.861510 0.000000 +vt 0.832010 0.872880 0.000000 +vt 0.826660 0.870300 0.000000 +vt 0.842840 0.864270 0.000000 +vt 0.837370 0.875450 0.000000 +vt 0.831900 0.886630 0.000000 +vt 0.826870 0.884240 0.000000 +vt 0.821840 0.881850 0.000000 +vt 0.848520 0.867020 0.000000 +vt 0.842730 0.878020 0.000000 +vt 0.854200 0.869780 0.000000 +vt 0.848080 0.880590 0.000000 +vt 0.841960 0.891410 0.000000 +vt 0.836930 0.889020 0.000000 +vt 0.831140 0.900020 0.000000 +vt 0.826440 0.897810 0.000000 +vt 0.835850 0.902230 0.000000 +vt 0.829730 0.913040 0.000000 +vt 0.825350 0.911020 0.000000 +vt 0.820970 0.909000 0.000000 +vt 0.821740 0.895610 0.000000 +vt 0.817030 0.893400 0.000000 +vt 0.816600 0.906970 0.000000 +vt 0.812220 0.904950 0.000000 +vt 0.406490 0.870090 0.000000 +vt 0.411360 0.881240 0.000000 +vt 0.397990 0.882580 0.000000 +vt 0.392870 0.871460 0.000000 +vt 0.416230 0.892400 0.000000 +vt 0.403120 0.893700 0.000000 +vt 0.390010 0.895010 0.000000 +vt 0.384630 0.883920 0.000000 +vt 0.379250 0.872840 0.000000 +vt 0.421100 0.903550 0.000000 +vt 0.408250 0.904820 0.000000 +vt 0.425970 0.914710 0.000000 +vt 0.413370 0.915940 0.000000 +vt 0.400770 0.917170 0.000000 +vt 0.395390 0.906090 0.000000 +vt 0.382530 0.907360 0.000000 +vt 0.376900 0.896310 0.000000 +vt 0.388170 0.918410 0.000000 +vt 0.375570 0.919640 0.000000 +vt 0.369680 0.908630 0.000000 +vt 0.363790 0.897620 0.000000 +vt 0.371260 0.885260 0.000000 +vt 0.365630 0.874220 0.000000 +vt 0.357900 0.886610 0.000000 +vt 0.352010 0.875590 0.000000 +vt 0.590720 0.852920 0.000000 +vt 0.591190 0.864250 0.000000 +vt 0.585650 0.864250 0.000000 +vt 0.584780 0.852910 0.000000 +vt 0.591660 0.875580 0.000000 +vt 0.586510 0.875600 0.000000 +vt 0.581370 0.875610 0.000000 +vt 0.580110 0.864250 0.000000 +vt 0.578850 0.852890 0.000000 +vt 0.592130 0.886910 0.000000 +vt 0.587380 0.886940 0.000000 +vt 0.592600 0.898240 0.000000 +vt 0.588240 0.898280 0.000000 +vt 0.583890 0.898320 0.000000 +vt 0.582630 0.886970 0.000000 +vt 0.577880 0.886990 0.000000 +vt 0.576220 0.875620 0.000000 +vt 0.579540 0.898370 0.000000 +vt 0.575180 0.898410 0.000000 +vt 0.573130 0.887020 0.000000 +vt 0.571080 0.875630 0.000000 +vt 0.574570 0.864250 0.000000 +vt 0.572910 0.852870 0.000000 +vt 0.569030 0.864240 0.000000 +vt 0.566980 0.852860 0.000000 +vt 0.614410 0.853580 0.000000 +vt 0.627850 0.854090 0.000000 +vt 0.626440 0.865360 0.000000 +vt 0.613240 0.864870 0.000000 +vt 0.641290 0.854610 0.000000 +vt 0.639650 0.865850 0.000000 +vt 0.638000 0.877100 0.000000 +vt 0.625040 0.876630 0.000000 +vt 0.612080 0.876160 0.000000 +vt 0.654730 0.855120 0.000000 +vt 0.652850 0.866340 0.000000 +vt 0.668170 0.855630 0.000000 +vt 0.666050 0.866830 0.000000 +vt 0.663930 0.878040 0.000000 +vt 0.650970 0.877570 0.000000 +vt 0.649090 0.888790 0.000000 +vt 0.636360 0.888350 0.000000 +vt 0.661810 0.889240 0.000000 +vt 0.659690 0.900440 0.000000 +vt 0.647210 0.900020 0.000000 +vt 0.634720 0.899590 0.000000 +vt 0.623640 0.887900 0.000000 +vt 0.610910 0.887450 0.000000 +vt 0.622240 0.899170 0.000000 +vt 0.609750 0.898750 0.000000 +vt 0.800890 0.986760 0.000000 +vt 0.799020 0.985840 0.000000 +vt 0.809820 0.969250 0.000000 +vt 0.812270 0.970480 0.000000 +vt 0.797150 0.984910 0.000000 +vt 0.807380 0.968020 0.000000 +vt 0.817600 0.951130 0.000000 +vt 0.820620 0.952670 0.000000 +vt 0.823640 0.954210 0.000000 +vt 0.795280 0.983990 0.000000 +vt 0.804930 0.966790 0.000000 +vt 0.793410 0.983060 0.000000 +vt 0.802490 0.965560 0.000000 +vt 0.811570 0.948050 0.000000 +vt 0.814590 0.949590 0.000000 +vt 0.824240 0.932390 0.000000 +vt 0.827830 0.934240 0.000000 +vt 0.820650 0.930550 0.000000 +vt 0.833890 0.915200 0.000000 +vt 0.838060 0.917350 0.000000 +vt 0.831430 0.936090 0.000000 +vt 0.835020 0.937930 0.000000 +vt 0.842230 0.919500 0.000000 +vt 0.846400 0.921650 0.000000 +vt 0.583960 0.975120 0.000000 +vt 0.572580 0.976460 0.000000 +vt 0.570150 0.957320 0.000000 +vt 0.581770 0.955940 0.000000 +vt 0.561210 0.977810 0.000000 +vt 0.558540 0.958710 0.000000 +vt 0.555880 0.939610 0.000000 +vt 0.567730 0.938190 0.000000 +vt 0.579570 0.936760 0.000000 +vt 0.549830 0.979150 0.000000 +vt 0.546930 0.960090 0.000000 +vt 0.538460 0.980490 0.000000 +vt 0.535320 0.961480 0.000000 +vt 0.532190 0.942460 0.000000 +vt 0.544030 0.941040 0.000000 +vt 0.541130 0.921980 0.000000 +vt 0.553210 0.920520 0.000000 +vt 0.529050 0.923450 0.000000 +vt 0.525920 0.904440 0.000000 +vt 0.538230 0.902930 0.000000 +vt 0.550550 0.901420 0.000000 +vt 0.565300 0.919050 0.000000 +vt 0.577380 0.917580 0.000000 +vt 0.562870 0.899910 0.000000 +vt 0.609430 0.917870 0.000000 +vt 0.605440 0.917750 0.000000 +vt 0.605460 0.898620 0.000000 +vt 0.609110 0.936990 0.000000 +vt 0.605420 0.936880 0.000000 +vt 0.601730 0.936770 0.000000 +vt 0.601450 0.917630 0.000000 +vt 0.601170 0.898490 0.000000 +vt 0.608790 0.956110 0.000000 +vt 0.605400 0.956010 0.000000 +vt 0.608470 0.975230 0.000000 +vt 0.605380 0.975140 0.000000 +vt 0.602290 0.975050 0.000000 +vt 0.602010 0.955910 0.000000 +vt 0.598620 0.955810 0.000000 +vt 0.598040 0.936660 0.000000 +vt 0.599190 0.974960 0.000000 +vt 0.596100 0.974870 0.000000 +vt 0.595220 0.955710 0.000000 +vt 0.594350 0.936560 0.000000 +vt 0.597460 0.917520 0.000000 +vt 0.596880 0.898370 0.000000 +vt 0.593470 0.917400 0.000000 +vt 0.781520 0.960950 0.000000 +vt 0.793010 0.961290 0.000000 +vt 0.770020 0.960600 0.000000 +vt 0.775520 0.941780 0.000000 +vt 0.787470 0.942150 0.000000 +vt 0.799410 0.942510 0.000000 +vt 0.758530 0.960260 0.000000 +vt 0.747030 0.959910 0.000000 +vt 0.751620 0.941060 0.000000 +vt 0.763570 0.941420 0.000000 +vt 0.768610 0.922580 0.000000 +vt 0.781010 0.922960 0.000000 +vt 0.756210 0.922200 0.000000 +vt 0.760800 0.903340 0.000000 +vt 0.773660 0.903740 0.000000 +vt 0.786510 0.904140 0.000000 +vt 0.793420 0.923350 0.000000 +vt 0.805820 0.923730 0.000000 +vt 0.799360 0.904550 0.000000 +vt 0.667280 0.849090 0.000000 +vt 0.681020 0.849520 0.000000 +vt 0.681650 0.856170 0.000000 +vt 0.666380 0.842540 0.000000 +vt 0.680390 0.842870 0.000000 +vt 0.694400 0.843200 0.000000 +vt 0.694770 0.849950 0.000000 +vt 0.695140 0.856710 0.000000 +vt 0.665490 0.836000 0.000000 +vt 0.679760 0.836220 0.000000 +vt 0.664600 0.829450 0.000000 +vt 0.679120 0.829570 0.000000 +vt 0.693650 0.829700 0.000000 +vt 0.694020 0.836450 0.000000 +vt 0.708290 0.836670 0.000000 +vt 0.708400 0.843530 0.000000 +vt 0.708180 0.829820 0.000000 +vt 0.722710 0.829940 0.000000 +vt 0.722560 0.836900 0.000000 +vt 0.722410 0.843860 0.000000 +vt 0.708510 0.850390 0.000000 +vt 0.708630 0.857240 0.000000 +vt 0.722260 0.850820 0.000000 +vt 0.722110 0.857780 0.000000 +vt 0.652410 0.995830 0.000000 +vt 0.651990 0.993430 0.000000 +vt 0.663240 0.993910 0.000000 +vt 0.663540 0.996330 0.000000 +vt 0.651560 0.991020 0.000000 +vt 0.662940 0.991490 0.000000 +vt 0.674320 0.991950 0.000000 +vt 0.674500 0.994390 0.000000 +vt 0.674670 0.996820 0.000000 +vt 0.651140 0.988620 0.000000 +vt 0.662640 0.989070 0.000000 +vt 0.650720 0.986220 0.000000 +vt 0.662340 0.986650 0.000000 +vt 0.673970 0.987080 0.000000 +vt 0.674150 0.989510 0.000000 +vt 0.685650 0.989960 0.000000 +vt 0.685700 0.992410 0.000000 +vt 0.685600 0.987500 0.000000 +vt 0.697230 0.987930 0.000000 +vt 0.697150 0.990400 0.000000 +vt 0.697080 0.992880 0.000000 +vt 0.685750 0.994870 0.000000 +vt 0.685800 0.997320 0.000000 +vt 0.697000 0.995350 0.000000 +vt 0.696930 0.997820 0.000000 +vt 0.514090 0.859050 0.000000 +vt 0.517050 0.870390 0.000000 +vt 0.503930 0.871780 0.000000 +vt 0.500740 0.860450 0.000000 +vt 0.520010 0.881740 0.000000 +vt 0.507120 0.883110 0.000000 +vt 0.494230 0.884470 0.000000 +vt 0.490810 0.873170 0.000000 +vt 0.487390 0.861860 0.000000 +vt 0.522960 0.893090 0.000000 +vt 0.510310 0.894440 0.000000 +vt 0.513500 0.905760 0.000000 +vt 0.501080 0.907090 0.000000 +vt 0.497650 0.895780 0.000000 +vt 0.485000 0.897130 0.000000 +vt 0.481340 0.885840 0.000000 +vt 0.488660 0.908420 0.000000 +vt 0.476240 0.909750 0.000000 +vt 0.472350 0.898480 0.000000 +vt 0.468460 0.887210 0.000000 +vt 0.477690 0.874550 0.000000 +vt 0.474030 0.863260 0.000000 +vt 0.464570 0.875940 0.000000 +vt 0.460680 0.864670 0.000000 +vt 0.735730 0.857910 0.000000 +vt 0.732480 0.869010 0.000000 +vt 0.719080 0.868830 0.000000 +vt 0.749360 0.858040 0.000000 +vt 0.745870 0.869190 0.000000 +vt 0.742380 0.880340 0.000000 +vt 0.729220 0.880110 0.000000 +vt 0.716060 0.879870 0.000000 +vt 0.762980 0.858160 0.000000 +vt 0.759260 0.869370 0.000000 +vt 0.772650 0.869550 0.000000 +vt 0.768700 0.880820 0.000000 +vt 0.755540 0.880580 0.000000 +vt 0.751820 0.891790 0.000000 +vt 0.738890 0.891500 0.000000 +vt 0.764750 0.892080 0.000000 +vt 0.748100 0.903000 0.000000 +vt 0.735400 0.902650 0.000000 +vt 0.725960 0.891210 0.000000 +vt 0.713030 0.890920 0.000000 +vt 0.722710 0.902310 0.000000 +vt 0.710010 0.901970 0.000000 +vt 0.448510 0.989710 0.000000 +vt 0.442880 0.970960 0.000000 +vt 0.454460 0.969820 0.000000 +vt 0.459770 0.988600 0.000000 +vt 0.437240 0.952210 0.000000 +vt 0.449150 0.951030 0.000000 +vt 0.461060 0.949860 0.000000 +vt 0.466040 0.968670 0.000000 +vt 0.471020 0.987490 0.000000 +vt 0.431610 0.933460 0.000000 +vt 0.443850 0.932250 0.000000 +vt 0.438540 0.913470 0.000000 +vt 0.451100 0.912230 0.000000 +vt 0.456080 0.931040 0.000000 +vt 0.468320 0.929840 0.000000 +vt 0.472970 0.948680 0.000000 +vt 0.463670 0.910990 0.000000 +vt 0.480560 0.928630 0.000000 +vt 0.484880 0.947510 0.000000 +vt 0.477620 0.967530 0.000000 +vt 0.482270 0.986380 0.000000 +vt 0.489210 0.966390 0.000000 +vt 0.493530 0.985270 0.000000 +vt 0.697790 0.977170 0.000000 +vt 0.686690 0.976910 0.000000 +vt 0.689380 0.958080 0.000000 +vt 0.700850 0.958370 0.000000 +vt 0.675590 0.976650 0.000000 +vt 0.677900 0.957780 0.000000 +vt 0.680220 0.938920 0.000000 +vt 0.692060 0.939250 0.000000 +vt 0.703900 0.939570 0.000000 +vt 0.664490 0.976380 0.000000 +vt 0.666430 0.957490 0.000000 +vt 0.653380 0.976120 0.000000 +vt 0.654960 0.957200 0.000000 +vt 0.656540 0.938280 0.000000 +vt 0.668380 0.938600 0.000000 +vt 0.670320 0.919710 0.000000 +vt 0.682530 0.920060 0.000000 +vt 0.658120 0.919360 0.000000 +vt 0.672270 0.900820 0.000000 +vt 0.684850 0.901200 0.000000 +vt 0.694740 0.920420 0.000000 +vt 0.706950 0.920770 0.000000 +vt 0.697430 0.901580 0.000000 +vt 0.722790 0.823430 0.000000 +vt 0.736940 0.823920 0.000000 +vt 0.736990 0.830400 0.000000 +vt 0.722870 0.816920 0.000000 +vt 0.736900 0.817450 0.000000 +vt 0.750920 0.817980 0.000000 +vt 0.751100 0.824420 0.000000 +vt 0.751280 0.830850 0.000000 +vt 0.722950 0.810400 0.000000 +vt 0.736850 0.810980 0.000000 +vt 0.723030 0.803890 0.000000 +vt 0.736800 0.804500 0.000000 +vt 0.750570 0.805110 0.000000 +vt 0.750740 0.811550 0.000000 +vt 0.764640 0.812120 0.000000 +vt 0.764950 0.818510 0.000000 +vt 0.764330 0.805720 0.000000 +vt 0.778100 0.806330 0.000000 +vt 0.778540 0.812690 0.000000 +vt 0.778980 0.819050 0.000000 +vt 0.765260 0.824910 0.000000 +vt 0.765570 0.831310 0.000000 +vt 0.779410 0.825410 0.000000 +vt 0.786700 0.997780 0.000000 +vt 0.775480 0.997840 0.000000 +vt 0.776060 0.995630 0.000000 +vt 0.787340 0.995590 0.000000 +vt 0.764270 0.997910 0.000000 +vt 0.764770 0.995670 0.000000 +vt 0.765280 0.993430 0.000000 +vt 0.776630 0.993420 0.000000 +vt 0.787990 0.993410 0.000000 +vt 0.753050 0.997980 0.000000 +vt 0.753490 0.995710 0.000000 +vt 0.741830 0.998040 0.000000 +vt 0.742200 0.995740 0.000000 +vt 0.742580 0.993440 0.000000 +vt 0.753930 0.993430 0.000000 +vt 0.754370 0.991160 0.000000 +vt 0.765790 0.991180 0.000000 +vt 0.742950 0.991140 0.000000 +vt 0.777210 0.991210 0.000000 +vt 0.788630 0.991230 0.000000 +vt 0.859690 0.872770 0.000000 +vt 0.853240 0.883370 0.000000 +vt 0.865180 0.875750 0.000000 +vt 0.858400 0.886150 0.000000 +vt 0.851620 0.896550 0.000000 +vt 0.846790 0.893980 0.000000 +vt 0.870670 0.878740 0.000000 +vt 0.863560 0.888930 0.000000 +vt 0.876160 0.881730 0.000000 +vt 0.868720 0.891710 0.000000 +vt 0.861280 0.901690 0.000000 +vt 0.856450 0.899120 0.000000 +vt 0.849340 0.909310 0.000000 +vt 0.844840 0.906950 0.000000 +vt 0.853840 0.911670 0.000000 +vt 0.840340 0.904590 0.000000 +vt 0.607730 0.864720 0.000000 +vt 0.608480 0.853420 0.000000 +vt 0.606970 0.876020 0.000000 +vt 0.601870 0.875870 0.000000 +vt 0.602210 0.864560 0.000000 +vt 0.602560 0.853250 0.000000 +vt 0.606220 0.887320 0.000000 +vt 0.601520 0.887180 0.000000 +vt 0.596820 0.887050 0.000000 +vt 0.596760 0.875730 0.000000 +vt 0.596700 0.864410 0.000000 +vt 0.596640 0.853090 0.000000 +vt 0.791710 0.982320 0.000000 +vt 0.800120 0.964490 0.000000 +vt 0.790010 0.981570 0.000000 +vt 0.797750 0.963430 0.000000 +vt 0.805490 0.945280 0.000000 +vt 0.808530 0.946670 0.000000 +vt 0.788310 0.980820 0.000000 +vt 0.795380 0.962360 0.000000 +vt 0.802450 0.943900 0.000000 +vt 0.809520 0.925430 0.000000 +vt 0.813230 0.927140 0.000000 +vt 0.816940 0.928840 0.000000 +vt 0.585130 0.955880 0.000000 +vt 0.586990 0.975060 0.000000 +vt 0.583270 0.936710 0.000000 +vt 0.586960 0.936660 0.000000 +vt 0.588490 0.955830 0.000000 +vt 0.590030 0.974990 0.000000 +vt 0.581400 0.917540 0.000000 +vt 0.585420 0.917490 0.000000 +vt 0.589450 0.917450 0.000000 +vt 0.590650 0.936610 0.000000 +vt 0.591860 0.955770 0.000000 +vt 0.593060 0.974930 0.000000 +vt 0.613810 0.805670 0.000000 +vt 0.627460 0.805370 0.000000 +vt 0.625860 0.811450 0.000000 +vt 0.612000 0.811700 0.000000 +vt 0.641100 0.805070 0.000000 +vt 0.639720 0.811200 0.000000 +vt 0.638340 0.817340 0.000000 +vt 0.624260 0.817530 0.000000 +vt 0.610190 0.817720 0.000000 +vt 0.654740 0.804760 0.000000 +vt 0.653580 0.810950 0.000000 +vt 0.668390 0.804460 0.000000 +vt 0.667440 0.810710 0.000000 +vt 0.666490 0.816950 0.000000 +vt 0.652420 0.817150 0.000000 +vt 0.651250 0.823340 0.000000 +vt 0.636960 0.823470 0.000000 +vt 0.665540 0.823200 0.000000 +vt 0.650090 0.829530 0.000000 +vt 0.635580 0.829610 0.000000 +vt 0.622660 0.823610 0.000000 +vt 0.608370 0.823740 0.000000 +vt 0.621070 0.829690 0.000000 +vt 0.606560 0.829770 0.000000 +vt 0.619700 0.975450 0.000000 +vt 0.618720 0.977750 0.000000 +vt 0.607390 0.977450 0.000000 +vt 0.630930 0.975670 0.000000 +vt 0.630060 0.978050 0.000000 +vt 0.629180 0.980420 0.000000 +vt 0.617750 0.980050 0.000000 +vt 0.606310 0.979680 0.000000 +vt 0.642160 0.975900 0.000000 +vt 0.641390 0.978350 0.000000 +vt 0.652720 0.978640 0.000000 +vt 0.652050 0.981170 0.000000 +vt 0.640620 0.980800 0.000000 +vt 0.639850 0.983250 0.000000 +vt 0.628310 0.982800 0.000000 +vt 0.651380 0.983690 0.000000 +vt 0.639080 0.985700 0.000000 +vt 0.627430 0.985180 0.000000 +vt 0.616770 0.982350 0.000000 +vt 0.605230 0.981910 0.000000 +vt 0.615790 0.984650 0.000000 +vt 0.604150 0.984130 0.000000 +vt 0.679310 0.867330 0.000000 +vt 0.692570 0.867830 0.000000 +vt 0.689990 0.878950 0.000000 +vt 0.676960 0.878500 0.000000 +vt 0.705830 0.868330 0.000000 +vt 0.703030 0.879410 0.000000 +vt 0.700230 0.890500 0.000000 +vt 0.687420 0.890080 0.000000 +vt 0.674620 0.889660 0.000000 +vt 0.500730 0.965160 0.000000 +vt 0.504760 0.984080 0.000000 +vt 0.496710 0.946250 0.000000 +vt 0.508530 0.944990 0.000000 +vt 0.512260 0.963930 0.000000 +vt 0.515990 0.982880 0.000000 +vt 0.492680 0.927330 0.000000 +vt 0.504810 0.926040 0.000000 +vt 0.516930 0.924740 0.000000 +vt 0.520360 0.943730 0.000000 +vt 0.523790 0.962710 0.000000 +vt 0.527230 0.981690 0.000000 +vt 0.612440 0.847630 0.000000 +vt 0.626150 0.847990 0.000000 +vt 0.610480 0.841670 0.000000 +vt 0.624460 0.841890 0.000000 +vt 0.638430 0.842110 0.000000 +vt 0.639860 0.848360 0.000000 +vt 0.608520 0.835720 0.000000 +vt 0.622760 0.835790 0.000000 +vt 0.637000 0.835860 0.000000 +vt 0.651250 0.835930 0.000000 +vt 0.652410 0.842320 0.000000 +vt 0.653570 0.848720 0.000000 +vt 0.607910 0.993410 0.000000 +vt 0.606970 0.991090 0.000000 +vt 0.618220 0.991670 0.000000 +vt 0.619030 0.994010 0.000000 +vt 0.606030 0.988770 0.000000 +vt 0.617410 0.989330 0.000000 +vt 0.628800 0.989900 0.000000 +vt 0.629480 0.992260 0.000000 +vt 0.630160 0.994620 0.000000 +vt 0.605090 0.986450 0.000000 +vt 0.616600 0.986990 0.000000 +vt 0.628120 0.987540 0.000000 +vt 0.639630 0.988080 0.000000 +vt 0.640180 0.990460 0.000000 +vt 0.640730 0.992840 0.000000 +vt 0.641290 0.995220 0.000000 +vt 0.556030 0.865780 0.000000 +vt 0.553760 0.854400 0.000000 +vt 0.558310 0.877160 0.000000 +vt 0.545540 0.878690 0.000000 +vt 0.543040 0.867320 0.000000 +vt 0.540540 0.855950 0.000000 +vt 0.560590 0.888540 0.000000 +vt 0.548050 0.890050 0.000000 +vt 0.535500 0.891570 0.000000 +vt 0.532770 0.880210 0.000000 +vt 0.530040 0.868860 0.000000 +vt 0.527310 0.857500 0.000000 +vt 0.620340 0.956380 0.000000 +vt 0.620970 0.937310 0.000000 +vt 0.632830 0.937630 0.000000 +vt 0.631880 0.956650 0.000000 +vt 0.621600 0.918240 0.000000 +vt 0.633770 0.918610 0.000000 +vt 0.645940 0.918990 0.000000 +vt 0.644680 0.937960 0.000000 +vt 0.643420 0.956930 0.000000 +vt 0.682050 0.804320 0.000000 +vt 0.681320 0.810630 0.000000 +vt 0.695710 0.804180 0.000000 +vt 0.695200 0.810560 0.000000 +vt 0.694680 0.816940 0.000000 +vt 0.680590 0.816940 0.000000 +vt 0.709370 0.804030 0.000000 +vt 0.709070 0.810480 0.000000 +vt 0.708780 0.816930 0.000000 +vt 0.708480 0.823370 0.000000 +vt 0.694170 0.823320 0.000000 +vt 0.679850 0.823260 0.000000 +vt 0.663950 0.978950 0.000000 +vt 0.675180 0.979250 0.000000 +vt 0.674780 0.981860 0.000000 +vt 0.663420 0.981510 0.000000 +vt 0.686420 0.979560 0.000000 +vt 0.697650 0.979860 0.000000 +vt 0.697510 0.982550 0.000000 +vt 0.686150 0.982210 0.000000 +vt 0.685870 0.984860 0.000000 +vt 0.674380 0.984470 0.000000 +vt 0.697370 0.985240 0.000000 +vt 0.662880 0.984080 0.000000 +vt 0.763630 0.851450 0.000000 +vt 0.749840 0.851240 0.000000 +vt 0.750320 0.844440 0.000000 +vt 0.764270 0.844740 0.000000 +vt 0.736050 0.851030 0.000000 +vt 0.736360 0.844150 0.000000 +vt 0.736680 0.837270 0.000000 +vt 0.750800 0.837650 0.000000 +vt 0.764920 0.838020 0.000000 +vt 0.708800 0.985510 0.000000 +vt 0.708750 0.988160 0.000000 +vt 0.708850 0.982870 0.000000 +vt 0.720200 0.983180 0.000000 +vt 0.720230 0.985780 0.000000 +vt 0.720270 0.988390 0.000000 +vt 0.708900 0.980220 0.000000 +vt 0.708960 0.977570 0.000000 +vt 0.720120 0.977970 0.000000 +vt 0.720160 0.980580 0.000000 +vt 0.731410 0.980930 0.000000 +vt 0.731540 0.983490 0.000000 +vt 0.731280 0.978370 0.000000 +vt 0.731670 0.986050 0.000000 +vt 0.731790 0.988620 0.000000 +vt 0.451270 0.877260 0.000000 +vt 0.447130 0.866020 0.000000 +vt 0.455400 0.888510 0.000000 +vt 0.442340 0.889800 0.000000 +vt 0.437960 0.878590 0.000000 +vt 0.433580 0.867380 0.000000 +vt 0.459530 0.899750 0.000000 +vt 0.446720 0.901020 0.000000 +vt 0.433910 0.902280 0.000000 +vt 0.429290 0.891100 0.000000 +vt 0.424660 0.879920 0.000000 +vt 0.420040 0.868730 0.000000 +vt 0.735490 0.959530 0.000000 +vt 0.723940 0.959140 0.000000 +vt 0.727760 0.940310 0.000000 +vt 0.739690 0.940680 0.000000 +vt 0.712390 0.958760 0.000000 +vt 0.715830 0.939940 0.000000 +vt 0.719270 0.921120 0.000000 +vt 0.731580 0.921480 0.000000 +vt 0.743900 0.921840 0.000000 +vt 0.786150 0.869740 0.000000 +vt 0.799650 0.869930 0.000000 +vt 0.795270 0.881330 0.000000 +vt 0.781990 0.881070 0.000000 +vt 0.813160 0.870120 0.000000 +vt 0.808560 0.881590 0.000000 +vt 0.803960 0.893070 0.000000 +vt 0.790890 0.892740 0.000000 +vt 0.777820 0.892410 0.000000 +vt 0.403730 0.994070 0.000000 +vt 0.396690 0.975460 0.000000 +vt 0.408240 0.974330 0.000000 +vt 0.414930 0.992980 0.000000 +vt 0.389650 0.956850 0.000000 +vt 0.401550 0.955690 0.000000 +vt 0.413450 0.954530 0.000000 +vt 0.419780 0.973210 0.000000 +vt 0.426120 0.991890 0.000000 +vt 0.382610 0.938250 0.000000 +vt 0.394860 0.937050 0.000000 +vt 0.407110 0.935850 0.000000 +vt 0.419360 0.934660 0.000000 +vt 0.425350 0.953370 0.000000 +vt 0.431330 0.972080 0.000000 +vt 0.437320 0.990800 0.000000 +vt 0.833010 0.809370 0.000000 +vt 0.834000 0.815540 0.000000 +vt 0.820130 0.814830 0.000000 +vt 0.819280 0.808610 0.000000 +vt 0.834990 0.821710 0.000000 +vt 0.820980 0.821050 0.000000 +vt 0.806980 0.820380 0.000000 +vt 0.806270 0.814110 0.000000 +vt 0.805560 0.807850 0.000000 +vt 0.835970 0.827890 0.000000 +vt 0.821830 0.827270 0.000000 +vt 0.807690 0.826650 0.000000 +vt 0.793550 0.826030 0.000000 +vt 0.792980 0.819710 0.000000 +vt 0.792400 0.813400 0.000000 +vt 0.791830 0.807090 0.000000 +vt 0.730610 0.997990 0.000000 +vt 0.730900 0.995640 0.000000 +vt 0.719380 0.997930 0.000000 +vt 0.719600 0.995540 0.000000 +vt 0.719830 0.993160 0.000000 +vt 0.731200 0.993300 0.000000 +vt 0.708150 0.997870 0.000000 +vt 0.708300 0.995450 0.000000 +vt 0.708450 0.993020 0.000000 +vt 0.708600 0.990590 0.000000 +vt 0.720050 0.990770 0.000000 +vt 0.731500 0.990960 0.000000 +# 713 texture coords + +g rocksCombined010 +usemtl rocksSculpts +f 167/3 166/4 1/1 163/2 +f 164/6 167/3 163/2 43/5 +f 47/7 165/8 167/3 164/6 +f 165/8 46/9 166/4 167/3 +f 171/11 164/6 43/5 168/10 +f 169/13 171/11 168/10 35/12 +f 44/14 170/15 171/11 169/13 +f 170/15 47/7 164/6 171/11 +f 175/16 174/17 47/7 170/15 +f 172/18 175/16 170/15 44/14 +f 41/19 173/20 175/16 172/18 +f 173/20 45/21 174/17 175/16 +f 178/22 177/23 46/9 165/8 +f 174/17 178/22 165/8 47/7 +f 45/21 176/24 178/22 174/17 +f 176/24 20/25 177/23 178/22 +f 183/28 182/29 5/26 179/27 +f 180/31 183/28 179/27 48/30 +f 52/32 181/33 183/28 180/31 +f 181/33 51/34 182/29 183/28 +f 187/36 180/31 48/30 184/35 +f 185/38 187/36 184/35 21/37 +f 49/39 186/40 187/36 185/38 +f 186/40 52/32 180/31 187/36 +f 191/41 190/42 52/32 186/40 +f 188/43 191/41 186/40 49/39 +f 42/44 189/45 191/41 188/43 +f 189/45 50/46 190/42 191/41 +f 194/47 193/48 51/34 181/33 +f 190/42 194/47 181/33 52/32 +f 50/46 192/49 194/47 190/42 +f 192/49 39/50 193/48 194/47 +f 198/52 197/53 1/1 166/51 +f 195/55 198/52 166/51 46/54 +f 56/56 196/57 198/52 195/55 +f 196/57 55/58 197/53 198/52 +f 201/60 195/55 46/54 177/59 +f 199/62 201/60 177/59 20/61 +f 53/63 200/64 201/60 199/62 +f 200/64 56/56 195/55 201/60 +f 205/65 204/66 56/56 200/64 +f 202/67 205/65 200/64 53/63 +f 23/68 203/69 205/65 202/67 +f 203/69 54/70 204/66 205/65 +f 208/71 207/72 55/58 196/57 +f 204/66 208/71 196/57 56/56 +f 54/70 206/73 208/71 204/66 +f 206/73 10/74 207/72 208/71 +f 213/77 212/78 38/75 209/76 +f 210/80 213/77 209/76 57/79 +f 61/81 211/82 213/77 210/80 +f 211/82 60/83 212/78 213/77 +f 217/85 210/80 57/79 214/84 +f 215/87 217/85 214/84 40/86 +f 58/88 216/89 217/85 215/87 +f 216/89 61/81 210/80 217/85 +f 221/90 220/91 61/81 216/89 +f 218/92 221/90 216/89 58/88 +f 9/93 219/94 221/90 218/92 +f 219/94 59/95 220/91 221/90 +f 224/96 223/97 60/83 211/82 +f 220/91 224/96 211/82 61/81 +f 59/95 222/98 224/96 220/91 +f 222/98 2/99 223/97 224/96 +f 229/102 228/103 19/100 225/101 +f 226/105 229/102 225/101 62/104 +f 66/106 227/107 229/102 226/105 +f 227/107 65/108 228/103 229/102 +f 233/110 226/105 62/104 230/109 +f 231/112 233/110 230/109 24/111 +f 63/113 232/114 233/110 231/112 +f 232/114 66/106 226/105 233/110 +f 237/115 236/116 66/106 232/114 +f 234/117 237/115 232/114 63/113 +f 11/118 235/119 237/115 234/117 +f 235/119 64/120 236/116 237/115 +f 240/121 239/122 65/108 227/107 +f 236/116 240/121 227/107 66/106 +f 64/120 238/123 240/121 236/116 +f 238/123 4/124 239/122 240/121 +f 245/127 244/128 3/125 241/126 +f 242/130 245/127 241/126 67/129 +f 71/131 243/132 245/127 242/130 +f 243/132 70/133 244/128 245/127 +f 249/135 242/130 67/129 246/134 +f 247/137 249/135 246/134 30/136 +f 68/138 248/139 249/135 247/137 +f 248/139 71/131 242/130 249/135 +f 253/140 252/141 71/131 248/139 +f 250/142 253/140 248/139 68/138 +f 32/143 251/144 253/140 250/142 +f 251/144 69/145 252/141 253/140 +f 256/146 255/147 70/133 243/132 +f 252/141 256/146 243/132 71/131 +f 69/145 254/148 256/146 252/141 +f 254/148 12/149 255/147 256/146 +f 261/152 260/153 6/150 257/151 +f 258/155 261/152 257/151 72/154 +f 76/156 259/157 261/152 258/155 +f 259/157 75/158 260/153 261/152 +f 265/160 258/155 72/154 262/159 +f 263/162 265/160 262/159 21/161 +f 73/163 264/164 265/160 263/162 +f 264/164 76/156 258/155 265/160 +f 269/165 268/166 76/156 264/164 +f 266/167 269/165 264/164 73/163 +f 23/68 267/168 269/165 266/167 +f 267/168 74/169 268/166 269/165 +f 272/170 271/171 75/158 259/157 +f 268/166 272/170 259/157 76/156 +f 74/169 270/172 272/170 268/166 +f 270/172 9/173 271/171 272/170 +f 277/176 276/177 8/174 273/175 +f 274/179 277/176 273/175 77/178 +f 81/180 275/181 277/176 274/179 +f 275/181 80/182 276/177 277/176 +f 281/184 274/179 77/178 278/183 +f 279/186 281/184 278/183 31/185 +f 78/187 280/188 281/184 279/186 +f 280/188 81/180 274/179 281/184 +f 285/189 284/190 81/180 280/188 +f 282/191 285/189 280/188 78/187 +f 29/192 283/193 285/189 282/191 +f 283/193 79/194 284/190 285/189 +f 288/195 287/196 80/182 275/181 +f 284/190 288/195 275/181 81/180 +f 79/194 286/197 288/195 284/190 +f 286/197 11/118 287/196 288/195 +f 293/199 292/200 12/149 289/198 +f 290/202 293/199 289/198 82/201 +f 86/203 291/204 293/199 290/202 +f 291/204 85/205 292/200 293/199 +f 297/207 290/202 82/201 294/206 +f 295/209 297/207 294/206 7/208 +f 83/210 296/211 297/207 295/209 +f 296/211 86/203 290/202 297/207 +f 301/212 300/213 86/203 296/211 +f 298/214 301/212 296/211 83/210 +f 22/215 299/216 301/212 298/214 +f 299/216 84/217 300/213 301/212 +f 304/218 303/219 85/205 291/204 +f 300/213 304/218 291/204 86/203 +f 84/217 302/220 304/218 300/213 +f 302/220 24/111 303/219 304/218 +f 308/221 307/222 5/26 182/29 +f 305/223 308/221 182/29 51/34 +f 90/224 306/225 308/221 305/223 +f 306/225 89/226 307/222 308/221 +f 311/227 305/223 51/34 193/48 +f 309/228 311/227 193/48 39/50 +f 87/229 310/230 311/227 309/228 +f 310/230 90/224 305/223 311/227 +f 315/231 314/232 90/224 310/230 +f 312/233 315/231 310/230 87/229 +f 37/234 313/235 315/231 312/233 +f 313/235 88/236 314/232 315/231 +f 318/237 317/238 89/226 306/225 +f 314/232 318/237 306/225 90/224 +f 88/236 316/239 318/237 314/232 +f 316/239 10/74 317/238 318/237 +f 323/241 322/242 30/136 319/240 +f 320/244 323/241 319/240 91/243 +f 95/245 321/246 323/241 320/244 +f 321/246 94/247 322/242 323/241 +f 327/249 320/244 91/243 324/248 +f 325/251 327/249 324/248 33/250 +f 92/252 326/253 327/249 325/251 +f 326/253 95/245 320/244 327/249 +f 331/254 330/255 95/245 326/253 +f 328/256 331/254 326/253 92/252 +f 25/257 329/258 331/254 328/256 +f 329/258 93/259 330/255 331/254 +f 334/260 333/261 94/247 321/246 +f 330/255 334/260 321/246 95/245 +f 93/259 332/262 334/260 330/255 +f 332/262 13/263 333/261 334/260 +f 339/266 338/267 31/264 335/265 +f 336/269 339/266 335/265 96/268 +f 100/270 337/271 339/266 336/269 +f 337/271 99/272 338/267 339/266 +f 343/274 336/269 96/268 340/273 +f 341/276 343/274 340/273 34/275 +f 97/277 342/278 343/274 341/276 +f 342/278 100/270 336/269 343/274 +f 347/279 346/280 100/270 342/278 +f 344/281 347/279 342/278 97/277 +f 26/282 345/283 347/279 344/281 +f 345/283 98/284 346/280 347/279 +f 350/285 349/286 99/272 337/271 +f 346/280 350/285 337/271 100/270 +f 98/284 348/287 350/285 346/280 +f 348/287 15/288 349/286 350/285 +f 355/291 354/292 27/289 351/290 +f 352/294 355/291 351/290 101/293 +f 105/295 353/296 355/291 352/294 +f 353/296 104/297 354/292 355/291 +f 359/299 352/294 101/293 356/298 +f 357/300 359/299 356/298 29/192 +f 102/301 358/302 359/299 357/300 +f 358/302 105/295 352/294 359/299 +f 363/303 362/304 105/295 358/302 +f 360/305 363/303 358/302 102/301 +f 17/306 361/307 363/303 360/305 +f 361/307 103/308 362/304 363/303 +f 366/309 365/310 104/297 353/296 +f 362/304 366/309 353/296 105/295 +f 103/308 364/311 366/309 362/304 +f 364/311 14/312 365/310 366/309 +f 371/314 370/315 13/263 367/313 +f 368/317 371/314 367/313 106/316 +f 110/318 369/319 371/314 368/317 +f 369/319 109/320 370/315 371/314 +f 375/322 368/317 106/316 372/321 +f 373/323 375/322 372/321 35/12 +f 107/324 374/325 375/322 373/323 +f 374/325 110/318 368/317 375/322 +f 379/326 378/327 110/318 374/325 +f 376/328 379/326 374/325 107/324 +f 37/234 377/329 379/326 376/328 +f 377/329 108/330 378/327 379/326 +f 382/331 381/332 109/320 369/319 +f 378/327 382/331 369/319 110/318 +f 108/330 380/333 382/331 378/327 +f 380/333 18/334 381/332 382/331 +f 387/337 386/338 36/335 383/336 +f 384/340 387/337 383/336 111/339 +f 115/341 385/342 387/337 384/340 +f 385/342 114/343 386/338 387/337 +f 391/345 384/340 111/339 388/344 +f 389/346 391/345 388/344 40/86 +f 112/347 390/348 391/345 389/346 +f 390/348 115/341 384/340 391/345 +f 395/349 394/350 115/341 390/348 +f 392/351 395/349 390/348 112/347 +f 17/306 393/352 395/349 392/351 +f 393/352 113/353 394/350 395/349 +f 398/354 397/355 114/343 385/342 +f 394/350 398/354 385/342 115/341 +f 113/353 396/356 398/354 394/350 +f 396/356 15/357 397/355 398/354 +f 403/360 402/361 16/358 399/359 +f 400/363 403/360 399/359 116/362 +f 120/364 401/365 403/360 400/363 +f 401/365 119/366 402/361 403/360 +f 407/368 400/363 116/362 404/367 +f 405/370 407/368 404/367 28/369 +f 117/371 406/372 407/368 405/370 +f 406/372 120/364 400/363 407/368 +f 411/373 410/374 120/364 406/372 +f 408/375 411/373 406/372 117/371 +f 32/143 409/376 411/373 408/375 +f 409/376 118/377 410/374 411/373 +f 414/378 413/379 119/366 401/365 +f 410/374 414/378 401/365 120/364 +f 118/377 412/380 414/378 410/374 +f 412/380 18/334 413/379 414/378 +f 419/382 418/383 25/257 415/381 +f 416/385 419/382 415/381 121/384 +f 125/386 417/387 419/382 416/385 +f 417/387 124/388 418/383 419/382 +f 423/390 416/385 121/384 420/389 +f 421/392 423/390 420/389 14/391 +f 122/393 422/394 423/390 421/392 +f 422/394 125/386 416/385 423/390 +f 427/395 426/396 125/386 422/394 +f 424/397 427/395 422/394 122/393 +f 38/398 425/399 427/395 424/397 +f 425/399 123/400 426/396 427/395 +f 430/401 429/402 124/388 417/387 +f 426/396 430/401 417/387 125/386 +f 123/400 428/403 430/401 426/396 +f 428/403 41/19 429/402 430/401 +f 434/406 257/407 6/404 431/405 +f 432/409 434/406 431/405 126/408 +f 128/410 433/411 434/406 432/409 +f 433/411 72/412 257/407 434/406 +f 438/414 432/409 126/408 435/413 +f 436/416 438/414 435/413 36/415 +f 127/417 437/418 438/414 436/416 +f 437/418 128/410 432/409 438/414 +f 441/419 440/420 128/410 437/418 +f 439/421 441/419 437/418 127/417 +f 42/44 188/43 441/419 439/421 +f 188/43 49/39 440/420 441/419 +f 442/422 262/423 72/412 433/411 +f 440/420 442/422 433/411 128/410 +f 49/39 185/38 442/422 440/420 +f 185/38 21/37 262/423 442/422 +f 446/425 199/62 20/61 443/424 +f 444/427 446/425 443/424 129/426 +f 130/428 445/429 446/425 444/427 +f 445/429 53/63 199/62 446/425 +f 449/431 444/427 129/426 447/430 +f 222/433 449/431 447/430 2/432 +f 59/434 448/435 449/431 222/433 +f 448/435 130/428 444/427 449/431 +f 451/436 450/437 130/428 448/435 +f 219/438 451/436 448/435 59/434 +f 9/173 270/172 451/436 219/438 +f 270/172 74/169 450/437 451/436 +f 452/439 202/67 53/63 445/429 +f 450/437 452/439 445/429 130/428 +f 74/169 267/168 452/439 450/437 +f 267/168 23/68 202/67 452/439 +f 456/440 455/441 3/125 244/128 +f 453/442 456/440 244/128 70/133 +f 132/443 454/444 456/440 453/442 +f 454/444 131/445 455/441 456/440 +f 458/446 453/442 70/133 255/147 +f 292/200 458/446 255/147 12/149 +f 85/205 457/447 458/446 292/200 +f 457/447 132/443 453/442 458/446 +f 460/448 459/449 132/443 457/447 +f 303/219 460/448 457/447 85/205 +f 24/111 230/109 460/448 303/219 +f 230/109 62/104 459/449 460/448 +f 462/450 461/451 131/445 454/444 +f 459/449 462/450 454/444 132/443 +f 62/104 225/101 462/450 459/449 +f 225/101 19/100 461/451 462/450 +f 465/453 263/162 21/161 184/452 +f 463/455 465/453 184/452 48/454 +f 133/456 464/457 465/453 463/455 +f 464/457 73/163 263/162 465/453 +f 467/459 463/455 48/454 179/458 +f 307/222 467/459 179/458 5/26 +f 89/226 466/460 467/459 307/222 +f 466/460 133/456 463/455 467/459 +f 469/461 468/462 133/456 466/460 +f 317/238 469/461 466/460 89/226 +f 10/74 206/73 469/461 317/238 +f 206/73 54/70 468/462 469/461 +f 470/463 266/167 73/163 464/457 +f 468/462 470/463 464/457 133/456 +f 54/70 203/69 470/463 468/462 +f 203/69 23/68 266/167 470/463 +f 474/464 473/465 8/174 276/177 +f 471/466 474/464 276/177 80/182 +f 135/467 472/468 474/464 471/466 +f 472/468 134/469 473/465 474/464 +f 476/470 471/466 80/182 287/196 +f 234/117 476/470 287/196 11/118 +f 63/113 475/471 476/470 234/117 +f 475/471 135/467 471/466 476/470 +f 478/472 477/473 135/467 475/471 +f 231/112 478/472 475/471 63/113 +f 24/111 302/220 478/472 231/112 +f 302/220 84/217 477/473 478/472 +f 480/474 479/475 134/469 472/468 +f 477/473 480/474 472/468 135/467 +f 84/217 299/216 480/474 477/473 +f 299/216 22/215 479/475 480/474 +f 484/478 239/479 4/476 481/477 +f 482/481 484/478 481/477 136/480 +f 139/482 483/483 484/478 482/481 +f 483/483 65/484 239/479 484/478 +f 488/486 482/481 136/480 485/485 +f 486/488 488/486 485/485 27/487 +f 137/489 487/490 488/486 486/488 +f 487/490 139/482 482/481 488/486 +f 492/491 491/492 139/482 487/490 +f 489/493 492/491 487/490 137/489 +f 33/250 490/494 492/491 489/493 +f 490/494 138/495 491/492 492/491 +f 494/496 228/497 65/484 483/483 +f 491/492 494/496 483/483 139/482 +f 138/495 493/498 494/496 491/492 +f 493/498 19/499 228/497 494/496 +f 498/501 295/502 7/208 495/500 +f 496/504 498/501 495/500 140/503 +f 143/505 497/506 498/501 496/504 +f 497/506 83/507 295/502 498/501 +f 502/509 496/504 140/503 499/508 +f 500/510 502/509 499/508 28/369 +f 141/511 501/512 502/509 500/510 +f 501/512 143/505 496/504 502/509 +f 506/513 505/514 143/505 501/512 +f 503/515 506/513 501/512 141/511 +f 34/275 504/516 506/513 503/515 +f 504/516 142/517 505/514 506/513 +f 508/518 298/519 83/507 497/506 +f 505/514 508/518 497/506 143/505 +f 142/517 507/520 508/518 505/514 +f 507/520 22/521 298/519 508/518 +f 511/522 247/137 30/136 322/242 +f 509/523 511/522 322/242 94/247 +f 144/524 510/525 511/522 509/523 +f 510/525 68/138 247/137 511/522 +f 513/526 509/523 94/247 333/261 +f 370/315 513/526 333/261 13/263 +f 109/320 512/527 513/526 370/315 +f 512/527 144/524 509/523 513/526 +f 515/528 514/529 144/524 512/527 +f 381/332 515/528 512/527 109/320 +f 18/334 412/380 515/528 381/332 +f 412/380 118/377 514/529 515/528 +f 516/530 250/142 68/138 510/525 +f 514/529 516/530 510/525 144/524 +f 118/377 409/376 516/530 514/529 +f 409/376 32/143 250/142 516/530 +f 519/531 349/532 15/357 396/356 +f 517/533 519/531 396/356 113/353 +f 145/534 518/535 519/531 517/533 +f 518/535 99/536 349/532 519/531 +f 521/537 517/533 113/353 393/352 +f 360/305 521/537 393/352 17/306 +f 102/301 520/538 521/537 360/305 +f 520/538 145/534 517/533 521/537 +f 523/539 522/540 145/534 520/538 +f 357/300 523/539 520/538 102/301 +f 29/192 282/191 523/539 357/300 +f 282/191 78/187 522/540 523/539 +f 524/541 338/542 99/536 518/535 +f 522/540 524/541 518/535 145/534 +f 78/187 279/186 524/541 522/540 +f 279/186 31/185 338/542 524/541 +f 527/544 241/126 3/125 455/543 +f 525/546 527/544 455/543 131/545 +f 146/547 526/548 527/544 525/546 +f 526/548 67/129 241/126 527/544 +f 529/550 525/546 131/545 461/549 +f 493/498 529/550 461/549 19/499 +f 138/495 528/551 529/550 493/498 +f 528/551 146/547 525/546 529/550 +f 531/552 530/553 146/547 528/551 +f 490/494 531/552 528/551 138/495 +f 33/250 324/248 531/552 490/494 +f 324/248 91/243 530/553 531/552 +f 532/554 246/134 67/129 526/548 +f 530/553 532/554 526/548 146/547 +f 91/243 319/240 532/554 530/553 +f 319/240 30/136 246/134 532/554 +f 535/557 273/558 8/555 473/556 +f 533/560 535/557 473/556 134/559 +f 147/561 534/562 535/557 533/560 +f 534/562 77/563 273/558 535/557 +f 537/565 533/560 134/559 479/564 +f 507/520 537/565 479/564 22/521 +f 142/517 536/566 537/565 507/520 +f 536/566 147/561 533/560 537/565 +f 539/567 538/568 147/561 536/566 +f 504/516 539/567 536/566 142/517 +f 34/275 340/273 539/567 504/516 +f 340/273 96/268 538/568 539/567 +f 540/569 278/570 77/563 534/562 +f 538/568 540/569 534/562 147/561 +f 96/268 335/265 540/569 538/568 +f 335/265 31/264 278/570 540/569 +f 543/571 481/572 4/124 238/123 +f 541/573 543/571 238/123 64/120 +f 148/574 542/575 543/571 541/573 +f 542/575 136/576 481/572 543/571 +f 545/577 541/573 64/120 235/119 +f 286/197 545/577 235/119 11/118 +f 79/194 544/578 545/577 286/197 +f 544/578 148/574 541/573 545/577 +f 547/579 546/580 148/574 544/578 +f 283/193 547/579 544/578 79/194 +f 29/192 356/298 547/579 283/193 +f 356/298 101/293 546/580 547/579 +f 548/581 485/582 136/576 542/575 +f 546/580 548/581 542/575 148/574 +f 101/293 351/290 548/581 546/580 +f 351/290 27/289 485/582 548/581 +f 551/583 495/500 7/208 294/206 +f 549/584 551/583 294/206 82/201 +f 149/585 550/586 551/583 549/584 +f 550/586 140/503 495/500 551/583 +f 553/587 549/584 82/201 289/198 +f 254/148 553/587 289/198 12/149 +f 69/145 552/588 553/587 254/148 +f 552/588 149/585 549/584 553/587 +f 555/589 554/590 149/585 552/588 +f 251/144 555/589 552/588 69/145 +f 32/143 408/375 555/589 251/144 +f 408/375 117/371 554/590 555/589 +f 556/591 499/508 140/503 550/586 +f 554/590 556/591 550/586 149/585 +f 117/371 405/370 556/591 554/590 +f 405/370 28/369 499/508 556/591 +f 559/593 486/488 27/487 354/592 +f 557/595 559/593 354/592 104/594 +f 150/596 558/597 559/593 557/595 +f 558/597 137/489 486/488 559/593 +f 561/599 557/595 104/594 365/598 +f 420/389 561/599 365/598 14/391 +f 121/384 560/600 561/599 420/389 +f 560/600 150/596 557/595 561/599 +f 563/601 562/602 150/596 560/600 +f 415/381 563/601 560/600 121/384 +f 25/257 328/256 563/601 415/381 +f 328/256 92/252 562/602 563/601 +f 564/603 489/493 137/489 558/597 +f 562/602 564/603 558/597 150/596 +f 92/252 325/251 564/603 562/602 +f 325/251 33/250 489/493 564/603 +f 567/604 500/510 28/369 404/367 +f 565/605 567/604 404/367 116/362 +f 152/606 566/607 567/604 565/605 +f 566/607 141/511 500/510 567/604 +f 570/608 565/605 116/362 399/359 +f 568/609 570/608 399/359 16/358 +f 151/610 569/611 570/608 568/609 +f 569/611 152/606 565/605 570/608 +f 573/612 572/613 152/606 569/611 +f 571/614 573/612 569/611 151/610 +f 26/282 344/281 573/612 571/614 +f 344/281 97/277 572/613 573/612 +f 574/615 503/515 141/511 566/607 +f 572/613 574/615 566/607 152/606 +f 97/277 341/276 574/615 572/613 +f 341/276 34/275 503/515 574/615 +f 577/616 169/13 35/12 372/321 +f 575/617 577/616 372/321 106/316 +f 153/618 576/619 577/616 575/617 +f 576/619 44/14 169/13 577/616 +f 579/620 575/617 106/316 367/313 +f 332/262 579/620 367/313 13/263 +f 93/259 578/621 579/620 332/262 +f 578/621 153/618 575/617 579/620 +f 581/622 580/623 153/618 578/621 +f 329/258 581/622 578/621 93/259 +f 25/257 418/383 581/622 329/258 +f 418/383 124/388 580/623 581/622 +f 582/624 172/18 44/14 576/619 +f 580/623 582/624 576/619 153/618 +f 124/388 429/402 582/624 580/623 +f 429/402 41/19 172/18 582/624 +f 586/625 585/626 26/282 571/614 +f 583/627 586/625 571/614 151/610 +f 156/628 584/629 586/625 583/627 +f 584/629 155/630 585/626 586/625 +f 589/631 583/627 151/610 568/609 +f 587/632 589/631 568/609 16/358 +f 154/633 588/634 589/631 587/632 +f 588/634 156/628 583/627 589/631 +f 592/635 591/636 156/628 588/634 +f 590/637 592/635 588/634 154/633 +f 39/50 192/49 592/635 590/637 +f 192/49 50/46 591/636 592/635 +f 594/638 593/639 155/630 584/629 +f 591/636 594/638 584/629 156/628 +f 50/46 189/45 594/638 591/636 +f 189/45 42/44 593/639 594/638 +f 597/640 421/641 14/312 364/311 +f 595/642 597/640 364/311 103/308 +f 157/643 596/644 597/640 595/642 +f 596/644 122/645 421/641 597/640 +f 599/646 595/642 103/308 361/307 +f 392/351 599/646 361/307 17/306 +f 112/347 598/647 599/646 392/351 +f 598/647 157/643 595/642 599/646 +f 601/648 600/649 157/643 598/647 +f 389/346 601/648 598/647 112/347 +f 40/86 214/84 601/648 389/346 +f 214/84 57/79 600/649 601/648 +f 602/650 424/651 122/645 596/644 +f 600/649 602/650 596/644 157/643 +f 57/79 209/76 602/650 600/649 +f 209/76 38/75 424/651 602/650 +f 605/652 309/228 39/50 590/637 +f 603/653 605/652 590/637 154/633 +f 158/654 604/655 605/652 603/653 +f 604/655 87/229 309/228 605/652 +f 607/656 603/653 154/633 587/632 +f 402/361 607/656 587/632 16/358 +f 119/366 606/657 607/656 402/361 +f 606/657 158/654 603/653 607/656 +f 609/658 608/659 158/654 606/657 +f 413/379 609/658 606/657 119/366 +f 18/334 380/333 609/658 413/379 +f 380/333 108/330 608/659 609/658 +f 610/660 312/233 87/229 604/655 +f 608/659 610/660 604/655 158/654 +f 108/330 377/329 610/660 608/659 +f 377/329 37/234 312/233 610/660 +f 613/661 373/323 35/12 168/10 +f 611/662 613/661 168/10 43/5 +f 159/663 612/664 613/661 611/662 +f 612/664 107/324 373/323 613/661 +f 615/665 611/662 43/5 163/2 +f 197/53 615/665 163/2 1/1 +f 55/58 614/666 615/665 197/53 +f 614/666 159/663 611/662 615/665 +f 617/667 616/668 159/663 614/666 +f 207/72 617/667 614/666 55/58 +f 10/74 316/239 617/667 207/72 +f 316/239 88/236 616/668 617/667 +f 618/669 376/328 107/324 612/664 +f 616/668 618/669 612/664 159/663 +f 88/236 313/235 618/669 616/668 +f 313/235 37/234 376/328 618/669 +f 621/672 431/673 6/670 260/671 +f 619/675 621/672 260/671 75/674 +f 160/676 620/677 621/672 619/675 +f 620/677 126/678 431/673 621/672 +f 623/680 619/675 75/674 271/679 +f 218/92 623/680 271/679 9/93 +f 58/88 622/681 623/680 218/92 +f 622/681 160/676 619/675 623/680 +f 625/682 624/683 160/676 622/681 +f 215/87 625/682 622/681 58/88 +f 40/86 388/344 625/682 215/87 +f 388/344 111/339 624/683 625/682 +f 626/684 435/685 126/678 620/677 +f 624/683 626/684 620/677 160/676 +f 111/339 383/336 626/684 624/683 +f 383/336 36/335 435/685 626/684 +f 629/688 223/689 2/686 447/687 +f 627/691 629/688 447/687 129/690 +f 161/692 628/693 629/688 627/691 +f 628/693 60/694 223/689 629/688 +f 631/696 627/691 129/690 443/695 +f 176/24 631/696 443/695 20/25 +f 45/21 630/697 631/696 176/24 +f 630/697 161/692 627/691 631/696 +f 633/698 632/699 161/692 630/697 +f 173/20 633/698 630/697 45/21 +f 41/19 428/403 633/698 173/20 +f 428/403 123/400 632/699 633/698 +f 634/700 212/701 60/694 628/693 +f 632/699 634/700 628/693 161/692 +f 123/400 425/399 634/700 632/699 +f 425/399 38/398 212/701 634/700 +f 637/703 436/416 36/415 386/702 +f 635/705 637/703 386/702 114/704 +f 162/706 636/707 637/703 635/705 +f 636/707 127/417 436/416 637/703 +f 639/709 635/705 114/704 397/708 +f 348/287 639/709 397/708 15/288 +f 98/284 638/710 639/709 348/287 +f 638/710 162/706 635/705 639/709 +f 641/711 640/712 162/706 638/710 +f 345/283 641/711 638/710 98/284 +f 26/282 585/626 641/711 345/283 +f 585/626 155/630 640/712 641/711 +f 642/713 439/421 127/417 636/707 +f 640/712 642/713 636/707 162/706 +f 155/630 593/639 642/713 640/712 +f 593/639 42/44 439/421 642/713 +# 640 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj.meta new file mode 100644 index 0000000..24ec5dc --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined010.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: c1796a33316139940b5c033915aab87c +timeCreated: 1484958684 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined010 + 100002: //RootNode + 400000: rocksCombined010 + 400002: //RootNode + 2300000: rocksCombined010 + 3300000: rocksCombined010 + 4300000: rocksCombined010 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj new file mode 100644 index 0000000..085843b --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj @@ -0,0 +1,1616 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:38 + +mtllib rocksCombined011.mtl + +# +# object rocksCombined011 +# + +v 7.178375 1.771697 18.294891 +v 27.048080 1.949146 17.876686 +v 8.200226 1.143806 2.509857 +v 26.236610 2.015944 3.322365 +v 14.973507 33.333847 10.418373 +v 22.720135 33.527580 9.845810 +v 15.634705 32.928856 1.900688 +v 22.128685 33.219879 1.804237 +v 23.815685 21.025486 9.048470 +v 14.493481 22.281952 9.405983 +v 24.515648 20.414661 2.665878 +v 14.925961 20.645527 2.818039 +v 6.271431 0.894375 10.547798 +v 27.423893 1.567570 11.438850 +v 21.387283 33.749626 6.213745 +v 15.177994 33.572212 5.382339 +v 24.258793 20.804770 7.211823 +v 13.015099 21.310797 6.968773 +v 19.612591 1.057723 2.414803 +v 19.762981 1.892407 18.600945 +v 19.232861 34.592415 11.610847 +v 18.983467 33.918274 0.440735 +v 18.488720 21.390112 11.156296 +v 19.684826 20.456411 0.892822 +v 19.409485 0.691549 10.937881 +v 18.848179 35.553261 5.875275 +v 30.222467 13.535192 16.851318 +v 26.021858 9.868582 2.347473 +v 8.306606 10.662135 0.692291 +v 3.810375 13.499958 15.308968 +v 29.380022 12.874360 12.305542 +v 1.479816 13.789665 6.832024 +v 18.401463 11.577726 15.700035 +v 19.978134 9.998384 0.177261 +v 12.843727 0.827285 10.828918 +v 19.636528 0.958643 15.544868 +v 13.168365 1.702950 19.251343 +v 6.225163 1.178942 15.719475 +v 12.794781 0.731532 15.616280 +v 18.883785 35.870209 8.943108 +v 15.789040 36.075912 4.734787 +v 14.116856 34.093842 7.874077 +v 16.468475 34.265602 11.104935 +v 15.807049 36.059265 8.387886 +v 19.434933 5.795402 17.537987 +v 13.434570 15.587378 21.734207 +v 3.472649 8.386093 20.188187 +v 14.261585 7.941994 23.352600 +v 29.978832 8.166548 13.082527 +v 30.597685 13.914792 15.803329 +v 29.572685 8.023976 19.049881 +v 27.389359 1.498960 15.168953 +v 31.017693 9.255133 17.880402 +v 19.659431 5.163882 0.708740 +v 23.934669 9.822119 0.726112 +v 26.151772 5.406723 2.788284 +v 23.920563 1.344063 2.524567 +v 24.473240 5.059819 1.268600 +v 7.491238 1.059198 6.414154 +v 3.410225 5.529016 8.781052 +v 6.077808 11.804306 3.507774 +v 7.744549 5.523210 1.706619 +v 5.523178 5.569514 5.226486 +v 21.180470 34.580185 10.824615 +v 18.914024 26.970509 12.112419 +v 20.720074 22.006729 10.759056 +v 24.759293 26.696751 11.100151 +v 21.908886 26.929628 11.542877 +v 23.060200 27.577248 2.684395 +v 21.901207 33.558228 3.870911 +v 23.424385 27.532364 6.872131 +v 24.485413 20.654491 5.306114 +v 23.023140 27.623138 4.983994 +v 15.091663 27.519835 2.294785 +v 17.154808 33.929825 1.236252 +v 19.089382 27.455620 0.432228 +v 17.094753 20.546286 1.730270 +v 17.227921 27.572794 1.497810 +v 13.407085 26.895115 6.245697 +v 13.187069 21.166058 8.114746 +v 14.351612 26.476419 10.132141 +v 13.339901 26.607010 8.204597 +v 13.120857 1.104169 2.398293 +v 19.516449 0.544637 6.126053 +v 13.114006 0.191990 6.243515 +v 20.690495 34.235481 -0.000000 +v 18.782181 35.377533 1.783974 +v 20.594349 35.492088 5.895584 +v 20.784100 35.146866 3.152657 +v 26.724453 10.325776 5.436531 +v 26.520679 2.021189 6.772469 +v 28.639519 5.845844 5.657120 +v 0.890545 14.519711 10.706802 +v 2.227432 6.545033 15.515747 +v 24.486515 20.840254 8.130394 +v 21.806156 34.112778 8.992599 +v 25.651543 26.745756 9.500267 +v 15.458416 33.310486 3.437988 +v 13.414188 21.369852 4.372368 +v 14.390007 27.323103 4.155403 +v 24.502129 1.662176 18.570206 +v 24.083614 0.805687 11.237823 +v 24.602943 0.752352 15.792915 +v 20.515480 35.319443 8.660034 +v 25.199409 12.601066 16.544571 +v 24.835667 6.207671 18.466385 +v 13.880840 10.166159 0.705254 +v 13.220764 5.248940 1.105293 +v 16.012486 22.014765 10.230980 +v 16.025284 26.483799 11.617790 +v 22.654274 20.638292 1.493599 +v 21.492348 27.542120 1.278259 +v 23.781609 0.784540 6.455597 +v 16.752186 35.076157 2.465378 +v 18.702831 16.320776 12.588936 +v 10.649834 17.615883 10.312721 +v 15.095184 16.851097 12.187546 +v 25.629116 15.104018 8.216835 +v 26.434128 16.307770 12.040802 +v 25.526562 15.041676 9.816475 +v 20.042423 14.968510 0.761101 +v 25.318058 15.100039 2.291084 +v 23.594307 14.769785 1.139313 +v 11.893356 15.918649 2.355972 +v 9.412560 18.283684 6.622307 +v 10.074566 16.803333 4.144875 +v 25.223011 15.159127 5.332741 +v 9.275459 17.752481 9.001122 +v 22.138054 16.452944 12.621620 +v 16.214161 15.439755 1.496414 +v 9.247787 0.769591 11.041618 +v 12.658508 0.728913 13.205200 +v 9.022034 0.649974 15.641472 +v 6.093628 1.380207 13.111893 +v 8.950706 0.821579 13.269829 +v 16.347530 0.757497 10.823036 +v 19.740601 0.787345 13.362946 +v 17.247406 0.868518 15.525574 +v 16.963352 0.763203 13.253151 +v 19.667248 1.194855 17.515144 +v 17.382404 1.684795 18.425819 +v 12.982090 0.904180 17.946632 +v 17.253021 1.060783 17.391129 +v 9.188828 1.579500 18.842880 +v 6.541065 1.405154 17.293976 +v 9.027763 0.774960 17.724976 +v 19.064835 35.588631 10.453247 +v 17.793743 35.720840 8.816986 +v 16.155338 35.772812 10.045876 +v 17.998356 34.349113 11.405006 +v 17.874149 35.562424 10.337227 +v 18.765560 35.858238 7.396889 +v 17.623692 35.665764 5.519455 +v 15.463787 36.187950 6.403008 +v 17.721745 35.748482 7.265366 +v 15.769043 34.887909 5.271278 +v 14.552608 33.943512 6.631538 +v 15.144794 35.498077 8.182373 +v 14.949329 35.519775 6.393654 +v 14.624573 33.885620 9.511452 +v 15.199379 34.183617 10.809792 +v 15.257965 35.346931 9.832085 +v 19.839184 3.332678 18.405045 +v 17.534756 8.032057 23.125160 +v 13.187035 3.561256 19.192467 +v 17.150558 3.533940 18.648064 +v 18.627522 8.829072 16.769424 +v 15.901260 15.473817 22.000641 +v 13.226036 11.808332 22.810478 +v 16.681122 11.907143 23.871956 +v 9.849121 13.889252 18.187271 +v 2.590252 11.748299 18.936691 +v 10.158138 6.967533 20.150780 +v 9.558872 10.974634 20.107849 +v 6.876881 3.238931 17.705109 +v 9.451801 3.391338 18.731750 +v 28.681465 4.746506 12.362640 +v 30.650282 8.840868 15.652145 +v 28.617069 4.166211 15.540512 +v 27.354366 1.783252 13.215485 +v 29.640657 5.205888 14.948288 +v 29.925484 10.822837 12.881737 +v 30.260044 13.688121 14.435356 +v 31.088144 11.885262 17.119095 +v 31.007313 11.891168 15.749367 +v 30.550848 13.820326 16.638763 +v 30.291616 11.141200 18.345528 +v 30.483618 8.753215 18.788536 +v 30.854876 11.605015 17.945847 +v 27.187050 3.078900 17.300591 +v 27.230896 1.645888 16.994347 +v 27.569221 3.137208 16.064552 +v 19.697647 2.739644 1.338531 +v 22.461735 5.171515 0.840103 +v 24.166500 2.905181 1.700760 +v 22.343369 1.142669 2.337547 +v 22.559357 2.721375 1.474846 +v 19.776443 7.692681 0.306808 +v 22.373089 9.828221 0.380661 +v 24.158653 7.500988 0.851570 +v 22.450932 7.537649 0.480888 +v 25.202518 9.820792 1.308754 +v 26.063297 7.594151 2.650429 +v 25.422733 5.223937 1.855942 +v 25.447224 7.496896 1.490715 +v 26.291191 3.309301 2.959023 +v 25.387623 1.597659 2.845146 +v 25.427536 3.124550 2.093353 +v 7.569687 0.780885 4.011742 +v 5.695274 2.778562 5.571663 +v 6.533112 5.568019 3.308113 +v 7.772514 2.877437 2.075539 +v 6.552147 2.897236 3.704865 +v 6.789841 0.838292 8.088058 +v 3.374023 2.577983 9.822517 +v 2.973068 5.770974 6.679955 +v 4.224659 2.764723 7.455360 +v 2.391911 8.624933 7.701424 +v 3.141918 13.058146 5.133766 +v 5.438251 8.459741 4.011314 +v 3.214455 8.905585 5.897812 +v 7.398861 10.805851 2.222542 +v 7.605438 8.102859 0.494240 +v 6.228485 8.083178 1.888237 +v 22.028336 34.239555 10.262032 +v 21.465248 31.053265 11.613258 +v 23.558414 26.634146 11.466637 +v 23.338066 30.911566 10.164619 +v 22.433521 30.938950 10.853485 +v 20.218761 34.858810 11.497284 +v 19.127625 31.720425 12.956863 +v 20.472042 27.164179 11.558884 +v 20.430214 31.268372 12.421616 +v 18.619129 23.282196 11.213142 +v 19.596970 21.385427 11.077637 +v 21.190430 24.029207 10.434128 +v 19.973740 23.751181 10.762077 +v 22.340660 21.684294 9.776901 +v 23.736626 23.535925 9.138214 +v 22.698067 23.744146 9.879181 +v 23.833694 23.976686 3.029755 +v 22.793617 27.596128 4.084145 +v 23.794487 24.046286 5.432159 +v 24.669163 20.496675 3.913719 +v 23.745724 24.107592 4.462143 +v 22.509739 31.165966 2.059776 +v 22.223164 33.726212 2.757965 +v 22.237278 31.118109 4.325668 +v 22.246525 30.992329 3.272247 +v 21.876671 33.373817 4.902992 +v 22.612427 30.923534 6.234428 +v 23.255009 27.603209 5.862419 +v 22.006821 30.857895 5.513000 +v 23.667961 23.638224 7.068420 +v 24.907646 20.910591 6.543785 +v 24.022041 23.912357 6.271210 +v 15.205971 23.858070 2.687210 +v 16.260124 27.543001 1.830559 +v 17.079216 23.684277 1.393318 +v 15.793983 20.596161 2.161766 +v 16.131256 23.733320 1.923187 +v 14.848972 31.272688 1.734169 +v 16.183540 33.873077 1.587456 +v 17.183769 31.283689 1.177895 +v 16.221172 31.315304 1.609505 +v 18.091072 33.893539 0.844444 +v 19.114994 31.228180 0.481804 +v 18.110790 27.538881 1.005127 +v 18.125385 31.195316 0.731979 +v 19.497261 23.764668 0.880264 +v 18.241749 20.523996 1.295197 +v 18.283291 23.825596 1.312492 +v 13.607666 31.051039 7.531029 +v 13.698715 26.500313 9.215981 +v 14.667759 30.990217 10.801155 +v 13.824348 31.046169 9.326790 +v 13.827271 31.169598 5.165215 +v 13.373371 26.584627 7.023758 +v 13.575607 31.093384 6.116066 +v 13.258030 23.128603 6.740799 +v 13.119022 21.144655 7.491020 +v 13.597317 22.935848 8.298607 +v 13.280750 22.765871 7.250359 +v 13.401474 21.431171 8.660217 +v 14.919048 23.680096 9.619019 +v 14.744041 23.526447 9.015152 +v 10.367535 1.053044 2.626633 +v 13.151310 0.350678 4.132675 +v 10.007622 -0.000001 6.297577 +v 10.193913 0.385737 4.165596 +v 16.552452 1.073045 2.418671 +v 19.532246 0.535487 4.035065 +v 16.486629 0.501200 6.215866 +v 16.618958 0.403296 3.816208 +v 19.246361 0.580596 8.760513 +v 13.143116 0.567003 8.534363 +v 16.281586 0.596607 8.687714 +v 9.781258 0.384753 8.545570 +v 21.610352 33.876541 1.103889 +v 20.676655 35.158478 1.314377 +v 21.702515 35.046585 3.475967 +v 21.563663 34.922241 1.986885 +v 19.848732 34.072151 0.357468 +v 18.895390 35.028709 1.175751 +v 19.693127 35.499321 1.710800 +v 19.760208 35.226540 0.744919 +v 18.845253 35.156654 3.816238 +v 19.837284 35.591316 5.881157 +v 20.920967 35.226135 4.486259 +v 19.926544 35.188934 4.390442 +v 20.582962 34.765419 6.075478 +v 21.729847 35.014389 4.533386 +v 26.513092 5.565874 4.372688 +v 26.750027 3.801160 6.624382 +v 26.454601 1.758919 4.809830 +v 26.697712 3.382900 4.636833 +v 26.268013 9.975580 4.015182 +v 29.230951 8.621532 4.652100 +v 26.459084 8.048243 3.875984 +v 26.516254 10.456351 7.384445 +v 28.160883 6.005022 7.822533 +v 27.657917 8.508516 7.339012 +v 26.966721 1.700758 9.005096 +v 27.222061 3.430246 8.667778 +v 4.756271 3.035835 15.475426 +v 2.960449 5.704782 11.894760 +v 3.896572 2.925745 12.849846 +v 2.153809 7.497494 18.506134 +v 5.767242 3.062039 16.601746 +v 2.946690 13.414004 13.769791 +v 1.776882 9.611463 12.788071 +v 1.240799 10.273017 15.655403 +v 0.000000 14.786958 8.187187 +v 1.367474 9.343510 9.767342 +v 25.457813 26.825174 10.550804 +v 24.415718 31.748499 8.795868 +v 22.134979 33.943413 9.516396 +v 24.130116 31.408499 9.612061 +v 24.514145 20.860939 8.516762 +v 24.555904 23.472097 8.126923 +v 24.435890 23.444593 8.565254 +v 24.335640 20.817844 7.751686 +v 24.558247 27.028465 7.744247 +v 24.259335 23.500427 7.690826 +v 21.304752 34.037384 7.481827 +v 22.903946 31.232023 7.195236 +v 15.358341 33.286026 4.346893 +v 14.570969 31.210423 3.599625 +v 13.684116 27.008110 5.087898 +v 14.209538 31.193327 4.448402 +v 15.684582 33.220490 2.603569 +v 14.701584 27.468935 3.140144 +v 14.900387 31.276762 2.656555 +v 14.320614 20.714500 3.538048 +v 14.117641 23.473967 4.545311 +v 14.659119 24.034012 3.602341 +v 13.025219 21.239056 5.875458 +v 13.282402 23.252573 5.796761 +v 26.493423 0.701524 15.636879 +v 24.368305 0.809201 13.453125 +v 26.127052 0.855685 11.424301 +v 26.509750 0.932610 13.551888 +v 26.389767 1.622489 18.341408 +v 24.688873 0.895212 17.593346 +v 26.391796 0.911034 17.354080 +v 22.320690 1.884561 18.702469 +v 22.219124 0.951732 15.587212 +v 22.413025 1.156691 17.654602 +v 21.933235 0.805800 11.061226 +v 22.151794 0.869976 13.357529 +v 20.884590 34.991356 8.833145 +v 20.851242 35.355103 10.029808 +v 21.253677 34.869041 9.697716 +v 20.260494 35.162743 7.253098 +v 20.553921 34.857117 7.296204 +v 19.837479 35.891655 8.850098 +v 19.762028 35.695724 7.352676 +v 20.120167 35.909843 10.417900 +v 24.089851 3.223096 18.500366 +v 21.938873 5.377512 17.475655 +v 22.100487 3.372585 18.468742 +v 28.291918 7.073965 19.190613 +v 26.419018 3.015477 18.339798 +v 28.444822 13.369603 16.804214 +v 25.436455 9.653091 18.140862 +v 29.068821 10.341806 18.290649 +v 21.256023 11.869360 15.886253 +v 22.449211 9.058740 17.377144 +v 10.297913 5.417914 1.218254 +v 13.185871 2.700281 1.473534 +v 10.331142 2.817129 1.676338 +v 10.821922 10.464693 0.563683 +v 13.427330 7.789138 0.799751 +v 10.382858 8.004176 0.923546 +v 17.127411 10.096183 0.181488 +v 16.584328 5.174784 0.642029 +v 16.757404 7.703613 0.297096 +v 16.520813 2.751556 1.278816 +v 16.097839 31.203815 12.178520 +v 17.113800 26.372276 12.382362 +v 17.279823 31.369530 12.865799 +v 15.170120 26.633600 10.820694 +v 15.047165 31.210974 11.598381 +v 15.130337 22.838434 9.856926 +v 16.055431 23.768944 10.462074 +v 15.323318 23.868219 10.027336 +v 17.234638 21.777872 10.786781 +v 17.221806 23.230465 11.091652 +v 22.436840 27.448063 1.557991 +v 20.974640 31.238337 0.303383 +v 21.952438 31.196489 1.125618 +v 23.788040 20.478037 1.939072 +v 22.046604 23.812098 1.414001 +v 23.060127 23.738947 1.819138 +v 21.352173 20.675505 1.159851 +v 20.373482 27.515503 0.667351 +v 20.832047 23.829407 1.088379 +v 19.984901 31.244658 0.078064 +v 25.410046 1.031450 6.694298 +v 23.672379 0.766140 4.550919 +v 25.302338 0.999369 4.730385 +v 23.861866 0.805707 8.927338 +v 25.701820 0.965182 9.036873 +v 22.062279 0.627450 6.213020 +v 21.883728 0.704529 8.833099 +v 22.023952 0.608323 4.270821 +v 16.007168 34.362175 2.808525 +v 16.981785 34.925217 1.677582 +v 16.225235 34.379410 2.036736 +v 16.407978 35.445595 3.323837 +v 15.808918 34.386826 3.794426 +v 17.859989 35.260086 2.123421 +v 17.686504 35.283287 3.205315 +v 17.918957 34.967148 1.357956 +v 18.650734 13.670450 13.720703 +v 16.768204 16.895235 12.704720 +v 14.330460 16.401754 18.288063 +v 16.382889 16.922171 18.412186 +v 18.237473 19.210857 11.974289 +v 15.609653 19.380669 10.932083 +v 16.935528 19.252527 11.563416 +v 12.909447 20.459978 9.606934 +v 12.430252 17.352556 10.749374 +v 14.104446 19.957056 10.105476 +v 5.546421 16.869244 10.320564 +v 10.313793 16.144085 13.734154 +v 27.531982 14.327408 10.578140 +v 25.058891 14.810760 9.250160 +v 28.962254 15.513431 13.790833 +v 28.653292 15.283983 12.841133 +v 25.186066 17.768816 7.743431 +v 25.166595 17.670322 8.771057 +v 24.906387 17.625158 8.384659 +v 24.603874 18.069368 9.796921 +v 26.509804 15.918758 11.044357 +v 25.406467 17.720802 9.153519 +v 28.517427 15.732312 15.037735 +v 28.958782 15.622351 14.538124 +v 20.044853 12.435548 0.337685 +v 22.168156 14.809699 0.772598 +v 23.978924 12.462749 0.736954 +v 22.310516 12.356373 0.416031 +v 19.876698 17.614304 1.062370 +v 23.259918 17.485228 1.427055 +v 21.845024 17.597656 1.012253 +v 25.151386 17.498117 2.548447 +v 24.755009 14.829777 1.582558 +v 24.330444 17.434652 1.882965 +v 25.628273 12.512560 2.177719 +v 24.848602 12.554038 1.235283 +v 13.108852 19.282234 4.085472 +v 9.535378 17.902164 5.207191 +v 11.825607 19.723909 7.461205 +v 11.839092 19.596819 5.574318 +v 13.917889 18.378031 2.239182 +v 11.019604 16.271969 2.875099 +v 13.471031 18.431217 3.279320 +v 9.720127 13.483894 0.642555 +v 7.356392 14.984147 3.667557 +v 8.585476 13.551499 2.188316 +v 5.324005 17.050564 6.069664 +v 6.327198 16.007580 4.984695 +v 25.658661 15.236520 3.605881 +v 25.670322 12.419251 5.631554 +v 26.061810 12.476995 3.728302 +v 24.950954 17.650560 5.126419 +v 25.395958 17.656040 3.617523 +v 25.667843 15.141596 6.842606 +v 25.461559 17.851252 6.539200 +v 26.159153 12.781369 7.195694 +v 11.959003 20.093142 8.998108 +v 9.622032 17.647608 9.645294 +v 12.094944 20.262194 9.426140 +v 9.387268 17.954660 8.294907 +v 11.895924 19.922344 8.334213 +v 3.940891 17.325947 8.577721 +v 4.289230 17.769300 7.373474 +v 4.240604 17.060768 9.587204 +v 20.927212 19.601511 11.675293 +v 25.179081 16.363787 12.726311 +v 22.969910 18.841413 10.717339 +v 20.314606 16.394814 12.557228 +v 19.660652 19.062006 11.973373 +v 24.826073 15.081716 15.193634 +v 20.359653 14.032592 13.753319 +v 27.436092 15.789371 15.564636 +v 13.963230 15.580196 1.686760 +v 14.854061 12.702098 0.925926 +v 11.989758 12.938323 0.626846 +v 16.974457 17.855360 1.800537 +v 15.379635 18.079618 2.069916 +v 18.094830 15.197824 1.075111 +v 18.265808 17.722609 1.414406 +v 17.670357 12.663612 0.474915 +# 514 vertices + +vt 0.914210 0.358660 0.000000 +vt 0.912170 0.346960 0.000000 +vt 0.917740 0.345770 0.000000 +vt 0.919390 0.357410 0.000000 +vt 0.910130 0.335260 0.000000 +vt 0.916080 0.334130 0.000000 +vt 0.922020 0.333000 0.000000 +vt 0.923300 0.344580 0.000000 +vt 0.924580 0.356160 0.000000 +vt 0.908090 0.323560 0.000000 +vt 0.914420 0.322490 0.000000 +vt 0.906060 0.311850 0.000000 +vt 0.912760 0.310850 0.000000 +vt 0.919460 0.309850 0.000000 +vt 0.920740 0.321420 0.000000 +vt 0.927060 0.320360 0.000000 +vt 0.927970 0.331870 0.000000 +vt 0.926160 0.308840 0.000000 +vt 0.932860 0.307840 0.000000 +vt 0.933390 0.319290 0.000000 +vt 0.933910 0.330740 0.000000 +vt 0.928870 0.343390 0.000000 +vt 0.929770 0.354900 0.000000 +vt 0.934430 0.342200 0.000000 +vt 0.934960 0.353650 0.000000 +vt 0.915050 0.529340 0.000000 +vt 0.910690 0.529190 0.000000 +vt 0.910320 0.526340 0.000000 +vt 0.914440 0.526580 0.000000 +vt 0.906330 0.529050 0.000000 +vt 0.906200 0.526110 0.000000 +vt 0.906060 0.523180 0.000000 +vt 0.909940 0.523490 0.000000 +vt 0.913820 0.523810 0.000000 +vt 0.901980 0.528900 0.000000 +vt 0.902080 0.525880 0.000000 +vt 0.897620 0.528750 0.000000 +vt 0.897960 0.525650 0.000000 +vt 0.898300 0.522540 0.000000 +vt 0.902180 0.522860 0.000000 +vt 0.902280 0.519840 0.000000 +vt 0.905930 0.520240 0.000000 +vt 0.898640 0.519440 0.000000 +vt 0.898980 0.516330 0.000000 +vt 0.902390 0.516820 0.000000 +vt 0.905790 0.517310 0.000000 +vt 0.909570 0.520640 0.000000 +vt 0.913210 0.521050 0.000000 +vt 0.909200 0.517790 0.000000 +vt 0.912600 0.518280 0.000000 +vt 0.976640 0.368740 0.000000 +vt 0.971510 0.379930 0.000000 +vt 0.961460 0.376140 0.000000 +vt 0.966220 0.364970 0.000000 +vt 0.966370 0.391130 0.000000 +vt 0.956690 0.387320 0.000000 +vt 0.947010 0.383500 0.000000 +vt 0.951410 0.372350 0.000000 +vt 0.955800 0.361190 0.000000 +vt 0.961240 0.402330 0.000000 +vt 0.951930 0.398490 0.000000 +vt 0.956110 0.413520 0.000000 +vt 0.947170 0.409670 0.000000 +vt 0.938230 0.405810 0.000000 +vt 0.942620 0.394660 0.000000 +vt 0.933310 0.390820 0.000000 +vt 0.937330 0.379690 0.000000 +vt 0.929290 0.401960 0.000000 +vt 0.920350 0.398100 0.000000 +vt 0.924000 0.386990 0.000000 +vt 0.927650 0.375880 0.000000 +vt 0.941360 0.368560 0.000000 +vt 0.945380 0.357420 0.000000 +vt 0.931300 0.364760 0.000000 +vt 0.816760 0.367320 0.000000 +vt 0.818470 0.378120 0.000000 +vt 0.813970 0.378000 0.000000 +vt 0.811290 0.367250 0.000000 +vt 0.820180 0.388920 0.000000 +vt 0.816650 0.388750 0.000000 +vt 0.813110 0.388580 0.000000 +vt 0.809470 0.377880 0.000000 +vt 0.805820 0.367170 0.000000 +vt 0.821890 0.399720 0.000000 +vt 0.819320 0.399500 0.000000 +vt 0.823590 0.410510 0.000000 +vt 0.822000 0.410250 0.000000 +vt 0.820400 0.409990 0.000000 +vt 0.816760 0.399280 0.000000 +vt 0.814200 0.399070 0.000000 +vt 0.809580 0.388410 0.000000 +vt 0.818810 0.409720 0.000000 +vt 0.817210 0.409460 0.000000 +vt 0.811630 0.398850 0.000000 +vt 0.806050 0.388240 0.000000 +vt 0.804970 0.377750 0.000000 +vt 0.800350 0.367100 0.000000 +vt 0.800470 0.377630 0.000000 +vt 0.794890 0.367020 0.000000 +vt 0.854470 0.363900 0.000000 +vt 0.855820 0.374530 0.000000 +vt 0.851530 0.374990 0.000000 +vt 0.850060 0.364360 0.000000 +vt 0.857170 0.385170 0.000000 +vt 0.853010 0.385620 0.000000 +vt 0.848860 0.386080 0.000000 +vt 0.847250 0.375450 0.000000 +vt 0.845640 0.364820 0.000000 +vt 0.858520 0.395800 0.000000 +vt 0.854490 0.396250 0.000000 +vt 0.859870 0.406430 0.000000 +vt 0.855970 0.406880 0.000000 +vt 0.852070 0.407330 0.000000 +vt 0.850460 0.396700 0.000000 +vt 0.846440 0.397150 0.000000 +vt 0.844700 0.386530 0.000000 +vt 0.848170 0.407780 0.000000 +vt 0.844280 0.408220 0.000000 +vt 0.842410 0.397610 0.000000 +vt 0.840540 0.386990 0.000000 +vt 0.842960 0.375910 0.000000 +vt 0.841220 0.365290 0.000000 +vt 0.838670 0.376370 0.000000 +vt 0.836810 0.365750 0.000000 +vt 0.894300 0.360010 0.000000 +vt 0.899280 0.359670 0.000000 +vt 0.899580 0.369920 0.000000 +vt 0.894690 0.370250 0.000000 +vt 0.904250 0.359330 0.000000 +vt 0.904460 0.369600 0.000000 +vt 0.904670 0.379860 0.000000 +vt 0.899880 0.380170 0.000000 +vt 0.895080 0.380490 0.000000 +vt 0.909230 0.359000 0.000000 +vt 0.909350 0.369270 0.000000 +vt 0.914240 0.368950 0.000000 +vt 0.914270 0.379230 0.000000 +vt 0.909470 0.379540 0.000000 +vt 0.909590 0.389820 0.000000 +vt 0.904880 0.390120 0.000000 +vt 0.914300 0.389510 0.000000 +vt 0.914330 0.399800 0.000000 +vt 0.909710 0.400090 0.000000 +vt 0.905090 0.400380 0.000000 +vt 0.900180 0.390430 0.000000 +vt 0.895470 0.390730 0.000000 +vt 0.900480 0.400680 0.000000 +vt 0.895860 0.400970 0.000000 +vt 0.928130 0.521170 0.000000 +vt 0.926150 0.521210 0.000000 +vt 0.932490 0.505350 0.000000 +vt 0.935120 0.505610 0.000000 +vt 0.924170 0.521250 0.000000 +vt 0.929870 0.505090 0.000000 +vt 0.935560 0.488920 0.000000 +vt 0.938830 0.489480 0.000000 +vt 0.942100 0.490040 0.000000 +vt 0.922190 0.521290 0.000000 +vt 0.927240 0.504830 0.000000 +vt 0.920200 0.521340 0.000000 +vt 0.924620 0.504570 0.000000 +vt 0.929030 0.487790 0.000000 +vt 0.932300 0.488360 0.000000 +vt 0.937350 0.471890 0.000000 +vt 0.941260 0.472750 0.000000 +vt 0.933440 0.471020 0.000000 +vt 0.937850 0.454250 0.000000 +vt 0.942410 0.455420 0.000000 +vt 0.946960 0.456590 0.000000 +vt 0.945170 0.473620 0.000000 +vt 0.949090 0.474480 0.000000 +vt 0.951520 0.457750 0.000000 +vt 0.956070 0.458920 0.000000 +vt 0.849800 0.450920 0.000000 +vt 0.852000 0.468100 0.000000 +vt 0.847820 0.468590 0.000000 +vt 0.845360 0.451450 0.000000 +vt 0.854200 0.485290 0.000000 +vt 0.850290 0.485730 0.000000 +vt 0.846380 0.486170 0.000000 +vt 0.843650 0.469080 0.000000 +vt 0.840920 0.451990 0.000000 +vt 0.856400 0.502470 0.000000 +vt 0.852750 0.502870 0.000000 +vt 0.858600 0.519660 0.000000 +vt 0.855220 0.520010 0.000000 +vt 0.851850 0.520360 0.000000 +vt 0.849110 0.503270 0.000000 +vt 0.845470 0.503670 0.000000 +vt 0.842470 0.486620 0.000000 +vt 0.848470 0.520710 0.000000 +vt 0.845100 0.521070 0.000000 +vt 0.841830 0.504060 0.000000 +vt 0.838570 0.487060 0.000000 +vt 0.839470 0.469570 0.000000 +vt 0.836480 0.452520 0.000000 +vt 0.835300 0.470060 0.000000 +vt 0.832040 0.453060 0.000000 +vt 0.886360 0.449100 0.000000 +vt 0.886640 0.466210 0.000000 +vt 0.882070 0.466310 0.000000 +vt 0.881440 0.449190 0.000000 +vt 0.886920 0.483320 0.000000 +vt 0.882690 0.483430 0.000000 +vt 0.878470 0.483530 0.000000 +vt 0.877490 0.466400 0.000000 +vt 0.876520 0.449280 0.000000 +vt 0.887200 0.500440 0.000000 +vt 0.883320 0.500550 0.000000 +vt 0.887480 0.517550 0.000000 +vt 0.883950 0.517670 0.000000 +vt 0.880420 0.517780 0.000000 +vt 0.879440 0.500660 0.000000 +vt 0.875560 0.500770 0.000000 +vt 0.874240 0.483630 0.000000 +vt 0.876880 0.517900 0.000000 +vt 0.873350 0.518020 0.000000 +vt 0.871680 0.500880 0.000000 +vt 0.870010 0.483740 0.000000 +vt 0.872920 0.466500 0.000000 +vt 0.871590 0.449370 0.000000 +vt 0.868340 0.466600 0.000000 +vt 0.866670 0.449450 0.000000 +vt 0.911400 0.500620 0.000000 +vt 0.914650 0.500980 0.000000 +vt 0.908150 0.500260 0.000000 +vt 0.910520 0.483210 0.000000 +vt 0.913610 0.483450 0.000000 +vt 0.916710 0.483690 0.000000 +vt 0.904900 0.499900 0.000000 +vt 0.901650 0.499530 0.000000 +vt 0.904330 0.482730 0.000000 +vt 0.907420 0.482970 0.000000 +vt 0.909940 0.466050 0.000000 +vt 0.912880 0.466160 0.000000 +vt 0.907000 0.465930 0.000000 +vt 0.909670 0.449130 0.000000 +vt 0.912460 0.449120 0.000000 +vt 0.915240 0.449110 0.000000 +vt 0.915820 0.466280 0.000000 +vt 0.918760 0.466390 0.000000 +vt 0.918030 0.449100 0.000000 +vt 0.920820 0.449100 0.000000 +vt 0.890050 0.349600 0.000000 +vt 0.895580 0.348940 0.000000 +vt 0.885800 0.339200 0.000000 +vt 0.891880 0.338210 0.000000 +vt 0.897970 0.337230 0.000000 +vt 0.901110 0.348280 0.000000 +vt 0.881550 0.328790 0.000000 +vt 0.888190 0.327480 0.000000 +vt 0.877300 0.318390 0.000000 +vt 0.884490 0.316750 0.000000 +vt 0.891680 0.315120 0.000000 +vt 0.894820 0.326170 0.000000 +vt 0.901460 0.324870 0.000000 +vt 0.904050 0.336240 0.000000 +vt 0.898870 0.313490 0.000000 +vt 0.906640 0.347620 0.000000 +vt 0.885500 0.538160 0.000000 +vt 0.884670 0.535500 0.000000 +vt 0.887760 0.535970 0.000000 +vt 0.888340 0.538680 0.000000 +vt 0.883840 0.532850 0.000000 +vt 0.887190 0.533260 0.000000 +vt 0.890540 0.533670 0.000000 +vt 0.890860 0.536430 0.000000 +vt 0.891170 0.539200 0.000000 +vt 0.883010 0.530190 0.000000 +vt 0.886620 0.530550 0.000000 +vt 0.882180 0.527530 0.000000 +vt 0.886040 0.527830 0.000000 +vt 0.889900 0.528140 0.000000 +vt 0.890220 0.530900 0.000000 +vt 0.893820 0.531260 0.000000 +vt 0.893880 0.534080 0.000000 +vt 0.893760 0.528450 0.000000 +vt 0.897430 0.531620 0.000000 +vt 0.897230 0.534490 0.000000 +vt 0.893950 0.536900 0.000000 +vt 0.894010 0.539710 0.000000 +vt 0.897040 0.537360 0.000000 +vt 0.896840 0.540230 0.000000 +vt 0.833620 0.376810 0.000000 +vt 0.831800 0.366140 0.000000 +vt 0.835450 0.387470 0.000000 +vt 0.830360 0.387950 0.000000 +vt 0.828570 0.377240 0.000000 +vt 0.826780 0.366540 0.000000 +vt 0.837280 0.398130 0.000000 +vt 0.839110 0.408800 0.000000 +vt 0.833940 0.409370 0.000000 +vt 0.832150 0.398660 0.000000 +vt 0.827020 0.399190 0.000000 +vt 0.825270 0.388440 0.000000 +vt 0.828760 0.409940 0.000000 +vt 0.823520 0.377680 0.000000 +vt 0.821770 0.366930 0.000000 +vt 0.918500 0.367900 0.000000 +vt 0.922770 0.366850 0.000000 +vt 0.920960 0.377550 0.000000 +vt 0.917610 0.378390 0.000000 +vt 0.927040 0.365810 0.000000 +vt 0.924310 0.376710 0.000000 +vt 0.921570 0.387620 0.000000 +vt 0.919150 0.388250 0.000000 +vt 0.918840 0.398530 0.000000 +vt 0.917340 0.398950 0.000000 +vt 0.916720 0.388880 0.000000 +vt 0.915830 0.399370 0.000000 +vt 0.831940 0.521670 0.000000 +vt 0.830930 0.504470 0.000000 +vt 0.833650 0.504370 0.000000 +vt 0.835230 0.521520 0.000000 +vt 0.829920 0.487270 0.000000 +vt 0.832080 0.487220 0.000000 +vt 0.834240 0.487170 0.000000 +vt 0.836380 0.504270 0.000000 +vt 0.838520 0.521370 0.000000 +vt 0.828910 0.470070 0.000000 +vt 0.830500 0.470070 0.000000 +vt 0.827890 0.452870 0.000000 +vt 0.828930 0.452910 0.000000 +vt 0.829960 0.452960 0.000000 +vt 0.832100 0.470060 0.000000 +vt 0.833700 0.470060 0.000000 +vt 0.836400 0.487110 0.000000 +vt 0.831000 0.453010 0.000000 +vt 0.839110 0.504170 0.000000 +vt 0.841810 0.521220 0.000000 +vt 0.896110 0.516640 0.000000 +vt 0.898040 0.499760 0.000000 +vt 0.893230 0.516940 0.000000 +vt 0.894430 0.499980 0.000000 +vt 0.895620 0.483030 0.000000 +vt 0.899970 0.482880 0.000000 +vt 0.890350 0.517240 0.000000 +vt 0.890810 0.500210 0.000000 +vt 0.891270 0.483180 0.000000 +vt 0.891730 0.466140 0.000000 +vt 0.896820 0.466070 0.000000 +vt 0.892190 0.449110 0.000000 +vt 0.898020 0.449110 0.000000 +vt 0.901910 0.466000 0.000000 +vt 0.903840 0.449120 0.000000 +vt 0.901430 0.289150 0.000000 +vt 0.907450 0.288520 0.000000 +vt 0.908780 0.294100 0.000000 +vt 0.902590 0.294820 0.000000 +vt 0.913470 0.287900 0.000000 +vt 0.914970 0.293380 0.000000 +vt 0.916470 0.298870 0.000000 +vt 0.910100 0.299690 0.000000 +vt 0.903740 0.300500 0.000000 +vt 0.919490 0.287270 0.000000 +vt 0.921160 0.292660 0.000000 +vt 0.925520 0.286640 0.000000 +vt 0.927350 0.291940 0.000000 +vt 0.929190 0.297240 0.000000 +vt 0.922830 0.298060 0.000000 +vt 0.924490 0.303450 0.000000 +vt 0.917960 0.304360 0.000000 +vt 0.931020 0.302540 0.000000 +vt 0.911430 0.305270 0.000000 +vt 0.904900 0.306180 0.000000 +vt 0.908340 0.539540 0.000000 +vt 0.905460 0.539710 0.000000 +vt 0.906770 0.537080 0.000000 +vt 0.910020 0.536990 0.000000 +vt 0.902590 0.539890 0.000000 +vt 0.903530 0.537180 0.000000 +vt 0.904460 0.534470 0.000000 +vt 0.908080 0.534450 0.000000 +vt 0.911690 0.534440 0.000000 +vt 0.899720 0.540060 0.000000 +vt 0.900280 0.537270 0.000000 +vt 0.900850 0.534480 0.000000 +vt 0.901410 0.531690 0.000000 +vt 0.905400 0.531760 0.000000 +vt 0.909390 0.531820 0.000000 +vt 0.913370 0.531890 0.000000 +vt 0.981980 0.370720 0.000000 +vt 0.976740 0.381770 0.000000 +vt 0.987320 0.372710 0.000000 +vt 0.981970 0.383610 0.000000 +vt 0.976630 0.394510 0.000000 +vt 0.971500 0.392820 0.000000 +vt 0.992650 0.374700 0.000000 +vt 0.987200 0.385450 0.000000 +vt 0.997990 0.376680 0.000000 +vt 0.992440 0.387290 0.000000 +vt 0.986880 0.397890 0.000000 +vt 0.981760 0.396200 0.000000 +vt 0.976310 0.406950 0.000000 +vt 0.971290 0.405410 0.000000 +vt 0.981330 0.408490 0.000000 +vt 0.975770 0.419090 0.000000 +vt 0.970860 0.417700 0.000000 +vt 0.965940 0.416310 0.000000 +vt 0.966260 0.403870 0.000000 +vt 0.961030 0.414910 0.000000 +vt 0.884970 0.371320 0.000000 +vt 0.884340 0.360980 0.000000 +vt 0.885600 0.381660 0.000000 +vt 0.876130 0.382830 0.000000 +vt 0.875260 0.372390 0.000000 +vt 0.874390 0.361950 0.000000 +vt 0.886230 0.392000 0.000000 +vt 0.886860 0.402340 0.000000 +vt 0.877860 0.403700 0.000000 +vt 0.876990 0.393260 0.000000 +vt 0.867760 0.394530 0.000000 +vt 0.866650 0.384000 0.000000 +vt 0.868860 0.405070 0.000000 +vt 0.865540 0.373460 0.000000 +vt 0.864430 0.362930 0.000000 +vt 0.918300 0.520570 0.000000 +vt 0.922120 0.503670 0.000000 +vt 0.916400 0.519810 0.000000 +vt 0.919630 0.502770 0.000000 +vt 0.922870 0.485740 0.000000 +vt 0.925950 0.486770 0.000000 +vt 0.914500 0.519040 0.000000 +vt 0.917140 0.501880 0.000000 +vt 0.919790 0.484720 0.000000 +vt 0.922430 0.467550 0.000000 +vt 0.926100 0.468710 0.000000 +vt 0.925070 0.450390 0.000000 +vt 0.929330 0.451680 0.000000 +vt 0.929770 0.469870 0.000000 +vt 0.933590 0.452960 0.000000 +vt 0.860220 0.502070 0.000000 +vt 0.862290 0.519250 0.000000 +vt 0.858150 0.484900 0.000000 +vt 0.862100 0.484510 0.000000 +vt 0.864040 0.501670 0.000000 +vt 0.865980 0.518840 0.000000 +vt 0.856080 0.467720 0.000000 +vt 0.854010 0.450550 0.000000 +vt 0.858230 0.450180 0.000000 +vt 0.860170 0.467350 0.000000 +vt 0.864250 0.466970 0.000000 +vt 0.866060 0.484120 0.000000 +vt 0.862450 0.449820 0.000000 +vt 0.867860 0.501280 0.000000 +vt 0.869670 0.518430 0.000000 +vt 0.878050 0.296080 0.000000 +vt 0.883900 0.294350 0.000000 +vt 0.884050 0.299950 0.000000 +vt 0.877860 0.301660 0.000000 +vt 0.889740 0.292620 0.000000 +vt 0.890230 0.298240 0.000000 +vt 0.890710 0.303870 0.000000 +vt 0.884190 0.305550 0.000000 +vt 0.877680 0.307240 0.000000 +vt 0.895580 0.290880 0.000000 +vt 0.896410 0.296530 0.000000 +vt 0.897230 0.302180 0.000000 +vt 0.898050 0.307840 0.000000 +vt 0.891200 0.309490 0.000000 +vt 0.884340 0.311150 0.000000 +vt 0.877490 0.312810 0.000000 +vt 0.889280 0.519890 0.000000 +vt 0.886150 0.520040 0.000000 +vt 0.892400 0.519740 0.000000 +vt 0.891570 0.522540 0.000000 +vt 0.888200 0.522540 0.000000 +vt 0.884830 0.522540 0.000000 +vt 0.895520 0.519590 0.000000 +vt 0.894930 0.522540 0.000000 +vt 0.894350 0.525490 0.000000 +vt 0.890730 0.525340 0.000000 +vt 0.887120 0.525190 0.000000 +vt 0.883510 0.525030 0.000000 +vt 0.951550 0.423700 0.000000 +vt 0.943780 0.420490 0.000000 +vt 0.946980 0.433890 0.000000 +vt 0.940380 0.431320 0.000000 +vt 0.933780 0.428740 0.000000 +vt 0.936000 0.417280 0.000000 +vt 0.942420 0.444070 0.000000 +vt 0.936990 0.442140 0.000000 +vt 0.931560 0.440210 0.000000 +vt 0.926130 0.438280 0.000000 +vt 0.927180 0.426170 0.000000 +vt 0.920700 0.436350 0.000000 +vt 0.920580 0.423600 0.000000 +vt 0.928230 0.414060 0.000000 +vt 0.920460 0.410850 0.000000 +vt 0.825700 0.421150 0.000000 +vt 0.824250 0.420940 0.000000 +vt 0.827810 0.431790 0.000000 +vt 0.826500 0.431630 0.000000 +vt 0.825180 0.431470 0.000000 +vt 0.822790 0.420730 0.000000 +vt 0.829920 0.442420 0.000000 +vt 0.828750 0.442320 0.000000 +vt 0.827570 0.442220 0.000000 +vt 0.826400 0.442120 0.000000 +vt 0.823870 0.431320 0.000000 +vt 0.825220 0.442010 0.000000 +vt 0.822550 0.431160 0.000000 +vt 0.821340 0.420520 0.000000 +vt 0.819880 0.420310 0.000000 +vt 0.861570 0.417190 0.000000 +vt 0.857590 0.417610 0.000000 +vt 0.863270 0.427940 0.000000 +vt 0.859210 0.428350 0.000000 +vt 0.855150 0.428760 0.000000 +vt 0.853610 0.418040 0.000000 +vt 0.864970 0.438700 0.000000 +vt 0.860830 0.439080 0.000000 +vt 0.856690 0.439470 0.000000 +vt 0.852550 0.439860 0.000000 +vt 0.851090 0.429160 0.000000 +vt 0.848420 0.440240 0.000000 +vt 0.847040 0.429570 0.000000 +vt 0.849630 0.418470 0.000000 +vt 0.845660 0.418900 0.000000 +vt 0.905310 0.436860 0.000000 +vt 0.910830 0.436790 0.000000 +vt 0.899790 0.436930 0.000000 +vt 0.901560 0.424750 0.000000 +vt 0.906780 0.424610 0.000000 +vt 0.912000 0.424460 0.000000 +vt 0.894260 0.437000 0.000000 +vt 0.888740 0.437070 0.000000 +vt 0.891110 0.425040 0.000000 +vt 0.896330 0.424890 0.000000 +vt 0.898410 0.412780 0.000000 +vt 0.903320 0.412570 0.000000 +vt 0.893490 0.413000 0.000000 +vt 0.908240 0.412350 0.000000 +vt 0.913160 0.412130 0.000000 +vt 0.840670 0.419460 0.000000 +vt 0.842230 0.430120 0.000000 +vt 0.837430 0.430680 0.000000 +vt 0.835680 0.420020 0.000000 +vt 0.843790 0.440790 0.000000 +vt 0.839170 0.441330 0.000000 +vt 0.834550 0.441880 0.000000 +vt 0.832620 0.431230 0.000000 +vt 0.830690 0.420590 0.000000 +vt 0.918230 0.436460 0.000000 +vt 0.915770 0.436570 0.000000 +vt 0.916290 0.424030 0.000000 +vt 0.918440 0.423820 0.000000 +vt 0.913300 0.436680 0.000000 +vt 0.914140 0.424250 0.000000 +vt 0.914990 0.411810 0.000000 +vt 0.916810 0.411490 0.000000 +vt 0.918640 0.411170 0.000000 +vt 0.956350 0.447740 0.000000 +vt 0.961000 0.448960 0.000000 +vt 0.951710 0.446520 0.000000 +vt 0.956450 0.436450 0.000000 +vt 0.961190 0.437730 0.000000 +vt 0.965920 0.439010 0.000000 +vt 0.947060 0.445290 0.000000 +vt 0.951720 0.435170 0.000000 +vt 0.956370 0.425040 0.000000 +vt 0.961200 0.426380 0.000000 +vt 0.966020 0.427710 0.000000 +vt 0.970850 0.429050 0.000000 +vt 0.885510 0.414050 0.000000 +vt 0.884150 0.425760 0.000000 +vt 0.877190 0.426490 0.000000 +vt 0.877530 0.415100 0.000000 +vt 0.882800 0.437480 0.000000 +vt 0.876850 0.437880 0.000000 +vt 0.870910 0.438290 0.000000 +vt 0.870230 0.427220 0.000000 +vt 0.869550 0.416140 0.000000 +# 573 texture coords + +g rocksCombined011 +usemtl rocksSculpts +f 135/3 134/4 13/1 131/2 +f 132/6 135/3 131/2 35/5 +f 39/7 133/8 135/3 132/6 +f 133/8 38/9 134/4 135/3 +f 139/11 132/6 35/5 136/10 +f 137/13 139/11 136/10 25/12 +f 36/14 138/15 139/11 137/13 +f 138/15 39/7 132/6 139/11 +f 143/16 142/17 39/7 138/15 +f 140/18 143/16 138/15 36/14 +f 20/19 141/20 143/16 140/18 +f 141/20 37/21 142/17 143/16 +f 146/22 145/23 38/9 133/8 +f 142/17 146/22 133/8 39/7 +f 37/21 144/24 146/22 142/17 +f 144/24 1/25 145/23 146/22 +f 151/28 150/29 21/26 147/27 +f 148/31 151/28 147/27 40/30 +f 44/32 149/33 151/28 148/31 +f 149/33 43/34 150/29 151/28 +f 155/36 148/31 40/30 152/35 +f 153/38 155/36 152/35 26/37 +f 41/39 154/40 155/36 153/38 +f 154/40 44/32 148/31 155/36 +f 159/41 158/42 44/32 154/40 +f 156/43 159/41 154/40 41/39 +f 16/44 157/45 159/41 156/43 +f 157/45 42/46 158/42 159/41 +f 162/47 161/48 43/34 149/33 +f 158/42 162/47 149/33 44/32 +f 42/46 160/49 162/47 158/42 +f 160/49 5/50 161/48 162/47 +f 166/53 141/54 20/51 163/52 +f 164/56 166/53 163/52 45/55 +f 48/57 165/58 166/53 164/56 +f 165/58 37/59 141/54 166/53 +f 170/61 164/56 45/55 167/60 +f 168/63 170/61 167/60 33/62 +f 46/64 169/65 170/61 168/63 +f 169/65 48/57 164/56 170/61 +f 174/66 173/67 48/57 169/65 +f 171/68 174/66 169/65 46/64 +f 30/69 172/70 174/66 171/68 +f 172/70 47/71 173/67 174/66 +f 176/72 144/73 37/59 165/58 +f 173/67 176/72 165/58 48/57 +f 47/71 175/74 176/72 173/67 +f 175/74 1/25 144/73 176/72 +f 181/77 180/78 14/75 177/76 +f 178/80 181/77 177/76 49/79 +f 53/81 179/82 181/77 178/80 +f 179/82 52/83 180/78 181/77 +f 185/85 178/80 49/79 182/84 +f 183/87 185/85 182/84 31/86 +f 50/88 184/89 185/85 183/87 +f 184/89 53/81 178/80 185/85 +f 189/90 188/91 53/81 184/89 +f 186/92 189/90 184/89 50/88 +f 27/93 187/94 189/90 186/92 +f 187/94 51/95 188/91 189/90 +f 192/96 191/97 52/83 179/82 +f 188/91 192/96 179/82 53/81 +f 51/95 190/98 192/96 188/91 +f 190/98 2/99 191/97 192/96 +f 197/102 196/103 19/100 193/101 +f 194/105 197/102 193/101 54/104 +f 58/106 195/107 197/102 194/105 +f 195/107 57/108 196/103 197/102 +f 201/110 194/105 54/104 198/109 +f 199/112 201/110 198/109 34/111 +f 55/113 200/114 201/110 199/112 +f 200/114 58/106 194/105 201/110 +f 205/115 204/116 58/106 200/114 +f 202/117 205/115 200/114 55/113 +f 28/118 203/119 205/115 202/117 +f 203/119 56/120 204/116 205/115 +f 208/121 207/122 57/108 195/107 +f 204/116 208/121 195/107 58/106 +f 56/120 206/123 208/121 204/116 +f 206/123 4/124 207/122 208/121 +f 213/127 212/128 3/125 209/126 +f 210/130 213/127 209/126 59/129 +f 63/131 211/132 213/127 210/130 +f 211/132 62/133 212/128 213/127 +f 217/135 210/130 59/129 214/134 +f 215/136 217/135 214/134 13/1 +f 60/137 216/138 217/135 215/136 +f 216/138 63/131 210/130 217/135 +f 221/139 220/140 63/131 216/138 +f 218/141 221/139 216/138 60/137 +f 32/142 219/143 221/139 218/141 +f 219/143 61/144 220/140 221/139 +f 224/145 223/146 62/133 211/132 +f 220/140 224/145 211/132 63/131 +f 61/144 222/147 224/145 220/140 +f 222/147 29/148 223/146 224/145 +f 229/151 228/152 6/149 225/150 +f 226/154 229/151 225/150 64/153 +f 68/155 227/156 229/151 226/154 +f 227/156 67/157 228/152 229/151 +f 233/159 226/154 64/153 230/158 +f 231/161 233/159 230/158 21/160 +f 65/162 232/163 233/159 231/161 +f 232/163 68/155 226/154 233/159 +f 237/164 236/165 68/155 232/163 +f 234/166 237/164 232/163 65/162 +f 23/167 235/168 237/164 234/166 +f 235/168 66/169 236/165 237/164 +f 240/170 239/171 67/157 227/156 +f 236/165 240/170 227/156 68/155 +f 66/169 238/172 240/170 236/165 +f 238/172 9/173 239/171 240/170 +f 245/176 244/177 11/174 241/175 +f 242/179 245/176 241/175 69/178 +f 73/180 243/181 245/176 242/179 +f 243/181 72/182 244/177 245/176 +f 249/184 242/179 69/178 246/183 +f 247/186 249/184 246/183 8/185 +f 70/187 248/188 249/184 247/186 +f 248/188 73/180 242/179 249/184 +f 253/189 252/190 73/180 248/188 +f 250/191 253/189 248/188 70/187 +f 15/192 251/193 253/189 250/191 +f 251/193 71/194 252/190 253/189 +f 256/195 255/196 72/182 243/181 +f 252/190 256/195 243/181 73/180 +f 71/194 254/197 256/195 252/190 +f 254/197 17/198 255/196 256/195 +f 261/201 260/202 12/199 257/200 +f 258/204 261/201 257/200 74/203 +f 78/205 259/206 261/201 258/204 +f 259/206 77/207 260/202 261/201 +f 265/209 258/204 74/203 262/208 +f 263/211 265/209 262/208 7/210 +f 75/212 264/213 265/209 263/211 +f 264/213 78/205 258/204 265/209 +f 269/214 268/215 78/205 264/213 +f 266/216 269/214 264/213 75/212 +f 22/217 267/218 269/214 266/216 +f 267/218 76/219 268/215 269/214 +f 272/220 271/221 77/207 259/206 +f 268/215 272/220 259/206 78/205 +f 76/219 270/222 272/220 268/215 +f 270/222 24/223 271/221 272/220 +f 276/224 275/225 5/50 160/49 +f 273/226 276/224 160/49 42/46 +f 82/227 274/228 276/224 273/226 +f 274/228 81/229 275/225 276/224 +f 279/230 273/226 42/46 157/45 +f 277/231 279/230 157/45 16/44 +f 79/232 278/233 279/230 277/231 +f 278/233 82/227 273/226 279/230 +f 283/234 282/235 82/227 278/233 +f 280/236 283/234 278/233 79/232 +f 18/237 281/238 283/234 280/236 +f 281/238 80/239 282/235 283/234 +f 286/240 285/241 81/229 274/228 +f 282/235 286/240 274/228 82/227 +f 80/239 284/242 286/240 282/235 +f 284/242 10/243 285/241 286/240 +f 290/245 209/126 3/125 287/244 +f 288/247 290/245 287/244 83/246 +f 85/248 289/249 290/245 288/247 +f 289/249 59/129 209/126 290/245 +f 294/251 288/247 83/246 291/250 +f 292/253 294/251 291/250 19/252 +f 84/254 293/255 294/251 292/253 +f 293/255 85/248 288/247 294/251 +f 297/256 296/257 85/248 293/255 +f 295/258 297/256 293/255 84/254 +f 25/12 136/10 297/256 295/258 +f 136/10 35/5 296/257 297/256 +f 298/259 214/134 59/129 289/249 +f 296/257 298/259 289/249 85/248 +f 35/5 131/2 298/259 296/257 +f 131/2 13/1 214/134 298/259 +f 302/262 247/263 8/260 299/261 +f 300/265 302/262 299/261 86/264 +f 89/266 301/267 302/262 300/265 +f 301/267 70/268 247/263 302/262 +f 306/270 300/265 86/264 303/269 +f 304/272 306/270 303/269 22/271 +f 87/273 305/274 306/270 304/272 +f 305/274 89/266 300/265 306/270 +f 310/275 309/276 89/266 305/274 +f 307/277 310/275 305/274 87/273 +f 26/37 308/278 310/275 307/277 +f 308/278 88/279 309/276 310/275 +f 312/280 250/281 70/268 301/267 +f 309/276 312/280 301/267 89/266 +f 88/279 311/282 312/280 309/276 +f 311/282 15/283 250/281 312/280 +f 316/284 315/285 4/124 206/123 +f 313/286 316/284 206/123 56/120 +f 92/287 314/288 316/284 313/286 +f 314/288 91/289 315/285 316/284 +f 319/290 313/286 56/120 203/119 +f 317/291 319/290 203/119 28/118 +f 90/292 318/293 319/290 317/291 +f 318/293 92/287 313/286 319/290 +f 322/294 321/295 92/287 318/293 +f 320/296 322/294 318/293 90/292 +f 31/86 182/84 322/294 320/296 +f 182/84 49/79 321/295 322/294 +f 324/297 323/298 91/289 314/288 +f 321/295 324/297 314/288 92/287 +f 49/79 177/76 324/297 321/295 +f 177/76 14/75 323/298 324/297 +f 327/299 215/136 13/1 134/4 +f 325/300 327/299 134/4 38/9 +f 94/301 326/302 327/299 325/300 +f 326/302 60/137 215/136 327/299 +f 329/303 325/300 38/9 145/23 +f 175/74 329/303 145/23 1/25 +f 47/71 328/304 329/303 175/74 +f 328/304 94/301 325/300 329/303 +f 332/305 331/306 94/301 328/304 +f 172/70 332/305 328/304 47/71 +f 30/69 330/307 332/305 172/70 +f 330/307 93/308 331/306 332/305 +f 334/309 218/141 60/137 326/302 +f 331/306 334/309 326/302 94/301 +f 93/308 333/310 334/309 331/306 +f 333/310 32/142 218/141 334/309 +f 338/313 337/314 6/311 228/312 +f 335/316 338/313 228/312 67/315 +f 97/317 336/318 338/313 335/316 +f 336/318 96/319 337/314 338/313 +f 341/321 335/316 67/315 239/320 +f 339/323 341/321 239/320 9/322 +f 95/324 340/325 341/321 339/323 +f 340/325 97/317 335/316 341/321 +f 344/326 343/327 97/317 340/325 +f 342/328 344/326 340/325 95/324 +f 17/198 254/197 344/326 342/328 +f 254/197 71/194 343/327 344/326 +f 346/329 345/330 96/319 336/318 +f 343/327 346/329 336/318 97/317 +f 71/194 251/193 346/329 343/327 +f 251/193 15/192 345/330 346/329 +f 350/332 277/231 16/44 347/331 +f 348/334 350/332 347/331 98/333 +f 100/335 349/336 350/332 348/334 +f 349/336 79/232 277/231 350/332 +f 353/338 348/334 98/333 351/337 +f 262/208 353/338 351/337 7/210 +f 74/203 352/339 353/338 262/208 +f 352/339 100/335 348/334 353/338 +f 356/340 355/341 100/335 352/339 +f 257/200 356/340 352/339 74/203 +f 12/199 354/342 356/340 257/200 +f 354/342 99/343 355/341 356/340 +f 358/344 280/236 79/232 349/336 +f 355/341 358/344 349/336 100/335 +f 99/343 357/345 358/344 355/341 +f 357/345 18/237 280/236 358/344 +f 362/348 361/349 14/346 180/347 +f 359/351 362/348 180/347 52/350 +f 103/352 360/353 362/348 359/351 +f 360/353 102/354 361/349 362/348 +f 365/356 359/351 52/350 191/355 +f 363/358 365/356 191/355 2/357 +f 101/359 364/360 365/356 363/358 +f 364/360 103/352 359/351 365/356 +f 368/361 367/362 103/352 364/360 +f 366/363 368/361 364/360 101/359 +f 20/19 140/18 368/361 366/363 +f 140/18 36/14 367/362 368/361 +f 370/364 369/365 102/354 360/353 +f 367/362 370/364 360/353 103/352 +f 36/14 137/13 370/364 367/362 +f 137/13 25/12 369/365 370/364 +f 373/368 225/369 6/366 337/367 +f 371/371 373/368 337/367 96/370 +f 104/372 372/373 373/368 371/371 +f 372/373 64/374 225/369 373/368 +f 375/376 371/371 96/370 345/375 +f 311/282 375/376 345/375 15/283 +f 88/279 374/377 375/376 311/282 +f 374/377 104/372 371/371 375/376 +f 377/378 376/379 104/372 374/377 +f 308/278 377/378 374/377 88/279 +f 26/37 152/35 377/378 308/278 +f 152/35 40/30 376/379 377/378 +f 378/380 230/381 64/374 372/373 +f 376/379 378/380 372/373 104/372 +f 40/30 147/27 378/380 376/379 +f 147/27 21/26 230/381 378/380 +f 381/383 163/52 20/51 366/382 +f 379/385 381/383 366/382 101/384 +f 106/386 380/387 381/383 379/385 +f 380/387 45/55 163/52 381/383 +f 383/389 379/385 101/384 363/388 +f 190/391 383/389 363/388 2/390 +f 51/392 382/393 383/389 190/391 +f 382/393 106/386 379/385 383/389 +f 386/394 385/395 106/386 382/393 +f 187/396 386/394 382/393 51/392 +f 27/397 384/398 386/394 187/396 +f 384/398 105/399 385/395 386/394 +f 388/400 167/60 45/55 380/387 +f 385/395 388/400 380/387 106/386 +f 105/399 387/401 388/400 385/395 +f 387/401 33/62 167/60 388/400 +f 391/402 287/403 3/125 212/128 +f 389/404 391/402 212/128 62/133 +f 108/405 390/406 391/402 389/404 +f 390/406 83/407 287/403 391/402 +f 394/408 389/404 62/133 223/146 +f 392/409 394/408 223/146 29/148 +f 107/410 393/411 394/408 392/409 +f 393/411 108/405 389/404 394/408 +f 397/412 396/413 108/405 393/411 +f 395/414 397/412 393/411 107/410 +f 34/111 198/109 397/412 395/414 +f 198/109 54/104 396/413 397/412 +f 398/415 291/416 83/407 390/406 +f 396/413 398/415 390/406 108/405 +f 54/104 193/101 398/415 396/413 +f 193/101 19/100 291/416 398/415 +f 401/418 231/161 21/160 150/417 +f 399/420 401/418 150/417 43/419 +f 110/421 400/422 401/418 399/420 +f 400/422 65/162 231/161 401/418 +f 403/424 399/420 43/419 161/423 +f 275/225 403/424 161/423 5/50 +f 81/229 402/425 403/424 275/225 +f 402/425 110/421 399/420 403/424 +f 406/426 405/427 110/421 402/425 +f 285/241 406/426 402/425 81/229 +f 10/243 404/428 406/426 285/241 +f 404/428 109/429 405/427 406/426 +f 408/430 234/166 65/162 400/422 +f 405/427 408/430 400/422 110/421 +f 109/429 407/431 408/430 405/427 +f 407/431 23/167 234/166 408/430 +f 411/432 299/433 8/185 246/183 +f 409/434 411/432 246/183 69/178 +f 112/435 410/436 411/432 409/434 +f 410/436 86/437 299/433 411/432 +f 414/438 409/434 69/178 241/175 +f 412/439 414/438 241/175 11/174 +f 111/440 413/441 414/438 412/439 +f 413/441 112/435 409/434 414/438 +f 417/442 416/443 112/435 413/441 +f 415/444 417/442 413/441 111/440 +f 24/223 270/222 417/442 415/444 +f 270/222 76/219 416/443 417/442 +f 418/445 303/446 86/437 410/436 +f 416/443 418/445 410/436 112/435 +f 76/219 267/218 418/445 416/443 +f 267/218 22/217 303/446 418/445 +f 421/449 207/450 4/447 315/448 +f 419/452 421/449 315/448 91/451 +f 113/453 420/454 421/449 419/452 +f 420/454 57/455 207/450 421/449 +f 423/457 419/452 91/451 323/456 +f 361/349 423/457 323/456 14/346 +f 102/354 422/458 423/457 361/349 +f 422/458 113/453 419/452 423/457 +f 425/459 424/460 113/453 422/458 +f 369/365 425/459 422/458 102/354 +f 25/12 295/258 425/459 369/365 +f 295/258 84/254 424/460 425/459 +f 426/461 196/462 57/455 420/454 +f 424/460 426/461 420/454 113/453 +f 84/254 292/253 426/461 424/460 +f 292/253 19/252 196/462 426/461 +f 429/463 263/464 7/210 351/337 +f 427/465 429/463 351/337 98/333 +f 114/466 428/467 429/463 427/465 +f 428/467 75/468 263/464 429/463 +f 431/469 427/465 98/333 347/331 +f 156/43 431/469 347/331 16/44 +f 41/39 430/470 431/469 156/43 +f 430/470 114/466 427/465 431/469 +f 433/471 432/472 114/466 430/470 +f 153/38 433/471 430/470 41/39 +f 26/37 307/277 433/471 153/38 +f 307/277 87/273 432/472 433/471 +f 434/473 266/474 75/468 428/467 +f 432/472 434/473 428/467 114/466 +f 87/273 304/272 434/473 432/472 +f 304/272 22/271 266/474 434/473 +f 438/476 168/63 33/62 435/475 +f 436/478 438/476 435/475 115/477 +f 117/479 437/480 438/476 436/478 +f 437/480 46/64 168/63 438/476 +f 441/482 436/478 115/477 439/481 +f 407/431 441/482 439/481 23/167 +f 109/429 440/483 441/482 407/431 +f 440/483 117/479 436/478 441/482 +f 444/484 443/485 117/479 440/483 +f 404/428 444/484 440/483 109/429 +f 10/243 442/486 444/484 404/428 +f 442/486 116/487 443/485 444/484 +f 446/488 171/68 46/64 437/480 +f 443/485 446/488 437/480 117/479 +f 116/487 445/489 446/488 443/485 +f 445/489 30/69 171/68 446/488 +f 450/491 183/87 31/86 447/490 +f 448/493 450/491 447/490 118/492 +f 120/494 449/495 450/491 448/493 +f 449/495 50/88 183/87 450/491 +f 453/497 448/493 118/492 451/496 +f 342/328 453/497 451/496 17/198 +f 95/324 452/498 453/497 342/328 +f 452/498 120/494 448/493 453/497 +f 456/499 455/500 120/494 452/498 +f 339/323 456/499 452/498 95/324 +f 9/322 454/501 456/499 339/323 +f 454/501 119/502 455/500 456/499 +f 458/503 186/92 50/88 449/495 +f 455/500 458/503 449/495 120/494 +f 119/502 457/504 458/503 455/500 +f 457/504 27/93 186/92 458/503 +f 462/506 199/112 34/111 459/505 +f 460/508 462/506 459/505 121/507 +f 123/509 461/510 462/506 460/508 +f 461/510 55/113 199/112 462/506 +f 465/512 460/508 121/507 463/511 +f 415/444 465/512 463/511 24/223 +f 111/440 464/513 465/512 415/444 +f 464/513 123/509 460/508 465/512 +f 468/514 467/515 123/509 464/513 +f 412/439 468/514 464/513 111/440 +f 11/174 466/516 468/514 412/439 +f 466/516 122/517 467/515 468/514 +f 470/518 202/117 55/113 461/510 +f 467/515 470/518 461/510 123/509 +f 122/517 469/519 470/518 467/515 +f 469/519 28/118 202/117 470/518 +f 474/520 473/521 18/237 357/345 +f 471/522 474/520 357/345 99/343 +f 126/523 472/524 474/520 471/522 +f 472/524 125/525 473/521 474/520 +f 477/526 471/522 99/343 354/342 +f 475/527 477/526 354/342 12/199 +f 124/528 476/529 477/526 475/527 +f 476/529 126/523 471/522 477/526 +f 480/530 479/531 126/523 476/529 +f 478/532 480/530 476/529 124/528 +f 29/148 222/147 480/530 478/532 +f 222/147 61/144 479/531 480/530 +f 482/533 481/534 125/525 472/524 +f 479/531 482/533 472/524 126/523 +f 61/144 219/143 482/533 479/531 +f 219/143 32/142 481/534 482/533 +f 485/535 317/291 28/118 469/519 +f 483/536 485/535 469/519 122/517 +f 127/537 484/538 485/535 483/536 +f 484/538 90/292 317/291 485/535 +f 487/539 483/536 122/517 466/516 +f 244/177 487/539 466/516 11/174 +f 72/182 486/540 487/539 244/177 +f 486/540 127/537 483/536 487/539 +f 489/541 488/542 127/537 486/540 +f 255/196 489/541 486/540 72/182 +f 17/198 451/496 489/541 255/196 +f 451/496 118/492 488/542 489/541 +f 490/543 320/296 90/292 484/538 +f 488/542 490/543 484/538 127/537 +f 118/492 447/490 490/543 488/542 +f 447/490 31/86 320/296 490/543 +f 493/544 442/486 10/243 284/242 +f 491/545 493/544 284/242 80/239 +f 128/546 492/547 493/544 491/545 +f 492/547 116/487 442/486 493/544 +f 495/548 491/545 80/239 281/238 +f 473/521 495/548 281/238 18/237 +f 125/525 494/549 495/548 473/521 +f 494/549 128/546 491/545 495/548 +f 497/550 496/551 128/546 494/549 +f 481/534 497/550 494/549 125/525 +f 32/142 333/310 497/550 481/534 +f 333/310 93/308 496/551 497/550 +f 498/552 445/489 116/487 492/547 +f 496/551 498/552 492/547 128/546 +f 93/308 330/307 498/552 496/551 +f 330/307 30/69 445/489 498/552 +f 501/553 454/554 9/173 238/172 +f 499/555 501/553 238/172 66/169 +f 129/556 500/557 501/553 499/555 +f 500/557 119/558 454/554 501/553 +f 503/559 499/555 66/169 235/168 +f 439/481 503/559 235/168 23/167 +f 115/477 502/560 503/559 439/481 +f 502/560 129/556 499/555 503/559 +f 505/561 504/562 129/556 502/560 +f 435/475 505/561 502/560 115/477 +f 33/62 387/401 505/561 435/475 +f 387/401 105/399 504/562 505/561 +f 506/563 457/564 119/558 500/557 +f 504/562 506/563 500/557 129/556 +f 105/399 384/398 506/563 504/562 +f 384/398 27/397 457/564 506/563 +f 509/565 392/409 29/148 478/532 +f 507/566 509/565 478/532 124/528 +f 130/567 508/568 509/565 507/566 +f 508/568 107/410 392/409 509/565 +f 511/569 507/566 124/528 475/527 +f 260/202 511/569 475/527 12/199 +f 77/207 510/570 511/569 260/202 +f 510/570 130/567 507/566 511/569 +f 513/571 512/572 130/567 510/570 +f 271/221 513/571 510/570 77/207 +f 24/223 463/511 513/571 271/221 +f 463/511 121/507 512/572 513/571 +f 514/573 395/414 107/410 508/568 +f 512/572 514/573 508/568 130/567 +f 121/507 459/505 514/573 512/572 +f 459/505 34/111 395/414 514/573 +# 512 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj.meta new file mode 100644 index 0000000..f3d309b --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined011.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: e5a0dabf94960444296ff34c2fac87e5 +timeCreated: 1484958684 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined011 + 100002: //RootNode + 400000: rocksCombined011 + 400002: //RootNode + 2300000: rocksCombined011 + 3300000: rocksCombined011 + 4300000: rocksCombined011 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj new file mode 100644 index 0000000..e1b6362 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj @@ -0,0 +1,2004 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:26 + +mtllib rocksCombined012.mtl + +# +# object rocksCombined012 +# + +v 9.756302 2.410205 76.783142 +v 25.563309 5.073224 74.508484 +v 13.628647 4.004012 10.570427 +v 25.939308 4.507947 10.162529 +v 14.105530 27.898338 71.776627 +v 24.339653 25.646229 71.201736 +v 16.835533 28.451065 6.554688 +v 30.128563 30.230644 7.510872 +v 25.058411 14.915732 73.577538 +v 10.616920 18.667616 76.570862 +v 27.997696 15.054583 6.451920 +v 10.541756 16.944010 3.831367 +v 12.088348 4.783228 39.716660 +v 26.369225 4.707600 40.034191 +v 24.007591 25.715862 36.645641 +v 12.183334 27.095791 36.909847 +v 27.944695 14.540215 39.960854 +v 9.633392 15.166319 38.519299 +v 19.538986 4.221024 8.631157 +v 19.820343 4.460281 77.023659 +v 19.439789 27.519760 72.888718 +v 21.326828 30.627556 3.002075 +v 19.684013 15.733441 77.415977 +v 20.813278 13.548002 1.968750 +v 19.675270 3.651160 39.844048 +v 19.798851 28.140427 36.419750 +v 12.839317 3.064446 58.526657 +v 24.779327 26.690807 55.617908 +v 0.000000 14.322622 50.694229 +v 26.567673 4.494750 58.174438 +v 13.486305 28.558155 55.550316 +v 27.217239 15.707610 56.706013 +v 20.352600 1.771044 58.798298 +v 19.660378 30.207432 57.559216 +v 28.443481 2.831969 24.607082 +v 16.598831 28.582348 21.754128 +v 31.947754 15.110755 23.655895 +v 12.563446 3.766575 23.272034 +v 25.376663 28.696877 20.626732 +v 10.481987 16.612720 21.617004 +v 20.319092 3.125491 22.741489 +v 20.707993 28.766338 20.415810 +v 9.763283 1.323185 68.533043 +v 15.958267 2.459697 59.014626 +v 19.977547 1.739479 68.305443 +v 15.709702 3.959226 77.960098 +v 14.793076 -0.000000 66.533638 +v 16.640587 27.730671 72.786407 +v 19.503914 30.229042 64.503990 +v 16.138588 31.012817 56.012272 +v 14.380470 28.576588 65.073212 +v 16.885643 29.751839 65.049820 +v 19.837204 9.881168 78.883827 +v 16.463295 14.490554 78.014915 +v 10.046974 9.190883 77.633751 +v 15.575905 9.504665 77.997818 +v 28.789658 8.652269 56.502453 +v 31.612053 15.508759 66.886383 +v 25.455833 9.012088 74.570168 +v 26.669518 4.690095 67.073486 +v 34.268196 9.075397 67.718491 +v 18.314964 8.374979 4.705215 +v 24.502205 15.046402 2.451126 +v 26.921982 8.799450 7.825760 +v 23.229286 4.323503 9.046600 +v 23.364563 8.601469 4.705261 +v 13.903824 1.952333 17.005428 +v 9.462143 6.707187 21.486923 +v 15.898193 16.330315 13.139210 +v 8.848259 7.553112 6.599670 +v 13.752159 5.087684 16.621464 +v 22.405510 26.672585 72.834045 +v 20.172180 21.359306 76.198921 +v 22.697784 15.337090 76.535606 +v 24.944145 20.589119 72.906815 +v 22.689781 21.241440 75.447052 +v 31.479164 23.837315 5.672577 +v 27.472107 31.043159 16.379951 +v 27.856598 24.479954 23.221100 +v 31.539612 14.961576 14.125271 +v 31.809555 22.915539 15.737511 +v 17.589874 23.499542 5.400146 +v 17.969925 28.759914 4.426781 +v 22.234604 20.915165 0.545761 +v 15.201729 14.262592 2.659256 +v 18.110832 22.460533 3.890717 +v 11.403679 23.463638 56.407120 +v 5.840385 18.772903 67.138535 +v 12.399193 23.414204 73.722443 +v 8.867004 26.539543 65.366127 +v 15.218330 2.634305 23.432789 +v 19.458153 3.365287 31.589733 +v 15.777687 3.881259 39.705448 +v 12.768509 4.689522 31.557610 +v 15.959419 3.823488 31.789150 +v 23.039642 28.951302 20.350101 +v 19.574348 28.090042 28.139725 +v 21.846581 27.351551 36.433449 +v 24.334541 26.260170 29.286659 +v 22.097313 27.842987 28.774128 +v 31.912552 7.550955 24.072330 +v 30.122551 17.342224 33.965351 +v 29.810928 5.950792 40.081753 +v 27.311050 3.859531 32.209858 +v 32.363464 8.632770 34.470116 +v 12.234711 4.518570 49.518311 +v 6.451401 7.147105 53.610130 +v 7.413147 14.681606 46.028694 +v 9.033463 9.043234 38.256313 +v 9.095802 8.575033 48.810516 +v 25.974648 22.189091 56.136848 +v 25.590424 14.815680 46.916737 +v 25.306374 20.935421 37.357063 +v 23.789452 25.528114 45.275513 +v 24.808418 20.980412 46.349190 +v 13.276314 27.750301 28.358253 +v 14.673759 23.935574 21.823242 +v 3.943306 12.370473 28.177437 +v 10.048126 21.603687 37.693504 +v 10.852928 22.539772 28.219242 +v 23.461502 3.740105 40.246628 +v 26.141884 4.765614 49.038788 +v 23.734261 3.229912 58.926514 +v 19.548668 3.553915 49.795307 +v 23.320160 3.635651 49.641708 +v 24.463013 26.903149 64.735161 +v 22.532387 28.285686 56.197113 +v 22.597885 28.985470 64.949722 +v 23.129311 4.819835 75.506584 +v 22.963882 9.094871 76.756310 +v 16.262222 4.034920 9.190712 +v 13.286865 7.591927 3.648148 +v 16.722595 22.720222 76.432014 +v 27.072037 31.315285 5.045364 +v 28.274857 22.745003 0.735649 +v 26.843674 4.174131 16.353539 +v 24.209091 1.712145 24.095085 +v 20.050636 2.745851 15.578114 +v 23.546898 3.290960 16.508862 +v 17.681259 28.162022 12.039146 +v 18.855377 29.111702 21.075626 +v 22.323326 31.200943 12.063240 +v 19.609299 29.512600 10.976990 +v 15.702301 3.591285 49.457260 +v 15.560486 29.366051 36.641876 +v 12.007797 28.036377 44.845322 +v 18.920464 29.780621 45.413136 +v 15.285873 29.659046 45.057358 +v 27.734650 7.786117 47.312988 +v 9.191605 22.021347 46.160255 +v 4.200378 6.808543 66.328827 +v 25.665421 22.077251 65.283463 +v 23.496719 3.464715 68.433830 +v 22.139717 27.282917 44.610382 +v 11.404724 8.659485 30.385155 +v 26.342117 23.028721 31.265774 +v 16.133789 1.508559 16.019581 +v 24.644836 32.882534 15.338539 +v 28.620033 7.917432 15.382259 +v 18.799973 24.808048 11.838867 +v 23.626297 3.084857 32.008835 +v 16.787598 28.309212 27.815495 +v 8.687347 1.061541 73.618874 +v 12.193817 0.798807 67.875374 +v 15.328308 0.134577 73.156052 +v 12.576187 2.791372 77.494736 +v 11.972961 0.039628 73.245422 +v 12.418755 2.329678 62.570427 +v 14.480560 2.614575 59.219383 +v 15.320610 1.759243 61.632435 +v 14.000641 2.137263 62.414223 +v 18.267853 1.846122 58.613510 +v 20.297951 1.277396 62.797810 +v 18.035454 0.736100 66.665253 +v 18.411278 1.174384 63.077438 +v 20.184647 2.489912 74.210884 +v 17.958229 4.584287 78.178123 +v 18.501404 1.968657 74.311523 +v 14.934433 27.844967 72.354355 +v 16.421135 29.934200 68.887627 +v 15.527588 29.478249 65.089928 +v 14.243721 29.038429 68.691925 +v 15.213440 29.577782 68.754898 +v 18.057983 27.639702 72.959831 +v 19.361359 30.343693 68.913055 +v 18.200264 30.008427 64.814980 +v 17.866623 30.108807 68.766678 +v 20.152718 29.620132 61.229973 +v 17.919724 30.495720 57.238617 +v 16.780884 30.100407 60.590607 +v 18.638954 29.749050 61.269798 +v 14.436272 30.644035 55.385345 +v 13.785294 28.631706 60.236153 +v 15.041985 30.103439 60.196861 +v 15.235031 6.728900 79.001846 +v 13.583893 9.380521 78.159729 +v 10.227356 5.007848 76.876869 +v 13.251465 6.073111 78.205948 +v 19.816864 7.034686 79.014862 +v 17.277733 10.135752 78.839920 +v 17.776024 6.780044 79.409927 +v 19.161537 13.419832 77.979477 +v 18.421738 15.210965 77.525902 +v 16.292465 12.448843 77.757240 +v 18.098648 12.945756 77.813370 +v 14.116898 16.086025 78.712379 +v 10.429131 13.640389 77.691483 +v 14.141594 12.701919 78.168915 +v 27.474129 6.099147 57.433434 +v 27.908592 8.777473 61.945293 +v 30.037262 6.512059 67.197433 +v 26.580467 4.463449 62.987007 +v 27.147537 6.185444 62.632244 +v 28.072586 12.152845 56.458370 +v 32.623940 15.694418 61.889191 +v 33.495224 12.201788 67.252396 +v 32.481865 12.369489 61.840492 +v 27.942696 14.885083 70.553413 +v 25.444534 11.800812 73.942070 +v 29.121429 9.459013 71.060326 +v 29.434273 12.085711 70.753716 +v 25.500641 6.601608 74.702286 +v 26.074707 4.716556 71.906815 +v 26.588737 6.727613 71.240364 +v 19.501884 5.837556 6.319664 +v 21.303322 8.652122 5.044113 +v 23.187302 6.016799 7.243057 +v 21.279358 4.275463 8.489586 +v 21.321884 6.112332 7.046883 +v 19.200409 10.896809 3.436417 +v 22.747284 14.051261 2.011665 +v 23.419220 11.542579 3.587631 +v 21.613396 11.400952 3.400574 +v 26.240509 15.228005 3.248039 +v 27.069687 12.083729 6.935722 +v 25.229080 8.559299 6.374519 +v 25.930511 11.731457 5.003693 +v 26.472771 5.829838 9.164162 +v 24.962433 4.281317 9.486488 +v 25.040070 5.822873 7.310059 +v 13.929810 3.233536 12.432617 +v 13.673859 3.092610 17.263084 +v 12.570061 5.985778 11.196663 +v 13.191147 4.940425 9.425735 +v 13.373642 3.942545 11.977646 +v 12.911674 3.212046 20.243992 +v 11.828354 4.834682 22.536129 +v 12.065727 6.342120 20.526764 +v 12.262604 4.076044 20.403896 +v 8.766167 10.808355 19.498440 +v 12.570168 15.323546 17.067097 +v 13.525589 9.623419 15.140228 +v 11.100311 10.004714 18.278690 +v 11.727722 17.503004 6.960358 +v 6.515282 12.033779 3.775154 +v 7.489632 10.223117 7.485306 +v 23.507721 25.916538 72.191704 +v 22.306732 24.080383 74.209969 +v 23.768356 20.875381 74.523911 +v 24.434532 23.555801 72.140068 +v 23.451363 23.679852 73.624832 +v 21.054482 27.407555 72.921753 +v 19.199448 25.808033 74.871758 +v 21.408867 21.216702 75.815910 +v 20.976921 24.372684 74.643784 +v 20.260918 18.625778 76.795715 +v 21.073288 16.034599 77.222748 +v 22.689766 18.769905 75.954239 +v 21.403229 19.076038 76.481979 +v 24.062370 15.287668 75.429283 +v 25.071480 17.757835 73.499695 +v 23.749702 17.826954 75.063873 +v 29.925003 18.061111 6.693985 +v 33.002106 22.708748 11.692001 +v 31.870758 19.252632 15.136715 +v 29.988007 14.598258 9.123802 +v 31.163643 17.956663 10.544632 +v 30.946014 27.490337 6.116325 +v 29.466209 31.123135 11.636620 +v 29.980949 27.429745 16.379097 +v 31.548569 27.528629 11.189079 +v 26.245148 29.248192 17.934410 +v 26.358566 26.845066 21.509426 +v 29.628586 24.289959 18.887325 +v 27.448006 27.532455 17.903172 +v 30.075584 21.016197 23.392761 +v 32.396538 15.552122 19.047867 +v 31.362633 20.244518 18.550457 +v 16.502838 20.509136 5.644516 +v 17.792366 23.095539 4.315697 +v 18.191208 17.745960 2.922287 +v 12.971138 15.430882 3.342476 +v 17.210548 18.832375 3.827957 +v 16.960175 26.625084 5.777061 +v 17.256401 28.336685 5.598816 +v 17.574806 25.772060 3.718506 +v 17.126793 26.073154 4.237877 +v 19.311966 29.676132 3.363617 +v 20.214081 26.708706 0.732834 +v 19.481812 21.653839 2.386101 +v 18.109772 25.970398 2.930809 +v 22.780624 16.399160 0.977013 +v 17.913857 14.167571 2.240265 +v 20.461174 16.913525 1.526611 +v 12.717567 27.604084 65.115067 +v 11.042320 24.091335 70.888504 +v 12.720558 25.736000 73.210411 +v 12.450378 26.778088 69.578720 +v 13.086716 26.143536 55.687000 +v 10.291580 25.793324 60.281673 +v 12.207817 27.347454 60.254868 +v 7.510078 20.000191 55.170776 +v 4.894585 16.547237 59.919559 +v 7.700401 23.874432 67.195992 +v 6.861946 23.999310 60.322868 +v 7.527367 19.533356 72.336472 +v 11.117989 21.315544 74.477646 +v 9.192215 22.146851 72.011833 +v 13.275925 2.718376 23.489925 +v 15.760437 3.674739 27.966373 +v 14.025566 3.694034 31.583733 +v 12.204773 4.165999 27.590378 +v 13.583794 3.470996 28.007957 +v 18.451248 3.074749 22.630054 +v 19.707489 3.030662 28.243290 +v 17.779587 3.583831 31.822098 +v 17.856949 3.800948 27.758942 +v 19.764778 3.427833 35.461426 +v 17.744995 3.913858 39.732700 +v 15.944351 3.511052 35.318546 +v 17.832565 3.463599 35.364296 +v 13.699219 3.877146 39.807285 +v 12.514107 4.606030 34.626343 +v 13.952988 3.720994 34.992226 +v 24.215950 29.010895 20.702816 +v 22.065994 28.026478 25.359875 +v 23.338310 27.209393 28.968487 +v 24.671806 27.064064 25.714291 +v 23.510231 28.289078 25.689541 +v 21.903625 28.926380 20.271923 +v 19.520111 28.113178 24.723862 +v 20.854858 27.892689 28.354588 +v 20.784904 28.086262 24.814304 +v 19.563728 28.332886 32.614300 +v 20.799141 27.775120 36.358135 +v 22.093147 27.563961 32.525459 +v 20.830986 27.948479 32.679581 +v 22.954689 26.755474 36.406731 +v 24.046768 25.766640 32.922047 +v 23.168045 26.733467 32.694889 +v 29.759361 4.676310 24.377651 +v 33.186508 7.430905 29.950993 +v 28.272705 5.782715 32.023087 +v 27.994682 3.544721 26.703617 +v 29.434258 5.160678 27.252964 +v 32.394943 11.216291 23.824417 +v 30.124519 16.919441 29.050930 +v 35.765671 12.000343 37.166973 +v 36.432693 11.278539 33.238468 +v 30.876717 14.704908 38.541286 +v 30.076790 10.027985 40.940746 +v 28.974350 8.538781 37.249527 +v 30.639877 11.224607 38.576820 +v 26.751060 6.473806 39.734272 +v 26.817833 4.475046 36.407482 +v 27.420700 6.362393 36.321129 +v 12.547157 4.840781 43.748886 +v 10.633354 5.853485 49.025875 +v 7.547943 8.565282 42.250034 +v 10.742470 6.261054 39.147388 +v 10.107849 5.925871 42.860470 +v 12.937523 4.684091 54.429634 +v 10.972427 5.262470 57.906574 +v 9.360268 7.957158 51.569008 +v 12.269920 5.872993 53.624226 +v 1.326416 10.005098 50.666061 +v 4.211334 13.854393 49.241924 +v 6.235634 11.456203 46.527748 +v 7.069893 10.900805 49.792694 +v 8.130783 15.497753 40.971939 +v 9.489250 12.385770 38.379910 +v 6.666901 11.941430 41.532047 +v 25.416496 24.547325 55.915215 +v 25.609200 21.460026 51.210083 +v 24.516716 23.560543 45.540359 +v 24.060654 26.199478 50.108269 +v 24.904655 24.130337 50.403496 +v 26.791336 19.309965 56.702892 +v 26.691216 15.019381 51.271393 +v 25.097977 17.976433 46.785763 +v 26.010597 18.518486 51.206085 +v 25.425735 14.745813 41.774185 +v 25.365120 17.965321 37.742466 +v 24.929634 20.709743 41.200302 +v 25.230103 17.686485 41.512638 +v 24.725594 23.698502 37.025131 +v 23.772781 25.332432 40.071426 +v 24.631683 23.499382 40.582867 +v 12.647995 27.442394 33.141987 +v 12.020203 25.976654 28.292500 +v 10.234032 21.530193 34.439308 +v 10.715446 24.696373 37.389317 +v 11.306389 24.833271 33.903316 +v 14.665314 27.585148 24.421978 +v 15.678932 26.632130 21.651478 +v 12.805855 23.258862 24.645683 +v 13.774094 25.904491 24.573612 +v 12.210518 20.727718 22.451218 +v 6.807091 14.835268 24.335052 +v 9.783043 17.845818 27.863987 +v 11.293648 19.831797 24.628006 +v 9.975830 14.135681 33.898365 +v 9.328117 18.459152 37.839317 +v 9.029480 17.995697 34.797623 +v 21.631783 3.558312 40.341621 +v 23.415550 3.822780 44.424252 +v 21.403847 3.804365 49.547527 +v 19.620178 3.880829 44.468258 +v 21.538658 3.750837 44.571888 +v 25.200371 3.903487 40.189774 +v 29.046745 1.429443 44.014320 +v 25.022018 3.886162 49.434792 +v 26.605377 2.181525 44.362030 +v 26.376007 4.550724 53.882187 +v 25.319099 3.658808 58.620934 +v 23.655418 3.319706 54.198833 +v 25.282570 3.684282 54.096775 +v 22.042480 2.765332 59.094170 +v 19.960411 2.362170 54.101902 +v 21.901436 2.730299 54.023125 +v 25.116028 26.653660 68.464767 +v 23.702049 28.302959 64.741470 +v 22.778923 27.879734 69.274666 +v 23.970741 27.395493 68.763756 +v 24.728477 26.936707 60.206276 +v 23.740471 27.793468 55.714867 +v 22.752586 28.512115 61.156006 +v 23.887375 27.991077 60.620094 +v 21.302399 29.748909 57.224998 +v 21.078674 30.180092 64.576019 +v 21.496887 28.967987 61.235626 +v 21.507454 28.970249 69.622955 +v 21.466431 4.744220 75.941170 +v 22.864861 6.708758 76.401810 +v 21.667549 9.672187 78.184570 +v 21.432991 6.930805 77.489235 +v 24.847137 4.700446 75.293144 +v 24.162361 8.942734 75.797539 +v 24.575226 6.596570 76.130203 +v 22.940834 12.271477 76.978622 +v 24.061409 11.446381 75.800087 +v 21.375328 12.789646 77.591682 +v 10.014542 7.701732 4.371262 +v 15.875572 5.599068 6.753166 +v 14.656479 3.936407 9.948685 +v 14.172440 5.382139 8.020149 +v 13.439156 11.449614 2.520622 +v 10.282112 11.704071 3.237343 +v 15.980972 8.182797 4.200600 +v 16.015190 11.626940 3.098946 +v 17.960205 4.211277 8.964371 +v 17.538406 5.721549 6.526520 +v 16.522346 25.655399 74.819221 +v 18.409042 22.487556 76.703476 +v 17.806786 25.761768 74.995987 +v 14.356529 22.351723 76.147217 +v 14.830063 25.823402 74.251305 +v 16.783401 18.845781 78.058495 +v 14.386345 19.505959 77.495293 +v 19.072693 18.084435 77.189407 +v 30.159355 23.603016 2.460869 +v 27.536407 27.809181 1.840935 +v 28.601250 30.620232 5.987221 +v 28.840446 27.661934 3.432220 +v 25.294647 17.860853 1.754463 +v 27.648010 18.405827 3.233940 +v 25.268799 21.898411 -0.000000 +v 23.994080 16.934151 1.343895 +v 24.181625 31.341728 3.888008 +v 24.681259 27.597366 0.692909 +v 26.478302 4.199355 12.743988 +v 25.241608 3.585152 16.655064 +v 23.425247 3.392047 12.270378 +v 25.119614 3.382558 12.337616 +v 27.571640 3.476514 20.180592 +v 26.661980 2.118502 24.368057 +v 23.495583 3.501327 19.872074 +v 25.884232 3.033451 20.178078 +v 22.081047 2.707467 23.252922 +v 20.103081 3.367465 19.427521 +v 21.741707 3.240661 16.200668 +v 21.796875 3.529999 19.638935 +v 19.694237 3.032836 11.641121 +v 21.566673 3.601834 12.089684 +v 17.162720 28.706364 8.285240 +v 18.790855 29.233654 11.509880 +v 19.183937 29.282330 7.627937 +v 18.283203 29.111549 7.994820 +v 17.787575 28.992142 16.178970 +v 17.734673 29.188793 21.213913 +v 18.638565 29.751106 15.379517 +v 18.099876 29.543652 15.721462 +v 19.822670 28.806828 20.827305 +v 21.063622 30.467159 16.866043 +v 20.845032 30.156281 10.976723 +v 19.447014 30.366646 15.388779 +v 22.142090 31.973980 7.237633 +v 20.643997 30.836926 7.234001 +v 13.435066 3.500283 49.669346 +v 15.784081 2.822500 54.423241 +v 14.065849 3.356556 54.204788 +v 15.772896 3.973121 44.213043 +v 13.831123 3.916277 44.169575 +v 17.716431 3.683755 49.521526 +v 17.697098 4.019441 44.310570 +v 18.119133 2.893737 54.167995 +v 17.996040 28.864296 36.718327 +v 15.188591 28.682373 41.630745 +v 17.256424 29.598549 45.220047 +v 19.142265 29.398941 40.293190 +v 17.545647 29.660934 41.616238 +v 13.880516 28.441345 36.877632 +v 12.148407 26.985428 41.346909 +v 13.370392 29.390697 45.233364 +v 13.664223 28.077240 41.455856 +v 12.073288 29.407185 50.659321 +v 15.807533 31.528946 51.037811 +v 13.759956 30.887718 50.547073 +v 19.632813 29.774128 51.050781 +v 17.791901 30.950447 50.622353 +v 29.076469 5.699552 42.907970 +v 27.419327 5.569170 48.259689 +v 29.809494 2.653201 43.528309 +v 26.320930 11.529284 47.095600 +v 27.161209 10.311852 42.228996 +v 26.986015 8.684406 52.332253 +v 26.869469 11.925539 51.314228 +v 26.839684 6.331333 53.271790 +v 10.305870 25.469528 44.937523 +v 8.819511 22.983624 52.231209 +v 9.720604 26.847488 50.961926 +v 9.948647 21.940403 41.426876 +v 10.967079 25.010887 41.330254 +v 7.504204 17.658720 45.709126 +v 10.327744 18.159378 40.686005 +v 2.732452 17.400024 49.076660 +v 6.241867 3.197488 67.821953 +v 6.605446 6.438631 60.837906 +v 9.437279 3.226511 61.686737 +v 3.636765 8.534374 73.111679 +v 6.792236 3.595782 74.016121 +v 2.964294 12.511506 65.418488 +v 5.367043 15.346114 72.686386 +v 4.876678 10.715313 58.626675 +v 25.871910 21.644817 69.264481 +v 25.316360 24.784786 64.963562 +v 25.504341 24.282383 68.761612 +v 28.630348 18.986767 66.316071 +v 25.850456 18.140827 70.181503 +v 25.739479 22.144936 61.043407 +v 27.313019 19.350822 61.460819 +v 25.232376 24.806725 60.551899 +v 23.241814 3.794928 72.974876 +v 25.271484 3.770545 67.794563 +v 25.088524 3.841344 72.605721 +v 21.814613 2.858948 68.673355 +v 21.715416 3.405887 73.485703 +v 23.930176 3.324930 63.118103 +v 22.131508 2.520736 63.445480 +v 25.424339 3.671015 63.075748 +v 23.053467 26.567703 44.699554 +v 22.158485 27.842678 50.198425 +v 23.102455 27.172470 49.935566 +v 21.622772 27.122524 39.521427 +v 22.827301 26.346703 39.825394 +v 20.431351 29.446716 44.489975 +v 20.427643 28.252808 39.298763 +v 21.187820 28.440945 50.640999 +v 11.810448 6.174037 31.152855 +v 5.001137 6.415446 25.543198 +v 7.437958 4.569753 26.672703 +v 11.555138 8.560978 33.369148 +v 11.637070 6.452154 34.344700 +v 5.993156 9.571948 29.083580 +v 9.806953 11.433521 33.919239 +v 5.234131 10.071053 24.000759 +v 25.449150 21.670719 34.407806 +v 25.256256 24.829914 30.019558 +v 24.770668 24.030228 33.513008 +v 27.525192 20.452225 32.634815 +v 26.074051 18.722509 35.224380 +v 26.860542 23.692940 27.368633 +v 28.619659 21.112461 28.550369 +v 25.420654 25.567047 26.232838 +v 16.313408 2.723460 12.091087 +v 14.847916 1.505165 16.677750 +v 14.782211 2.828898 12.409698 +v 17.797974 1.831486 15.349735 +v 18.020187 2.901748 11.755707 +v 14.769836 1.698421 19.052963 +v 18.130211 2.957253 19.082443 +v 13.986755 2.658447 19.873951 +v 26.195015 33.206352 10.258873 +v 25.703468 32.210819 15.952381 +v 27.969620 32.676998 11.361061 +v 23.480042 32.744244 14.446686 +v 23.908157 33.105484 8.670471 +v 24.315102 30.780598 17.492523 +v 22.869164 30.783638 17.328629 +v 25.341438 30.370014 17.605953 +v 28.361885 8.595835 11.115082 +v 28.058014 5.306046 15.815338 +v 27.700775 5.694938 12.470627 +v 30.658943 11.231362 14.731789 +v 28.636955 11.467695 9.723900 +v 30.896149 7.809909 18.813721 +v 32.515457 11.712360 19.183296 +v 28.677475 5.196043 20.048038 +v 17.177826 26.387135 12.102699 +v 18.037201 24.010254 16.931881 +v 17.751350 26.848919 16.663246 +v 17.712036 24.102974 8.238731 +v 17.233414 26.303776 8.531693 +v 18.787819 21.676617 12.303520 +v 17.576065 21.671955 8.447777 +v 16.399200 21.161289 16.828442 +v 25.525246 3.351839 32.011219 +v 24.553543 2.020565 27.074570 +v 26.685814 2.436259 26.722649 +v 23.674889 3.485218 36.155518 +v 25.535400 3.624785 36.442394 +v 21.456573 3.077783 31.866707 +v 21.621613 3.838719 35.537998 +v 21.826157 2.808885 28.153286 +v 14.958405 28.361450 28.078831 +v 17.243980 29.048515 23.303162 +v 15.791183 28.683571 24.006252 +v 16.303055 28.123219 32.992226 +v 14.327187 28.383942 33.235371 +v 18.167717 28.417709 27.639179 +v 17.994003 28.336136 32.736946 +v 18.661324 28.724430 24.059200 +# 642 vertices + +vt 0.863650 0.122230 0.000000 +vt 0.850620 0.122450 0.000000 +vt 0.851270 0.116860 0.000000 +vt 0.864390 0.116730 0.000000 +vt 0.837590 0.122670 0.000000 +vt 0.838150 0.116980 0.000000 +vt 0.838710 0.111290 0.000000 +vt 0.851930 0.111260 0.000000 +vt 0.865140 0.111240 0.000000 +vt 0.824570 0.122880 0.000000 +vt 0.825030 0.117100 0.000000 +vt 0.811540 0.123100 0.000000 +vt 0.811910 0.117220 0.000000 +vt 0.812290 0.111340 0.000000 +vt 0.825500 0.111310 0.000000 +vt 0.825970 0.105530 0.000000 +vt 0.839270 0.105600 0.000000 +vt 0.812670 0.105460 0.000000 +vt 0.813040 0.099570 0.000000 +vt 0.826440 0.099740 0.000000 +vt 0.839830 0.099910 0.000000 +vt 0.852580 0.105670 0.000000 +vt 0.865880 0.105740 0.000000 +vt 0.853230 0.100070 0.000000 +vt 0.866620 0.100240 0.000000 +vt 0.846340 0.216310 0.000000 +vt 0.847090 0.220050 0.000000 +vt 0.834680 0.220100 0.000000 +vt 0.834010 0.216300 0.000000 +vt 0.847850 0.223790 0.000000 +vt 0.835350 0.223910 0.000000 +vt 0.822850 0.224020 0.000000 +vt 0.822270 0.220160 0.000000 +vt 0.821690 0.216290 0.000000 +vt 0.848600 0.227530 0.000000 +vt 0.836020 0.227710 0.000000 +vt 0.849360 0.231270 0.000000 +vt 0.836690 0.231520 0.000000 +vt 0.824020 0.231760 0.000000 +vt 0.823440 0.227890 0.000000 +vt 0.810850 0.228070 0.000000 +vt 0.810360 0.224140 0.000000 +vt 0.811350 0.232000 0.000000 +vt 0.798680 0.232250 0.000000 +vt 0.798270 0.228250 0.000000 +vt 0.797860 0.224260 0.000000 +vt 0.809860 0.220210 0.000000 +vt 0.809360 0.216280 0.000000 +vt 0.797450 0.220260 0.000000 +vt 0.797040 0.216270 0.000000 +vt 0.868980 0.123630 0.000000 +vt 0.866610 0.135350 0.000000 +vt 0.861520 0.134020 0.000000 +vt 0.874310 0.125020 0.000000 +vt 0.871700 0.136670 0.000000 +vt 0.869090 0.148330 0.000000 +vt 0.864240 0.147070 0.000000 +vt 0.859390 0.145810 0.000000 +vt 0.879650 0.126410 0.000000 +vt 0.876790 0.138000 0.000000 +vt 0.884980 0.127800 0.000000 +vt 0.881880 0.139320 0.000000 +vt 0.878790 0.150840 0.000000 +vt 0.873940 0.149590 0.000000 +vt 0.871090 0.161180 0.000000 +vt 0.866480 0.159980 0.000000 +vt 0.875700 0.162370 0.000000 +vt 0.872600 0.173890 0.000000 +vt 0.868240 0.172760 0.000000 +vt 0.863870 0.171640 0.000000 +vt 0.861870 0.158790 0.000000 +vt 0.857260 0.157600 0.000000 +vt 0.859500 0.170520 0.000000 +vt 0.855130 0.169390 0.000000 +vt 0.812220 0.341300 0.000000 +vt 0.810350 0.329550 0.000000 +vt 0.823340 0.329540 0.000000 +vt 0.825310 0.341290 0.000000 +vt 0.808480 0.317790 0.000000 +vt 0.821380 0.317780 0.000000 +vt 0.834280 0.317770 0.000000 +vt 0.836340 0.329530 0.000000 +vt 0.838400 0.341280 0.000000 +vt 0.806620 0.306040 0.000000 +vt 0.819420 0.306030 0.000000 +vt 0.804750 0.294290 0.000000 +vt 0.817450 0.294280 0.000000 +vt 0.830150 0.294270 0.000000 +vt 0.832210 0.306020 0.000000 +vt 0.845010 0.306010 0.000000 +vt 0.847170 0.317770 0.000000 +vt 0.842860 0.294260 0.000000 +vt 0.855560 0.294250 0.000000 +vt 0.857810 0.306000 0.000000 +vt 0.860070 0.317760 0.000000 +vt 0.849330 0.329520 0.000000 +vt 0.851490 0.341270 0.000000 +vt 0.862320 0.329510 0.000000 +vt 0.864580 0.341260 0.000000 +vt 0.649760 0.122030 0.000000 +vt 0.650040 0.133760 0.000000 +vt 0.644740 0.133730 0.000000 +vt 0.644250 0.121990 0.000000 +vt 0.650310 0.145490 0.000000 +vt 0.645240 0.145460 0.000000 +vt 0.640160 0.145440 0.000000 +vt 0.639450 0.133690 0.000000 +vt 0.638730 0.121950 0.000000 +vt 0.650590 0.157220 0.000000 +vt 0.645740 0.157200 0.000000 +vt 0.650870 0.168960 0.000000 +vt 0.646230 0.168940 0.000000 +vt 0.641600 0.168930 0.000000 +vt 0.640880 0.157180 0.000000 +vt 0.636020 0.157160 0.000000 +vt 0.635090 0.145410 0.000000 +vt 0.636960 0.168910 0.000000 +vt 0.632320 0.168900 0.000000 +vt 0.631170 0.157140 0.000000 +vt 0.630010 0.145380 0.000000 +vt 0.634150 0.133660 0.000000 +vt 0.633220 0.121910 0.000000 +vt 0.628860 0.133630 0.000000 +vt 0.627700 0.121870 0.000000 +vt 0.671810 0.122860 0.000000 +vt 0.682810 0.122940 0.000000 +vt 0.682050 0.134630 0.000000 +vt 0.671170 0.134590 0.000000 +vt 0.693810 0.123010 0.000000 +vt 0.692940 0.134680 0.000000 +vt 0.692060 0.146340 0.000000 +vt 0.681300 0.146330 0.000000 +vt 0.670530 0.146310 0.000000 +vt 0.704810 0.123090 0.000000 +vt 0.703820 0.134720 0.000000 +vt 0.715800 0.123170 0.000000 +vt 0.714700 0.134770 0.000000 +vt 0.713600 0.146370 0.000000 +vt 0.702830 0.146360 0.000000 +vt 0.701840 0.157990 0.000000 +vt 0.691190 0.158010 0.000000 +vt 0.712500 0.157970 0.000000 +vt 0.711390 0.169580 0.000000 +vt 0.700860 0.169620 0.000000 +vt 0.690320 0.169670 0.000000 +vt 0.680540 0.158020 0.000000 +vt 0.669890 0.158040 0.000000 +vt 0.679780 0.169720 0.000000 +vt 0.669250 0.169770 0.000000 +vt 0.874650 0.222190 0.000000 +vt 0.871080 0.221620 0.000000 +vt 0.874800 0.210280 0.000000 +vt 0.878600 0.210910 0.000000 +vt 0.867500 0.221040 0.000000 +vt 0.871010 0.209650 0.000000 +vt 0.874510 0.198260 0.000000 +vt 0.878530 0.198940 0.000000 +vt 0.882550 0.199630 0.000000 +vt 0.863930 0.220470 0.000000 +vt 0.867210 0.209020 0.000000 +vt 0.860350 0.219890 0.000000 +vt 0.863410 0.208390 0.000000 +vt 0.866480 0.196890 0.000000 +vt 0.870490 0.197570 0.000000 +vt 0.873780 0.186130 0.000000 +vt 0.878020 0.186870 0.000000 +vt 0.869540 0.185390 0.000000 +vt 0.877060 0.174680 0.000000 +vt 0.881520 0.175470 0.000000 +vt 0.882250 0.187610 0.000000 +vt 0.886490 0.188340 0.000000 +vt 0.885980 0.176270 0.000000 +vt 0.890440 0.177060 0.000000 +vt 0.669170 0.294780 0.000000 +vt 0.668460 0.282780 0.000000 +vt 0.678960 0.282780 0.000000 +vt 0.679760 0.294720 0.000000 +vt 0.667750 0.270780 0.000000 +vt 0.678150 0.270850 0.000000 +vt 0.688550 0.270910 0.000000 +vt 0.689460 0.282790 0.000000 +vt 0.690360 0.294660 0.000000 +vt 0.667040 0.258790 0.000000 +vt 0.677350 0.258910 0.000000 +vt 0.666340 0.246790 0.000000 +vt 0.676540 0.246980 0.000000 +vt 0.686740 0.247160 0.000000 +vt 0.687650 0.259040 0.000000 +vt 0.697950 0.259160 0.000000 +vt 0.698950 0.270970 0.000000 +vt 0.696940 0.247340 0.000000 +vt 0.707150 0.247530 0.000000 +vt 0.708250 0.259280 0.000000 +vt 0.709350 0.271040 0.000000 +vt 0.699950 0.282790 0.000000 +vt 0.700960 0.294610 0.000000 +vt 0.710450 0.282790 0.000000 +vt 0.711550 0.294550 0.000000 +vt 0.668690 0.181500 0.000000 +vt 0.664300 0.181290 0.000000 +vt 0.664650 0.169560 0.000000 +vt 0.668130 0.193220 0.000000 +vt 0.663950 0.193020 0.000000 +vt 0.659770 0.192820 0.000000 +vt 0.659920 0.181090 0.000000 +vt 0.660060 0.169360 0.000000 +vt 0.667570 0.204950 0.000000 +vt 0.663600 0.204750 0.000000 +vt 0.667010 0.216680 0.000000 +vt 0.663250 0.216480 0.000000 +vt 0.659490 0.216280 0.000000 +vt 0.659630 0.204550 0.000000 +vt 0.655670 0.204350 0.000000 +vt 0.655600 0.192620 0.000000 +vt 0.655730 0.216080 0.000000 +vt 0.651980 0.215880 0.000000 +vt 0.651700 0.204150 0.000000 +vt 0.651420 0.192420 0.000000 +vt 0.655530 0.180890 0.000000 +vt 0.655460 0.169160 0.000000 +vt 0.651150 0.180690 0.000000 +vt 0.836130 0.204590 0.000000 +vt 0.848540 0.204580 0.000000 +vt 0.823720 0.204600 0.000000 +vt 0.825760 0.192910 0.000000 +vt 0.838250 0.192880 0.000000 +vt 0.850740 0.192850 0.000000 +vt 0.811320 0.204610 0.000000 +vt 0.798910 0.204620 0.000000 +vt 0.800780 0.192970 0.000000 +vt 0.813270 0.192940 0.000000 +vt 0.815220 0.181270 0.000000 +vt 0.827790 0.181220 0.000000 +vt 0.802640 0.181320 0.000000 +vt 0.804510 0.169670 0.000000 +vt 0.817170 0.169600 0.000000 +vt 0.829820 0.169530 0.000000 +vt 0.840360 0.181170 0.000000 +vt 0.852930 0.181120 0.000000 +vt 0.842480 0.169460 0.000000 +vt 0.715150 0.117390 0.000000 +vt 0.726230 0.117480 0.000000 +vt 0.726740 0.123350 0.000000 +vt 0.714490 0.111610 0.000000 +vt 0.725730 0.111610 0.000000 +vt 0.736970 0.111610 0.000000 +vt 0.737320 0.117580 0.000000 +vt 0.737670 0.123540 0.000000 +vt 0.713840 0.105830 0.000000 +vt 0.725230 0.105740 0.000000 +vt 0.713190 0.100050 0.000000 +vt 0.724730 0.099860 0.000000 +vt 0.736270 0.099680 0.000000 +vt 0.736620 0.105640 0.000000 +vt 0.748010 0.105550 0.000000 +vt 0.748200 0.111610 0.000000 +vt 0.747810 0.099490 0.000000 +vt 0.759360 0.099300 0.000000 +vt 0.759400 0.105460 0.000000 +vt 0.759440 0.111610 0.000000 +vt 0.748400 0.117670 0.000000 +vt 0.748600 0.123730 0.000000 +vt 0.759480 0.117770 0.000000 +vt 0.759530 0.123920 0.000000 +vt 0.706630 0.243710 0.000000 +vt 0.716980 0.243830 0.000000 +vt 0.717370 0.247640 0.000000 +vt 0.706110 0.239890 0.000000 +vt 0.716580 0.240020 0.000000 +vt 0.727060 0.240160 0.000000 +vt 0.727320 0.243960 0.000000 +vt 0.727580 0.247760 0.000000 +vt 0.705590 0.236060 0.000000 +vt 0.716190 0.236210 0.000000 +vt 0.705060 0.232240 0.000000 +vt 0.715800 0.232400 0.000000 +vt 0.726540 0.232560 0.000000 +vt 0.726800 0.236360 0.000000 +vt 0.737410 0.236510 0.000000 +vt 0.737540 0.240300 0.000000 +vt 0.737280 0.232720 0.000000 +vt 0.748020 0.232880 0.000000 +vt 0.748020 0.236660 0.000000 +vt 0.748020 0.240440 0.000000 +vt 0.737670 0.244090 0.000000 +vt 0.737800 0.247870 0.000000 +vt 0.748020 0.244210 0.000000 +vt 0.748020 0.247990 0.000000 +vt 0.715920 0.341570 0.000000 +vt 0.714830 0.329820 0.000000 +vt 0.725720 0.329760 0.000000 +vt 0.726910 0.341510 0.000000 +vt 0.713740 0.318060 0.000000 +vt 0.724530 0.318000 0.000000 +vt 0.735320 0.317940 0.000000 +vt 0.736600 0.329700 0.000000 +vt 0.737890 0.341450 0.000000 +vt 0.712650 0.306300 0.000000 +vt 0.723340 0.306250 0.000000 +vt 0.722150 0.294490 0.000000 +vt 0.732740 0.294430 0.000000 +vt 0.734030 0.306190 0.000000 +vt 0.744720 0.306130 0.000000 +vt 0.746110 0.317890 0.000000 +vt 0.743340 0.294380 0.000000 +vt 0.753940 0.294320 0.000000 +vt 0.755420 0.306080 0.000000 +vt 0.756900 0.317830 0.000000 +vt 0.747490 0.329640 0.000000 +vt 0.748880 0.341400 0.000000 +vt 0.758380 0.329580 0.000000 +vt 0.759860 0.341340 0.000000 +vt 0.772530 0.123710 0.000000 +vt 0.771010 0.135200 0.000000 +vt 0.758090 0.135350 0.000000 +vt 0.785530 0.123510 0.000000 +vt 0.783940 0.135040 0.000000 +vt 0.782340 0.146580 0.000000 +vt 0.769500 0.146680 0.000000 +vt 0.756650 0.146780 0.000000 +vt 0.798540 0.123300 0.000000 +vt 0.796860 0.134890 0.000000 +vt 0.809780 0.134740 0.000000 +vt 0.808030 0.146380 0.000000 +vt 0.795180 0.146480 0.000000 +vt 0.793510 0.158070 0.000000 +vt 0.780740 0.158120 0.000000 +vt 0.806270 0.158030 0.000000 +vt 0.791830 0.169660 0.000000 +vt 0.779140 0.169650 0.000000 +vt 0.767980 0.158160 0.000000 +vt 0.755210 0.158210 0.000000 +vt 0.766460 0.169650 0.000000 +vt 0.753780 0.169640 0.000000 +vt 0.797310 0.247270 0.000000 +vt 0.799170 0.259030 0.000000 +vt 0.786750 0.259160 0.000000 +vt 0.784990 0.247450 0.000000 +vt 0.801030 0.270780 0.000000 +vt 0.788520 0.270870 0.000000 +vt 0.776010 0.270970 0.000000 +vt 0.774340 0.259300 0.000000 +vt 0.772670 0.247630 0.000000 +vt 0.802890 0.282530 0.000000 +vt 0.790280 0.282580 0.000000 +vt 0.792050 0.294300 0.000000 +vt 0.779340 0.294300 0.000000 +vt 0.777670 0.282640 0.000000 +vt 0.765070 0.282690 0.000000 +vt 0.763490 0.271060 0.000000 +vt 0.766640 0.294310 0.000000 +vt 0.752460 0.282740 0.000000 +vt 0.750980 0.271150 0.000000 +vt 0.761920 0.259440 0.000000 +vt 0.760350 0.247810 0.000000 +vt 0.749500 0.259570 0.000000 +vt 0.748060 0.215490 0.000000 +vt 0.737940 0.215650 0.000000 +vt 0.739250 0.204140 0.000000 +vt 0.749490 0.204020 0.000000 +vt 0.727830 0.215800 0.000000 +vt 0.729020 0.204260 0.000000 +vt 0.730210 0.192710 0.000000 +vt 0.740560 0.192630 0.000000 +vt 0.750920 0.192560 0.000000 +vt 0.717710 0.215960 0.000000 +vt 0.718780 0.204370 0.000000 +vt 0.707590 0.216120 0.000000 +vt 0.708540 0.204490 0.000000 +vt 0.709490 0.192850 0.000000 +vt 0.719850 0.192780 0.000000 +vt 0.720920 0.181180 0.000000 +vt 0.731400 0.181160 0.000000 +vt 0.710440 0.181210 0.000000 +vt 0.721990 0.169590 0.000000 +vt 0.732580 0.169610 0.000000 +vt 0.741870 0.181130 0.000000 +vt 0.752350 0.181100 0.000000 +vt 0.743180 0.169620 0.000000 +vt 0.759300 0.093540 0.000000 +vt 0.772650 0.093640 0.000000 +vt 0.772780 0.099370 0.000000 +vt 0.759250 0.087780 0.000000 +vt 0.772520 0.087920 0.000000 +vt 0.785790 0.088060 0.000000 +vt 0.786000 0.093750 0.000000 +vt 0.786200 0.099440 0.000000 +vt 0.759200 0.082020 0.000000 +vt 0.772400 0.082190 0.000000 +vt 0.759150 0.076250 0.000000 +vt 0.772270 0.076470 0.000000 +vt 0.785390 0.076680 0.000000 +vt 0.785590 0.082370 0.000000 +vt 0.798780 0.082550 0.000000 +vt 0.799060 0.088200 0.000000 +vt 0.798510 0.076890 0.000000 +vt 0.811620 0.077100 0.000000 +vt 0.811980 0.082720 0.000000 +vt 0.812330 0.088340 0.000000 +vt 0.799340 0.093850 0.000000 +vt 0.799620 0.099510 0.000000 +vt 0.812690 0.093960 0.000000 +vt 0.846550 0.246560 0.000000 +vt 0.834240 0.246740 0.000000 +vt 0.834850 0.242930 0.000000 +vt 0.847250 0.242740 0.000000 +vt 0.821930 0.246920 0.000000 +vt 0.822450 0.243130 0.000000 +vt 0.822970 0.239340 0.000000 +vt 0.835470 0.239130 0.000000 +vt 0.847960 0.238920 0.000000 +vt 0.809620 0.247090 0.000000 +vt 0.810050 0.243320 0.000000 +vt 0.797650 0.243520 0.000000 +vt 0.797990 0.239760 0.000000 +vt 0.810480 0.239550 0.000000 +vt 0.810920 0.235780 0.000000 +vt 0.823500 0.235550 0.000000 +vt 0.798330 0.236000 0.000000 +vt 0.836080 0.235320 0.000000 +vt 0.848660 0.235090 0.000000 +vt 0.890360 0.128850 0.000000 +vt 0.887030 0.140310 0.000000 +vt 0.895740 0.129910 0.000000 +vt 0.892180 0.141300 0.000000 +vt 0.888630 0.152690 0.000000 +vt 0.883710 0.151770 0.000000 +vt 0.901120 0.130960 0.000000 +vt 0.897330 0.142290 0.000000 +vt 0.906500 0.132010 0.000000 +vt 0.902480 0.143270 0.000000 +vt 0.898470 0.154540 0.000000 +vt 0.893550 0.153610 0.000000 +vt 0.889760 0.164940 0.000000 +vt 0.885070 0.164080 0.000000 +vt 0.894450 0.165800 0.000000 +vt 0.880390 0.163220 0.000000 +vt 0.665890 0.134380 0.000000 +vt 0.666300 0.122650 0.000000 +vt 0.665470 0.146110 0.000000 +vt 0.660420 0.145900 0.000000 +vt 0.660600 0.134170 0.000000 +vt 0.660780 0.122440 0.000000 +vt 0.665060 0.157840 0.000000 +vt 0.660240 0.157630 0.000000 +vt 0.655420 0.157430 0.000000 +vt 0.655370 0.145700 0.000000 +vt 0.655320 0.133970 0.000000 +vt 0.655270 0.122230 0.000000 +vt 0.856850 0.219000 0.000000 +vt 0.859700 0.207440 0.000000 +vt 0.853350 0.218100 0.000000 +vt 0.855980 0.206490 0.000000 +vt 0.858610 0.194870 0.000000 +vt 0.862540 0.195880 0.000000 +vt 0.849840 0.217210 0.000000 +vt 0.852260 0.205530 0.000000 +vt 0.854670 0.193860 0.000000 +vt 0.857090 0.182190 0.000000 +vt 0.861240 0.183260 0.000000 +vt 0.865390 0.184320 0.000000 +vt 0.636920 0.215930 0.000000 +vt 0.635770 0.204170 0.000000 +vt 0.639750 0.204160 0.000000 +vt 0.640680 0.215910 0.000000 +vt 0.634620 0.192410 0.000000 +vt 0.638820 0.192410 0.000000 +vt 0.643020 0.192420 0.000000 +vt 0.643730 0.204160 0.000000 +vt 0.644450 0.215900 0.000000 +vt 0.633470 0.180660 0.000000 +vt 0.637890 0.180660 0.000000 +vt 0.642310 0.180670 0.000000 +vt 0.646730 0.180680 0.000000 +vt 0.647220 0.192420 0.000000 +vt 0.647720 0.204160 0.000000 +vt 0.648210 0.215890 0.000000 +vt 0.671250 0.079310 0.000000 +vt 0.682220 0.078920 0.000000 +vt 0.681310 0.084380 0.000000 +vt 0.670190 0.084740 0.000000 +vt 0.693200 0.078520 0.000000 +vt 0.692420 0.084030 0.000000 +vt 0.691650 0.089530 0.000000 +vt 0.680390 0.089850 0.000000 +vt 0.669130 0.090170 0.000000 +vt 0.704170 0.078130 0.000000 +vt 0.703540 0.083670 0.000000 +vt 0.715150 0.077740 0.000000 +vt 0.714660 0.083320 0.000000 +vt 0.714170 0.088900 0.000000 +vt 0.702910 0.089210 0.000000 +vt 0.702280 0.094750 0.000000 +vt 0.690870 0.095030 0.000000 +vt 0.713680 0.094470 0.000000 +vt 0.701640 0.100290 0.000000 +vt 0.690100 0.100540 0.000000 +vt 0.679470 0.095310 0.000000 +vt 0.668070 0.095590 0.000000 +vt 0.678560 0.100780 0.000000 +vt 0.667010 0.101020 0.000000 +vt 0.677150 0.216540 0.000000 +vt 0.676090 0.220270 0.000000 +vt 0.665800 0.220300 0.000000 +vt 0.687300 0.216400 0.000000 +vt 0.686380 0.220230 0.000000 +vt 0.685460 0.224050 0.000000 +vt 0.675030 0.223990 0.000000 +vt 0.664600 0.223920 0.000000 +vt 0.697450 0.216260 0.000000 +vt 0.696670 0.220190 0.000000 +vt 0.706960 0.220150 0.000000 +vt 0.706330 0.224180 0.000000 +vt 0.695900 0.224120 0.000000 +vt 0.695120 0.228050 0.000000 +vt 0.684550 0.227880 0.000000 +vt 0.705700 0.228210 0.000000 +vt 0.694350 0.231970 0.000000 +vt 0.683630 0.231700 0.000000 +vt 0.673970 0.227710 0.000000 +vt 0.663390 0.227540 0.000000 +vt 0.672910 0.231430 0.000000 +vt 0.662190 0.231160 0.000000 +vt 0.798810 0.117350 0.000000 +vt 0.785700 0.117490 0.000000 +vt 0.785870 0.111470 0.000000 +vt 0.799080 0.111400 0.000000 +vt 0.772590 0.117630 0.000000 +vt 0.772650 0.111540 0.000000 +vt 0.772720 0.105460 0.000000 +vt 0.786030 0.105460 0.000000 +vt 0.799350 0.105460 0.000000 +vt 0.748030 0.228530 0.000000 +vt 0.760590 0.228460 0.000000 +vt 0.760680 0.232720 0.000000 +vt 0.748040 0.224180 0.000000 +vt 0.760500 0.224200 0.000000 +vt 0.772950 0.224220 0.000000 +vt 0.773150 0.228390 0.000000 +vt 0.773350 0.232560 0.000000 +vt 0.748050 0.219840 0.000000 +vt 0.760400 0.219940 0.000000 +vt 0.760310 0.215680 0.000000 +vt 0.772550 0.215880 0.000000 +vt 0.772750 0.220050 0.000000 +vt 0.785100 0.220150 0.000000 +vt 0.785400 0.224240 0.000000 +vt 0.784800 0.216070 0.000000 +vt 0.785710 0.228320 0.000000 +vt 0.786010 0.232400 0.000000 +vt 0.771370 0.329570 0.000000 +vt 0.772950 0.341330 0.000000 +vt 0.769790 0.317820 0.000000 +vt 0.782690 0.317810 0.000000 +vt 0.784370 0.329570 0.000000 +vt 0.786040 0.341320 0.000000 +vt 0.768220 0.306070 0.000000 +vt 0.781020 0.306060 0.000000 +vt 0.793820 0.306050 0.000000 +vt 0.795590 0.317800 0.000000 +vt 0.797360 0.329560 0.000000 +vt 0.799130 0.341310 0.000000 +vt 0.786550 0.204470 0.000000 +vt 0.774200 0.204320 0.000000 +vt 0.775850 0.192770 0.000000 +vt 0.788310 0.192870 0.000000 +vt 0.761850 0.204170 0.000000 +vt 0.763380 0.192660 0.000000 +vt 0.764920 0.181160 0.000000 +vt 0.777500 0.181210 0.000000 +vt 0.790070 0.181260 0.000000 +vt 0.822720 0.134560 0.000000 +vt 0.835650 0.134380 0.000000 +vt 0.833710 0.146100 0.000000 +vt 0.820870 0.146240 0.000000 +vt 0.848590 0.134200 0.000000 +vt 0.846550 0.145960 0.000000 +vt 0.844510 0.157710 0.000000 +vt 0.831770 0.157810 0.000000 +vt 0.819020 0.157920 0.000000 +vt 0.848800 0.258480 0.000000 +vt 0.836400 0.258620 0.000000 +vt 0.851050 0.270410 0.000000 +vt 0.838550 0.270500 0.000000 +vt 0.826040 0.270590 0.000000 +vt 0.823990 0.258750 0.000000 +vt 0.853310 0.282330 0.000000 +vt 0.840700 0.282380 0.000000 +vt 0.828100 0.282430 0.000000 +vt 0.815490 0.282480 0.000000 +vt 0.813540 0.270690 0.000000 +vt 0.811580 0.258890 0.000000 +vt 0.863960 0.078450 0.000000 +vt 0.864630 0.083890 0.000000 +vt 0.851470 0.083600 0.000000 +vt 0.850880 0.078110 0.000000 +vt 0.865290 0.089340 0.000000 +vt 0.852050 0.089090 0.000000 +vt 0.838810 0.088840 0.000000 +vt 0.838300 0.083310 0.000000 +vt 0.837790 0.077780 0.000000 +vt 0.865960 0.094790 0.000000 +vt 0.852640 0.094580 0.000000 +vt 0.839320 0.094370 0.000000 +vt 0.826010 0.094170 0.000000 +vt 0.825570 0.088590 0.000000 +vt 0.825140 0.083020 0.000000 +vt 0.824710 0.077440 0.000000 +vt 0.785240 0.243690 0.000000 +vt 0.772840 0.243860 0.000000 +vt 0.773010 0.240100 0.000000 +vt 0.785500 0.239930 0.000000 +vt 0.760430 0.244040 0.000000 +vt 0.760510 0.240270 0.000000 +vt 0.760600 0.236490 0.000000 +vt 0.773180 0.236330 0.000000 +vt 0.785760 0.236170 0.000000 +vt 0.725550 0.134910 0.000000 +vt 0.736400 0.135060 0.000000 +vt 0.735130 0.146580 0.000000 +vt 0.724360 0.146470 0.000000 +vt 0.747240 0.135200 0.000000 +vt 0.745890 0.146680 0.000000 +vt 0.744530 0.158150 0.000000 +vt 0.733860 0.158090 0.000000 +vt 0.723180 0.158030 0.000000 +vt 0.739190 0.259500 0.000000 +vt 0.740570 0.271130 0.000000 +vt 0.730170 0.271100 0.000000 +vt 0.728880 0.259430 0.000000 +vt 0.741960 0.282750 0.000000 +vt 0.731450 0.282770 0.000000 +vt 0.720950 0.282780 0.000000 +vt 0.719760 0.271070 0.000000 +vt 0.718560 0.259350 0.000000 +vt 0.670610 0.117400 0.000000 +vt 0.681740 0.117400 0.000000 +vt 0.669410 0.111940 0.000000 +vt 0.680680 0.111860 0.000000 +vt 0.691950 0.111770 0.000000 +vt 0.692880 0.117390 0.000000 +vt 0.668210 0.106480 0.000000 +vt 0.679620 0.106320 0.000000 +vt 0.691030 0.106160 0.000000 +vt 0.702430 0.105990 0.000000 +vt 0.703220 0.111690 0.000000 +vt 0.704010 0.117390 0.000000 +vt 0.665300 0.242880 0.000000 +vt 0.675630 0.243090 0.000000 +vt 0.664260 0.238980 0.000000 +vt 0.674720 0.239200 0.000000 +vt 0.685180 0.239430 0.000000 +vt 0.685960 0.243300 0.000000 +vt 0.663230 0.235070 0.000000 +vt 0.673820 0.235320 0.000000 +vt 0.684410 0.235570 0.000000 +vt 0.695000 0.235820 0.000000 +vt 0.695640 0.239660 0.000000 +vt 0.696290 0.243500 0.000000 +vt 0.671990 0.341800 0.000000 +vt 0.671280 0.330040 0.000000 +vt 0.682170 0.329990 0.000000 +vt 0.682970 0.341740 0.000000 +vt 0.670580 0.318290 0.000000 +vt 0.681370 0.318230 0.000000 +vt 0.692160 0.318170 0.000000 +vt 0.693060 0.329930 0.000000 +vt 0.693960 0.341690 0.000000 +vt 0.669870 0.306530 0.000000 +vt 0.680570 0.306470 0.000000 +vt 0.691260 0.306420 0.000000 +vt 0.701950 0.306360 0.000000 +vt 0.702950 0.318120 0.000000 +vt 0.703940 0.329870 0.000000 +vt 0.704940 0.341630 0.000000 +vt 0.698300 0.204600 0.000000 +vt 0.688060 0.204720 0.000000 +vt 0.688810 0.193040 0.000000 +vt 0.699150 0.192940 0.000000 +vt 0.677810 0.204840 0.000000 +vt 0.678470 0.193130 0.000000 +vt 0.679130 0.181420 0.000000 +vt 0.689570 0.181350 0.000000 +vt 0.700000 0.181280 0.000000 +vt 0.726150 0.077370 0.000000 +vt 0.725790 0.082990 0.000000 +vt 0.737150 0.077000 0.000000 +vt 0.736930 0.082670 0.000000 +vt 0.736710 0.088340 0.000000 +vt 0.725440 0.088620 0.000000 +vt 0.748150 0.076620 0.000000 +vt 0.748070 0.082340 0.000000 +vt 0.747980 0.088060 0.000000 +vt 0.747900 0.093770 0.000000 +vt 0.736490 0.094010 0.000000 +vt 0.725080 0.094240 0.000000 +vt 0.717230 0.220070 0.000000 +vt 0.727510 0.219990 0.000000 +vt 0.727190 0.224180 0.000000 +vt 0.716760 0.224180 0.000000 +vt 0.737780 0.219910 0.000000 +vt 0.737610 0.224180 0.000000 +vt 0.737450 0.228450 0.000000 +vt 0.726860 0.228370 0.000000 +vt 0.716280 0.228290 0.000000 +# 705 texture coords + +g rocksCombined012 +usemtl rocksSculpts +f 167/3 166/4 1/1 163/2 +f 164/6 167/3 163/2 43/5 +f 47/7 165/8 167/3 164/6 +f 165/8 46/9 166/4 167/3 +f 171/11 164/6 43/5 168/10 +f 169/13 171/11 168/10 27/12 +f 44/14 170/15 171/11 169/13 +f 170/15 47/7 164/6 171/11 +f 175/16 174/17 47/7 170/15 +f 172/18 175/16 170/15 44/14 +f 33/19 173/20 175/16 172/18 +f 173/20 45/21 174/17 175/16 +f 178/22 177/23 46/9 165/8 +f 174/17 178/22 165/8 47/7 +f 45/21 176/24 178/22 174/17 +f 176/24 20/25 177/23 178/22 +f 183/28 182/29 5/26 179/27 +f 180/31 183/28 179/27 48/30 +f 52/32 181/33 183/28 180/31 +f 181/33 51/34 182/29 183/28 +f 187/36 180/31 48/30 184/35 +f 185/38 187/36 184/35 21/37 +f 49/39 186/40 187/36 185/38 +f 186/40 52/32 180/31 187/36 +f 191/41 190/42 52/32 186/40 +f 188/43 191/41 186/40 49/39 +f 34/44 189/45 191/41 188/43 +f 189/45 50/46 190/42 191/41 +f 194/47 193/48 51/34 181/33 +f 190/42 194/47 181/33 52/32 +f 50/46 192/49 194/47 190/42 +f 192/49 31/50 193/48 194/47 +f 198/52 197/53 1/1 166/51 +f 195/55 198/52 166/51 46/54 +f 56/56 196/57 198/52 195/55 +f 196/57 55/58 197/53 198/52 +f 201/60 195/55 46/54 177/59 +f 199/62 201/60 177/59 20/61 +f 53/63 200/64 201/60 199/62 +f 200/64 56/56 195/55 201/60 +f 205/65 204/66 56/56 200/64 +f 202/67 205/65 200/64 53/63 +f 23/68 203/69 205/65 202/67 +f 203/69 54/70 204/66 205/65 +f 208/71 207/72 55/58 196/57 +f 204/66 208/71 196/57 56/56 +f 54/70 206/73 208/71 204/66 +f 206/73 10/74 207/72 208/71 +f 213/77 212/78 30/75 209/76 +f 210/80 213/77 209/76 57/79 +f 61/81 211/82 213/77 210/80 +f 211/82 60/83 212/78 213/77 +f 217/85 210/80 57/79 214/84 +f 215/87 217/85 214/84 32/86 +f 58/88 216/89 217/85 215/87 +f 216/89 61/81 210/80 217/85 +f 221/90 220/91 61/81 216/89 +f 218/92 221/90 216/89 58/88 +f 9/93 219/94 221/90 218/92 +f 219/94 59/95 220/91 221/90 +f 224/96 223/97 60/83 211/82 +f 220/91 224/96 211/82 61/81 +f 59/95 222/98 224/96 220/91 +f 222/98 2/99 223/97 224/96 +f 229/102 228/103 19/100 225/101 +f 226/105 229/102 225/101 62/104 +f 66/106 227/107 229/102 226/105 +f 227/107 65/108 228/103 229/102 +f 233/110 226/105 62/104 230/109 +f 231/112 233/110 230/109 24/111 +f 63/113 232/114 233/110 231/112 +f 232/114 66/106 226/105 233/110 +f 237/115 236/116 66/106 232/114 +f 234/117 237/115 232/114 63/113 +f 11/118 235/119 237/115 234/117 +f 235/119 64/120 236/116 237/115 +f 240/121 239/122 65/108 227/107 +f 236/116 240/121 227/107 66/106 +f 64/120 238/123 240/121 236/116 +f 238/123 4/124 239/122 240/121 +f 245/127 244/128 3/125 241/126 +f 242/130 245/127 241/126 67/129 +f 71/131 243/132 245/127 242/130 +f 243/132 70/133 244/128 245/127 +f 249/135 242/130 67/129 246/134 +f 247/137 249/135 246/134 38/136 +f 68/138 248/139 249/135 247/137 +f 248/139 71/131 242/130 249/135 +f 253/140 252/141 71/131 248/139 +f 250/142 253/140 248/139 68/138 +f 40/143 251/144 253/140 250/142 +f 251/144 69/145 252/141 253/140 +f 256/146 255/147 70/133 243/132 +f 252/141 256/146 243/132 71/131 +f 69/145 254/148 256/146 252/141 +f 254/148 12/149 255/147 256/146 +f 261/152 260/153 6/150 257/151 +f 258/155 261/152 257/151 72/154 +f 76/156 259/157 261/152 258/155 +f 259/157 75/158 260/153 261/152 +f 265/160 258/155 72/154 262/159 +f 263/162 265/160 262/159 21/161 +f 73/163 264/164 265/160 263/162 +f 264/164 76/156 258/155 265/160 +f 269/165 268/166 76/156 264/164 +f 266/167 269/165 264/164 73/163 +f 23/68 267/168 269/165 266/167 +f 267/168 74/169 268/166 269/165 +f 272/170 271/171 75/158 259/157 +f 268/166 272/170 259/157 76/156 +f 74/169 270/172 272/170 268/166 +f 270/172 9/173 271/171 272/170 +f 277/176 276/177 11/174 273/175 +f 274/179 277/176 273/175 77/178 +f 81/180 275/181 277/176 274/179 +f 275/181 80/182 276/177 277/176 +f 281/184 274/179 77/178 278/183 +f 279/186 281/184 278/183 8/185 +f 78/187 280/188 281/184 279/186 +f 280/188 81/180 274/179 281/184 +f 285/189 284/190 81/180 280/188 +f 282/191 285/189 280/188 78/187 +f 39/192 283/193 285/189 282/191 +f 283/193 79/194 284/190 285/189 +f 288/195 287/196 80/182 275/181 +f 284/190 288/195 275/181 81/180 +f 79/194 286/197 288/195 284/190 +f 286/197 37/198 287/196 288/195 +f 293/200 292/201 12/149 289/199 +f 290/203 293/200 289/199 82/202 +f 86/204 291/205 293/200 290/203 +f 291/205 85/206 292/201 293/200 +f 297/208 290/203 82/202 294/207 +f 295/210 297/208 294/207 7/209 +f 83/211 296/212 297/208 295/210 +f 296/212 86/204 290/203 297/208 +f 301/213 300/214 86/204 296/212 +f 298/215 301/213 296/212 83/211 +f 22/216 299/217 301/213 298/215 +f 299/217 84/218 300/214 301/213 +f 304/219 303/220 85/206 291/205 +f 300/214 304/219 291/205 86/204 +f 84/218 302/221 304/219 300/214 +f 302/221 24/111 303/220 304/219 +f 308/222 307/223 5/26 182/29 +f 305/224 308/222 182/29 51/34 +f 90/225 306/226 308/222 305/224 +f 306/226 89/227 307/223 308/222 +f 311/228 305/224 51/34 193/48 +f 309/229 311/228 193/48 31/50 +f 87/230 310/231 311/228 309/229 +f 310/231 90/225 305/224 311/228 +f 315/232 314/233 90/225 310/231 +f 312/234 315/232 310/231 87/230 +f 29/235 313/236 315/232 312/234 +f 313/236 88/237 314/233 315/232 +f 318/238 317/239 89/227 306/226 +f 314/233 318/238 306/226 90/225 +f 88/237 316/240 318/238 314/233 +f 316/240 10/74 317/239 318/238 +f 323/242 322/243 38/136 319/241 +f 320/245 323/242 319/241 91/244 +f 95/246 321/247 323/242 320/245 +f 321/247 94/248 322/243 323/242 +f 327/250 320/245 91/244 324/249 +f 325/252 327/250 324/249 41/251 +f 92/253 326/254 327/250 325/252 +f 326/254 95/246 320/245 327/250 +f 331/255 330/256 95/246 326/254 +f 328/257 331/255 326/254 92/253 +f 25/258 329/259 331/255 328/257 +f 329/259 93/260 330/256 331/255 +f 334/261 333/262 94/248 321/247 +f 330/256 334/261 321/247 95/246 +f 93/260 332/263 334/261 330/256 +f 332/263 13/264 333/262 334/261 +f 339/266 338/267 39/192 335/265 +f 336/269 339/266 335/265 96/268 +f 100/270 337/271 339/266 336/269 +f 337/271 99/272 338/267 339/266 +f 343/274 336/269 96/268 340/273 +f 341/276 343/274 340/273 42/275 +f 97/277 342/278 343/274 341/276 +f 342/278 100/270 336/269 343/274 +f 347/279 346/280 100/270 342/278 +f 344/281 347/279 342/278 97/277 +f 26/282 345/283 347/279 344/281 +f 345/283 98/284 346/280 347/279 +f 350/285 349/286 99/272 337/271 +f 346/280 350/285 337/271 100/270 +f 98/284 348/287 350/285 346/280 +f 348/287 15/288 349/286 350/285 +f 355/291 354/292 35/289 351/290 +f 352/294 355/291 351/290 101/293 +f 105/295 353/296 355/291 352/294 +f 353/296 104/297 354/292 355/291 +f 359/299 352/294 101/293 356/298 +f 357/300 359/299 356/298 37/198 +f 102/301 358/302 359/299 357/300 +f 358/302 105/295 352/294 359/299 +f 363/303 362/304 105/295 358/302 +f 360/305 363/303 358/302 102/301 +f 17/306 361/307 363/303 360/305 +f 361/307 103/308 362/304 363/303 +f 366/309 365/310 104/297 353/296 +f 362/304 366/309 353/296 105/295 +f 103/308 364/311 366/309 362/304 +f 364/311 14/312 365/310 366/309 +f 371/314 370/315 13/264 367/313 +f 368/317 371/314 367/313 106/316 +f 110/318 369/319 371/314 368/317 +f 369/319 109/320 370/315 371/314 +f 375/322 368/317 106/316 372/321 +f 373/323 375/322 372/321 27/12 +f 107/324 374/325 375/322 373/323 +f 374/325 110/318 368/317 375/322 +f 379/326 378/327 110/318 374/325 +f 376/328 379/326 374/325 107/324 +f 29/235 377/329 379/326 376/328 +f 377/329 108/330 378/327 379/326 +f 382/331 381/332 109/320 369/319 +f 378/327 382/331 369/319 110/318 +f 108/330 380/333 382/331 378/327 +f 380/333 18/334 381/332 382/331 +f 387/337 386/338 28/335 383/336 +f 384/340 387/337 383/336 111/339 +f 115/341 385/342 387/337 384/340 +f 385/342 114/343 386/338 387/337 +f 391/345 384/340 111/339 388/344 +f 389/346 391/345 388/344 32/86 +f 112/347 390/348 391/345 389/346 +f 390/348 115/341 384/340 391/345 +f 395/349 394/350 115/341 390/348 +f 392/351 395/349 390/348 112/347 +f 17/306 393/352 395/349 392/351 +f 393/352 113/353 394/350 395/349 +f 398/354 397/355 114/343 385/342 +f 394/350 398/354 385/342 115/341 +f 113/353 396/356 398/354 394/350 +f 396/356 15/288 397/355 398/354 +f 403/359 402/360 16/357 399/358 +f 400/362 403/359 399/358 116/361 +f 120/363 401/364 403/359 400/362 +f 401/364 119/365 402/360 403/359 +f 407/367 400/362 116/361 404/366 +f 405/369 407/367 404/366 36/368 +f 117/370 406/371 407/367 405/369 +f 406/371 120/363 400/362 407/367 +f 411/372 410/373 120/363 406/371 +f 408/374 411/372 406/371 117/370 +f 40/143 409/375 411/372 408/374 +f 409/375 118/376 410/373 411/372 +f 414/377 413/378 119/365 401/364 +f 410/373 414/377 401/364 120/363 +f 118/376 412/379 414/377 410/373 +f 412/379 18/334 413/378 414/377 +f 419/381 418/382 25/258 415/380 +f 416/384 419/381 415/380 121/383 +f 125/385 417/386 419/381 416/384 +f 417/386 124/387 418/382 419/381 +f 423/389 416/384 121/383 420/388 +f 421/391 423/389 420/388 14/390 +f 122/392 422/393 423/389 421/391 +f 422/393 125/385 416/384 423/389 +f 427/394 426/395 125/385 422/393 +f 424/396 427/394 422/393 122/392 +f 30/397 425/398 427/394 424/396 +f 425/398 123/399 426/395 427/394 +f 430/400 429/401 124/387 417/386 +f 426/395 430/400 417/386 125/385 +f 123/399 428/402 430/400 426/395 +f 428/402 33/19 429/401 430/400 +f 434/405 257/406 6/403 431/404 +f 432/408 434/405 431/404 126/407 +f 128/409 433/410 434/405 432/408 +f 433/410 72/411 257/406 434/405 +f 438/413 432/408 126/407 435/412 +f 436/414 438/413 435/412 28/335 +f 127/415 437/416 438/413 436/414 +f 437/416 128/409 432/408 438/413 +f 441/417 440/418 128/409 437/416 +f 439/419 441/417 437/416 127/415 +f 34/44 188/43 441/417 439/419 +f 188/43 49/39 440/418 441/417 +f 442/420 262/421 72/411 433/410 +f 440/418 442/420 433/410 128/409 +f 49/39 185/38 442/420 440/418 +f 185/38 21/37 262/421 442/420 +f 446/423 199/62 20/61 443/422 +f 444/425 446/423 443/422 129/424 +f 130/426 445/427 446/423 444/425 +f 445/427 53/63 199/62 446/423 +f 449/429 444/425 129/424 447/428 +f 222/431 449/429 447/428 2/430 +f 59/432 448/433 449/429 222/431 +f 448/433 130/426 444/425 449/429 +f 451/434 450/435 130/426 448/433 +f 219/436 451/434 448/433 59/432 +f 9/173 270/172 451/434 219/436 +f 270/172 74/169 450/435 451/434 +f 452/437 202/67 53/63 445/427 +f 450/435 452/437 445/427 130/426 +f 74/169 267/168 452/437 450/435 +f 267/168 23/68 202/67 452/437 +f 456/438 455/439 3/125 244/128 +f 453/440 456/438 244/128 70/133 +f 132/441 454/442 456/438 453/440 +f 454/442 131/443 455/439 456/438 +f 458/444 453/440 70/133 255/147 +f 292/201 458/444 255/147 12/149 +f 85/206 457/445 458/444 292/201 +f 457/445 132/441 453/440 458/444 +f 460/446 459/447 132/441 457/445 +f 303/220 460/446 457/445 85/206 +f 24/111 230/109 460/446 303/220 +f 230/109 62/104 459/447 460/446 +f 462/448 461/449 131/443 454/442 +f 459/447 462/448 454/442 132/441 +f 62/104 225/101 462/448 459/447 +f 225/101 19/100 461/449 462/448 +f 465/451 263/162 21/161 184/450 +f 463/453 465/451 184/450 48/452 +f 133/454 464/455 465/451 463/453 +f 464/455 73/163 263/162 465/451 +f 467/457 463/453 48/452 179/456 +f 307/223 467/457 179/456 5/26 +f 89/227 466/458 467/457 307/223 +f 466/458 133/454 463/453 467/457 +f 469/459 468/460 133/454 466/458 +f 317/239 469/459 466/458 89/227 +f 10/74 206/73 469/459 317/239 +f 206/73 54/70 468/460 469/459 +f 470/461 266/167 73/163 464/455 +f 468/460 470/461 464/455 133/454 +f 54/70 203/69 470/461 468/460 +f 203/69 23/68 266/167 470/461 +f 474/464 473/465 8/462 278/463 +f 471/467 474/464 278/463 77/466 +f 135/468 472/469 474/464 471/467 +f 472/469 134/470 473/465 474/464 +f 476/472 471/467 77/466 273/471 +f 234/117 476/472 273/471 11/118 +f 63/113 475/473 476/472 234/117 +f 475/473 135/468 471/467 476/472 +f 478/474 477/475 135/468 475/473 +f 231/112 478/474 475/473 63/113 +f 24/111 302/221 478/474 231/112 +f 302/221 84/218 477/475 478/474 +f 480/476 479/477 134/470 472/469 +f 477/475 480/476 472/469 135/468 +f 84/218 299/217 480/476 477/475 +f 299/217 22/216 479/477 480/476 +f 484/480 239/481 4/478 481/479 +f 482/483 484/480 481/479 136/482 +f 139/484 483/485 484/480 482/483 +f 483/485 65/486 239/481 484/480 +f 488/488 482/483 136/482 485/487 +f 486/490 488/488 485/487 35/489 +f 137/491 487/492 488/488 486/490 +f 487/492 139/484 482/483 488/488 +f 492/493 491/494 139/484 487/492 +f 489/495 492/493 487/492 137/491 +f 41/251 490/496 492/493 489/495 +f 490/496 138/497 491/494 492/493 +f 494/498 228/499 65/486 483/485 +f 491/494 494/498 483/485 139/484 +f 138/497 493/500 494/498 491/494 +f 493/500 19/501 228/499 494/498 +f 498/503 295/504 7/209 495/502 +f 496/506 498/503 495/502 140/505 +f 143/507 497/508 498/503 496/506 +f 497/508 83/509 295/504 498/503 +f 502/511 496/506 140/505 499/510 +f 500/512 502/511 499/510 36/368 +f 141/513 501/514 502/511 500/512 +f 501/514 143/507 496/506 502/511 +f 506/515 505/516 143/507 501/514 +f 503/517 506/515 501/514 141/513 +f 42/275 504/518 506/515 503/517 +f 504/518 142/519 505/516 506/515 +f 508/520 298/521 83/509 497/508 +f 505/516 508/520 497/508 143/507 +f 142/519 507/522 508/520 505/516 +f 507/522 22/523 298/521 508/520 +f 511/524 169/13 27/12 372/321 +f 509/525 511/524 372/321 106/316 +f 144/526 510/527 511/524 509/525 +f 510/527 44/14 169/13 511/524 +f 513/528 509/525 106/316 367/313 +f 332/263 513/528 367/313 13/264 +f 93/260 512/529 513/528 332/263 +f 512/529 144/526 509/525 513/528 +f 515/530 514/531 144/526 512/529 +f 329/259 515/530 512/529 93/260 +f 25/258 418/382 515/530 329/259 +f 418/382 124/387 514/531 515/530 +f 516/532 172/18 44/14 510/527 +f 514/531 516/532 510/527 144/526 +f 124/387 429/401 516/532 514/531 +f 429/401 33/19 172/18 516/532 +f 521/534 520/535 26/282 517/533 +f 518/537 521/534 517/533 145/536 +f 148/538 519/539 521/534 518/537 +f 519/539 147/540 520/535 521/534 +f 525/542 518/537 145/536 522/541 +f 523/543 525/542 522/541 16/357 +f 146/544 524/545 525/542 523/543 +f 524/545 148/538 518/537 525/542 +f 528/546 527/547 148/538 524/545 +f 526/548 528/546 524/545 146/544 +f 31/50 192/49 528/546 526/548 +f 192/49 50/46 527/547 528/546 +f 530/549 529/550 147/540 519/539 +f 527/547 530/549 519/539 148/538 +f 50/46 189/45 530/549 527/547 +f 189/45 34/44 529/550 530/549 +f 533/551 421/552 14/312 364/311 +f 531/553 533/551 364/311 103/308 +f 149/554 532/555 533/551 531/553 +f 532/555 122/556 421/552 533/551 +f 535/557 531/553 103/308 361/307 +f 392/351 535/557 361/307 17/306 +f 112/347 534/558 535/557 392/351 +f 534/558 149/554 531/553 535/557 +f 537/559 536/560 149/554 534/558 +f 389/346 537/559 534/558 112/347 +f 32/86 214/84 537/559 389/346 +f 214/84 57/79 536/560 537/559 +f 538/561 424/562 122/556 532/555 +f 536/560 538/561 532/555 149/554 +f 57/79 209/76 538/561 536/560 +f 209/76 30/75 424/562 538/561 +f 541/563 309/229 31/50 526/548 +f 539/564 541/563 526/548 146/544 +f 150/565 540/566 541/563 539/564 +f 540/566 87/230 309/229 541/563 +f 543/567 539/564 146/544 523/543 +f 402/360 543/567 523/543 16/357 +f 119/365 542/568 543/567 402/360 +f 542/568 150/565 539/564 543/567 +f 545/569 544/570 150/565 542/568 +f 413/378 545/569 542/568 119/365 +f 18/334 380/333 545/569 413/378 +f 380/333 108/330 544/570 545/569 +f 546/571 312/234 87/230 540/566 +f 544/570 546/571 540/566 150/565 +f 108/330 377/329 546/571 544/570 +f 377/329 29/235 312/234 546/571 +f 549/572 373/323 27/12 168/10 +f 547/573 549/572 168/10 43/5 +f 151/574 548/575 549/572 547/573 +f 548/575 107/324 373/323 549/572 +f 551/576 547/573 43/5 163/2 +f 197/53 551/576 163/2 1/1 +f 55/58 550/577 551/576 197/53 +f 550/577 151/574 547/573 551/576 +f 553/578 552/579 151/574 550/577 +f 207/72 553/578 550/577 55/58 +f 10/74 316/240 553/578 207/72 +f 316/240 88/237 552/579 553/578 +f 554/580 376/328 107/324 548/575 +f 552/579 554/580 548/575 151/574 +f 88/237 313/236 554/580 552/579 +f 313/236 29/235 376/328 554/580 +f 557/582 431/404 6/403 260/581 +f 555/584 557/582 260/581 75/583 +f 152/585 556/586 557/582 555/584 +f 556/586 126/407 431/404 557/582 +f 559/588 555/584 75/583 271/587 +f 218/92 559/588 271/587 9/93 +f 58/88 558/589 559/588 218/92 +f 558/589 152/585 555/584 559/588 +f 561/590 560/591 152/585 558/589 +f 215/87 561/590 558/589 58/88 +f 32/86 388/344 561/590 215/87 +f 388/344 111/339 560/591 561/590 +f 562/592 435/412 126/407 556/586 +f 560/591 562/592 556/586 152/585 +f 111/339 383/336 562/592 560/591 +f 383/336 28/335 435/412 562/592 +f 565/595 223/596 2/593 447/594 +f 563/598 565/595 447/594 129/597 +f 153/599 564/600 565/595 563/598 +f 564/600 60/601 223/596 565/595 +f 567/603 563/598 129/597 443/602 +f 176/24 567/603 443/602 20/25 +f 45/21 566/604 567/603 176/24 +f 566/604 153/599 563/598 567/603 +f 569/605 568/606 153/599 566/604 +f 173/20 569/605 566/604 45/21 +f 33/19 428/402 569/605 173/20 +f 428/402 123/399 568/606 569/605 +f 570/607 212/608 60/601 564/600 +f 568/606 570/607 564/600 153/599 +f 123/399 425/398 570/607 568/606 +f 425/398 30/397 212/608 570/607 +f 573/609 436/414 28/335 386/338 +f 571/610 573/609 386/338 114/343 +f 154/611 572/612 573/609 571/610 +f 572/612 127/415 436/414 573/609 +f 575/613 571/610 114/343 397/355 +f 348/287 575/613 397/355 15/288 +f 98/284 574/614 575/613 348/287 +f 574/614 154/611 571/610 575/613 +f 577/615 576/616 154/611 574/614 +f 345/283 577/615 574/614 98/284 +f 26/282 520/535 577/615 345/283 +f 520/535 147/540 576/616 577/615 +f 578/617 439/419 127/415 572/612 +f 576/616 578/617 572/612 154/611 +f 147/540 529/550 578/617 576/616 +f 529/550 34/44 439/419 578/617 +f 581/618 247/137 38/136 322/243 +f 579/619 581/618 322/243 94/248 +f 155/620 580/621 581/618 579/619 +f 580/621 68/138 247/137 581/618 +f 583/622 579/619 94/248 333/262 +f 370/315 583/622 333/262 13/264 +f 109/320 582/623 583/622 370/315 +f 582/623 155/620 579/619 583/622 +f 585/624 584/625 155/620 582/623 +f 381/332 585/624 582/623 109/320 +f 18/334 412/379 585/624 381/332 +f 412/379 118/376 584/625 585/624 +f 586/626 250/142 68/138 580/621 +f 584/625 586/626 580/621 155/620 +f 118/376 409/375 586/626 584/625 +f 409/375 40/143 250/142 586/626 +f 589/627 349/286 15/288 396/356 +f 587/628 589/627 396/356 113/353 +f 156/629 588/630 589/627 587/628 +f 588/630 99/272 349/286 589/627 +f 591/631 587/628 113/353 393/352 +f 360/305 591/631 393/352 17/306 +f 102/301 590/632 591/631 360/305 +f 590/632 156/629 587/628 591/631 +f 593/633 592/634 156/629 590/632 +f 357/300 593/633 590/632 102/301 +f 37/198 286/197 593/633 357/300 +f 286/197 79/194 592/634 593/633 +f 594/635 338/267 99/272 588/630 +f 592/634 594/635 588/630 156/629 +f 79/194 283/193 594/635 592/634 +f 283/193 39/192 338/267 594/635 +f 597/637 241/126 3/125 455/636 +f 595/639 597/637 455/636 131/638 +f 157/640 596/641 597/637 595/639 +f 596/641 67/129 241/126 597/637 +f 599/643 595/639 131/638 461/642 +f 493/500 599/643 461/642 19/501 +f 138/497 598/644 599/643 493/500 +f 598/644 157/640 595/639 599/643 +f 601/645 600/646 157/640 598/644 +f 490/496 601/645 598/644 138/497 +f 41/251 324/249 601/645 490/496 +f 324/249 91/244 600/646 601/645 +f 602/647 246/134 67/129 596/641 +f 600/646 602/647 596/641 157/640 +f 91/244 319/241 602/647 600/646 +f 319/241 38/136 246/134 602/647 +f 605/649 279/186 8/185 473/648 +f 603/651 605/649 473/648 134/650 +f 158/652 604/653 605/649 603/651 +f 604/653 78/187 279/186 605/649 +f 607/655 603/651 134/650 479/654 +f 507/522 607/655 479/654 22/523 +f 142/519 606/656 607/655 507/522 +f 606/656 158/652 603/651 607/655 +f 609/657 608/658 158/652 606/656 +f 504/518 609/657 606/656 142/519 +f 42/275 340/273 609/657 504/518 +f 340/273 96/268 608/658 609/657 +f 610/659 282/191 78/187 604/653 +f 608/658 610/659 604/653 158/652 +f 96/268 335/265 610/659 608/658 +f 335/265 39/192 282/191 610/659 +f 613/662 481/663 4/660 238/661 +f 611/665 613/662 238/661 64/664 +f 159/666 612/667 613/662 611/665 +f 612/667 136/668 481/663 613/662 +f 615/670 611/665 64/664 235/669 +f 276/177 615/670 235/669 11/174 +f 80/182 614/671 615/670 276/177 +f 614/671 159/666 611/665 615/670 +f 617/672 616/673 159/666 614/671 +f 287/196 617/672 614/671 80/182 +f 37/198 356/298 617/672 287/196 +f 356/298 101/293 616/673 617/672 +f 618/674 485/675 136/668 612/667 +f 616/673 618/674 612/667 159/666 +f 101/293 351/290 618/674 616/673 +f 351/290 35/289 485/675 618/674 +f 621/676 405/369 36/368 499/510 +f 619/677 621/676 499/510 140/505 +f 160/678 620/679 621/676 619/677 +f 620/679 117/370 405/369 621/676 +f 623/680 619/677 140/505 495/502 +f 294/207 623/680 495/502 7/209 +f 82/202 622/681 623/680 294/207 +f 622/681 160/678 619/677 623/680 +f 625/682 624/683 160/678 622/681 +f 289/199 625/682 622/681 82/202 +f 12/149 254/148 625/682 289/199 +f 254/148 69/145 624/683 625/682 +f 626/684 408/374 117/370 620/679 +f 624/683 626/684 620/679 160/678 +f 69/145 251/144 626/684 624/683 +f 251/144 40/143 408/374 626/684 +f 629/686 486/490 35/489 354/685 +f 627/688 629/686 354/685 104/687 +f 161/689 628/690 629/686 627/688 +f 628/690 137/491 486/490 629/686 +f 631/692 627/688 104/687 365/691 +f 420/388 631/692 365/691 14/390 +f 121/383 630/693 631/692 420/388 +f 630/693 161/689 627/688 631/692 +f 633/694 632/695 161/689 630/693 +f 415/380 633/694 630/693 121/383 +f 25/258 328/257 633/694 415/380 +f 328/257 92/253 632/695 633/694 +f 634/696 489/495 137/491 628/690 +f 632/695 634/696 628/690 161/689 +f 92/253 325/252 634/696 632/695 +f 325/252 41/251 489/495 634/696 +f 637/697 500/512 36/368 404/366 +f 635/698 637/697 404/366 116/361 +f 162/699 636/700 637/697 635/698 +f 636/700 141/513 500/512 637/697 +f 639/701 635/698 116/361 399/358 +f 522/541 639/701 399/358 16/357 +f 145/536 638/702 639/701 522/541 +f 638/702 162/699 635/698 639/701 +f 641/703 640/704 162/699 638/702 +f 517/533 641/703 638/702 145/536 +f 26/282 344/281 641/703 517/533 +f 344/281 97/277 640/704 641/703 +f 642/705 503/517 141/513 636/700 +f 640/704 642/705 636/700 162/699 +f 97/277 341/276 642/705 640/704 +f 341/276 42/275 503/517 642/705 +# 640 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj.meta new file mode 100644 index 0000000..951f116 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined012.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: ae414044404d076499474a4ded49fc4e +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined012 + 100002: //RootNode + 400000: rocksCombined012 + 400002: //RootNode + 2300000: rocksCombined012 + 3300000: rocksCombined012 + 4300000: rocksCombined012 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj new file mode 100644 index 0000000..58045a4 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj @@ -0,0 +1,2592 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:40 + +mtllib rocksCombined013.mtl + +# +# object rocksCombined013 +# + +v 17.759949 2.763770 64.284912 +v 37.800934 3.801437 63.079498 +v 17.510185 3.521534 4.766846 +v 37.733215 3.804770 5.687683 +v 19.023483 40.325451 52.019470 +v 30.795586 39.850922 52.395111 +v 19.520760 40.067039 3.619507 +v 31.091866 39.895004 3.488525 +v 36.779083 14.708047 59.154175 +v 15.961662 12.939409 62.112823 +v 36.033653 14.142582 3.561554 +v 17.524681 14.071444 2.911072 +v 15.044044 2.689415 33.102661 +v 39.173233 3.334957 33.528076 +v 31.676308 40.280174 26.257355 +v 18.306244 40.622402 26.738342 +v 39.298210 14.702364 30.735138 +v 13.430763 14.146977 28.649414 +v 27.774170 3.206439 3.353577 +v 28.100693 2.806174 65.391937 +v 25.265381 41.091858 53.850372 +v 25.183380 40.186821 2.108215 +v 26.702255 13.998657 63.377380 +v 26.860451 13.921507 0.013123 +v 27.794479 2.388977 33.507782 +v 25.189751 40.757233 26.188263 +v 18.511848 28.445078 54.729004 +v 32.774048 26.720701 55.122620 +v 32.094055 28.073183 4.171143 +v 19.344154 27.441940 3.756195 +v 33.921677 27.797754 28.744934 +v 17.845467 27.236023 27.151337 +v 25.827972 27.984514 56.717621 +v 25.725006 27.414703 1.110931 +v 40.280396 3.405539 18.886719 +v 22.452934 39.686863 13.550049 +v 38.598618 14.577559 15.692566 +v 14.122513 3.130237 18.288849 +v 32.191849 39.729004 14.448425 +v 5.656929 14.035743 16.353607 +v 27.844643 2.302178 17.749084 +v 26.128410 40.755054 12.939209 +v 34.139259 27.667427 14.887848 +v 18.637550 27.230217 15.669281 +v 14.938416 0.302118 49.112183 +v 31.603508 40.664879 40.191345 +v 3.526321 16.615799 44.037201 +v 39.544632 2.485165 49.449707 +v 18.641808 40.814537 39.974457 +v 46.745102 16.721977 44.560699 +v 28.057373 1.785793 50.054535 +v 25.340523 42.138409 40.052826 +v 13.428719 30.549883 39.506653 +v 33.720459 27.321348 41.965668 +v 12.482552 2.125254 60.199829 +v 21.650574 1.046049 50.182770 +v 28.202042 1.867379 58.776093 +v 21.346123 2.569577 65.344391 +v 21.909416 1.909874 58.534027 +v 21.808319 40.981098 53.536652 +v 25.364044 41.881039 47.915833 +v 21.696152 42.074474 39.774658 +v 18.288551 41.368542 45.889465 +v 21.730042 42.220688 46.960938 +v 27.423668 7.815207 64.704559 +v 20.984352 13.959351 63.704865 +v 17.040947 7.042998 63.164001 +v 21.889847 7.457636 64.372559 +v 52.277016 10.726422 45.695251 +v 43.685638 16.317741 52.086243 +v 37.555496 7.699118 62.066772 +v 38.888206 3.132513 56.988190 +v 43.313965 9.020625 54.363678 +v 27.275597 8.022852 1.301239 +v 31.461136 14.045622 1.662872 +v 37.838242 7.846795 4.092712 +v 33.528183 3.260718 4.242157 +v 32.596001 8.078713 2.277313 +v 16.459999 2.844051 8.928589 +v 9.229836 7.540603 16.617493 +v 9.304901 14.420197 6.985199 +v 15.603920 8.048262 3.339478 +v 10.732445 7.781606 7.833893 +v 29.292892 27.821865 56.384888 +v 26.698509 20.239803 60.044403 +v 31.561005 14.348526 62.115387 +v 34.160301 21.487148 56.672974 +v 30.691231 21.060431 59.198608 +v 33.740280 27.692814 9.906586 +v 36.151718 21.337914 15.254456 +v 45.454201 15.707032 7.802948 +v 34.203407 20.891998 3.821381 +v 35.999832 21.657774 9.528198 +v 22.405846 27.492401 1.403107 +v 26.246742 20.857866 0.931274 +v 21.907555 14.108448 1.007965 +v 18.275208 21.107473 3.258881 +v 22.123711 20.891016 1.840210 +v 15.977951 30.062042 46.337860 +v 10.049576 24.169252 41.272308 +v 6.663986 14.537507 54.110840 +v 16.819626 21.926975 58.205719 +v 11.867622 24.403927 49.191498 +v 21.524948 1.835062 17.211273 +v 27.805794 2.346794 25.770386 +v 21.157692 2.264534 33.293549 +v 14.907227 3.243887 25.826508 +v 21.275734 2.295945 25.839813 +v 29.604904 40.441696 13.757965 +v 26.382614 40.885536 19.484985 +v 28.904518 41.407295 25.553894 +v 31.460693 39.847248 19.654938 +v 29.349541 40.339046 19.157288 +v 47.709549 10.029319 17.542297 +v 46.308655 16.689810 23.327606 +v 39.591454 7.838764 32.100769 +v 39.029488 3.340845 26.127594 +v 44.082886 8.867445 24.524872 +v 14.890671 1.889440 41.169464 +v 5.620987 4.674905 43.948456 +v 8.850258 13.957561 34.749664 +v 13.068848 7.057788 31.615173 +v 8.896774 6.069744 37.329132 +v 32.959282 34.939117 41.106445 +v 33.818871 27.601896 34.857178 +v 32.794441 34.365883 27.479431 +v 31.710732 40.489510 33.005585 +v 32.896378 34.762207 33.698761 +v 19.282661 39.567322 20.188141 +v 20.699959 33.791130 15.378235 +v 17.962387 27.495163 20.179962 +v 17.775612 34.467831 26.447906 +v 19.562317 33.428772 19.973816 +v 34.155602 2.398270 33.693665 +v 39.374664 2.773431 41.521515 +v 37.572807 2.127550 49.866608 +v 27.838028 2.196656 41.998138 +v 34.331055 1.881536 41.681427 +v 31.462097 40.654099 46.796906 +v 28.698288 41.938709 40.547821 +v 28.443275 40.378506 53.352356 +v 28.446136 41.650196 46.990509 +v 34.270691 2.905001 64.957428 +v 33.146042 7.786376 64.244049 +v 22.014000 3.251945 3.936676 +v 21.938278 7.929695 1.559509 +v 18.547585 35.421734 52.989288 +v 21.725182 28.556881 56.805786 +v 25.474701 35.068542 55.876160 +v 21.562653 35.339581 55.011627 +v 31.208717 34.679993 3.619110 +v 28.924240 27.859844 2.463074 +v 25.602402 34.447823 1.120056 +v 28.371620 40.301300 2.587494 +v 28.672249 34.571518 1.893616 +v 38.542732 3.305209 11.292938 +v 34.032684 2.169283 18.526489 +v 27.905731 2.255486 9.290680 +v 33.835564 2.315548 10.405884 +v 21.138023 41.559635 6.234589 +v 24.168716 41.141109 13.016052 +v 25.479485 41.634380 6.606354 +v 22.017410 40.290680 2.403961 +v 23.361076 41.870724 6.672852 +v 31.271286 34.442726 53.462555 +v 28.668716 34.498215 54.875183 +v 30.988503 40.057278 8.599701 +v 33.408066 34.925575 15.183411 +v 32.406860 34.427208 9.116516 +v 19.740944 34.882626 3.510193 +v 22.483246 34.451813 2.138062 +v 17.183861 35.640697 39.567413 +v 17.591385 35.882023 45.530182 +v 36.877777 21.414053 43.892975 +v 34.266708 26.655392 49.193420 +v 35.669174 21.142733 50.887238 +v 16.347534 21.368128 15.242798 +v 18.584930 27.481033 9.183929 +v 16.382149 21.433365 7.785736 +v 22.395531 20.910206 60.034546 +v 30.204185 20.729523 2.032410 +v 3.447197 13.914938 22.806152 +v 5.216354 7.625716 24.679535 +v 35.929932 21.412817 29.463165 +v 34.044624 27.766050 21.823792 +v 35.740646 21.044304 22.419861 +v 21.805534 2.042969 8.923370 +v 28.276901 41.392097 7.555084 +v 41.508629 7.767738 10.287567 +v 19.823875 35.196888 9.021484 +v 34.058418 2.388304 25.998993 +v 20.891426 41.115959 25.971558 +v 22.592125 40.807308 19.115662 +v 32.809952 34.991901 20.336578 +v 15.757515 21.330484 27.493103 +v 16.438080 21.210680 20.904846 +v 21.342125 1.869650 41.803802 +v 18.685310 40.413792 32.549530 +v 25.430237 41.685150 32.148407 +v 21.140396 42.196075 32.898682 +v 46.112839 16.591932 36.926025 +v 48.681686 10.407377 38.378235 +v 16.035515 28.018726 32.941315 +v 13.535545 22.772264 33.227325 +v 8.403969 6.110950 57.245697 +v 32.879242 35.029995 47.282013 +v 34.186920 1.812350 58.674164 +v 28.841339 41.637436 32.919647 +v 16.140396 35.607166 32.877838 +v 35.943863 21.124142 36.302948 +v 15.881172 2.494374 62.379578 +v 18.600426 1.243536 58.800476 +v 22.383446 1.248896 63.328644 +v 19.156181 2.614727 64.795532 +v 18.796135 1.261454 62.813263 +v 15.126289 0.532492 53.721161 +v 18.229248 0.530994 50.659546 +v 21.764557 1.483719 54.754700 +v 18.511215 0.419166 55.426086 +v 24.873032 1.566094 50.131348 +v 28.064926 1.982993 54.602875 +v 25.031868 2.028354 58.608948 +v 24.900581 1.775179 54.702332 +v 28.216141 1.836342 62.952118 +v 25.222733 2.653963 65.380829 +v 25.472267 1.532154 63.278198 +v 20.395805 40.560619 52.841644 +v 21.803383 42.000809 50.815552 +v 19.393387 42.626266 45.828552 +v 18.449768 40.990410 49.497498 +v 19.591438 42.436924 49.928955 +v 23.544807 40.892849 53.674438 +v 25.329453 41.544624 51.107941 +v 23.242119 42.899540 47.150665 +v 23.431389 41.877014 50.959015 +v 25.402580 41.922604 43.286072 +v 23.414337 42.511189 39.295868 +v 21.691124 42.317692 42.423279 +v 23.473351 42.363434 42.688446 +v 19.831230 42.159492 40.010864 +v 18.384773 41.253979 42.641937 +v 19.730385 42.405102 42.397705 +v 21.282295 4.642634 65.964508 +v 18.672638 7.246019 64.105530 +v 17.038055 4.578062 64.036377 +v 19.267349 4.512264 65.089417 +v 27.910324 4.560158 66.010132 +v 24.354980 7.847376 64.959656 +v 24.703148 4.647396 66.027283 +v 26.711067 11.170946 63.558319 +v 24.557594 13.690106 63.200806 +v 21.798172 10.944668 63.453735 +v 24.543655 10.808830 63.244019 +v 18.701881 13.401990 63.085785 +v 15.871666 10.914828 62.319489 +v 18.725914 10.981380 63.232574 +v 47.714310 6.994163 46.836029 +v 50.828163 10.909627 49.135773 +v 39.327232 5.146607 56.326294 +v 39.422043 2.632630 53.749237 +v 45.013916 6.301294 51.779938 +v 51.181961 13.955989 44.761414 +v 45.450386 16.634922 47.890564 +v 45.849564 13.049736 52.671814 +v 49.378166 13.981476 48.225189 +v 37.948051 14.596931 56.495880 +v 37.578293 11.214671 60.847931 +v 38.975212 7.916453 59.022461 +v 38.476501 11.153131 57.825806 +v 37.769867 5.380094 62.881775 +v 38.526978 3.328221 61.082794 +v 39.009666 5.224378 60.321198 +v 27.563995 5.250737 1.893982 +v 29.936180 8.040894 1.627838 +v 33.122780 5.306008 2.836029 +v 30.652153 3.224102 3.654510 +v 30.343773 5.268507 2.207306 +v 26.975296 10.942657 0.838043 +v 29.063614 14.026384 0.932648 +v 32.043167 10.995461 1.896759 +v 29.506569 10.960868 1.209595 +v 33.827797 14.073518 2.453033 +v 39.487244 10.998988 3.026062 +v 35.154686 8.116323 3.073944 +v 34.542656 11.009315 2.641754 +v 37.699326 5.438130 5.034088 +v 36.205078 3.380098 4.904816 +v 35.773262 5.360351 3.603668 +v 17.066597 3.275899 6.798309 +v 15.608574 4.922714 9.076508 +v 11.015984 7.840094 5.510193 +v 17.230988 5.265838 4.088928 +v 15.814461 4.805718 6.015320 +v 15.960968 2.786551 14.438507 +v 11.186119 5.013641 17.763367 +v 11.612778 7.816005 14.019836 +v 13.409363 4.940124 14.882416 +v 6.956017 10.664725 16.586945 +v 5.019501 14.504208 11.182953 +v 6.993080 10.728072 7.423615 +v 8.845924 10.745185 12.675476 +v 12.478958 14.099524 5.095062 +v 15.915161 10.996233 2.775421 +v 10.692116 10.825098 4.916931 +v 31.517685 27.054077 56.326416 +v 30.675880 22.965389 58.084900 +v 32.418533 20.891201 58.515503 +v 33.499542 23.610947 55.783417 +v 32.345406 23.395218 57.604218 +v 27.775543 28.324192 56.716217 +v 26.684799 23.892431 58.596344 +v 28.657196 20.608368 59.470581 +v 28.314621 23.729816 58.014038 +v 27.063622 17.266685 62.132416 +v 29.370682 13.988944 62.498871 +v 31.061142 17.053730 60.919922 +v 29.049744 17.178993 61.488281 +v 34.083244 14.568182 61.668671 +v 35.524818 17.932476 58.119019 +v 32.897522 17.811480 60.209961 +v 33.466797 28.250803 6.546356 +v 34.419479 24.902548 9.828278 +v 35.576378 21.277992 6.527191 +v 33.016945 24.409758 4.223450 +v 34.668427 24.764193 6.733215 +v 34.385582 27.362926 12.579468 +v 34.902550 24.429701 15.072662 +v 36.383003 21.755716 12.643219 +v 35.026970 24.648466 12.413239 +v 36.869492 17.772518 15.183960 +v 43.309669 15.200269 12.332214 +v 37.734146 17.733299 9.523071 +v 38.269112 18.234133 12.939545 +v 42.941231 15.289465 4.627380 +v 35.428566 17.357853 3.475983 +v 36.558151 17.586376 6.275543 +v 21.061783 27.506653 2.502655 +v 22.255630 24.023596 1.865784 +v 20.148003 20.970863 2.194458 +v 18.313522 23.965036 3.111816 +v 19.940193 24.012234 1.666534 +v 23.805618 27.604181 -0.000000 +v 25.618355 24.494978 1.408478 +v 23.924149 21.043255 1.443298 +v 23.918205 24.327723 1.112305 +v 26.635284 17.374390 0.248413 +v 24.415962 14.107189 0.029968 +v 21.857208 17.520182 1.445313 +v 24.259193 17.384092 0.765961 +v 19.362938 14.089740 1.640625 +v 17.740822 17.644711 2.868439 +v 19.880791 17.445469 2.072235 +v 16.521286 29.013014 50.968170 +v 14.237633 28.004765 47.520386 +v 14.580017 22.911325 54.450714 +v 17.879440 24.986446 56.194733 +v 15.593513 26.757805 52.727966 +v 15.519547 30.032125 43.155396 +v 11.830933 27.215115 40.283905 +v 8.158157 24.321211 45.119293 +v 13.757668 27.331020 44.680023 +v 4.740799 21.327675 43.120758 +v 0.000000 18.008190 48.769073 +v 6.827271 21.721378 50.875397 +v 1.464539 22.534128 47.357666 +v 11.492546 13.796887 58.791748 +v 16.476387 17.770626 60.170135 +v 13.816032 17.836605 56.831390 +v 18.385239 2.218634 18.180328 +v 19.657158 2.267014 21.822876 +v 17.981544 2.144979 25.453400 +v 13.231522 2.636296 21.070129 +v 16.234505 2.385252 22.093689 +v 24.718521 2.307259 17.841339 +v 27.837097 2.322165 21.577698 +v 24.570290 2.350888 25.832031 +v 24.714005 2.228248 21.349823 +v 27.795280 2.364560 29.691132 +v 24.487564 2.387381 33.444092 +v 21.168083 2.289629 29.658997 +v 24.510101 2.363796 29.714691 +v 17.613037 1.556496 32.709045 +v 15.522575 3.187632 29.405151 +v 17.891060 2.300898 29.656525 +v 31.099594 40.581699 14.223938 +v 29.824120 40.341370 16.715149 +v 30.214027 40.746307 19.384491 +v 31.358444 39.988064 16.729889 +v 31.171082 40.107059 16.560516 +v 27.137665 40.495308 12.695007 +v 26.952744 40.476624 16.197662 +v 28.123985 40.505676 19.221741 +v 28.238907 40.811867 16.737549 +v 26.385391 39.997433 22.677490 +v 27.304321 40.772793 25.869446 +v 28.758934 40.992355 22.850067 +v 27.581635 40.374081 22.694061 +v 30.532509 41.339813 25.904236 +v 31.743340 40.328377 23.180481 +v 30.305168 41.096237 22.930206 +v 44.615456 6.619479 18.261139 +v 46.466698 9.641607 20.743286 +v 41.739922 6.025069 25.534058 +v 41.072014 3.951436 22.252838 +v 44.080414 6.674806 21.741760 +v 47.330124 13.172195 16.830566 +v 46.942047 16.430546 19.735382 +v 45.681496 12.821390 24.075897 +v 48.496956 13.299644 19.758270 +v 44.349030 15.730093 27.153351 +v 39.236618 10.915374 31.218628 +v 40.773361 8.244412 28.682098 +v 42.414078 11.854811 27.986908 +v 39.574570 5.395088 32.931396 +v 39.054230 3.414053 29.708954 +v 39.477943 5.430469 29.231323 +v 14.600700 1.805503 37.282013 +v 12.157944 3.144569 40.270294 +v 11.714981 6.428526 35.005951 +v 13.675499 4.470478 32.878265 +v 12.908203 3.671624 37.038391 +v 15.276604 1.407584 44.905273 +v 12.131889 3.205034 48.052612 +v 5.545776 5.071091 40.123688 +v 10.291199 2.696084 43.164490 +v 5.205330 8.582711 43.714813 +v 5.754784 14.348155 37.957886 +v 7.728073 9.596075 35.533539 +v 3.214790 8.512903 37.971436 +v 12.498665 14.632147 32.448395 +v 12.892059 10.577510 30.018921 +v 10.906067 10.138247 33.215790 +v 32.456451 38.286362 40.433838 +v 32.595268 34.658226 37.548523 +v 32.368988 37.993576 33.294769 +v 31.638832 40.531693 36.993896 +v 32.292618 38.026981 37.142548 +v 33.261833 31.234985 41.366119 +v 33.547424 27.569832 38.591492 +v 33.320808 31.138727 34.119110 +v 32.992935 31.295097 37.814545 +v 33.297470 27.581266 31.406250 +v 33.250435 31.271656 28.070374 +v 32.735184 34.648827 30.434570 +v 32.950241 31.201738 30.800232 +v 32.386414 37.917622 26.704498 +v 31.687653 40.319683 29.843933 +v 32.493607 38.012585 30.029083 +v 18.653458 40.556114 22.873627 +v 19.386513 36.096703 20.172577 +v 18.435791 33.883110 23.104614 +v 17.720146 37.979244 26.386353 +v 17.253479 38.624069 22.921783 +v 21.563293 38.000782 16.914032 +v 22.072754 37.032558 14.694855 +v 20.620323 33.007782 18.060059 +v 20.867744 36.086002 17.519989 +v 20.420334 30.118219 16.586029 +v 18.846092 27.039392 18.907074 +v 19.040794 30.417414 20.094147 +v 20.263168 29.539860 18.810120 +v 17.557678 27.594551 23.964661 +v 17.719360 31.085926 26.375000 +v 18.070091 30.913515 23.407135 +v 30.999527 2.399884 33.600677 +v 34.195419 2.286631 37.801147 +v 31.083641 2.187240 41.972046 +v 27.797440 2.393542 37.756531 +v 30.998596 2.386567 37.753326 +v 37.329628 2.265780 34.020630 +v 39.213028 3.179354 37.417877 +v 37.575653 1.641063 42.115326 +v 37.236000 2.312169 37.701904 +v 39.581841 2.381916 45.395935 +v 37.584091 1.503163 49.846619 +v 35.769081 1.747851 45.941467 +v 37.612640 1.413665 46.015198 +v 31.352142 1.737237 50.062714 +v 28.025475 1.445039 46.200348 +v 35.370415 2.944409 45.553589 +v 31.193489 40.430519 50.387634 +v 30.079269 41.448631 46.827454 +v 28.406303 41.439316 50.652222 +v 29.964836 40.518993 52.976532 +v 29.846657 41.111671 50.535095 +v 31.518982 40.582947 43.324005 +v 30.156166 41.484352 40.185913 +v 28.744431 42.040951 43.532440 +v 30.316277 41.667892 43.435547 +v 27.041168 41.797615 39.983978 +v 26.901543 41.848209 47.312988 +v 27.098877 42.358631 42.968994 +v 26.904259 40.427528 53.499969 +v 26.801964 42.002621 50.944275 +v 31.049072 2.789108 65.144226 +v 33.991074 4.806763 65.292328 +v 30.116821 7.821414 64.470642 +v 30.639946 4.803129 65.629150 +v 36.340210 3.363173 64.049347 +v 35.599541 7.758511 63.553101 +v 35.996407 5.196499 64.362366 +v 32.188805 10.931057 62.763763 +v 35.361679 11.087420 62.476196 +v 29.548485 10.986227 63.104553 +v 19.047462 7.737987 2.077118 +v 21.999557 5.291780 2.572144 +v 19.288033 3.307164 4.352570 +v 19.080673 4.957308 2.917999 +v 21.895630 10.964215 1.052216 +v 19.124161 10.838943 1.420685 +v 24.619652 8.025114 1.419220 +v 24.496346 10.829559 0.530701 +v 24.893181 3.220326 3.527740 +v 24.782120 5.264057 2.112244 +v 18.682106 38.361996 52.556885 +v 20.363007 35.043266 54.631317 +v 21.860687 38.348049 54.561646 +v 20.512115 38.167088 54.076752 +v 18.311226 31.963774 53.474518 +v 19.998039 28.205349 56.204865 +v 22.139793 31.616192 55.675293 +v 20.288544 31.938398 55.189423 +v 23.725815 28.458752 56.992462 +v 25.398926 31.539728 56.044922 +v 24.077805 34.738342 55.528351 +v 23.906296 31.583986 56.348755 +v 25.576019 38.052738 55.185516 +v 23.444969 38.723343 54.752228 +v 31.119064 37.587860 3.711517 +v 30.255951 34.368546 2.552429 +v 28.498894 37.917400 1.745361 +v 29.788551 40.161942 3.242554 +v 30.244949 37.993736 2.002106 +v 31.440529 31.387594 4.168854 +v 30.981293 28.126520 3.036987 +v 29.277115 31.629868 1.803864 +v 30.360985 31.405870 2.676666 +v 27.315788 27.511391 1.566406 +v 25.629227 31.123901 0.358368 +v 27.148491 34.672619 0.790527 +v 27.304718 30.974752 1.631714 +v 25.429718 37.638199 1.430389 +v 26.851128 40.259529 2.060120 +v 26.986679 37.749508 1.365234 +v 38.293182 3.416933 7.872742 +v 36.638596 2.473901 11.003967 +v 33.734642 2.427848 7.007507 +v 36.500237 2.580132 7.552277 +v 38.825745 3.192608 14.849213 +v 36.846992 2.479864 18.553741 +v 33.920975 2.308291 14.119965 +v 36.783752 2.435796 14.555176 +v 30.915932 2.316863 17.881653 +v 27.890289 2.259087 13.534485 +v 30.878265 2.277279 9.737396 +v 30.918373 2.275355 13.731293 +v 27.870605 2.370400 6.022583 +v 30.804565 2.390773 6.413086 +v 19.805870 40.775166 4.769165 +v 22.111763 42.118233 6.105316 +v 21.919205 41.659523 4.154602 +v 20.566910 40.304115 2.949310 +v 20.869423 41.925934 4.583160 +v 22.324028 40.958355 10.598663 +v 23.096519 40.592056 12.977570 +v 24.559525 41.626289 9.134552 +v 23.146942 41.302658 10.141266 +v 25.659943 40.969578 12.965790 +v 25.823410 41.458652 9.887024 +v 24.485023 41.417740 6.790894 +v 24.820656 41.577290 9.397186 +v 25.099785 41.317509 4.049591 +v 23.561310 40.247822 2.326782 +v 23.599785 41.317028 4.086395 +v 28.387733 37.928051 54.091125 +v 30.071754 34.405304 54.516693 +v 31.010040 37.712688 52.962189 +v 29.889809 37.637245 53.978821 +v 27.053253 34.807682 55.382782 +v 27.001282 38.115955 54.951691 +v 29.129402 31.506241 55.445526 +v 27.446350 31.515789 55.680023 +v 31.843605 31.544989 54.216064 +v 30.381767 31.336187 55.152313 +v 31.754738 34.400932 6.163177 +v 33.029167 31.432032 9.304596 +v 32.368797 31.572969 6.510651 +v 30.948280 40.045517 5.456085 +v 32.116493 37.857700 8.748413 +v 31.696907 37.875271 5.421997 +v 31.699532 40.125694 11.463654 +v 32.712044 38.490261 15.017792 +v 33.828110 35.171799 11.696533 +v 32.874886 38.301140 11.754608 +v 33.891785 31.364048 15.075104 +v 33.997261 31.282026 12.419098 +v 22.079613 37.949902 2.108276 +v 20.699699 34.654369 2.524109 +v 19.738426 38.104382 3.416962 +v 20.784843 37.882286 2.554138 +v 24.086830 34.393036 1.696777 +v 23.807259 37.738113 1.656769 +v 22.595345 30.880646 2.054169 +v 24.084961 30.898865 1.156097 +v 20.083328 31.184765 3.607269 +v 21.390762 31.008368 2.710938 +v 17.682854 38.791157 45.647278 +v 17.652687 35.314240 49.306122 +v 17.883987 38.648174 49.385101 +v 18.089058 38.534962 39.786407 +v 17.512489 35.271706 42.794403 +v 17.744377 38.616390 42.658722 +v 15.042709 33.250359 39.510162 +v 17.116753 32.227070 45.816650 +v 16.862534 32.279877 42.850098 +v 17.116585 32.185638 49.723969 +v 34.991592 20.988955 54.053314 +v 35.135681 23.495724 50.009399 +v 33.800156 26.737507 52.399261 +v 34.386757 23.432795 53.197266 +v 38.922455 18.820156 51.576660 +v 36.499321 18.299223 55.087036 +v 41.062088 19.441999 44.131683 +v 36.151505 21.202862 47.576660 +v 41.274757 19.141586 47.557220 +v 34.974594 23.490238 43.452332 +v 34.297287 27.193302 45.435974 +v 35.232361 23.403355 46.981842 +v 16.902702 21.557365 5.647064 +v 17.366135 24.360912 8.300629 +v 18.053131 27.122089 5.373108 +v 17.557091 24.340298 5.558777 +v 13.989326 18.157570 7.236389 +v 15.890747 17.996487 5.559052 +v 9.508072 18.017345 15.721588 +v 16.478966 21.741655 10.851013 +v 14.449112 18.166992 10.519775 +v 16.864861 24.846802 14.186218 +v 18.046570 27.889189 12.267822 +v 17.543701 24.828604 11.614380 +v 19.569267 21.517904 59.495087 +v 21.831825 24.208527 58.308319 +v 19.579041 24.346918 57.687103 +v 22.029510 17.246891 62.225159 +v 19.478561 17.427464 61.469116 +v 24.955658 20.117355 60.264008 +v 24.438705 17.354572 62.722748 +v 24.330070 23.567446 58.421997 +v 32.689636 20.971128 2.445618 +v 29.545563 24.188232 2.360382 +v 31.863983 24.534573 2.890656 +v 30.850075 17.314829 1.724213 +v 33.407990 17.287247 2.309357 +v 28.188599 20.723782 1.367371 +v 28.631355 17.296505 1.036591 +v 27.698257 24.059078 1.610474 +v 9.997200 5.091848 25.648560 +v 6.472908 7.623639 20.944946 +v 9.058884 4.760430 21.466492 +v 9.468582 7.684034 27.785065 +v 14.206284 4.875134 28.156097 +v 8.692680 13.958576 26.164490 +v 2.927498 10.541357 23.009155 +v 6.151886 10.664452 27.121124 +v 3.822777 13.969650 18.617950 +v 4.436050 10.560753 19.935516 +v 34.768066 24.588280 29.113800 +v 35.817543 21.498850 26.239868 +v 34.806099 24.514149 22.091309 +v 33.388741 27.594999 25.112885 +v 34.410622 24.624804 25.642059 +v 37.373108 18.152143 29.950989 +v 41.451881 18.828506 22.996979 +v 39.348709 18.505396 26.742004 +v 35.951385 21.467030 19.592224 +v 36.995224 17.866886 19.920593 +v 33.654701 27.603022 18.209869 +v 34.483391 24.519341 18.767120 +v 21.962524 2.410289 6.435516 +v 18.940399 2.376510 9.769653 +v 19.138374 2.536601 6.816132 +v 24.903137 2.261920 9.282074 +v 24.923447 2.380266 6.061157 +v 21.697998 2.296808 14.207245 +v 24.826553 2.231360 13.612427 +v 18.612495 2.251791 14.381500 +v 28.242416 41.122677 4.788239 +v 29.821404 41.103928 8.183838 +v 29.702797 40.927040 5.244507 +v 26.504311 41.738865 6.622284 +v 26.675133 41.459553 4.061493 +v 28.987358 40.600735 10.250458 +v 26.877693 41.705078 9.714203 +v 30.211929 41.003365 11.075867 +v 42.213188 8.632973 5.923889 +v 39.020103 5.257007 11.151886 +v 38.670334 5.341708 7.625610 +v 44.267075 11.681178 8.623230 +v 44.330048 12.320513 4.617950 +v 42.529495 7.966421 14.092499 +v 45.102097 11.662545 13.254547 +v 39.127602 5.342426 14.457703 +v 21.353104 39.097507 6.833099 +v 21.270004 34.014606 12.779083 +v 21.789200 38.079823 11.266357 +v 19.070877 35.278019 5.466370 +v 19.278229 38.744030 5.021301 +v 18.583870 31.581308 9.518463 +v 18.495926 31.264715 5.684479 +v 19.533058 30.634405 13.045990 +v 37.175201 2.317859 26.432556 +v 35.943230 2.814873 22.129150 +v 38.240486 2.817083 22.377563 +v 34.156059 2.304172 30.006378 +v 37.076660 2.545310 29.877289 +v 30.956520 2.363264 25.842041 +v 30.982903 2.381894 29.736023 +v 30.954063 2.343909 21.774017 +v 20.566368 41.109531 19.807220 +v 24.153900 40.435410 16.824982 +v 22.770630 39.878803 16.822357 +v 19.501358 41.097694 26.233063 +v 21.024406 41.239822 22.714203 +v 19.542030 41.266357 22.757996 +v 23.280159 40.654274 26.638733 +v 24.974083 40.641655 19.186798 +v 24.032509 40.671551 22.298401 +v 25.871635 40.535709 16.105347 +v 32.948654 34.587151 23.889038 +v 32.295784 37.425358 19.703827 +v 32.596725 37.913242 23.439636 +v 33.304039 31.546818 21.187561 +v 33.087402 31.176592 24.432343 +v 33.217957 35.183128 18.005066 +v 33.618126 31.500305 18.030212 +v 32.458839 38.259228 17.701172 +v 13.265099 17.667221 21.442932 +v 16.104538 21.523968 18.096588 +v 8.565804 17.683897 17.889832 +v 14.560158 17.969288 28.055878 +v 15.945145 21.281136 25.058075 +v 14.911316 17.773754 25.634949 +v 16.942207 24.593899 26.977417 +v 17.320709 24.620953 20.445435 +v 16.829956 24.404127 24.373199 +v 17.290565 24.749231 18.171417 +v 17.964607 1.492623 41.820862 +v 21.695313 1.158866 45.642059 +v 18.195618 -0.000000 46.282288 +v 21.144020 2.163604 37.530609 +v 17.612144 1.574319 37.708923 +v 24.602074 2.145870 41.973175 +v 24.510277 2.364762 37.758270 +v 24.868347 1.429710 45.836670 +v 21.119911 42.049213 29.592194 +v 23.377403 42.026642 32.654663 +v 25.515915 41.138157 29.787354 +v 23.305069 41.735989 29.696198 +v 18.542000 40.435123 30.135834 +v 19.681618 41.566490 32.548462 +v 19.774620 41.479321 29.859589 +v 18.912628 40.354336 36.775208 +v 21.636009 42.058979 36.288605 +v 19.934288 41.715199 36.653717 +v 25.427406 41.727863 35.909760 +v 23.669312 41.705715 35.948608 +v 40.510941 8.252769 35.267487 +v 42.292374 5.653051 39.935547 +v 39.592834 5.315136 36.761200 +v 41.956108 15.130114 34.205627 +v 49.184303 13.541534 37.692841 +v 43.526154 12.288359 34.367065 +v 46.298103 16.488571 40.312012 +v 51.466850 10.982298 41.898773 +v 50.073471 14.096186 40.721863 +v 46.750984 6.996318 43.388824 +v 14.388527 29.641060 36.106232 +v 15.312057 25.225592 33.008240 +v 11.849678 24.146650 36.466980 +v 13.398964 26.710743 36.214813 +v 17.336525 27.616398 30.586823 +v 15.260460 21.675486 30.523499 +v 16.771568 24.299322 30.590546 +v 11.587471 19.386234 34.174591 +v 13.478630 18.301884 31.274353 +v 9.416733 20.533693 38.301727 +v 10.148209 2.236416 58.185883 +v 9.885315 5.539808 51.514587 +v 11.650551 2.209095 52.209106 +v 7.004913 7.834000 63.030243 +v 9.565796 4.985647 64.121735 +v 8.403984 9.385645 56.547150 +v 7.945534 10.468019 62.146881 +v 9.749664 9.211261 51.085846 +v 32.739296 35.026524 50.820435 +v 32.194145 38.154037 46.891968 +v 32.037521 38.243855 50.590607 +v 33.444641 31.213566 47.930603 +v 32.881470 30.945518 51.325226 +v 32.884056 34.959766 44.130737 +v 33.778030 31.272026 44.489410 +v 32.269920 38.183636 43.575073 +v 33.970825 2.174236 62.168549 +v 36.781921 2.331677 57.900024 +v 36.965004 2.467897 61.801727 +v 31.252174 1.863617 58.547333 +v 31.190208 1.794372 62.722900 +v 34.398697 1.611712 54.401245 +v 31.222084 1.892613 54.458862 +v 37.285820 1.900251 53.747589 +v 30.479576 41.457451 32.524323 +v 28.851166 41.621025 35.412018 +v 30.335258 41.373295 36.094177 +v 28.751862 41.262424 29.531738 +v 30.276558 41.087032 29.629761 +v 27.135956 41.451931 32.750458 +v 27.272141 41.314484 29.553833 +v 27.169716 41.702614 35.376007 +v 17.258583 38.446163 32.928680 +v 15.582344 36.196651 36.024506 +v 16.633034 38.649826 36.504395 +v 17.860062 34.683540 30.374481 +v 17.374588 38.998856 30.091736 +v 15.890251 31.512177 33.000427 +v 17.700371 31.210529 30.513947 +v 14.742622 33.202869 35.745361 +v 35.898026 21.846331 32.927277 +v 40.395065 18.780552 36.474030 +v 37.895218 18.099575 33.620239 +v 34.654472 24.453726 35.597382 +v 34.438843 24.589342 31.973602 +v 35.763985 20.979780 40.714905 +v 34.516312 24.047321 39.896149 +v 41.107048 18.854971 40.364288 +# 834 vertices + +vt 0.419590 0.340920 0.000000 +vt 0.408340 0.340410 0.000000 +vt 0.410190 0.330700 0.000000 +vt 0.421580 0.331390 0.000000 +vt 0.397090 0.339900 0.000000 +vt 0.398800 0.330010 0.000000 +vt 0.400510 0.320120 0.000000 +vt 0.412040 0.320990 0.000000 +vt 0.423570 0.321860 0.000000 +vt 0.385830 0.339390 0.000000 +vt 0.387410 0.329320 0.000000 +vt 0.374580 0.338880 0.000000 +vt 0.376020 0.328630 0.000000 +vt 0.377450 0.318390 0.000000 +vt 0.388980 0.319260 0.000000 +vt 0.390560 0.309190 0.000000 +vt 0.402230 0.310240 0.000000 +vt 0.378890 0.308140 0.000000 +vt 0.380320 0.297890 0.000000 +vt 0.392130 0.299120 0.000000 +vt 0.403940 0.300350 0.000000 +vt 0.413890 0.311280 0.000000 +vt 0.425560 0.312330 0.000000 +vt 0.415740 0.301580 0.000000 +vt 0.427550 0.302800 0.000000 +vt 0.367960 0.516290 0.000000 +vt 0.368420 0.521160 0.000000 +vt 0.359130 0.520020 0.000000 +vt 0.358820 0.515010 0.000000 +vt 0.368880 0.526040 0.000000 +vt 0.359440 0.525020 0.000000 +vt 0.349990 0.524010 0.000000 +vt 0.349830 0.518870 0.000000 +vt 0.349670 0.513730 0.000000 +vt 0.369340 0.530910 0.000000 +vt 0.359750 0.530030 0.000000 +vt 0.369800 0.535780 0.000000 +vt 0.360060 0.535030 0.000000 +vt 0.350310 0.534290 0.000000 +vt 0.350150 0.529150 0.000000 +vt 0.340560 0.528270 0.000000 +vt 0.340550 0.522990 0.000000 +vt 0.340560 0.533540 0.000000 +vt 0.330820 0.532790 0.000000 +vt 0.330960 0.527390 0.000000 +vt 0.331100 0.521980 0.000000 +vt 0.340540 0.517720 0.000000 +vt 0.340530 0.512450 0.000000 +vt 0.331240 0.516570 0.000000 +vt 0.331390 0.511170 0.000000 +vt 0.428480 0.344540 0.000000 +vt 0.423780 0.357470 0.000000 +vt 0.415310 0.354020 0.000000 +vt 0.437370 0.348150 0.000000 +vt 0.432260 0.360920 0.000000 +vt 0.427140 0.373690 0.000000 +vt 0.419080 0.370400 0.000000 +vt 0.411030 0.367120 0.000000 +vt 0.446270 0.351770 0.000000 +vt 0.440730 0.364370 0.000000 +vt 0.455160 0.355390 0.000000 +vt 0.449210 0.367820 0.000000 +vt 0.443260 0.380250 0.000000 +vt 0.435200 0.376970 0.000000 +vt 0.429660 0.389570 0.000000 +vt 0.422020 0.386450 0.000000 +vt 0.437300 0.392680 0.000000 +vt 0.431350 0.405110 0.000000 +vt 0.424130 0.402160 0.000000 +vt 0.416910 0.399220 0.000000 +vt 0.414380 0.383340 0.000000 +vt 0.406740 0.380220 0.000000 +vt 0.409680 0.396270 0.000000 +vt 0.402460 0.393320 0.000000 +vt 0.047440 0.327260 0.000000 +vt 0.051070 0.340410 0.000000 +vt 0.039850 0.340950 0.000000 +vt 0.036070 0.327810 0.000000 +vt 0.054690 0.353560 0.000000 +vt 0.043630 0.354090 0.000000 +vt 0.032560 0.354620 0.000000 +vt 0.028630 0.341500 0.000000 +vt 0.024690 0.328370 0.000000 +vt 0.058320 0.366700 0.000000 +vt 0.047410 0.367230 0.000000 +vt 0.061950 0.379850 0.000000 +vt 0.051190 0.380360 0.000000 +vt 0.040430 0.380880 0.000000 +vt 0.036500 0.367750 0.000000 +vt 0.025590 0.368270 0.000000 +vt 0.021500 0.355160 0.000000 +vt 0.029670 0.381390 0.000000 +vt 0.018920 0.381900 0.000000 +vt 0.014670 0.368790 0.000000 +vt 0.010430 0.355690 0.000000 +vt 0.017410 0.342040 0.000000 +vt 0.013320 0.328930 0.000000 +vt 0.006190 0.342590 0.000000 +vt 0.001950 0.329480 0.000000 +vt 0.212000 0.324480 0.000000 +vt 0.211920 0.337620 0.000000 +vt 0.203110 0.336940 0.000000 +vt 0.202730 0.323780 0.000000 +vt 0.211830 0.350760 0.000000 +vt 0.203480 0.350090 0.000000 +vt 0.195130 0.349420 0.000000 +vt 0.194300 0.336260 0.000000 +vt 0.193460 0.323090 0.000000 +vt 0.211740 0.363900 0.000000 +vt 0.203850 0.363240 0.000000 +vt 0.211650 0.377050 0.000000 +vt 0.204230 0.376400 0.000000 +vt 0.196800 0.375750 0.000000 +vt 0.195960 0.362590 0.000000 +vt 0.188080 0.361930 0.000000 +vt 0.186780 0.348750 0.000000 +vt 0.189370 0.375100 0.000000 +vt 0.181940 0.374460 0.000000 +vt 0.180190 0.361270 0.000000 +vt 0.178430 0.348080 0.000000 +vt 0.185490 0.335570 0.000000 +vt 0.184200 0.322400 0.000000 +vt 0.176680 0.334890 0.000000 +vt 0.174930 0.321700 0.000000 +vt 0.249010 0.328080 0.000000 +vt 0.259200 0.329060 0.000000 +vt 0.256920 0.341910 0.000000 +vt 0.246980 0.340940 0.000000 +vt 0.269390 0.330030 0.000000 +vt 0.266870 0.342870 0.000000 +vt 0.264350 0.355710 0.000000 +vt 0.254650 0.354750 0.000000 +vt 0.244940 0.353800 0.000000 +vt 0.279570 0.331000 0.000000 +vt 0.276820 0.343840 0.000000 +vt 0.289760 0.331980 0.000000 +vt 0.286760 0.344800 0.000000 +vt 0.283770 0.357630 0.000000 +vt 0.274060 0.356670 0.000000 +vt 0.271300 0.369500 0.000000 +vt 0.261840 0.368550 0.000000 +vt 0.280770 0.370450 0.000000 +vt 0.277770 0.383280 0.000000 +vt 0.268550 0.382330 0.000000 +vt 0.259320 0.381390 0.000000 +vt 0.252370 0.367600 0.000000 +vt 0.242910 0.366650 0.000000 +vt 0.250100 0.380450 0.000000 +vt 0.240870 0.379510 0.000000 +vt 0.425150 0.470400 0.000000 +vt 0.420360 0.468830 0.000000 +vt 0.428670 0.455050 0.000000 +vt 0.434110 0.456940 0.000000 +vt 0.415580 0.467270 0.000000 +vt 0.423230 0.453160 0.000000 +vt 0.430870 0.439050 0.000000 +vt 0.436970 0.441260 0.000000 +vt 0.443070 0.443480 0.000000 +vt 0.410790 0.465700 0.000000 +vt 0.417790 0.451270 0.000000 +vt 0.406010 0.464130 0.000000 +vt 0.412350 0.449370 0.000000 +vt 0.418680 0.434620 0.000000 +vt 0.424780 0.436830 0.000000 +vt 0.431770 0.422400 0.000000 +vt 0.438520 0.424940 0.000000 +vt 0.425020 0.419860 0.000000 +vt 0.438760 0.407970 0.000000 +vt 0.446170 0.410830 0.000000 +vt 0.445270 0.427480 0.000000 +vt 0.452030 0.430020 0.000000 +vt 0.453580 0.413690 0.000000 +vt 0.460990 0.416560 0.000000 +vt 0.186070 0.438060 0.000000 +vt 0.176740 0.438360 0.000000 +vt 0.175670 0.422500 0.000000 +vt 0.185040 0.422160 0.000000 +vt 0.167410 0.438650 0.000000 +vt 0.166300 0.422850 0.000000 +vt 0.165190 0.407040 0.000000 +vt 0.174600 0.406650 0.000000 +vt 0.184000 0.406260 0.000000 +vt 0.158080 0.438940 0.000000 +vt 0.156930 0.423190 0.000000 +vt 0.148750 0.439230 0.000000 +vt 0.147560 0.423530 0.000000 +vt 0.146370 0.407830 0.000000 +vt 0.155780 0.407440 0.000000 +vt 0.154630 0.391680 0.000000 +vt 0.164080 0.391240 0.000000 +vt 0.145180 0.392120 0.000000 +vt 0.143990 0.376420 0.000000 +vt 0.153480 0.375930 0.000000 +vt 0.162970 0.375440 0.000000 +vt 0.173530 0.390800 0.000000 +vt 0.182970 0.390360 0.000000 +vt 0.172460 0.374950 0.000000 +vt 0.232710 0.441440 0.000000 +vt 0.226890 0.440860 0.000000 +vt 0.228560 0.425370 0.000000 +vt 0.234750 0.425960 0.000000 +vt 0.221070 0.440280 0.000000 +vt 0.222370 0.424780 0.000000 +vt 0.223670 0.409280 0.000000 +vt 0.230230 0.409880 0.000000 +vt 0.236790 0.410470 0.000000 +vt 0.215250 0.439710 0.000000 +vt 0.216180 0.424190 0.000000 +vt 0.209430 0.439130 0.000000 +vt 0.209990 0.423610 0.000000 +vt 0.210540 0.408090 0.000000 +vt 0.217110 0.408680 0.000000 +vt 0.218030 0.393170 0.000000 +vt 0.224970 0.393780 0.000000 +vt 0.211100 0.392570 0.000000 +vt 0.218960 0.377660 0.000000 +vt 0.226260 0.378280 0.000000 +vt 0.231900 0.394380 0.000000 +vt 0.238830 0.394990 0.000000 +vt 0.233570 0.378890 0.000000 +vt 0.385830 0.456280 0.000000 +vt 0.375650 0.455090 0.000000 +vt 0.379680 0.439470 0.000000 +vt 0.389990 0.440540 0.000000 +vt 0.365460 0.453900 0.000000 +vt 0.369370 0.438400 0.000000 +vt 0.373270 0.422900 0.000000 +vt 0.383710 0.423850 0.000000 +vt 0.394150 0.424800 0.000000 +vt 0.355280 0.452720 0.000000 +vt 0.359060 0.437340 0.000000 +vt 0.345100 0.451530 0.000000 +vt 0.348750 0.436270 0.000000 +vt 0.352400 0.421010 0.000000 +vt 0.362840 0.421960 0.000000 +vt 0.366620 0.406580 0.000000 +vt 0.377180 0.407400 0.000000 +vt 0.356050 0.405750 0.000000 +vt 0.359710 0.390490 0.000000 +vt 0.370390 0.391200 0.000000 +vt 0.381080 0.391900 0.000000 +vt 0.387740 0.408230 0.000000 +vt 0.398300 0.409060 0.000000 +vt 0.391770 0.392610 0.000000 +vt 0.289180 0.321850 0.000000 +vt 0.299600 0.322870 0.000000 +vt 0.299870 0.333160 0.000000 +vt 0.288600 0.311730 0.000000 +vt 0.299330 0.312580 0.000000 +vt 0.310060 0.313440 0.000000 +vt 0.310020 0.323890 0.000000 +vt 0.309980 0.334340 0.000000 +vt 0.288030 0.301610 0.000000 +vt 0.299060 0.302300 0.000000 +vt 0.287450 0.291480 0.000000 +vt 0.298800 0.292010 0.000000 +vt 0.310140 0.292530 0.000000 +vt 0.310100 0.302980 0.000000 +vt 0.321140 0.303670 0.000000 +vt 0.320790 0.314290 0.000000 +vt 0.321490 0.293050 0.000000 +vt 0.332830 0.293570 0.000000 +vt 0.332180 0.304360 0.000000 +vt 0.331520 0.315140 0.000000 +vt 0.320440 0.324910 0.000000 +vt 0.320090 0.335530 0.000000 +vt 0.330860 0.325930 0.000000 +vt 0.330200 0.336710 0.000000 +vt 0.255400 0.546070 0.000000 +vt 0.255270 0.541010 0.000000 +vt 0.263950 0.542110 0.000000 +vt 0.263920 0.547220 0.000000 +vt 0.255130 0.535950 0.000000 +vt 0.263970 0.537010 0.000000 +vt 0.272820 0.538070 0.000000 +vt 0.272630 0.543210 0.000000 +vt 0.272440 0.548360 0.000000 +vt 0.255000 0.530890 0.000000 +vt 0.264000 0.531910 0.000000 +vt 0.254870 0.525830 0.000000 +vt 0.264030 0.526800 0.000000 +vt 0.273200 0.527770 0.000000 +vt 0.273010 0.532920 0.000000 +vt 0.282010 0.533930 0.000000 +vt 0.281660 0.539120 0.000000 +vt 0.282360 0.528740 0.000000 +vt 0.291530 0.529710 0.000000 +vt 0.291010 0.534950 0.000000 +vt 0.290500 0.540180 0.000000 +vt 0.281300 0.544310 0.000000 +vt 0.280950 0.549500 0.000000 +vt 0.289980 0.545420 0.000000 +vt 0.289470 0.550650 0.000000 +vt 0.134080 0.323490 0.000000 +vt 0.136560 0.336720 0.000000 +vt 0.126370 0.337140 0.000000 +vt 0.123750 0.323920 0.000000 +vt 0.139040 0.349960 0.000000 +vt 0.128990 0.350360 0.000000 +vt 0.118940 0.350760 0.000000 +vt 0.116180 0.337550 0.000000 +vt 0.113420 0.324340 0.000000 +vt 0.141510 0.363190 0.000000 +vt 0.131600 0.363580 0.000000 +vt 0.134220 0.376800 0.000000 +vt 0.124450 0.377180 0.000000 +vt 0.121690 0.363970 0.000000 +vt 0.111780 0.364360 0.000000 +vt 0.108890 0.351160 0.000000 +vt 0.114680 0.377560 0.000000 +vt 0.104910 0.377930 0.000000 +vt 0.101870 0.364750 0.000000 +vt 0.098830 0.351560 0.000000 +vt 0.105990 0.337960 0.000000 +vt 0.103090 0.324760 0.000000 +vt 0.095800 0.338370 0.000000 +vt 0.092760 0.325180 0.000000 +vt 0.341290 0.337250 0.000000 +vt 0.337810 0.349870 0.000000 +vt 0.326790 0.349230 0.000000 +vt 0.352390 0.337800 0.000000 +vt 0.348830 0.350510 0.000000 +vt 0.345260 0.363220 0.000000 +vt 0.334330 0.362480 0.000000 +vt 0.323390 0.361750 0.000000 +vt 0.363480 0.338340 0.000000 +vt 0.359840 0.351140 0.000000 +vt 0.370860 0.351780 0.000000 +vt 0.367140 0.364680 0.000000 +vt 0.356200 0.363950 0.000000 +vt 0.352560 0.376760 0.000000 +vt 0.341700 0.375930 0.000000 +vt 0.363420 0.377580 0.000000 +vt 0.348920 0.389560 0.000000 +vt 0.338140 0.388640 0.000000 +vt 0.330840 0.375100 0.000000 +vt 0.319980 0.374270 0.000000 +vt 0.327360 0.387710 0.000000 +vt 0.316570 0.386790 0.000000 +vt 0.082280 0.503180 0.000000 +vt 0.080340 0.487960 0.000000 +vt 0.089830 0.487530 0.000000 +vt 0.091720 0.502740 0.000000 +vt 0.078400 0.472740 0.000000 +vt 0.087950 0.472310 0.000000 +vt 0.097500 0.471890 0.000000 +vt 0.099320 0.487100 0.000000 +vt 0.101150 0.502310 0.000000 +vt 0.076450 0.457520 0.000000 +vt 0.086060 0.457100 0.000000 +vt 0.074510 0.442300 0.000000 +vt 0.084170 0.441890 0.000000 +vt 0.093840 0.441470 0.000000 +vt 0.095670 0.456680 0.000000 +vt 0.105270 0.456270 0.000000 +vt 0.107040 0.471470 0.000000 +vt 0.103500 0.441060 0.000000 +vt 0.113160 0.440650 0.000000 +vt 0.114880 0.455850 0.000000 +vt 0.116590 0.471050 0.000000 +vt 0.108820 0.486670 0.000000 +vt 0.110590 0.501880 0.000000 +vt 0.118310 0.486250 0.000000 +vt 0.120020 0.501450 0.000000 +vt 0.294280 0.506890 0.000000 +vt 0.285790 0.506440 0.000000 +vt 0.288490 0.491540 0.000000 +vt 0.297100 0.492050 0.000000 +vt 0.277300 0.505990 0.000000 +vt 0.279880 0.491020 0.000000 +vt 0.282470 0.476060 0.000000 +vt 0.291190 0.476640 0.000000 +vt 0.299920 0.477210 0.000000 +vt 0.268810 0.505540 0.000000 +vt 0.271270 0.490510 0.000000 +vt 0.260320 0.505080 0.000000 +vt 0.262660 0.489990 0.000000 +vt 0.265010 0.474900 0.000000 +vt 0.273740 0.475480 0.000000 +vt 0.276200 0.460450 0.000000 +vt 0.285050 0.461090 0.000000 +vt 0.267350 0.459800 0.000000 +vt 0.269700 0.444710 0.000000 +vt 0.278670 0.445420 0.000000 +vt 0.287630 0.446120 0.000000 +vt 0.293900 0.461730 0.000000 +vt 0.302750 0.462380 0.000000 +vt 0.296600 0.446830 0.000000 +vt 0.305570 0.447540 0.000000 +vt 0.333350 0.283490 0.000000 +vt 0.345140 0.284620 0.000000 +vt 0.344710 0.294650 0.000000 +vt 0.333880 0.273400 0.000000 +vt 0.345570 0.274590 0.000000 +vt 0.357260 0.275780 0.000000 +vt 0.356920 0.285760 0.000000 +vt 0.356580 0.295730 0.000000 +vt 0.334400 0.263320 0.000000 +vt 0.345990 0.264560 0.000000 +vt 0.334920 0.253230 0.000000 +vt 0.346420 0.254530 0.000000 +vt 0.357930 0.255820 0.000000 +vt 0.357590 0.265800 0.000000 +vt 0.369190 0.267040 0.000000 +vt 0.368950 0.276970 0.000000 +vt 0.369440 0.257120 0.000000 +vt 0.380950 0.258420 0.000000 +vt 0.380790 0.268280 0.000000 +vt 0.380640 0.278150 0.000000 +vt 0.368700 0.286890 0.000000 +vt 0.368450 0.296810 0.000000 +vt 0.380480 0.288020 0.000000 +vt 0.365200 0.554220 0.000000 +vt 0.355740 0.553810 0.000000 +vt 0.356820 0.549110 0.000000 +vt 0.366350 0.549610 0.000000 +vt 0.346290 0.553400 0.000000 +vt 0.347290 0.548620 0.000000 +vt 0.348300 0.543840 0.000000 +vt 0.357900 0.544420 0.000000 +vt 0.367500 0.545000 0.000000 +vt 0.336830 0.552980 0.000000 +vt 0.337760 0.548120 0.000000 +vt 0.327370 0.552570 0.000000 +vt 0.328240 0.547630 0.000000 +vt 0.329100 0.542680 0.000000 +vt 0.338700 0.543260 0.000000 +vt 0.339630 0.538400 0.000000 +vt 0.349300 0.539060 0.000000 +vt 0.329960 0.537740 0.000000 +vt 0.358980 0.539730 0.000000 +vt 0.368650 0.540390 0.000000 +vt 0.464010 0.359000 0.000000 +vt 0.457700 0.371240 0.000000 +vt 0.472860 0.362610 0.000000 +vt 0.466190 0.374660 0.000000 +vt 0.459520 0.386720 0.000000 +vt 0.451380 0.383480 0.000000 +vt 0.481710 0.366220 0.000000 +vt 0.474680 0.378090 0.000000 +vt 0.490560 0.369830 0.000000 +vt 0.483170 0.381510 0.000000 +vt 0.475780 0.393190 0.000000 +vt 0.467650 0.389960 0.000000 +vt 0.460610 0.401830 0.000000 +vt 0.452840 0.398780 0.000000 +vt 0.468380 0.404870 0.000000 +vt 0.445070 0.395730 0.000000 +vt 0.238210 0.340110 0.000000 +vt 0.239760 0.327180 0.000000 +vt 0.236660 0.353040 0.000000 +vt 0.228390 0.352280 0.000000 +vt 0.229450 0.339280 0.000000 +vt 0.230510 0.326280 0.000000 +vt 0.235120 0.365960 0.000000 +vt 0.227320 0.365280 0.000000 +vt 0.219530 0.364590 0.000000 +vt 0.220110 0.351520 0.000000 +vt 0.220680 0.338450 0.000000 +vt 0.221260 0.325380 0.000000 +vt 0.372430 0.501290 0.000000 +vt 0.376670 0.502880 0.000000 +vt 0.371930 0.517750 0.000000 +vt 0.376900 0.486280 0.000000 +vt 0.381400 0.488000 0.000000 +vt 0.385910 0.489710 0.000000 +vt 0.380900 0.504460 0.000000 +vt 0.375900 0.519220 0.000000 +vt 0.381360 0.471280 0.000000 +vt 0.386140 0.473120 0.000000 +vt 0.390880 0.458240 0.000000 +vt 0.395920 0.460200 0.000000 +vt 0.390920 0.474960 0.000000 +vt 0.395690 0.476790 0.000000 +vt 0.390420 0.491420 0.000000 +vt 0.400970 0.462160 0.000000 +vt 0.400470 0.478630 0.000000 +vt 0.394920 0.493140 0.000000 +vt 0.385140 0.506050 0.000000 +vt 0.379870 0.520680 0.000000 +vt 0.389380 0.507640 0.000000 +vt 0.383830 0.522150 0.000000 +vt 0.187360 0.500280 0.000000 +vt 0.187040 0.484730 0.000000 +vt 0.192080 0.484910 0.000000 +vt 0.192130 0.500430 0.000000 +vt 0.186710 0.469170 0.000000 +vt 0.192020 0.469380 0.000000 +vt 0.197330 0.469590 0.000000 +vt 0.197120 0.485090 0.000000 +vt 0.196900 0.500590 0.000000 +vt 0.186390 0.453620 0.000000 +vt 0.191960 0.453860 0.000000 +vt 0.191910 0.438330 0.000000 +vt 0.197750 0.438600 0.000000 +vt 0.197540 0.454090 0.000000 +vt 0.203110 0.454330 0.000000 +vt 0.202630 0.469800 0.000000 +vt 0.203590 0.438860 0.000000 +vt 0.208690 0.454570 0.000000 +vt 0.207940 0.470010 0.000000 +vt 0.202150 0.485270 0.000000 +vt 0.201670 0.500750 0.000000 +vt 0.207190 0.485460 0.000000 +vt 0.206450 0.500900 0.000000 +vt 0.250090 0.253240 0.000000 +vt 0.260670 0.253130 0.000000 +vt 0.258840 0.262570 0.000000 +vt 0.248060 0.262600 0.000000 +vt 0.271240 0.253030 0.000000 +vt 0.269610 0.262540 0.000000 +vt 0.267980 0.272060 0.000000 +vt 0.257010 0.272010 0.000000 +vt 0.246030 0.271960 0.000000 +vt 0.281820 0.252920 0.000000 +vt 0.280390 0.262510 0.000000 +vt 0.292400 0.252820 0.000000 +vt 0.291160 0.262490 0.000000 +vt 0.289920 0.272150 0.000000 +vt 0.278950 0.272100 0.000000 +vt 0.277520 0.281690 0.000000 +vt 0.266350 0.281570 0.000000 +vt 0.288690 0.281820 0.000000 +vt 0.276080 0.291280 0.000000 +vt 0.264710 0.291080 0.000000 +vt 0.255180 0.281440 0.000000 +vt 0.244010 0.281320 0.000000 +vt 0.253350 0.290880 0.000000 +vt 0.241980 0.290680 0.000000 +vt 0.225850 0.503200 0.000000 +vt 0.234460 0.503670 0.000000 +vt 0.232680 0.508410 0.000000 +vt 0.223930 0.507790 0.000000 +vt 0.243080 0.504140 0.000000 +vt 0.241440 0.509030 0.000000 +vt 0.239800 0.513920 0.000000 +vt 0.230910 0.513150 0.000000 +vt 0.222010 0.512380 0.000000 +vt 0.251700 0.504610 0.000000 +vt 0.250200 0.509650 0.000000 +vt 0.258950 0.510270 0.000000 +vt 0.257590 0.515460 0.000000 +vt 0.248700 0.514690 0.000000 +vt 0.247190 0.519730 0.000000 +vt 0.238160 0.518810 0.000000 +vt 0.256230 0.520650 0.000000 +vt 0.245690 0.524760 0.000000 +vt 0.236520 0.523690 0.000000 +vt 0.229130 0.517890 0.000000 +vt 0.220090 0.516970 0.000000 +vt 0.227350 0.522620 0.000000 +vt 0.218180 0.521560 0.000000 +vt 0.401200 0.527230 0.000000 +vt 0.396860 0.525960 0.000000 +vt 0.402730 0.511680 0.000000 +vt 0.407190 0.513020 0.000000 +vt 0.392520 0.524690 0.000000 +vt 0.398280 0.510330 0.000000 +vt 0.404050 0.495980 0.000000 +vt 0.408610 0.497400 0.000000 +vt 0.413170 0.498820 0.000000 +vt 0.388180 0.523420 0.000000 +vt 0.393830 0.508990 0.000000 +vt 0.399480 0.494560 0.000000 +vt 0.405140 0.480130 0.000000 +vt 0.409810 0.481620 0.000000 +vt 0.414490 0.483120 0.000000 +vt 0.419160 0.484610 0.000000 +vt 0.177300 0.453830 0.000000 +vt 0.177860 0.469300 0.000000 +vt 0.169000 0.469420 0.000000 +vt 0.168200 0.454040 0.000000 +vt 0.178420 0.484770 0.000000 +vt 0.178980 0.500240 0.000000 +vt 0.170600 0.500200 0.000000 +vt 0.169800 0.484810 0.000000 +vt 0.161180 0.484850 0.000000 +vt 0.160150 0.469550 0.000000 +vt 0.162220 0.500160 0.000000 +vt 0.153840 0.500120 0.000000 +vt 0.152560 0.484900 0.000000 +vt 0.151290 0.469680 0.000000 +vt 0.159110 0.454250 0.000000 +vt 0.150020 0.454450 0.000000 +vt 0.221000 0.502620 0.000000 +vt 0.222470 0.487180 0.000000 +vt 0.227560 0.487760 0.000000 +vt 0.216150 0.502050 0.000000 +vt 0.217380 0.486610 0.000000 +vt 0.218610 0.471170 0.000000 +vt 0.223940 0.471740 0.000000 +vt 0.229280 0.472320 0.000000 +vt 0.211300 0.501470 0.000000 +vt 0.212290 0.486030 0.000000 +vt 0.213270 0.470590 0.000000 +vt 0.214260 0.455150 0.000000 +vt 0.219840 0.455730 0.000000 +vt 0.225420 0.456300 0.000000 +vt 0.231000 0.456880 0.000000 +vt 0.363020 0.500030 0.000000 +vt 0.353620 0.498770 0.000000 +vt 0.357570 0.483820 0.000000 +vt 0.367230 0.485050 0.000000 +vt 0.344220 0.497520 0.000000 +vt 0.334810 0.496260 0.000000 +vt 0.338240 0.481350 0.000000 +vt 0.347900 0.482580 0.000000 +vt 0.351590 0.467650 0.000000 +vt 0.361520 0.468860 0.000000 +vt 0.341670 0.466440 0.000000 +vt 0.371440 0.470070 0.000000 +vt 0.036190 0.444060 0.000000 +vt 0.031870 0.428520 0.000000 +vt 0.041750 0.428060 0.000000 +vt 0.045770 0.443620 0.000000 +vt 0.027550 0.412980 0.000000 +vt 0.037720 0.412500 0.000000 +vt 0.047890 0.412030 0.000000 +vt 0.051620 0.427600 0.000000 +vt 0.055350 0.443180 0.000000 +vt 0.023240 0.397440 0.000000 +vt 0.033700 0.396950 0.000000 +vt 0.044160 0.396450 0.000000 +vt 0.054620 0.395960 0.000000 +vt 0.058060 0.411550 0.000000 +vt 0.065090 0.395460 0.000000 +vt 0.068230 0.411080 0.000000 +vt 0.061500 0.427150 0.000000 +vt 0.064930 0.442740 0.000000 +vt 0.071370 0.426690 0.000000 +vt 0.243990 0.426810 0.000000 +vt 0.241960 0.442260 0.000000 +vt 0.246030 0.411350 0.000000 +vt 0.255260 0.412230 0.000000 +vt 0.253240 0.427650 0.000000 +vt 0.251210 0.443080 0.000000 +vt 0.248060 0.395900 0.000000 +vt 0.257290 0.396810 0.000000 +vt 0.266520 0.397720 0.000000 +vt 0.264500 0.413110 0.000000 +vt 0.275750 0.398630 0.000000 +vt 0.273740 0.413990 0.000000 +vt 0.262480 0.428500 0.000000 +vt 0.260450 0.443890 0.000000 +vt 0.271720 0.429350 0.000000 +vt 0.395580 0.442750 0.000000 +vt 0.400280 0.427260 0.000000 +vt 0.406410 0.429710 0.000000 +vt 0.401170 0.444960 0.000000 +vt 0.404980 0.411760 0.000000 +vt 0.411660 0.414460 0.000000 +vt 0.418340 0.417160 0.000000 +vt 0.412550 0.432160 0.000000 +vt 0.406760 0.447160 0.000000 +vt 0.191270 0.422520 0.000000 +vt 0.190640 0.406720 0.000000 +vt 0.197270 0.407170 0.000000 +vt 0.197510 0.422890 0.000000 +vt 0.190010 0.390910 0.000000 +vt 0.197040 0.391460 0.000000 +vt 0.204070 0.392010 0.000000 +vt 0.203910 0.407630 0.000000 +vt 0.203750 0.423250 0.000000 +vt 0.296770 0.345910 0.000000 +vt 0.306780 0.347020 0.000000 +vt 0.303580 0.359690 0.000000 +vt 0.293670 0.358660 0.000000 +vt 0.316780 0.348120 0.000000 +vt 0.313480 0.360720 0.000000 +vt 0.310180 0.373310 0.000000 +vt 0.300370 0.372360 0.000000 +vt 0.306870 0.385910 0.000000 +vt 0.297170 0.385030 0.000000 +vt 0.290570 0.371410 0.000000 +vt 0.287470 0.384150 0.000000 +vt 0.111100 0.424970 0.000000 +vt 0.120210 0.424610 0.000000 +vt 0.122060 0.440290 0.000000 +vt 0.109040 0.409290 0.000000 +vt 0.118370 0.408920 0.000000 +vt 0.127700 0.408560 0.000000 +vt 0.129330 0.424250 0.000000 +vt 0.130960 0.439940 0.000000 +vt 0.106970 0.393610 0.000000 +vt 0.116520 0.393240 0.000000 +vt 0.126080 0.392870 0.000000 +vt 0.135630 0.392500 0.000000 +vt 0.137040 0.408190 0.000000 +vt 0.138440 0.423890 0.000000 +vt 0.139850 0.439590 0.000000 +vt 0.247250 0.318730 0.000000 +vt 0.257740 0.319510 0.000000 +vt 0.245490 0.309380 0.000000 +vt 0.256270 0.309970 0.000000 +vt 0.267050 0.310560 0.000000 +vt 0.268220 0.320290 0.000000 +vt 0.243740 0.300030 0.000000 +vt 0.254810 0.300420 0.000000 +vt 0.265880 0.300820 0.000000 +vt 0.276950 0.301210 0.000000 +vt 0.277830 0.311140 0.000000 +vt 0.278700 0.321070 0.000000 +vt 0.221360 0.541070 0.000000 +vt 0.220570 0.536190 0.000000 +vt 0.229240 0.537390 0.000000 +vt 0.229870 0.542320 0.000000 +vt 0.219770 0.531310 0.000000 +vt 0.228610 0.532470 0.000000 +vt 0.237450 0.533630 0.000000 +vt 0.237920 0.538600 0.000000 +vt 0.238380 0.543570 0.000000 +vt 0.218970 0.526430 0.000000 +vt 0.227980 0.527550 0.000000 +vt 0.236990 0.528660 0.000000 +vt 0.245990 0.529780 0.000000 +vt 0.246290 0.534790 0.000000 +vt 0.246590 0.539810 0.000000 +vt 0.246890 0.544820 0.000000 +vt 0.166650 0.335350 0.000000 +vt 0.164710 0.322150 0.000000 +vt 0.168590 0.348550 0.000000 +vt 0.158740 0.349020 0.000000 +vt 0.156620 0.335810 0.000000 +vt 0.154500 0.322600 0.000000 +vt 0.170520 0.361750 0.000000 +vt 0.160850 0.362230 0.000000 +vt 0.151180 0.362710 0.000000 +vt 0.148890 0.349490 0.000000 +vt 0.146590 0.336270 0.000000 +vt 0.144290 0.323050 0.000000 +vt 0.253890 0.489430 0.000000 +vt 0.245110 0.488870 0.000000 +vt 0.247140 0.473610 0.000000 +vt 0.256080 0.474250 0.000000 +vt 0.236340 0.488320 0.000000 +vt 0.238210 0.472960 0.000000 +vt 0.240090 0.457610 0.000000 +vt 0.249170 0.458340 0.000000 +vt 0.258260 0.459070 0.000000 +vt 0.303030 0.252920 0.000000 +vt 0.301970 0.262690 0.000000 +vt 0.313660 0.253030 0.000000 +vt 0.312780 0.262900 0.000000 +vt 0.311900 0.272780 0.000000 +vt 0.300910 0.272460 0.000000 +vt 0.324290 0.253130 0.000000 +vt 0.323590 0.263110 0.000000 +vt 0.322890 0.273090 0.000000 +vt 0.322190 0.283070 0.000000 +vt 0.311020 0.282650 0.000000 +vt 0.299850 0.282240 0.000000 +vt 0.267610 0.510850 0.000000 +vt 0.276270 0.511430 0.000000 +vt 0.275250 0.516880 0.000000 +vt 0.266420 0.516170 0.000000 +vt 0.284930 0.512020 0.000000 +vt 0.293590 0.512600 0.000000 +vt 0.292900 0.518300 0.000000 +vt 0.284070 0.517590 0.000000 +vt 0.283220 0.523170 0.000000 +vt 0.274220 0.522330 0.000000 +vt 0.292220 0.524010 0.000000 +vt 0.265220 0.521490 0.000000 +vt 0.126870 0.485910 0.000000 +vt 0.128480 0.501110 0.000000 +vt 0.125270 0.470700 0.000000 +vt 0.133940 0.470360 0.000000 +vt 0.135440 0.485570 0.000000 +vt 0.136930 0.500780 0.000000 +vt 0.123660 0.455500 0.000000 +vt 0.132450 0.455150 0.000000 +vt 0.141230 0.454800 0.000000 +vt 0.142620 0.470020 0.000000 +vt 0.144000 0.485230 0.000000 +vt 0.145380 0.500450 0.000000 +vt 0.285270 0.399470 0.000000 +vt 0.294790 0.400300 0.000000 +vt 0.292400 0.415580 0.000000 +vt 0.283070 0.414780 0.000000 +vt 0.304310 0.401140 0.000000 +vt 0.313820 0.401970 0.000000 +vt 0.311070 0.417160 0.000000 +vt 0.301740 0.416370 0.000000 +vt 0.299170 0.431600 0.000000 +vt 0.290020 0.430850 0.000000 +vt 0.308320 0.432350 0.000000 +vt 0.280870 0.430100 0.000000 +vt 0.364730 0.327960 0.000000 +vt 0.353440 0.327280 0.000000 +vt 0.354480 0.316760 0.000000 +vt 0.365970 0.317580 0.000000 +vt 0.342150 0.326600 0.000000 +vt 0.343000 0.315950 0.000000 +vt 0.343850 0.305300 0.000000 +vt 0.355530 0.306250 0.000000 +vt 0.367210 0.307190 0.000000 +vt 0.301900 0.524850 0.000000 +vt 0.301350 0.530480 0.000000 +vt 0.302450 0.519220 0.000000 +vt 0.312000 0.520140 0.000000 +vt 0.311590 0.525700 0.000000 +vt 0.311170 0.531250 0.000000 +vt 0.303000 0.513590 0.000000 +vt 0.303560 0.507960 0.000000 +vt 0.312830 0.509030 0.000000 +vt 0.312420 0.514590 0.000000 +vt 0.321830 0.515580 0.000000 +vt 0.321550 0.521060 0.000000 +vt 0.322110 0.510100 0.000000 +vt 0.321270 0.526540 0.000000 +vt 0.321000 0.532020 0.000000 +vt 0.084620 0.338880 0.000000 +vt 0.081430 0.325700 0.000000 +vt 0.087800 0.352060 0.000000 +vt 0.076760 0.352560 0.000000 +vt 0.073430 0.339390 0.000000 +vt 0.070100 0.326220 0.000000 +vt 0.090980 0.365240 0.000000 +vt 0.094170 0.378410 0.000000 +vt 0.083430 0.378890 0.000000 +vt 0.080100 0.365730 0.000000 +vt 0.069210 0.366220 0.000000 +vt 0.065730 0.353060 0.000000 +vt 0.072690 0.379370 0.000000 +vt 0.062250 0.339900 0.000000 +vt 0.058770 0.326740 0.000000 +vt 0.335210 0.450530 0.000000 +vt 0.338640 0.435290 0.000000 +vt 0.325330 0.449530 0.000000 +vt 0.328530 0.434310 0.000000 +vt 0.331740 0.419080 0.000000 +vt 0.342070 0.420050 0.000000 +vt 0.315450 0.448530 0.000000 +vt 0.318430 0.433330 0.000000 +vt 0.321400 0.418120 0.000000 +vt 0.324380 0.402920 0.000000 +vt 0.334940 0.403860 0.000000 +vt 0.345500 0.404800 0.000000 +vt 0.381970 0.352340 0.000000 +vt 0.393090 0.352900 0.000000 +vt 0.389080 0.365900 0.000000 +vt 0.378110 0.365290 0.000000 +vt 0.404200 0.353460 0.000000 +vt 0.400060 0.366510 0.000000 +vt 0.395910 0.379560 0.000000 +vt 0.385080 0.378900 0.000000 +vt 0.374250 0.378240 0.000000 +vt 0.044390 0.505080 0.000000 +vt 0.042340 0.489830 0.000000 +vt 0.051840 0.489360 0.000000 +vt 0.053860 0.504610 0.000000 +vt 0.040290 0.474570 0.000000 +vt 0.049820 0.474110 0.000000 +vt 0.059340 0.473660 0.000000 +vt 0.061340 0.488890 0.000000 +vt 0.063340 0.504130 0.000000 +vt 0.038240 0.459320 0.000000 +vt 0.047800 0.458870 0.000000 +vt 0.057350 0.458420 0.000000 +vt 0.066900 0.457970 0.000000 +vt 0.068870 0.473200 0.000000 +vt 0.070840 0.488430 0.000000 +vt 0.072810 0.503650 0.000000 +vt 0.426380 0.264460 0.000000 +vt 0.426670 0.274050 0.000000 +vt 0.415200 0.272610 0.000000 +vt 0.415020 0.262950 0.000000 +vt 0.426970 0.283630 0.000000 +vt 0.415380 0.282260 0.000000 +vt 0.403800 0.280890 0.000000 +vt 0.403730 0.271170 0.000000 +vt 0.403660 0.261440 0.000000 +vt 0.427260 0.293220 0.000000 +vt 0.415560 0.291920 0.000000 +vt 0.403870 0.290620 0.000000 +vt 0.392170 0.289320 0.000000 +vt 0.392220 0.279520 0.000000 +vt 0.392260 0.269730 0.000000 +vt 0.392310 0.259930 0.000000 +vt 0.317900 0.552090 0.000000 +vt 0.318670 0.547070 0.000000 +vt 0.308420 0.551610 0.000000 +vt 0.309110 0.546520 0.000000 +vt 0.309800 0.541430 0.000000 +vt 0.319450 0.542060 0.000000 +vt 0.298950 0.551130 0.000000 +vt 0.299550 0.545970 0.000000 +vt 0.300150 0.540810 0.000000 +vt 0.300750 0.535650 0.000000 +vt 0.310490 0.536340 0.000000 +vt 0.320220 0.537040 0.000000 +vt 0.325390 0.495210 0.000000 +vt 0.315960 0.494160 0.000000 +vt 0.319080 0.479280 0.000000 +vt 0.328660 0.480320 0.000000 +vt 0.306530 0.493110 0.000000 +vt 0.309500 0.478250 0.000000 +vt 0.312480 0.463390 0.000000 +vt 0.322210 0.464410 0.000000 +vt 0.331940 0.465420 0.000000 +vt 0.096500 0.394080 0.000000 +vt 0.098830 0.409740 0.000000 +vt 0.088630 0.410180 0.000000 +vt 0.086030 0.394540 0.000000 +vt 0.101170 0.425400 0.000000 +vt 0.091230 0.425830 0.000000 +vt 0.081300 0.426260 0.000000 +vt 0.078430 0.410630 0.000000 +vt 0.075560 0.395000 0.000000 +# 909 texture coords + +g rocksCombined013 +usemtl rocksSculpts +f 215/3 214/4 1/1 211/2 +f 212/6 215/3 211/2 55/5 +f 59/7 213/8 215/3 212/6 +f 213/8 58/9 214/4 215/3 +f 219/11 212/6 55/5 216/10 +f 217/13 219/11 216/10 45/12 +f 56/14 218/15 219/11 217/13 +f 218/15 59/7 212/6 219/11 +f 223/16 222/17 59/7 218/15 +f 220/18 223/16 218/15 56/14 +f 51/19 221/20 223/16 220/18 +f 221/20 57/21 222/17 223/16 +f 226/22 225/23 58/9 213/8 +f 222/17 226/22 213/8 59/7 +f 57/21 224/24 226/22 222/17 +f 224/24 20/25 225/23 226/22 +f 231/28 230/29 5/26 227/27 +f 228/31 231/28 227/27 60/30 +f 64/32 229/33 231/28 228/31 +f 229/33 63/34 230/29 231/28 +f 235/36 228/31 60/30 232/35 +f 233/38 235/36 232/35 21/37 +f 61/39 234/40 235/36 233/38 +f 234/40 64/32 228/31 235/36 +f 239/41 238/42 64/32 234/40 +f 236/43 239/41 234/40 61/39 +f 52/44 237/45 239/41 236/43 +f 237/45 62/46 238/42 239/41 +f 242/47 241/48 63/34 229/33 +f 238/42 242/47 229/33 64/32 +f 62/46 240/49 242/47 238/42 +f 240/49 49/50 241/48 242/47 +f 246/52 245/53 1/1 214/51 +f 243/55 246/52 214/51 58/54 +f 68/56 244/57 246/52 243/55 +f 244/57 67/58 245/53 246/52 +f 249/60 243/55 58/54 225/59 +f 247/62 249/60 225/59 20/61 +f 65/63 248/64 249/60 247/62 +f 248/64 68/56 243/55 249/60 +f 253/65 252/66 68/56 248/64 +f 250/67 253/65 248/64 65/63 +f 23/68 251/69 253/65 250/67 +f 251/69 66/70 252/66 253/65 +f 256/71 255/72 67/58 244/57 +f 252/66 256/71 244/57 68/56 +f 66/70 254/73 256/71 252/66 +f 254/73 10/74 255/72 256/71 +f 261/77 260/78 48/75 257/76 +f 258/80 261/77 257/76 69/79 +f 73/81 259/82 261/77 258/80 +f 259/82 72/83 260/78 261/77 +f 265/85 258/80 69/79 262/84 +f 263/87 265/85 262/84 50/86 +f 70/88 264/89 265/85 263/87 +f 264/89 73/81 258/80 265/85 +f 269/90 268/91 73/81 264/89 +f 266/92 269/90 264/89 70/88 +f 9/93 267/94 269/90 266/92 +f 267/94 71/95 268/91 269/90 +f 272/96 271/97 72/83 259/82 +f 268/91 272/96 259/82 73/81 +f 71/95 270/98 272/96 268/91 +f 270/98 2/99 271/97 272/96 +f 277/102 276/103 19/100 273/101 +f 274/105 277/102 273/101 74/104 +f 78/106 275/107 277/102 274/105 +f 275/107 77/108 276/103 277/102 +f 281/110 274/105 74/104 278/109 +f 279/112 281/110 278/109 24/111 +f 75/113 280/114 281/110 279/112 +f 280/114 78/106 274/105 281/110 +f 285/115 284/116 78/106 280/114 +f 282/117 285/115 280/114 75/113 +f 11/118 283/119 285/115 282/117 +f 283/119 76/120 284/116 285/115 +f 288/121 287/122 77/108 275/107 +f 284/116 288/121 275/107 78/106 +f 76/120 286/123 288/121 284/116 +f 286/123 4/124 287/122 288/121 +f 293/127 292/128 3/125 289/126 +f 290/130 293/127 289/126 79/129 +f 83/131 291/132 293/127 290/130 +f 291/132 82/133 292/128 293/127 +f 297/135 290/130 79/129 294/134 +f 295/137 297/135 294/134 38/136 +f 80/138 296/139 297/135 295/137 +f 296/139 83/131 290/130 297/135 +f 301/140 300/141 83/131 296/139 +f 298/142 301/140 296/139 80/138 +f 40/143 299/144 301/140 298/142 +f 299/144 81/145 300/141 301/140 +f 304/146 303/147 82/133 291/132 +f 300/141 304/146 291/132 83/131 +f 81/145 302/148 304/146 300/141 +f 302/148 12/149 303/147 304/146 +f 309/152 308/153 28/150 305/151 +f 306/155 309/152 305/151 84/154 +f 88/156 307/157 309/152 306/155 +f 307/157 87/158 308/153 309/152 +f 313/160 306/155 84/154 310/159 +f 311/162 313/160 310/159 33/161 +f 85/163 312/164 313/160 311/162 +f 312/164 88/156 306/155 313/160 +f 317/165 316/166 88/156 312/164 +f 314/167 317/165 312/164 85/163 +f 23/68 315/168 317/165 314/167 +f 315/168 86/169 316/166 317/165 +f 320/170 319/171 87/158 307/157 +f 316/166 320/170 307/157 88/156 +f 86/169 318/172 320/170 316/166 +f 318/172 9/173 319/171 320/170 +f 325/176 324/177 29/174 321/175 +f 322/179 325/176 321/175 89/178 +f 93/180 323/181 325/176 322/179 +f 323/181 92/182 324/177 325/176 +f 329/184 322/179 89/178 326/183 +f 327/186 329/184 326/183 43/185 +f 90/187 328/188 329/184 327/186 +f 328/188 93/180 322/179 329/184 +f 333/189 332/190 93/180 328/188 +f 330/191 333/189 328/188 90/187 +f 37/192 331/193 333/189 330/191 +f 331/193 91/194 332/190 333/189 +f 336/195 335/196 92/182 323/181 +f 332/190 336/195 323/181 93/180 +f 91/194 334/197 336/195 332/190 +f 334/197 11/118 335/196 336/195 +f 341/200 340/201 30/198 337/199 +f 338/203 341/200 337/199 94/202 +f 98/204 339/205 341/200 338/203 +f 339/205 97/206 340/201 341/200 +f 345/208 338/203 94/202 342/207 +f 343/210 345/208 342/207 34/209 +f 95/211 344/212 345/208 343/210 +f 344/212 98/204 338/203 345/208 +f 349/213 348/214 98/204 344/212 +f 346/215 349/213 344/212 95/211 +f 24/111 347/216 349/213 346/215 +f 347/216 96/217 348/214 349/213 +f 352/218 351/219 97/206 339/205 +f 348/214 352/218 339/205 98/204 +f 96/217 350/220 352/218 348/214 +f 350/220 12/149 351/219 352/218 +f 357/223 356/224 27/221 353/222 +f 354/226 357/223 353/222 99/225 +f 103/227 355/228 357/223 354/226 +f 355/228 102/229 356/224 357/223 +f 361/231 354/226 99/225 358/230 +f 359/233 361/231 358/230 53/232 +f 100/234 360/235 361/231 359/233 +f 360/235 103/227 354/226 361/231 +f 365/236 364/237 103/227 360/235 +f 362/238 365/236 360/235 100/234 +f 47/239 363/240 365/236 362/238 +f 363/240 101/241 364/237 365/236 +f 368/242 367/243 102/229 355/228 +f 364/237 368/242 355/228 103/227 +f 101/241 366/244 368/242 364/237 +f 366/244 10/74 367/243 368/242 +f 373/246 372/247 38/136 369/245 +f 370/249 373/246 369/245 104/248 +f 108/250 371/251 373/246 370/249 +f 371/251 107/252 372/247 373/246 +f 377/254 370/249 104/248 374/253 +f 375/256 377/254 374/253 41/255 +f 105/257 376/258 377/254 375/256 +f 376/258 108/250 370/249 377/254 +f 381/259 380/260 108/250 376/258 +f 378/261 381/259 376/258 105/257 +f 25/262 379/263 381/259 378/261 +f 379/263 106/264 380/260 381/259 +f 384/265 383/266 107/252 371/251 +f 380/260 384/265 371/251 108/250 +f 106/264 382/267 384/265 380/260 +f 382/267 13/268 383/266 384/265 +f 389/271 388/272 39/269 385/270 +f 386/274 389/271 385/270 109/273 +f 113/275 387/276 389/271 386/274 +f 387/276 112/277 388/272 389/271 +f 393/279 386/274 109/273 390/278 +f 391/281 393/279 390/278 42/280 +f 110/282 392/283 393/279 391/281 +f 392/283 113/275 386/274 393/279 +f 397/284 396/285 113/275 392/283 +f 394/286 397/284 392/283 110/282 +f 26/287 395/288 397/284 394/286 +f 395/288 111/289 396/285 397/284 +f 400/290 399/291 112/277 387/276 +f 396/285 400/290 387/276 113/275 +f 111/289 398/292 400/290 396/285 +f 398/292 15/293 399/291 400/290 +f 405/296 404/297 35/294 401/295 +f 402/299 405/296 401/295 114/298 +f 118/300 403/301 405/296 402/299 +f 403/301 117/302 404/297 405/296 +f 409/304 402/299 114/298 406/303 +f 407/305 409/304 406/303 37/192 +f 115/306 408/307 409/304 407/305 +f 408/307 118/300 402/299 409/304 +f 413/308 412/309 118/300 408/307 +f 410/310 413/308 408/307 115/306 +f 17/311 411/312 413/308 410/310 +f 411/312 116/313 412/309 413/308 +f 416/314 415/315 117/302 403/301 +f 412/309 416/314 403/301 118/300 +f 116/313 414/316 416/314 412/309 +f 414/316 14/317 415/315 416/314 +f 421/319 420/320 13/268 417/318 +f 418/322 421/319 417/318 119/321 +f 123/323 419/324 421/319 418/322 +f 419/324 122/325 420/320 421/319 +f 425/327 418/322 119/321 422/326 +f 423/328 425/327 422/326 45/12 +f 120/329 424/330 425/327 423/328 +f 424/330 123/323 418/322 425/327 +f 429/331 428/332 123/323 424/330 +f 426/333 429/331 424/330 120/329 +f 47/239 427/334 429/331 426/333 +f 427/334 121/335 428/332 429/331 +f 432/336 431/337 122/325 419/324 +f 428/332 432/336 419/324 123/323 +f 121/335 430/338 432/336 428/332 +f 430/338 18/339 431/337 432/336 +f 437/342 436/343 46/340 433/341 +f 434/345 437/342 433/341 124/344 +f 128/346 435/347 437/342 434/345 +f 435/347 127/348 436/343 437/342 +f 441/350 434/345 124/344 438/349 +f 439/352 441/350 438/349 54/351 +f 125/353 440/354 441/350 439/352 +f 440/354 128/346 434/345 441/350 +f 445/355 444/356 128/346 440/354 +f 442/357 445/355 440/354 125/353 +f 31/358 443/359 445/355 442/357 +f 443/359 126/360 444/356 445/355 +f 448/361 447/362 127/348 435/347 +f 444/356 448/361 435/347 128/346 +f 126/360 446/363 448/361 444/356 +f 446/363 15/364 447/362 448/361 +f 453/367 452/368 16/365 449/366 +f 450/370 453/367 449/366 129/369 +f 133/371 451/372 453/367 450/370 +f 451/372 132/373 452/368 453/367 +f 457/375 450/370 129/369 454/374 +f 455/377 457/375 454/374 36/376 +f 130/378 456/379 457/375 455/377 +f 456/379 133/371 450/370 457/375 +f 461/380 460/381 133/371 456/379 +f 458/382 461/380 456/379 130/378 +f 44/383 459/384 461/380 458/382 +f 459/384 131/385 460/381 461/380 +f 464/386 463/387 132/373 451/372 +f 460/381 464/386 451/372 133/371 +f 131/385 462/388 464/386 460/381 +f 462/388 32/389 463/387 464/386 +f 469/391 468/392 25/262 465/390 +f 466/394 469/391 465/390 134/393 +f 138/395 467/396 469/391 466/394 +f 467/396 137/397 468/392 469/391 +f 473/399 466/394 134/393 470/398 +f 471/401 473/399 470/398 14/400 +f 135/402 472/403 473/399 471/401 +f 472/403 138/395 466/394 473/399 +f 477/404 476/405 138/395 472/403 +f 474/406 477/404 472/403 135/402 +f 48/407 475/408 477/404 474/406 +f 475/408 136/409 476/405 477/404 +f 480/410 479/411 137/397 467/396 +f 476/405 480/410 467/396 138/395 +f 136/409 478/412 480/410 476/405 +f 478/412 51/19 479/411 480/410 +f 485/415 484/416 6/413 481/414 +f 482/418 485/415 481/414 139/417 +f 142/419 483/420 485/415 482/418 +f 483/420 141/421 484/416 485/415 +f 489/423 482/418 139/417 486/422 +f 487/425 489/423 486/422 46/424 +f 140/426 488/427 489/423 487/425 +f 488/427 142/419 482/418 489/423 +f 492/428 491/429 142/419 488/427 +f 490/430 492/428 488/427 140/426 +f 52/44 236/43 492/428 490/430 +f 236/43 61/39 491/429 492/428 +f 494/431 493/432 141/421 483/420 +f 491/429 494/431 483/420 142/419 +f 61/39 233/38 494/431 491/429 +f 233/38 21/37 493/432 494/431 +f 498/434 247/62 20/61 495/433 +f 496/436 498/434 495/433 143/435 +f 144/437 497/438 498/434 496/436 +f 497/438 65/63 247/62 498/434 +f 501/440 496/436 143/435 499/439 +f 270/442 501/440 499/439 2/441 +f 71/443 500/444 501/440 270/442 +f 500/444 144/437 496/436 501/440 +f 503/445 502/446 144/437 500/444 +f 267/447 503/445 500/444 71/443 +f 9/173 318/172 503/445 267/447 +f 318/172 86/169 502/446 503/445 +f 504/448 250/67 65/63 497/438 +f 502/446 504/448 497/438 144/437 +f 86/169 315/168 504/448 502/446 +f 315/168 23/68 250/67 504/448 +f 508/449 507/450 3/125 292/128 +f 505/451 508/449 292/128 82/133 +f 146/452 506/453 508/449 505/451 +f 506/453 145/454 507/450 508/449 +f 510/455 505/451 82/133 303/147 +f 350/220 510/455 303/147 12/149 +f 96/217 509/456 510/455 350/220 +f 509/456 146/452 505/451 510/455 +f 512/457 511/458 146/452 509/456 +f 347/216 512/457 509/456 96/217 +f 24/111 278/109 512/457 347/216 +f 278/109 74/104 511/458 512/457 +f 514/459 513/460 145/454 506/453 +f 511/458 514/459 506/453 146/452 +f 74/104 273/101 514/459 511/458 +f 273/101 19/100 513/460 514/459 +f 518/462 227/463 5/26 515/461 +f 516/465 518/462 515/461 147/464 +f 150/466 517/467 518/462 516/465 +f 517/467 60/468 227/463 518/462 +f 522/470 516/465 147/464 519/469 +f 520/471 522/470 519/469 27/221 +f 148/472 521/473 522/470 520/471 +f 521/473 150/466 516/465 522/470 +f 526/474 525/475 150/466 521/473 +f 523/476 526/474 521/473 148/472 +f 33/161 524/477 526/474 523/476 +f 524/477 149/478 525/475 526/474 +f 528/479 232/480 60/468 517/467 +f 525/475 528/479 517/467 150/466 +f 149/478 527/481 528/479 525/475 +f 527/481 21/482 232/480 528/479 +f 533/485 532/486 8/483 529/484 +f 530/488 533/485 529/484 151/487 +f 155/489 531/490 533/485 530/488 +f 531/490 154/491 532/486 533/485 +f 537/493 530/488 151/487 534/492 +f 535/494 537/493 534/492 29/174 +f 152/495 536/496 537/493 535/494 +f 536/496 155/489 530/488 537/493 +f 541/497 540/498 155/489 536/496 +f 538/499 541/497 536/496 152/495 +f 34/209 539/500 541/497 538/499 +f 539/500 153/501 540/498 541/497 +f 544/502 543/503 154/491 531/490 +f 540/498 544/502 531/490 155/489 +f 153/501 542/504 544/502 540/498 +f 542/504 22/505 543/503 544/502 +f 548/508 287/509 4/506 545/507 +f 546/511 548/508 545/507 156/510 +f 159/512 547/513 548/508 546/511 +f 547/513 77/514 287/509 548/508 +f 552/516 546/511 156/510 549/515 +f 550/518 552/516 549/515 35/517 +f 157/519 551/520 552/516 550/518 +f 551/520 159/512 546/511 552/516 +f 556/521 555/522 159/512 551/520 +f 553/523 556/521 551/520 157/519 +f 41/255 554/524 556/521 553/523 +f 554/524 158/525 555/522 556/521 +f 558/526 276/527 77/514 547/513 +f 555/522 558/526 547/513 159/512 +f 158/525 557/528 558/526 555/522 +f 557/528 19/529 276/527 558/526 +f 563/532 562/533 7/530 559/531 +f 560/535 563/532 559/531 160/534 +f 164/536 561/537 563/532 560/535 +f 561/537 163/538 562/533 563/532 +f 567/540 560/535 160/534 564/539 +f 565/541 567/540 564/539 36/376 +f 161/542 566/543 567/540 565/541 +f 566/543 164/536 560/535 567/540 +f 571/544 570/545 164/536 566/543 +f 568/546 571/544 566/543 161/542 +f 42/280 569/547 571/544 568/546 +f 569/547 162/548 570/545 571/544 +f 574/549 573/550 163/538 561/537 +f 570/545 574/549 561/537 164/536 +f 162/548 572/551 574/549 570/545 +f 572/551 22/552 573/550 574/549 +f 578/555 577/556 6/553 484/554 +f 575/558 578/555 484/554 141/557 +f 166/559 576/560 578/555 575/558 +f 576/560 165/561 577/556 578/555 +f 580/563 575/558 141/557 493/562 +f 527/481 580/563 493/562 21/482 +f 149/478 579/564 580/563 527/481 +f 579/564 166/559 575/558 580/563 +f 582/565 581/566 166/559 579/564 +f 524/477 582/565 579/564 149/478 +f 33/161 310/159 582/565 524/477 +f 310/159 84/154 581/566 582/565 +f 584/567 583/568 165/561 576/560 +f 581/566 584/567 576/560 166/559 +f 84/154 305/151 584/567 581/566 +f 305/151 28/150 583/568 584/567 +f 587/569 321/175 29/174 534/492 +f 585/570 587/569 534/492 151/487 +f 169/571 586/572 587/569 585/570 +f 586/572 89/178 321/175 587/569 +f 590/573 585/570 151/487 529/484 +f 588/574 590/573 529/484 8/483 +f 167/575 589/576 590/573 588/574 +f 589/576 169/571 585/570 590/573 +f 594/577 593/578 169/571 589/576 +f 591/579 594/577 589/576 167/575 +f 39/580 592/581 594/577 591/579 +f 592/581 168/582 593/578 594/577 +f 596/583 326/183 89/178 586/572 +f 593/578 596/583 586/572 169/571 +f 168/582 595/584 596/583 593/578 +f 595/584 43/185 326/183 596/583 +f 600/586 599/587 7/530 562/585 +f 597/589 600/586 562/585 163/588 +f 171/590 598/591 600/586 597/589 +f 598/591 170/592 599/587 600/586 +f 602/594 597/589 163/588 573/593 +f 542/504 602/594 573/593 22/505 +f 153/501 601/595 602/594 542/504 +f 601/595 171/590 597/589 602/594 +f 604/596 603/597 171/590 601/595 +f 539/500 604/596 601/595 153/501 +f 34/209 342/207 604/596 539/500 +f 342/207 94/202 603/597 604/596 +f 606/598 605/599 170/592 598/591 +f 603/597 606/598 598/591 171/590 +f 94/202 337/199 606/598 603/597 +f 337/199 30/198 605/599 606/598 +f 609/600 515/461 5/26 230/29 +f 607/601 609/600 230/29 63/34 +f 173/602 608/603 609/600 607/601 +f 608/603 147/464 515/461 609/600 +f 612/604 607/601 63/34 241/48 +f 610/605 612/604 241/48 49/50 +f 172/606 611/607 612/604 610/605 +f 611/607 173/602 607/601 612/604 +f 615/608 614/609 173/602 611/607 +f 613/610 615/608 611/607 172/606 +f 53/232 358/230 615/608 613/610 +f 358/230 99/225 614/609 615/608 +f 616/611 519/469 147/464 608/603 +f 614/609 616/611 608/603 173/602 +f 99/225 353/222 616/611 614/609 +f 353/222 27/221 519/469 616/611 +f 620/614 619/615 28/612 308/613 +f 617/617 620/614 308/613 87/616 +f 176/618 618/619 620/614 617/617 +f 618/619 175/620 619/615 620/614 +f 622/622 617/617 87/616 319/621 +f 266/92 622/622 319/621 9/93 +f 70/88 621/623 622/622 266/92 +f 621/623 176/618 617/617 622/622 +f 625/624 624/625 176/618 621/623 +f 263/87 625/624 621/623 70/88 +f 50/86 623/626 625/624 263/87 +f 623/626 174/627 624/625 625/624 +f 628/628 627/629 175/620 618/619 +f 624/625 628/628 618/619 176/618 +f 174/627 626/630 628/628 624/625 +f 626/630 54/351 627/629 628/628 +f 632/631 631/632 30/198 340/201 +f 629/633 632/631 340/201 97/206 +f 179/634 630/635 632/631 629/633 +f 630/635 178/636 631/632 632/631 +f 634/637 629/633 97/206 351/219 +f 302/148 634/637 351/219 12/149 +f 81/145 633/638 634/637 302/148 +f 633/638 179/634 629/633 634/637 +f 637/639 636/640 179/634 633/638 +f 299/144 637/639 633/638 81/145 +f 40/143 635/641 637/639 299/144 +f 635/641 177/642 636/640 637/639 +f 640/643 639/644 178/636 630/635 +f 636/640 640/643 630/635 179/634 +f 177/642 638/645 640/643 636/640 +f 638/645 44/383 639/644 640/643 +f 643/646 520/471 27/221 356/224 +f 641/647 643/646 356/224 102/229 +f 180/648 642/649 643/646 641/647 +f 642/649 148/472 520/471 643/646 +f 645/650 641/647 102/229 367/243 +f 254/73 645/650 367/243 10/74 +f 66/70 644/651 645/650 254/73 +f 644/651 180/648 641/647 645/650 +f 647/652 646/653 180/648 644/651 +f 251/69 647/652 644/651 66/70 +f 23/68 314/167 647/652 251/69 +f 314/167 85/163 646/653 647/652 +f 648/654 523/476 148/472 642/649 +f 646/653 648/654 642/649 180/648 +f 85/163 311/162 648/654 646/653 +f 311/162 33/161 523/476 648/654 +f 651/655 535/494 29/174 324/177 +f 649/656 651/655 324/177 92/182 +f 181/657 650/658 651/655 649/656 +f 650/658 152/495 535/494 651/655 +f 653/659 649/656 92/182 335/196 +f 282/117 653/659 335/196 11/118 +f 75/113 652/660 653/659 282/117 +f 652/660 181/657 649/656 653/659 +f 655/661 654/662 181/657 652/660 +f 279/112 655/661 652/660 75/113 +f 24/111 346/215 655/661 279/112 +f 346/215 95/211 654/662 655/661 +f 656/663 538/499 152/495 650/658 +f 654/662 656/663 650/658 181/657 +f 95/211 343/210 656/663 654/662 +f 343/210 34/209 538/499 656/663 +f 659/664 295/137 38/136 372/247 +f 657/665 659/664 372/247 107/252 +f 183/666 658/667 659/664 657/665 +f 658/667 80/138 295/137 659/664 +f 661/668 657/665 107/252 383/266 +f 420/320 661/668 383/266 13/268 +f 122/325 660/669 661/668 420/320 +f 660/669 183/666 657/665 661/668 +f 664/670 663/671 183/666 660/669 +f 431/337 664/670 660/669 122/325 +f 18/339 662/672 664/670 431/337 +f 662/672 182/673 663/671 664/670 +f 666/674 298/142 80/138 658/667 +f 663/671 666/674 658/667 183/666 +f 182/673 665/675 666/674 663/671 +f 665/675 40/143 298/142 666/674 +f 671/677 670/678 31/358 667/676 +f 668/680 671/677 667/676 184/679 +f 186/681 669/682 671/677 668/680 +f 669/682 185/683 670/678 671/677 +f 674/685 668/680 184/679 672/684 +f 410/310 674/685 672/684 17/311 +f 115/306 673/686 674/685 410/310 +f 673/686 186/681 668/680 674/685 +f 676/687 675/688 186/681 673/686 +f 407/305 676/687 673/686 115/306 +f 37/192 330/191 676/687 407/305 +f 330/191 90/187 675/688 676/687 +f 678/689 677/690 185/683 669/682 +f 675/688 678/689 669/682 186/681 +f 90/187 327/186 678/689 675/688 +f 327/186 43/185 677/690 678/689 +f 681/692 289/126 3/125 507/691 +f 679/694 681/692 507/691 145/693 +f 187/695 680/696 681/692 679/694 +f 680/696 79/129 289/126 681/692 +f 683/698 679/694 145/693 513/697 +f 557/528 683/698 513/697 19/529 +f 158/525 682/699 683/698 557/528 +f 682/699 187/695 679/694 683/698 +f 685/700 684/701 187/695 682/699 +f 554/524 685/700 682/699 158/525 +f 41/255 374/253 685/700 554/524 +f 374/253 104/248 684/701 685/700 +f 686/702 294/134 79/129 680/696 +f 684/701 686/702 680/696 187/695 +f 104/248 369/245 686/702 684/701 +f 369/245 38/136 294/134 686/702 +f 689/705 588/706 8/703 532/704 +f 687/708 689/705 532/704 154/707 +f 188/709 688/710 689/705 687/708 +f 688/710 167/711 588/706 689/705 +f 691/713 687/708 154/707 543/712 +f 572/551 691/713 543/712 22/552 +f 162/548 690/714 691/713 572/551 +f 690/714 188/709 687/708 691/713 +f 693/715 692/716 188/709 690/714 +f 569/547 693/715 690/714 162/548 +f 42/280 390/278 693/715 569/547 +f 390/278 109/273 692/716 693/715 +f 694/717 591/718 167/711 688/710 +f 692/716 694/717 688/710 188/709 +f 109/273 385/270 694/717 692/716 +f 385/270 39/269 591/718 694/717 +f 697/719 545/720 4/124 286/123 +f 695/721 697/719 286/123 76/120 +f 189/722 696/723 697/719 695/721 +f 696/723 156/724 545/720 697/719 +f 699/725 695/721 76/120 283/119 +f 334/197 699/725 283/119 11/118 +f 91/194 698/726 699/725 334/197 +f 698/726 189/722 695/721 699/725 +f 701/727 700/728 189/722 698/726 +f 331/193 701/727 698/726 91/194 +f 37/192 406/303 701/727 331/193 +f 406/303 114/298 700/728 701/727 +f 702/729 549/730 156/724 696/723 +f 700/728 702/729 696/723 189/722 +f 114/298 401/295 702/729 700/728 +f 401/295 35/294 549/730 702/729 +f 705/731 455/377 36/376 564/539 +f 703/732 705/731 564/539 160/534 +f 190/733 704/734 705/731 703/732 +f 704/734 130/378 455/377 705/731 +f 707/735 703/732 160/534 559/531 +f 599/587 707/735 559/531 7/530 +f 170/592 706/736 707/735 599/587 +f 706/736 190/733 703/732 707/735 +f 709/737 708/738 190/733 706/736 +f 605/599 709/737 706/736 170/592 +f 30/198 631/632 709/737 605/599 +f 631/632 178/636 708/738 709/737 +f 710/739 458/382 130/378 704/734 +f 708/738 710/739 704/734 190/733 +f 178/636 639/644 710/739 708/738 +f 639/644 44/383 458/382 710/739 +f 713/741 550/518 35/517 404/740 +f 711/743 713/741 404/740 117/742 +f 191/744 712/745 713/741 711/743 +f 712/745 157/519 550/518 713/741 +f 715/747 711/743 117/742 415/746 +f 470/398 715/747 415/746 14/400 +f 134/393 714/748 715/747 470/398 +f 714/748 191/744 711/743 715/747 +f 717/749 716/750 191/744 714/748 +f 465/390 717/749 714/748 134/393 +f 25/262 378/261 717/749 465/390 +f 378/261 105/257 716/750 717/749 +f 718/751 553/523 157/519 712/745 +f 716/750 718/751 712/745 191/744 +f 105/257 375/256 718/751 716/750 +f 375/256 41/255 553/523 718/751 +f 721/752 565/541 36/376 454/374 +f 719/753 721/752 454/374 129/369 +f 193/754 720/755 721/752 719/753 +f 720/755 161/542 565/541 721/752 +f 724/756 719/753 129/369 449/366 +f 722/757 724/756 449/366 16/365 +f 192/758 723/759 724/756 722/757 +f 723/759 193/754 719/753 724/756 +f 727/760 726/761 193/754 723/759 +f 725/762 727/760 723/759 192/758 +f 26/287 394/286 727/760 725/762 +f 394/286 110/282 726/761 727/760 +f 728/763 568/546 161/542 720/755 +f 726/761 728/763 720/755 193/754 +f 110/282 391/281 728/763 726/761 +f 391/281 42/280 568/546 728/763 +f 731/764 399/765 15/364 446/363 +f 729/766 731/764 446/363 126/360 +f 194/767 730/768 731/764 729/766 +f 730/768 112/769 399/765 731/764 +f 733/770 729/766 126/360 443/359 +f 670/678 733/770 443/359 31/358 +f 185/683 732/771 733/770 670/678 +f 732/771 194/767 729/766 733/770 +f 735/772 734/773 194/767 732/771 +f 677/690 735/772 732/771 185/683 +f 43/185 595/584 735/772 677/690 +f 595/584 168/582 734/773 735/772 +f 736/774 388/775 112/769 730/768 +f 734/773 736/774 730/768 194/767 +f 168/582 592/581 736/774 734/773 +f 592/581 39/580 388/775 736/774 +f 739/776 635/641 40/143 665/675 +f 737/777 739/776 665/675 182/673 +f 196/778 738/779 739/776 737/777 +f 738/779 177/642 635/641 739/776 +f 742/780 737/777 182/673 662/672 +f 740/781 742/780 662/672 18/339 +f 195/782 741/783 742/780 740/781 +f 741/783 196/778 737/777 742/780 +f 745/784 744/785 196/778 741/783 +f 743/786 745/784 741/783 195/782 +f 32/389 462/388 745/784 743/786 +f 462/388 131/385 744/785 745/784 +f 746/787 638/645 177/642 738/779 +f 744/785 746/787 738/779 196/778 +f 131/385 459/384 746/787 744/785 +f 459/384 44/383 638/645 746/787 +f 749/788 217/13 45/12 422/326 +f 747/789 749/788 422/326 119/321 +f 197/790 748/791 749/788 747/789 +f 748/791 56/14 217/13 749/788 +f 751/792 747/789 119/321 417/318 +f 382/267 751/792 417/318 13/268 +f 106/264 750/793 751/792 382/267 +f 750/793 197/790 747/789 751/792 +f 753/794 752/795 197/790 750/793 +f 379/263 753/794 750/793 106/264 +f 25/262 468/392 753/794 379/263 +f 468/392 137/397 752/795 753/794 +f 754/796 220/18 56/14 748/791 +f 752/795 754/796 748/791 197/790 +f 137/397 479/411 754/796 752/795 +f 479/411 51/19 220/18 754/796 +f 758/797 757/798 26/287 725/762 +f 755/799 758/797 725/762 192/758 +f 200/800 756/801 758/797 755/799 +f 756/801 199/802 757/798 758/797 +f 761/803 755/799 192/758 722/757 +f 759/804 761/803 722/757 16/365 +f 198/805 760/806 761/803 759/804 +f 760/806 200/800 755/799 761/803 +f 764/807 763/808 200/800 760/806 +f 762/809 764/807 760/806 198/805 +f 49/50 240/49 764/807 762/809 +f 240/49 62/46 763/808 764/807 +f 766/810 765/811 199/802 756/801 +f 763/808 766/810 756/801 200/800 +f 62/46 237/45 766/810 763/808 +f 237/45 52/44 765/811 766/810 +f 769/812 471/813 14/317 414/316 +f 767/814 769/812 414/316 116/313 +f 202/815 768/816 769/812 767/814 +f 768/816 135/817 471/813 769/812 +f 772/818 767/814 116/313 411/312 +f 770/819 772/818 411/312 17/311 +f 201/820 771/821 772/818 770/819 +f 771/821 202/815 767/814 772/818 +f 775/822 774/823 202/815 771/821 +f 773/824 775/822 771/821 201/820 +f 50/86 262/84 775/822 773/824 +f 262/84 69/79 774/823 775/822 +f 776/825 474/826 135/817 768/816 +f 774/823 776/825 768/816 202/815 +f 69/79 257/76 776/825 774/823 +f 257/76 48/75 474/826 776/825 +f 780/828 359/233 53/232 777/827 +f 778/830 780/828 777/827 203/829 +f 204/831 779/832 780/828 778/830 +f 779/832 100/234 359/233 780/828 +f 783/834 778/830 203/829 781/833 +f 743/786 783/834 781/833 32/389 +f 195/782 782/835 783/834 743/786 +f 782/835 204/831 778/830 783/834 +f 785/836 784/837 204/831 782/835 +f 740/781 785/836 782/835 195/782 +f 18/339 430/338 785/836 740/781 +f 430/338 121/335 784/837 785/836 +f 786/838 362/238 100/234 779/832 +f 784/837 786/838 779/832 204/831 +f 121/335 427/334 786/838 784/837 +f 427/334 47/239 362/238 786/838 +f 789/839 423/328 45/12 216/10 +f 787/840 789/839 216/10 55/5 +f 205/841 788/842 789/839 787/840 +f 788/842 120/329 423/328 789/839 +f 791/843 787/840 55/5 211/2 +f 245/53 791/843 211/2 1/1 +f 67/58 790/844 791/843 245/53 +f 790/844 205/841 787/840 791/843 +f 793/845 792/846 205/841 790/844 +f 255/72 793/845 790/844 67/58 +f 10/74 366/244 793/845 255/72 +f 366/244 101/241 792/846 793/845 +f 794/847 426/333 120/329 788/842 +f 792/846 794/847 788/842 205/841 +f 101/241 363/240 794/847 792/846 +f 363/240 47/239 426/333 794/847 +f 797/850 481/851 6/848 577/849 +f 795/853 797/850 577/849 165/852 +f 206/854 796/855 797/850 795/853 +f 796/855 139/856 481/851 797/850 +f 799/858 795/853 165/852 583/857 +f 619/615 799/858 583/857 28/612 +f 175/620 798/859 799/858 619/615 +f 798/859 206/854 795/853 799/858 +f 801/860 800/861 206/854 798/859 +f 627/629 801/860 798/859 175/620 +f 54/351 438/349 801/860 627/629 +f 438/349 124/344 800/861 801/860 +f 802/862 486/863 139/856 796/855 +f 800/861 802/862 796/855 206/854 +f 124/344 433/341 802/862 800/861 +f 433/341 46/340 486/863 802/862 +f 805/866 271/867 2/864 499/865 +f 803/869 805/866 499/865 143/868 +f 207/870 804/871 805/866 803/869 +f 804/871 72/872 271/867 805/866 +f 807/874 803/869 143/868 495/873 +f 224/24 807/874 495/873 20/25 +f 57/21 806/875 807/874 224/24 +f 806/875 207/870 803/869 807/874 +f 809/876 808/877 207/870 806/875 +f 221/20 809/876 806/875 57/21 +f 51/19 478/412 809/876 221/20 +f 478/412 136/409 808/877 809/876 +f 810/878 260/879 72/872 804/871 +f 808/877 810/878 804/871 207/870 +f 136/409 475/408 810/878 808/877 +f 475/408 48/407 260/879 810/878 +f 813/881 487/425 46/424 436/880 +f 811/883 813/881 436/880 127/882 +f 208/884 812/885 813/881 811/883 +f 812/885 140/426 487/425 813/881 +f 815/887 811/883 127/882 447/886 +f 398/292 815/887 447/886 15/293 +f 111/289 814/888 815/887 398/292 +f 814/888 208/884 811/883 815/887 +f 817/889 816/890 208/884 814/888 +f 395/288 817/889 814/888 111/289 +f 26/287 757/798 817/889 395/288 +f 757/798 199/802 816/890 817/889 +f 818/891 490/430 140/426 812/885 +f 816/890 818/891 812/885 208/884 +f 199/802 765/811 818/891 816/890 +f 765/811 52/44 490/430 818/891 +f 821/892 610/605 49/50 762/809 +f 819/893 821/892 762/809 198/805 +f 209/894 820/895 821/892 819/893 +f 820/895 172/606 610/605 821/892 +f 823/896 819/893 198/805 759/804 +f 452/368 823/896 759/804 16/365 +f 132/373 822/897 823/896 452/368 +f 822/897 209/894 819/893 823/896 +f 825/898 824/899 209/894 822/897 +f 463/387 825/898 822/897 132/373 +f 32/389 781/833 825/898 463/387 +f 781/833 203/829 824/899 825/898 +f 826/900 613/610 172/606 820/895 +f 824/899 826/900 820/895 209/894 +f 203/829 777/827 826/900 824/899 +f 777/827 53/232 613/610 826/900 +f 829/901 770/819 17/311 672/684 +f 827/902 829/901 672/684 184/679 +f 210/903 828/904 829/901 827/902 +f 828/904 201/820 770/819 829/901 +f 831/905 827/902 184/679 667/676 +f 442/357 831/905 667/676 31/358 +f 125/353 830/906 831/905 442/357 +f 830/906 210/903 827/902 831/905 +f 833/907 832/908 210/903 830/906 +f 439/352 833/907 830/906 125/353 +f 54/351 626/630 833/907 439/352 +f 626/630 174/627 832/908 833/907 +f 834/909 773/824 201/820 828/904 +f 832/908 834/909 828/904 210/903 +f 174/627 623/626 834/909 832/908 +f 623/626 50/86 773/824 834/909 +# 832 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj.meta new file mode 100644 index 0000000..50cee81 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined013.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 5e4524824a39cbd45b02c85e12483f45 +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined013 + 100002: //RootNode + 400000: rocksCombined013 + 400002: //RootNode + 2300000: rocksCombined013 + 3300000: rocksCombined013 + 4300000: rocksCombined013 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj new file mode 100644 index 0000000..6e07116 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj @@ -0,0 +1,2012 @@ +# 3ds Max Wavefront OBJ Exporter v0.97b - (c)2007 guruware +# File Created: 21.01.2017 11:30:33 + +mtllib rocksCombined014.mtl + +# +# object rocksCombined014 +# + +v 9.521759 2.147254 75.067642 +v 28.323532 2.116531 74.383606 +v 4.919342 1.716090 8.164734 +v 27.292656 2.326697 7.445770 +v 12.048714 21.079233 65.952560 +v 23.619484 21.755991 66.714462 +v 11.662415 21.179840 3.902679 +v 23.327225 21.718235 4.386017 +v 26.382431 11.679991 70.915070 +v 5.692894 13.034455 72.040466 +v 25.999023 11.471214 5.430969 +v 10.213272 12.058352 3.595306 +v 7.999458 1.009691 40.802765 +v 34.462540 1.924752 41.532990 +v 24.296532 30.858843 35.651474 +v 13.316956 21.455626 36.251740 +v 41.128021 13.686391 37.963531 +v 12.668846 11.927670 38.893738 +v 19.294098 1.759420 5.131775 +v 19.935547 1.706252 76.411942 +v 18.088966 22.280048 68.616089 +v 17.476318 21.758312 0.783203 +v 18.670479 11.796161 74.743240 +v 18.212753 11.324498 0.465363 +v 24.284538 1.768051 41.928070 +v 17.017181 32.043213 35.459381 +v 4.696365 3.548702 59.658432 +v 24.264801 29.409557 52.710922 +v 5.676987 14.433401 55.354996 +v 28.494125 1.720253 59.534058 +v 13.959312 22.085466 52.300766 +v 28.399689 11.555915 55.949753 +v 19.494385 0.884223 60.663696 +v 17.039001 31.555838 52.491226 +v 28.619019 1.516045 24.075378 +v 12.303749 22.863403 18.362579 +v 39.665253 10.573546 23.426514 +v 9.453362 1.381697 22.026413 +v 23.881531 29.933336 18.583710 +v 13.408112 12.216263 19.102051 +v 19.397163 0.534853 22.339661 +v 17.441284 30.938299 16.858887 +v 9.561523 1.322855 66.864395 +v 7.100395 3.228712 59.674179 +v 19.814911 0.818568 69.478683 +v 15.208488 1.609762 75.867599 +v 15.133705 0.178177 68.483078 +v 14.614029 21.740780 67.797760 +v 17.239632 27.784220 61.284851 +v 15.313202 27.251265 52.271393 +v 13.108170 21.564466 59.867569 +v 14.575188 25.279963 60.231262 +v 20.179077 5.903401 76.673416 +v 13.511795 12.027747 74.047913 +v 4.402893 6.330940 74.728882 +v 10.739143 6.166827 76.807861 +v 32.931015 6.304615 57.755112 +v 35.023392 12.174433 63.546494 +v 29.151268 6.293616 73.349838 +v 28.658585 1.217728 68.325806 +v 30.939117 5.833517 67.070618 +v 18.862244 5.970612 2.196075 +v 22.269554 11.321923 2.518433 +v 30.051292 6.452590 6.565552 +v 23.920250 1.796981 5.915039 +v 23.125656 6.157264 3.327881 +v 3.422951 1.622476 16.094147 +v 11.259148 6.741788 20.378265 +v 4.188759 12.353980 13.609894 +v 6.622337 6.109518 5.828796 +v 0.813232 6.179534 16.136841 +v 21.102898 22.118462 68.648376 +v 17.800468 17.694176 72.957855 +v 22.847549 11.363006 72.976059 +v 25.179718 17.313412 68.733673 +v 21.554420 16.821514 70.672531 +v 24.888344 17.061117 4.296021 +v 24.126968 26.905296 10.246338 +v 27.463760 22.377274 19.262878 +v 39.776215 12.264359 14.507935 +v 26.197769 19.566002 12.370667 +v 11.044662 17.303972 3.604858 +v 14.244949 21.583809 2.214813 +v 17.872299 16.450256 0.239227 +v 13.960526 11.389798 1.162079 +v 13.960831 16.392368 0.467407 +v 12.953644 16.979216 54.134750 +v 10.854523 10.400929 62.913437 +v 11.274460 16.977484 68.386032 +v 11.475937 16.996960 60.575043 +v 13.632790 0.000000 20.565491 +v 19.325333 0.802691 32.336044 +v 13.501389 0.431527 41.829651 +v 3.756386 3.818622 32.207458 +v 8.555000 2.283502 31.750854 +v 20.752052 31.426044 17.651978 +v 17.292847 31.891687 26.314972 +v 21.031754 32.495804 35.064041 +v 24.099976 31.238501 27.384064 +v 20.785233 32.512238 26.832413 +v 32.064362 5.353342 23.361221 +v 32.078835 11.820608 30.686081 +v 38.737335 7.497272 39.653214 +v 29.068169 1.268928 33.183899 +v 35.105255 6.704519 31.772354 +v 9.717049 1.569997 50.899643 +v 1.848457 8.670918 57.911469 +v 11.187462 13.310238 48.185699 +v 9.376549 5.966615 39.855637 +v 8.026360 6.539836 49.646667 +v 26.455261 21.718233 54.325317 +v 35.940994 13.663751 47.439758 +v 27.221840 22.877213 37.194946 +v 24.014534 30.436565 45.035751 +v 26.206543 22.324371 46.316208 +v 12.958763 22.988565 26.547012 +v 12.248718 16.700968 19.492249 +v 13.789131 12.135672 28.121674 +v 13.673393 17.486418 37.331696 +v 12.823875 18.291702 26.524094 +v 29.645515 1.532492 42.109024 +v 29.279327 1.283451 52.078171 +v 24.835716 0.741258 60.128403 +v 19.288040 1.051879 51.833099 +v 24.479744 1.017941 51.653534 +v 25.128601 25.995565 61.010132 +v 20.682198 31.418320 52.713425 +v 21.047134 27.644617 62.100525 +v 24.384727 1.680024 75.735779 +v 23.660545 6.111996 75.881073 +v 10.095032 1.422991 6.088989 +v 11.865433 5.887099 3.008392 +v 14.412430 17.738935 71.085983 +v 20.724869 21.709944 2.045135 +v 21.454910 16.453083 1.608063 +v 29.311821 0.755020 15.361572 +v 24.398514 0.759762 23.244492 +v 19.271149 0.786396 12.788391 +v 24.519501 0.454560 14.826019 +v 10.255966 22.095926 10.567871 +v 15.039398 28.260422 16.911835 +v 17.270287 27.906832 8.364105 +v 13.507324 26.276234 8.851013 +v 12.805237 1.359600 51.051498 +v 14.365013 27.641769 35.494537 +v 13.996826 22.296787 44.458649 +v 17.254517 31.693922 44.874069 +v 15.033287 27.482450 44.728683 +v 31.077728 6.388536 49.911163 +v 12.768875 18.966639 45.467972 +v 9.373230 5.267406 64.729889 +v 25.792236 19.524187 62.856003 +v 25.294365 0.075878 69.283051 +v 20.756195 32.333786 44.381882 +v 8.656624 6.820427 30.422195 +v 27.690933 23.078438 29.105408 +v 9.745674 0.814558 14.234039 +v 20.918060 27.764063 9.324432 +v 35.600792 5.597350 15.185089 +v 10.496033 17.016390 10.901520 +v 24.597115 0.648552 32.878662 +v 14.747185 27.735876 26.020309 +v 9.157455 1.601104 72.158020 +v 12.196106 0.554490 68.135406 +v 15.064812 0.785464 73.049179 +v 12.740746 1.897798 75.231873 +v 12.314880 0.993683 72.707336 +v 8.195602 1.536429 62.016342 +v 6.180649 2.867802 59.821457 +v 14.834373 0.363871 64.365494 +v 10.529099 1.127608 63.155151 +v 10.448662 2.939290 60.136734 +v 19.743668 0.810491 64.999756 +v 17.821091 0.391274 69.012405 +v 17.620766 0.472513 64.638763 +v 19.916321 0.437049 74.153931 +v 18.062630 1.027764 76.796600 +v 17.906609 0.424052 73.613617 +v 12.954750 21.529903 66.649078 +v 14.734558 23.694113 63.993103 +v 13.791687 23.465084 59.541489 +v 11.982025 21.274227 63.509857 +v 13.315018 22.751846 63.624100 +v 16.551193 21.731113 68.314240 +v 17.973389 24.565008 65.464401 +v 15.670837 27.033102 61.350800 +v 16.285851 24.149137 64.929489 +v 17.494621 29.238955 57.245285 +v 16.122643 29.714972 52.229034 +v 14.772194 26.396132 56.427933 +v 16.225296 28.068966 57.251068 +v 14.835175 24.344645 52.201538 +v 13.361938 21.776228 56.134506 +v 13.871819 24.036530 55.980865 +v 14.992462 3.635551 76.272095 +v 6.393204 6.208084 76.410065 +v 5.937798 3.801250 75.507462 +v 9.444351 3.601851 76.844559 +v 20.025208 3.381423 76.981247 +v 16.890823 6.485062 76.401474 +v 17.842430 3.179692 76.992950 +v 18.951622 9.095181 75.854019 +v 16.043564 11.668433 74.817581 +v 11.656120 9.346459 75.803085 +v 16.295006 9.323382 75.975311 +v 7.203278 12.358088 73.966507 +v 3.579109 8.976213 73.990204 +v 6.149933 9.590945 75.478058 +v 29.570671 3.522365 58.539963 +v 35.245033 6.029320 61.834610 +v 28.996925 3.405083 67.485626 +v 28.775887 1.432137 64.187103 +v 33.234619 3.410624 62.724655 +v 28.160927 8.705719 57.012665 +v 33.948677 12.506802 59.668198 +v 33.049141 9.165309 65.102844 +v 37.104134 9.009258 60.750732 +v 30.116524 11.740172 68.008041 +v 27.529266 8.990456 71.842361 +v 28.920273 5.572818 70.182785 +v 29.515610 8.529606 69.084259 +v 28.496658 3.561155 74.247742 +v 28.405235 1.754703 71.885757 +v 29.057915 3.423299 71.103745 +v 19.094284 3.576856 3.140625 +v 20.987663 6.121325 2.825806 +v 23.588875 3.654103 4.189240 +v 21.610214 1.650769 5.168488 +v 21.322067 3.623750 3.364136 +v 18.510201 8.584442 1.473877 +v 20.316322 11.292520 1.887848 +v 22.682457 8.750940 2.902130 +v 20.641220 8.716637 2.433960 +v 24.641220 11.340219 3.058441 +v 30.257950 9.165731 6.233246 +v 25.225006 6.173505 4.427338 +v 24.932854 8.594147 3.734039 +v 27.635170 3.742317 6.801941 +v 26.042046 1.945189 6.592621 +v 25.726151 3.705136 5.092743 +v 2.119888 1.509477 12.013977 +v 0.000000 3.623643 16.578491 +v 3.036568 6.002332 10.304779 +v 5.471367 3.530240 7.407776 +v 1.920303 3.303253 11.614563 +v 9.611832 1.606742 17.896576 +v 9.496445 3.452995 21.509689 +v 6.501587 6.408729 18.321686 +v 9.212395 3.461869 17.644836 +v 13.212082 9.721764 19.481232 +v 11.475616 12.046466 16.616302 +v 2.185043 9.517267 14.999115 +v 9.137360 9.050529 17.738617 +v 8.353157 11.969555 7.217499 +v 8.579544 9.336536 4.330658 +v 5.823654 9.177864 8.810028 +v 22.661415 21.772249 67.219543 +v 21.294975 19.599514 69.963379 +v 23.343620 16.860138 69.906143 +v 24.128998 19.856829 67.700516 +v 22.888474 19.537870 68.752274 +v 19.655281 22.177567 68.230911 +v 17.851891 19.728210 70.484528 +v 19.679222 17.124731 71.623413 +v 19.549561 19.330456 69.815018 +v 18.012962 14.757602 73.939270 +v 20.780647 11.818824 73.645264 +v 22.067947 14.435824 72.031265 +v 20.079002 14.377244 72.287491 +v 24.944008 11.853860 72.488525 +v 25.780769 14.556521 69.384644 +v 23.854492 14.114106 71.178436 +v 25.482155 14.141074 4.832397 +v 26.567467 18.531614 8.198883 +v 28.624344 16.016947 13.083740 +v 35.520721 12.276635 9.782593 +v 27.322037 15.061968 8.774719 +v 23.818100 19.728533 4.275909 +v 23.882431 23.785530 7.080597 +v 25.003494 23.325970 11.384705 +v 25.209450 21.440964 7.742371 +v 23.952675 28.280376 14.827789 +v 25.502396 27.163761 18.478912 +v 26.652763 21.660030 15.884644 +v 25.215912 25.468893 15.226776 +v 32.507217 16.619995 21.741135 +v 37.085335 12.899953 18.615509 +v 29.033752 17.124588 17.203247 +v 10.707825 14.611909 3.554535 +v 12.396545 16.985367 1.421783 +v 13.957047 14.138806 0.706390 +v 11.838348 11.958336 1.638885 +v 12.218102 14.567025 1.434082 +v 11.508659 19.449774 3.750305 +v 12.460800 21.345507 2.888458 +v 14.044128 19.054085 0.396301 +v 12.567039 19.147110 1.704803 +v 15.817749 21.594732 1.033752 +v 17.697899 18.989445 0.215729 +v 16.006477 16.525902 -0.000000 +v 15.937302 19.041906 0.015533 +v 18.062347 13.957124 0.212524 +v 16.179131 11.559121 0.729218 +v 16.103287 14.126515 0.339203 +v 12.047356 19.717205 60.193390 +v 11.344398 16.096390 65.199158 +v 11.762611 19.391132 67.103897 +v 11.306679 19.146326 63.967255 +v 12.841728 19.863535 53.033768 +v 12.796158 16.691990 58.219040 +v 12.660858 19.688549 57.371933 +v 8.454529 15.948606 54.864548 +v 3.952637 14.227824 58.278381 +v 11.309639 13.686943 61.925003 +v 7.335861 16.071009 58.252411 +v 9.487358 10.537642 66.982956 +v 9.568069 14.872818 69.784958 +v 10.541664 13.251077 65.683151 +v 11.002991 0.394125 21.546478 +v 13.963478 0.607688 27.652985 +v 5.150703 2.784622 31.993652 +v 9.536552 1.414066 26.926590 +v 11.085152 0.466829 27.370438 +v 16.843597 0.501217 21.579514 +v 19.354828 0.924320 27.966827 +v 16.703339 0.681977 31.795639 +v 16.609665 0.494047 27.744278 +v 22.197937 1.458951 37.003922 +v 16.551224 0.662995 42.456070 +v 11.509712 0.997200 36.196686 +v 16.668983 0.832010 37.040054 +v 10.395897 0.420540 41.879700 +v 7.737312 2.043924 36.334396 +v 10.343178 0.537958 36.285873 +v 22.458527 31.465002 17.867279 +v 20.576988 32.480080 22.581940 +v 22.532013 32.504246 27.178268 +v 23.808075 30.716827 23.492508 +v 22.317299 32.177650 23.009583 +v 19.033463 31.232508 17.266815 +v 17.373734 31.308699 22.136353 +v 18.888710 32.794960 26.741867 +v 18.882698 32.252739 22.619186 +v 17.353996 32.006599 30.625000 +v 18.865517 32.945477 35.625610 +v 20.786186 32.542912 30.760406 +v 18.866028 32.879120 30.875305 +v 22.795532 32.249992 35.003143 +v 24.185371 31.207296 32.023895 +v 22.621513 32.219028 31.401154 +v 29.296486 3.060928 23.528473 +v 32.107826 5.093376 27.645645 +v 32.382103 3.668784 32.696960 +v 28.808167 1.400667 28.400742 +v 29.897148 2.771328 27.808243 +v 37.287598 7.855451 23.705627 +v 37.756844 11.021418 27.455643 +v 29.922676 8.721474 31.704529 +v 34.294991 8.123472 27.766708 +v 34.484741 12.635932 33.946793 +v 40.322418 10.802065 38.648544 +v 40.545204 7.586674 35.308914 +v 39.505486 10.535104 34.638763 +v 36.629288 4.414280 40.737534 +v 35.226036 2.238491 37.042923 +v 38.735809 4.767430 36.122986 +v 8.943764 1.423035 46.022369 +v 8.893417 3.261009 49.798264 +v 7.969955 5.889575 45.398697 +v 7.962967 2.975752 40.542404 +v 7.955696 3.018763 45.326553 +v 5.702591 3.316288 55.619583 +v 2.143097 5.659070 59.111267 +v 6.120979 7.465599 53.596573 +v 5.068359 5.013834 54.864227 +v 3.000793 11.925365 57.121429 +v 8.372459 13.912185 51.714325 +v 8.813530 9.892080 49.240479 +v 6.411301 10.999294 52.879181 +v 11.024986 13.141138 43.065933 +v 10.612816 9.323725 39.237045 +v 9.242142 9.369338 44.337372 +v 25.478012 26.518173 53.089157 +v 26.791451 22.380535 50.315491 +v 25.805603 27.527027 45.663635 +v 24.102646 30.288555 48.900925 +v 25.631012 27.055914 48.791931 +v 27.920586 16.407753 55.105896 +v 29.833160 12.553630 52.457336 +v 30.442757 18.081306 47.118881 +v 27.800896 17.299101 51.704346 +v 39.730194 13.851632 42.765945 +v 29.360268 16.897537 38.779846 +v 26.020081 22.277853 41.684250 +v 34.564079 18.281416 42.194427 +v 25.800095 27.783409 36.125565 +v 24.110184 30.678274 40.851089 +v 25.787407 27.851547 40.635422 +v 13.187256 22.201122 31.716263 +v 12.465996 21.034372 26.551926 +v 14.801704 17.988567 32.393845 +v 13.826324 19.514103 36.509735 +v 13.638870 19.988234 31.949997 +v 13.436028 22.692766 22.715820 +v 11.973587 19.488388 19.383667 +v 13.108398 17.876928 23.269882 +v 13.251015 20.368723 22.977127 +v 13.123199 14.170923 18.880188 +v 13.887970 12.365653 23.419861 +v 13.722641 15.364175 27.378113 +v 12.891808 15.210969 23.414215 +v 13.567574 11.065052 34.057541 +v 13.571632 15.007457 37.964706 +v 15.277794 14.485835 33.175644 +v 27.108749 1.563588 42.109116 +v 25.279228 0.690317 47.850327 +v 21.995506 0.909764 51.900757 +v 21.476677 1.395284 46.750061 +v 24.447136 1.366411 46.764130 +v 32.307739 1.135928 41.123810 +v 30.443169 1.736759 47.229034 +v 27.446007 0.641746 52.077896 +v 27.343544 0.384792 47.899429 +v 28.630417 1.685922 55.393051 +v 27.107002 0.841974 60.031876 +v 24.603584 0.852986 55.896378 +v 26.911057 1.018023 55.457489 +v 22.010773 0.994613 60.255157 +v 16.834229 1.651865 55.529266 +v 21.965126 0.970927 55.841980 +v 24.436333 23.799648 64.308456 +v 23.446815 27.163805 62.385193 +v 21.878082 24.492470 64.938736 +v 23.311348 24.341669 64.650269 +v 25.109528 28.258577 56.564728 +v 22.449989 31.038044 52.495926 +v 20.647934 29.982927 56.805374 +v 22.663132 29.645399 56.543137 +v 19.032265 31.575029 52.675980 +v 19.200615 27.487646 61.196899 +v 18.813011 29.993563 57.519089 +v 19.679405 24.958588 65.999741 +v 21.851646 1.691589 76.288651 +v 24.163605 3.752353 76.364960 +v 21.744957 5.961761 76.519547 +v 21.771263 3.601720 76.858841 +v 26.917770 1.669849 75.064331 +v 26.296295 5.948617 75.355392 +v 26.756592 3.474956 75.873260 +v 23.863289 9.150331 74.894821 +v 25.539589 9.103099 73.675217 +v 21.636932 8.905852 75.093185 +v 9.551498 6.194289 3.383972 +v 11.398987 3.404422 3.990295 +v 6.910873 1.542983 7.398285 +v 8.220367 3.621875 5.441345 +v 13.618904 8.700270 1.045380 +v 11.157295 8.868990 2.420471 +v 16.512947 5.880432 1.901276 +v 16.317238 8.580904 1.623749 +v 16.868721 1.236099 4.947144 +v 16.737160 3.449436 2.963135 +v 14.559303 20.176832 69.869873 +v 16.059654 17.513981 72.407120 +v 16.186440 20.216175 70.880219 +v 12.193642 18.206381 70.067352 +v 12.742165 19.837149 68.897049 +v 13.745682 14.745934 72.667328 +v 11.184586 15.845407 71.941742 +v 16.126869 14.877243 73.581055 +v 23.379745 16.945267 2.467316 +v 21.054764 19.062218 1.166321 +v 22.297745 21.777908 3.284515 +v 22.657799 19.149443 2.241211 +v 21.868347 13.882498 2.065491 +v 24.040344 14.319831 2.782715 +v 19.656898 16.442902 0.742004 +v 19.984535 13.866795 1.269653 +v 19.098183 21.785131 1.057159 +v 19.345634 19.031342 0.512024 +v 29.625359 0.782032 10.775269 +v 26.906013 0.582965 14.975708 +v 24.029999 0.971887 8.987579 +v 26.567566 0.944700 10.014191 +v 28.459663 1.543370 19.396515 +v 27.079895 0.581581 24.158783 +v 24.338066 0.805206 19.078094 +v 26.962418 0.621937 19.395721 +v 21.935448 0.711730 23.345490 +v 19.474594 0.768489 17.400085 +v 22.223633 0.830400 13.016205 +v 22.006844 0.523721 18.516083 +v 19.221413 0.965301 8.179932 +v 21.611336 0.972478 8.480804 +v 10.916466 21.660807 5.721527 +v 12.007729 24.412285 10.007965 +v 13.984665 24.159933 4.593781 +v 11.919479 23.513847 5.236237 +v 11.320343 22.801640 14.887604 +v 14.165024 25.325771 17.273773 +v 14.761635 27.064814 13.486481 +v 13.341606 24.748493 14.018494 +v 16.063316 30.014639 16.666351 +v 17.170563 30.312263 13.452972 +v 15.361679 27.520063 8.592468 +v 15.866898 28.811308 13.266724 +v 17.111046 24.920301 3.557678 +v 15.526314 24.511660 4.134064 +v 11.337845 0.932942 51.055954 +v 9.126732 2.600550 55.756363 +v 7.125328 2.376119 55.641983 +v 13.707367 0.608629 46.558868 +v 10.708427 0.664068 46.245361 +v 15.256203 1.159929 51.512955 +v 16.753609 0.874444 47.010162 +v 11.640152 2.517459 56.022995 +v 15.602051 30.323532 35.537476 +v 14.711067 27.730652 40.838486 +v 15.900467 30.115847 44.602585 +v 17.131119 31.842348 40.748596 +v 15.908295 30.270170 40.842422 +v 13.021652 24.613516 35.874283 +v 12.531342 21.389139 40.908325 +v 14.629196 24.623615 44.606430 +v 13.551834 24.525375 40.938309 +v 14.472748 22.502399 48.852829 +v 15.332413 28.137051 49.053329 +v 14.865433 25.190996 49.022629 +v 17.472954 31.696791 49.138046 +v 16.249901 30.172667 49.128311 +v 36.064407 7.070001 44.238953 +v 29.760162 3.381139 50.796158 +v 33.827400 3.815840 45.813217 +v 32.671143 9.603387 49.167816 +v 37.904213 10.602580 43.513443 +v 28.817604 5.993390 53.963989 +v 27.975075 8.796019 53.145905 +v 29.577698 3.367017 54.519379 +v 13.208138 20.575626 44.739960 +v 13.371117 17.851120 50.581985 +v 13.100372 20.928965 49.579575 +v 12.975784 17.742458 41.409119 +v 12.774010 19.841558 40.968445 +v 12.260567 15.896194 46.742645 +v 12.544235 15.335295 42.147751 +v 12.462280 15.499551 51.354538 +v 8.844276 3.008610 65.687332 +v 2.842461 7.737747 60.713196 +v 4.469017 4.635845 61.599167 +v 6.401245 5.583574 69.860001 +v 7.213623 3.193825 70.764420 +v 10.357445 7.827795 63.488647 +v 7.568764 8.315944 68.231567 +v 1.927322 11.315190 59.425507 +v 27.590553 18.271503 66.312347 +v 25.317192 23.218063 61.710419 +v 24.870277 21.457582 65.052750 +v 33.106499 15.733630 63.228958 +v 30.728111 15.203409 67.054535 +v 26.638794 20.857399 58.324753 +v 27.295624 15.884242 58.872650 +v 26.066093 25.004749 57.635147 +v 24.945580 0.626577 73.062103 +v 27.295921 0.563178 68.534531 +v 26.880379 0.975719 72.434143 +v 22.552620 0.191110 69.887741 +v 22.179153 0.690052 73.744858 +v 25.202896 0.250843 64.926071 +v 22.241959 0.531441 65.262314 +v 27.308121 0.659080 64.629272 +v 22.512672 32.036072 44.326492 +v 20.574928 32.407818 49.067612 +v 22.428391 32.153908 48.454712 +v 20.779694 32.536194 40.510910 +v 22.594475 32.305519 40.980804 +v 18.617691 32.699303 45.142578 +v 18.623344 32.900375 40.867157 +v 18.854073 32.453781 49.302292 +v 4.582268 5.113975 31.534470 +v 11.300377 6.608719 25.537628 +v 9.484673 3.297011 26.124130 +v 6.057846 7.590943 35.064117 +v 4.506119 5.024218 36.036865 +v 12.052094 9.220533 29.803986 +v 11.970360 8.803801 35.032928 +v 12.944664 9.903489 24.460373 +v 26.530563 22.781193 33.386673 +v 25.910812 28.304745 28.183365 +v 25.805222 28.119236 32.456955 +v 32.829750 17.097799 30.384521 +v 29.109764 17.700624 34.377640 +v 27.892838 23.091906 25.389664 +v 36.033386 16.687260 26.763535 +v 26.129272 28.730753 24.553741 +v 6.705368 0.868640 11.553589 +v 7.705612 1.114298 15.212036 +v 3.795830 0.986638 11.857513 +v 16.601997 0.482404 13.146790 +v 11.165268 0.732540 10.579254 +v 13.857681 0.468464 17.160217 +v 16.608055 0.213242 17.362579 +v 11.546356 0.857167 17.983307 +v 20.787170 25.178865 4.925690 +v 22.504005 27.481249 9.803650 +v 22.533745 24.974009 5.539551 +v 19.113579 27.868484 8.617493 +v 18.849899 25.313580 3.476807 +v 20.714233 29.901642 14.092926 +v 18.896065 30.616512 13.913879 +v 22.459053 29.431557 14.497131 +v 37.102829 6.106284 10.539948 +v 32.827621 2.757813 15.679871 +v 34.134193 3.285281 10.899323 +v 38.249565 8.926526 14.879517 +v 39.050919 9.478028 10.397156 +v 32.225327 5.962266 19.062286 +v 36.608292 8.710242 19.463593 +v 30.425774 3.329344 19.057526 +v 10.164619 19.573648 10.917542 +v 11.796379 17.152813 15.748749 +v 11.056168 20.513031 15.813385 +v 10.634613 17.360332 6.408936 +v 10.917038 19.575050 6.331451 +v 8.289871 14.216466 11.490234 +v 10.377510 14.643327 6.629944 +v 11.258102 14.537939 16.048218 +v 27.158867 0.641616 33.030884 +v 24.461342 0.773875 28.293030 +v 27.098320 0.645561 28.331711 +v 29.305779 1.318258 36.780396 +v 32.162468 1.383540 37.103317 +v 21.913979 0.818796 32.637451 +v 26.916801 1.508918 36.730667 +v 21.904449 0.759735 28.029999 +v 13.826401 25.146368 26.329590 +v 15.574356 27.585701 22.237411 +v 14.519905 24.952551 22.385406 +v 14.683723 27.838392 31.114090 +v 13.943001 25.188450 31.189651 +v 16.068008 30.046062 26.167114 +v 16.116722 30.093189 30.893631 +v 16.449318 29.579269 22.212692 +# 642 vertices + +vt 0.526530 0.629230 0.000000 +vt 0.514290 0.629840 0.000000 +vt 0.515150 0.622030 0.000000 +vt 0.527510 0.621540 0.000000 +vt 0.502050 0.630460 0.000000 +vt 0.502800 0.622520 0.000000 +vt 0.503540 0.614580 0.000000 +vt 0.516010 0.614220 0.000000 +vt 0.528490 0.613850 0.000000 +vt 0.489810 0.631070 0.000000 +vt 0.490440 0.623010 0.000000 +vt 0.477580 0.631680 0.000000 +vt 0.478080 0.623500 0.000000 +vt 0.478590 0.615320 0.000000 +vt 0.491060 0.614950 0.000000 +vt 0.491690 0.606890 0.000000 +vt 0.504280 0.606650 0.000000 +vt 0.479100 0.607140 0.000000 +vt 0.479600 0.598950 0.000000 +vt 0.492310 0.598830 0.000000 +vt 0.505020 0.598710 0.000000 +vt 0.516870 0.606400 0.000000 +vt 0.529470 0.606160 0.000000 +vt 0.517740 0.598590 0.000000 +vt 0.530450 0.598470 0.000000 +vt 0.506320 0.725710 0.000000 +vt 0.507930 0.731120 0.000000 +vt 0.495020 0.732690 0.000000 +vt 0.493990 0.725950 0.000000 +vt 0.509540 0.736530 0.000000 +vt 0.496050 0.739430 0.000000 +vt 0.482570 0.742340 0.000000 +vt 0.482120 0.734270 0.000000 +vt 0.481670 0.726190 0.000000 +vt 0.511150 0.741930 0.000000 +vt 0.497080 0.746170 0.000000 +vt 0.512760 0.747340 0.000000 +vt 0.498110 0.752910 0.000000 +vt 0.483470 0.758490 0.000000 +vt 0.483020 0.750410 0.000000 +vt 0.468950 0.754650 0.000000 +vt 0.469090 0.745250 0.000000 +vt 0.468820 0.764060 0.000000 +vt 0.454180 0.769630 0.000000 +vt 0.454890 0.758890 0.000000 +vt 0.455600 0.748150 0.000000 +vt 0.469220 0.735840 0.000000 +vt 0.469350 0.726430 0.000000 +vt 0.456320 0.737410 0.000000 +vt 0.457030 0.726670 0.000000 +vt 0.533970 0.631240 0.000000 +vt 0.531060 0.643210 0.000000 +vt 0.523930 0.641310 0.000000 +vt 0.541420 0.633260 0.000000 +vt 0.538190 0.645120 0.000000 +vt 0.534960 0.656990 0.000000 +vt 0.528140 0.655190 0.000000 +vt 0.521320 0.653380 0.000000 +vt 0.548860 0.635270 0.000000 +vt 0.545320 0.647030 0.000000 +vt 0.556300 0.637280 0.000000 +vt 0.552450 0.648940 0.000000 +vt 0.548600 0.660590 0.000000 +vt 0.541780 0.658790 0.000000 +vt 0.538240 0.670550 0.000000 +vt 0.531730 0.668850 0.000000 +vt 0.544750 0.672240 0.000000 +vt 0.540900 0.683900 0.000000 +vt 0.534700 0.682310 0.000000 +vt 0.528500 0.680720 0.000000 +vt 0.525220 0.667160 0.000000 +vt 0.518720 0.665460 0.000000 +vt 0.522310 0.679130 0.000000 +vt 0.516110 0.677540 0.000000 +vt 0.113490 0.611400 0.000000 +vt 0.115180 0.623510 0.000000 +vt 0.103230 0.622300 0.000000 +vt 0.101390 0.610180 0.000000 +vt 0.116870 0.635610 0.000000 +vt 0.105070 0.634430 0.000000 +vt 0.093260 0.633240 0.000000 +vt 0.091270 0.621100 0.000000 +vt 0.089290 0.608950 0.000000 +vt 0.118570 0.647720 0.000000 +vt 0.106910 0.646550 0.000000 +vt 0.120260 0.659820 0.000000 +vt 0.108740 0.658670 0.000000 +vt 0.097230 0.657530 0.000000 +vt 0.095240 0.645390 0.000000 +vt 0.083580 0.644220 0.000000 +vt 0.081450 0.632060 0.000000 +vt 0.085710 0.656390 0.000000 +vt 0.074190 0.655240 0.000000 +vt 0.071920 0.643060 0.000000 +vt 0.069640 0.630870 0.000000 +vt 0.079320 0.619890 0.000000 +vt 0.077190 0.607730 0.000000 +vt 0.067370 0.618690 0.000000 +vt 0.065090 0.606510 0.000000 +vt 0.296400 0.631180 0.000000 +vt 0.295410 0.643070 0.000000 +vt 0.288180 0.641790 0.000000 +vt 0.288920 0.629880 0.000000 +vt 0.294420 0.654960 0.000000 +vt 0.287440 0.653700 0.000000 +vt 0.280460 0.652450 0.000000 +vt 0.280950 0.640510 0.000000 +vt 0.281440 0.628580 0.000000 +vt 0.293420 0.666850 0.000000 +vt 0.286700 0.665610 0.000000 +vt 0.292430 0.678740 0.000000 +vt 0.285960 0.677530 0.000000 +vt 0.279490 0.676310 0.000000 +vt 0.279980 0.664380 0.000000 +vt 0.273250 0.663150 0.000000 +vt 0.273490 0.651190 0.000000 +vt 0.273020 0.675100 0.000000 +vt 0.266550 0.673890 0.000000 +vt 0.266530 0.661910 0.000000 +vt 0.266510 0.649930 0.000000 +vt 0.273720 0.639230 0.000000 +vt 0.273950 0.627280 0.000000 +vt 0.266490 0.637950 0.000000 +vt 0.266470 0.625970 0.000000 +vt 0.325500 0.635030 0.000000 +vt 0.338370 0.635160 0.000000 +vt 0.336470 0.647320 0.000000 +vt 0.323650 0.647050 0.000000 +vt 0.351230 0.635290 0.000000 +vt 0.349290 0.647600 0.000000 +vt 0.347350 0.659910 0.000000 +vt 0.334570 0.659490 0.000000 +vt 0.321790 0.659060 0.000000 +vt 0.364100 0.635430 0.000000 +vt 0.362110 0.647880 0.000000 +vt 0.376960 0.635560 0.000000 +vt 0.374940 0.648160 0.000000 +vt 0.372910 0.660770 0.000000 +vt 0.360130 0.660340 0.000000 +vt 0.358140 0.672800 0.000000 +vt 0.345410 0.672220 0.000000 +vt 0.370880 0.673370 0.000000 +vt 0.368850 0.685970 0.000000 +vt 0.356160 0.685250 0.000000 +vt 0.343470 0.684530 0.000000 +vt 0.332670 0.671650 0.000000 +vt 0.319940 0.671080 0.000000 +vt 0.330770 0.683810 0.000000 +vt 0.318080 0.683090 0.000000 +vt 0.545580 0.735720 0.000000 +vt 0.540640 0.734440 0.000000 +vt 0.545330 0.723030 0.000000 +vt 0.550580 0.724400 0.000000 +vt 0.535700 0.733160 0.000000 +vt 0.540090 0.721660 0.000000 +vt 0.544470 0.710160 0.000000 +vt 0.550030 0.711610 0.000000 +vt 0.555590 0.713070 0.000000 +vt 0.530760 0.731870 0.000000 +vt 0.534840 0.720290 0.000000 +vt 0.525820 0.730590 0.000000 +vt 0.529590 0.718920 0.000000 +vt 0.533360 0.707240 0.000000 +vt 0.538920 0.708700 0.000000 +vt 0.542990 0.697110 0.000000 +vt 0.548860 0.698660 0.000000 +vt 0.537130 0.695570 0.000000 +vt 0.547070 0.685530 0.000000 +vt 0.553250 0.687160 0.000000 +vt 0.554730 0.700200 0.000000 +vt 0.560590 0.701740 0.000000 +vt 0.559420 0.688780 0.000000 +vt 0.565600 0.690410 0.000000 +vt 0.266370 0.685800 0.000000 +vt 0.253690 0.687420 0.000000 +vt 0.254030 0.672630 0.000000 +vt 0.266200 0.697710 0.000000 +vt 0.253350 0.702210 0.000000 +vt 0.240500 0.706710 0.000000 +vt 0.241010 0.689040 0.000000 +vt 0.241510 0.671360 0.000000 +vt 0.266020 0.709620 0.000000 +vt 0.253010 0.717000 0.000000 +vt 0.265840 0.721530 0.000000 +vt 0.252670 0.731800 0.000000 +vt 0.239490 0.742070 0.000000 +vt 0.240000 0.724390 0.000000 +vt 0.226990 0.731780 0.000000 +vt 0.227650 0.711220 0.000000 +vt 0.226320 0.752340 0.000000 +vt 0.213150 0.762610 0.000000 +vt 0.213980 0.739160 0.000000 +vt 0.214810 0.715720 0.000000 +vt 0.228320 0.690660 0.000000 +vt 0.228990 0.670100 0.000000 +vt 0.215640 0.692270 0.000000 +vt 0.216470 0.668830 0.000000 +vt 0.315450 0.695270 0.000000 +vt 0.309300 0.694080 0.000000 +vt 0.311670 0.682000 0.000000 +vt 0.312810 0.707460 0.000000 +vt 0.306940 0.706160 0.000000 +vt 0.301070 0.704860 0.000000 +vt 0.303160 0.692880 0.000000 +vt 0.305260 0.680910 0.000000 +vt 0.310170 0.719640 0.000000 +vt 0.304580 0.718230 0.000000 +vt 0.307530 0.731830 0.000000 +vt 0.302210 0.730310 0.000000 +vt 0.296890 0.728800 0.000000 +vt 0.298980 0.716830 0.000000 +vt 0.293390 0.715420 0.000000 +vt 0.295210 0.703550 0.000000 +vt 0.291570 0.727280 0.000000 +vt 0.286250 0.725770 0.000000 +vt 0.287800 0.714010 0.000000 +vt 0.289340 0.702250 0.000000 +vt 0.297020 0.691690 0.000000 +vt 0.298840 0.679820 0.000000 +vt 0.290880 0.690490 0.000000 +vt 0.496470 0.714110 0.000000 +vt 0.508770 0.713670 0.000000 +vt 0.484170 0.714560 0.000000 +vt 0.486680 0.702930 0.000000 +vt 0.498950 0.702280 0.000000 +vt 0.511210 0.701630 0.000000 +vt 0.471880 0.715010 0.000000 +vt 0.459580 0.715450 0.000000 +vt 0.462140 0.704230 0.000000 +vt 0.474410 0.703580 0.000000 +vt 0.476930 0.692150 0.000000 +vt 0.489180 0.691290 0.000000 +vt 0.464690 0.693000 0.000000 +vt 0.467250 0.681780 0.000000 +vt 0.479460 0.680720 0.000000 +vt 0.491680 0.679660 0.000000 +vt 0.501420 0.690440 0.000000 +vt 0.513660 0.689580 0.000000 +vt 0.503900 0.678600 0.000000 +vt 0.375960 0.627260 0.000000 +vt 0.389190 0.626890 0.000000 +vt 0.389970 0.635260 0.000000 +vt 0.374960 0.618970 0.000000 +vt 0.388420 0.618510 0.000000 +vt 0.401880 0.618060 0.000000 +vt 0.402430 0.626510 0.000000 +vt 0.402970 0.634960 0.000000 +vt 0.373950 0.610680 0.000000 +vt 0.387640 0.610140 0.000000 +vt 0.372950 0.602380 0.000000 +vt 0.386870 0.601770 0.000000 +vt 0.400780 0.601150 0.000000 +vt 0.401330 0.609600 0.000000 +vt 0.415020 0.609070 0.000000 +vt 0.415340 0.617600 0.000000 +vt 0.414700 0.600540 0.000000 +vt 0.428620 0.599920 0.000000 +vt 0.428710 0.608530 0.000000 +vt 0.428800 0.617140 0.000000 +vt 0.415660 0.626130 0.000000 +vt 0.415980 0.634660 0.000000 +vt 0.428890 0.625760 0.000000 +vt 0.428980 0.634370 0.000000 +vt 0.367850 0.795600 0.000000 +vt 0.367100 0.790820 0.000000 +vt 0.378960 0.790620 0.000000 +vt 0.379700 0.795630 0.000000 +vt 0.366350 0.786040 0.000000 +vt 0.378220 0.785610 0.000000 +vt 0.390100 0.785180 0.000000 +vt 0.390820 0.790420 0.000000 +vt 0.391540 0.795660 0.000000 +vt 0.365610 0.781260 0.000000 +vt 0.377490 0.780600 0.000000 +vt 0.364860 0.776480 0.000000 +vt 0.376750 0.775590 0.000000 +vt 0.388650 0.774700 0.000000 +vt 0.389370 0.779940 0.000000 +vt 0.401260 0.779280 0.000000 +vt 0.401970 0.784750 0.000000 +vt 0.400550 0.773810 0.000000 +vt 0.412450 0.772920 0.000000 +vt 0.413140 0.778620 0.000000 +vt 0.413840 0.784320 0.000000 +vt 0.402680 0.790220 0.000000 +vt 0.403390 0.795690 0.000000 +vt 0.414540 0.790020 0.000000 +vt 0.415230 0.795720 0.000000 +vt 0.214280 0.620970 0.000000 +vt 0.214820 0.632940 0.000000 +vt 0.201890 0.631720 0.000000 +vt 0.201200 0.619750 0.000000 +vt 0.215370 0.644900 0.000000 +vt 0.202580 0.643700 0.000000 +vt 0.189790 0.642490 0.000000 +vt 0.188950 0.630500 0.000000 +vt 0.188120 0.618520 0.000000 +vt 0.215920 0.656870 0.000000 +vt 0.203270 0.655680 0.000000 +vt 0.203960 0.667650 0.000000 +vt 0.191460 0.666470 0.000000 +vt 0.190620 0.654480 0.000000 +vt 0.177970 0.653290 0.000000 +vt 0.177000 0.641290 0.000000 +vt 0.178950 0.665290 0.000000 +vt 0.166450 0.664120 0.000000 +vt 0.165330 0.652100 0.000000 +vt 0.164200 0.640090 0.000000 +vt 0.176020 0.629290 0.000000 +vt 0.175040 0.617290 0.000000 +vt 0.163080 0.628070 0.000000 +vt 0.161960 0.616060 0.000000 +vt 0.441130 0.633700 0.000000 +vt 0.438760 0.646040 0.000000 +vt 0.426680 0.646640 0.000000 +vt 0.453280 0.633030 0.000000 +vt 0.450840 0.645430 0.000000 +vt 0.448400 0.657830 0.000000 +vt 0.436390 0.658370 0.000000 +vt 0.424380 0.658920 0.000000 +vt 0.465430 0.632360 0.000000 +vt 0.462920 0.644820 0.000000 +vt 0.474990 0.644210 0.000000 +vt 0.472410 0.656730 0.000000 +vt 0.460400 0.657280 0.000000 +vt 0.457890 0.669740 0.000000 +vt 0.445960 0.670230 0.000000 +vt 0.469830 0.669260 0.000000 +vt 0.455380 0.682200 0.000000 +vt 0.443520 0.682630 0.000000 +vt 0.434020 0.670710 0.000000 +vt 0.422090 0.671200 0.000000 +vt 0.431650 0.683050 0.000000 +vt 0.419790 0.683470 0.000000 +vt 0.123050 0.754360 0.000000 +vt 0.122350 0.730720 0.000000 +vt 0.133360 0.731730 0.000000 +vt 0.133880 0.755340 0.000000 +vt 0.121650 0.707090 0.000000 +vt 0.132850 0.708120 0.000000 +vt 0.144040 0.709140 0.000000 +vt 0.144380 0.732730 0.000000 +vt 0.144720 0.756320 0.000000 +vt 0.120960 0.683450 0.000000 +vt 0.132330 0.684500 0.000000 +vt 0.131810 0.660890 0.000000 +vt 0.143360 0.661970 0.000000 +vt 0.143700 0.685560 0.000000 +vt 0.155060 0.686610 0.000000 +vt 0.155230 0.710170 0.000000 +vt 0.154900 0.663040 0.000000 +vt 0.166430 0.687660 0.000000 +vt 0.166420 0.711200 0.000000 +vt 0.155390 0.733730 0.000000 +vt 0.155550 0.757300 0.000000 +vt 0.166400 0.734740 0.000000 +vt 0.166390 0.758280 0.000000 +vt 0.410570 0.728370 0.000000 +vt 0.397990 0.729560 0.000000 +vt 0.400260 0.718200 0.000000 +vt 0.412870 0.717150 0.000000 +vt 0.385420 0.730750 0.000000 +vt 0.387650 0.719250 0.000000 +vt 0.389870 0.707740 0.000000 +vt 0.402520 0.706830 0.000000 +vt 0.415180 0.705920 0.000000 +vt 0.372850 0.731950 0.000000 +vt 0.375040 0.720300 0.000000 +vt 0.360280 0.733140 0.000000 +vt 0.362420 0.721350 0.000000 +vt 0.364570 0.709560 0.000000 +vt 0.377220 0.708650 0.000000 +vt 0.379400 0.697000 0.000000 +vt 0.392100 0.696230 0.000000 +vt 0.366710 0.697760 0.000000 +vt 0.381580 0.685350 0.000000 +vt 0.394320 0.684720 0.000000 +vt 0.404790 0.695470 0.000000 +vt 0.417480 0.694700 0.000000 +vt 0.407050 0.684100 0.000000 +vt 0.428420 0.591810 0.000000 +vt 0.441030 0.591630 0.000000 +vt 0.441360 0.599680 0.000000 +vt 0.428210 0.583700 0.000000 +vt 0.440700 0.583580 0.000000 +vt 0.453190 0.583460 0.000000 +vt 0.453650 0.591450 0.000000 +vt 0.454110 0.599440 0.000000 +vt 0.428010 0.575590 0.000000 +vt 0.440370 0.575530 0.000000 +vt 0.427810 0.567480 0.000000 +vt 0.440040 0.567480 0.000000 +vt 0.452260 0.567480 0.000000 +vt 0.452730 0.575470 0.000000 +vt 0.465080 0.575410 0.000000 +vt 0.465670 0.583340 0.000000 +vt 0.464490 0.567490 0.000000 +vt 0.476720 0.567490 0.000000 +vt 0.477440 0.575360 0.000000 +vt 0.478160 0.583220 0.000000 +vt 0.466270 0.591270 0.000000 +vt 0.466860 0.599190 0.000000 +vt 0.478880 0.591090 0.000000 +vt 0.516860 0.767280 0.000000 +vt 0.501920 0.772250 0.000000 +vt 0.500970 0.767410 0.000000 +vt 0.515830 0.762290 0.000000 +vt 0.486990 0.777210 0.000000 +vt 0.486110 0.772530 0.000000 +vt 0.485230 0.767850 0.000000 +vt 0.500020 0.762580 0.000000 +vt 0.514810 0.757310 0.000000 +vt 0.472050 0.782180 0.000000 +vt 0.471240 0.777650 0.000000 +vt 0.457110 0.787150 0.000000 +vt 0.456380 0.782770 0.000000 +vt 0.455640 0.778390 0.000000 +vt 0.470430 0.773120 0.000000 +vt 0.469630 0.768590 0.000000 +vt 0.484350 0.763170 0.000000 +vt 0.454910 0.774010 0.000000 +vt 0.499060 0.757750 0.000000 +vt 0.513780 0.752320 0.000000 +vt 0.563710 0.639270 0.000000 +vt 0.559550 0.650840 0.000000 +vt 0.571110 0.641270 0.000000 +vt 0.566640 0.652740 0.000000 +vt 0.562180 0.664210 0.000000 +vt 0.555390 0.662400 0.000000 +vt 0.578510 0.643260 0.000000 +vt 0.573740 0.654640 0.000000 +vt 0.585910 0.645250 0.000000 +vt 0.580830 0.656540 0.000000 +vt 0.575750 0.667830 0.000000 +vt 0.568970 0.666020 0.000000 +vt 0.564190 0.677400 0.000000 +vt 0.557710 0.675680 0.000000 +vt 0.570680 0.679120 0.000000 +vt 0.551230 0.673960 0.000000 +vt 0.316590 0.646050 0.000000 +vt 0.318230 0.634070 0.000000 +vt 0.314950 0.658030 0.000000 +vt 0.308100 0.657010 0.000000 +vt 0.309530 0.645060 0.000000 +vt 0.310950 0.633100 0.000000 +vt 0.313310 0.670020 0.000000 +vt 0.306680 0.668960 0.000000 +vt 0.300050 0.667900 0.000000 +vt 0.301260 0.655980 0.000000 +vt 0.302470 0.644060 0.000000 +vt 0.303680 0.632140 0.000000 +vt 0.520940 0.729370 0.000000 +vt 0.524380 0.717600 0.000000 +vt 0.516070 0.728150 0.000000 +vt 0.519180 0.716290 0.000000 +vt 0.522290 0.704430 0.000000 +vt 0.527820 0.705840 0.000000 +vt 0.511190 0.726930 0.000000 +vt 0.513970 0.714980 0.000000 +vt 0.516750 0.703030 0.000000 +vt 0.519530 0.691080 0.000000 +vt 0.525400 0.692580 0.000000 +vt 0.531260 0.694070 0.000000 +vt 0.271460 0.710720 0.000000 +vt 0.270940 0.722590 0.000000 +vt 0.271980 0.698850 0.000000 +vt 0.277770 0.699980 0.000000 +vt 0.276910 0.711810 0.000000 +vt 0.276050 0.723650 0.000000 +vt 0.272500 0.686970 0.000000 +vt 0.278630 0.688150 0.000000 +vt 0.284760 0.689320 0.000000 +vt 0.283550 0.701120 0.000000 +vt 0.282350 0.712910 0.000000 +vt 0.281150 0.724710 0.000000 +vt 0.323360 0.574080 0.000000 +vt 0.336390 0.573250 0.000000 +vt 0.335160 0.580910 0.000000 +vt 0.321930 0.581660 0.000000 +vt 0.349420 0.572420 0.000000 +vt 0.348390 0.580170 0.000000 +vt 0.347360 0.587910 0.000000 +vt 0.333930 0.588580 0.000000 +vt 0.320500 0.589250 0.000000 +vt 0.362460 0.571590 0.000000 +vt 0.361620 0.579420 0.000000 +vt 0.375490 0.570760 0.000000 +vt 0.374860 0.578670 0.000000 +vt 0.374220 0.586570 0.000000 +vt 0.360790 0.587240 0.000000 +vt 0.359950 0.595070 0.000000 +vt 0.346320 0.595660 0.000000 +vt 0.373580 0.594480 0.000000 +vt 0.359120 0.602890 0.000000 +vt 0.345290 0.603400 0.000000 +vt 0.332700 0.596240 0.000000 +vt 0.319070 0.596830 0.000000 +vt 0.331460 0.603910 0.000000 +vt 0.317640 0.604420 0.000000 +vt 0.320720 0.732150 0.000000 +vt 0.319310 0.740050 0.000000 +vt 0.305270 0.738740 0.000000 +vt 0.333910 0.732480 0.000000 +vt 0.333350 0.741360 0.000000 +vt 0.332790 0.750240 0.000000 +vt 0.317900 0.747950 0.000000 +vt 0.303000 0.745660 0.000000 +vt 0.347100 0.732810 0.000000 +vt 0.347390 0.742670 0.000000 +vt 0.361430 0.743970 0.000000 +vt 0.362570 0.754810 0.000000 +vt 0.347680 0.752520 0.000000 +vt 0.347970 0.762380 0.000000 +vt 0.332230 0.759110 0.000000 +vt 0.363710 0.765650 0.000000 +vt 0.348260 0.772240 0.000000 +vt 0.331670 0.767990 0.000000 +vt 0.316480 0.755840 0.000000 +vt 0.300740 0.752580 0.000000 +vt 0.315070 0.763740 0.000000 +vt 0.298480 0.759490 0.000000 +vt 0.465780 0.624070 0.000000 +vt 0.453490 0.624630 0.000000 +vt 0.453690 0.616230 0.000000 +vt 0.466140 0.615780 0.000000 +vt 0.441190 0.625190 0.000000 +vt 0.441250 0.616690 0.000000 +vt 0.441310 0.608180 0.000000 +vt 0.453900 0.607830 0.000000 +vt 0.466500 0.607480 0.000000 +vt 0.411980 0.761780 0.000000 +vt 0.422710 0.761060 0.000000 +vt 0.422880 0.772100 0.000000 +vt 0.411510 0.750640 0.000000 +vt 0.422530 0.750020 0.000000 +vt 0.433550 0.749400 0.000000 +vt 0.433430 0.760340 0.000000 +vt 0.433310 0.771280 0.000000 +vt 0.411040 0.739510 0.000000 +vt 0.422360 0.738980 0.000000 +vt 0.422180 0.727950 0.000000 +vt 0.433800 0.727520 0.000000 +vt 0.433680 0.738460 0.000000 +vt 0.445000 0.737940 0.000000 +vt 0.444580 0.748780 0.000000 +vt 0.445410 0.727100 0.000000 +vt 0.444160 0.759620 0.000000 +vt 0.443750 0.770450 0.000000 +vt 0.151110 0.626930 0.000000 +vt 0.149840 0.614890 0.000000 +vt 0.152370 0.638970 0.000000 +vt 0.140540 0.637850 0.000000 +vt 0.139130 0.625790 0.000000 +vt 0.137720 0.613730 0.000000 +vt 0.153640 0.651000 0.000000 +vt 0.141950 0.649910 0.000000 +vt 0.130260 0.648810 0.000000 +vt 0.128710 0.636730 0.000000 +vt 0.127160 0.624650 0.000000 +vt 0.125600 0.612570 0.000000 +vt 0.447910 0.715870 0.000000 +vt 0.436230 0.716300 0.000000 +vt 0.438660 0.705070 0.000000 +vt 0.450400 0.704650 0.000000 +vt 0.424550 0.716720 0.000000 +vt 0.426920 0.705500 0.000000 +vt 0.429290 0.694270 0.000000 +vt 0.441090 0.693850 0.000000 +vt 0.452890 0.693430 0.000000 +vt 0.487230 0.643480 0.000000 +vt 0.499460 0.642760 0.000000 +vt 0.496870 0.655060 0.000000 +vt 0.484640 0.655900 0.000000 +vt 0.511690 0.642030 0.000000 +vt 0.509090 0.654220 0.000000 +vt 0.506490 0.666410 0.000000 +vt 0.494270 0.667360 0.000000 +vt 0.482050 0.668310 0.000000 +vt 0.083070 0.704050 0.000000 +vt 0.080850 0.691850 0.000000 +vt 0.091230 0.701570 0.000000 +vt 0.093070 0.716630 0.000000 +vt 0.078630 0.679650 0.000000 +vt 0.089390 0.686510 0.000000 +vt 0.100140 0.693370 0.000000 +vt 0.101600 0.711290 0.000000 +vt 0.103060 0.729200 0.000000 +vt 0.076410 0.667440 0.000000 +vt 0.087550 0.671450 0.000000 +vt 0.098680 0.675450 0.000000 +vt 0.109820 0.679450 0.000000 +vt 0.110900 0.700230 0.000000 +vt 0.111980 0.721000 0.000000 +vt 0.113050 0.741780 0.000000 +vt 0.525530 0.568050 0.000000 +vt 0.526760 0.575650 0.000000 +vt 0.514430 0.575580 0.000000 +vt 0.513330 0.567910 0.000000 +vt 0.527990 0.583260 0.000000 +vt 0.515530 0.583250 0.000000 +vt 0.503070 0.583240 0.000000 +vt 0.502100 0.575510 0.000000 +vt 0.501120 0.567770 0.000000 +vt 0.529220 0.590860 0.000000 +vt 0.516630 0.590920 0.000000 +vt 0.504050 0.590980 0.000000 +vt 0.491470 0.591030 0.000000 +vt 0.490620 0.583230 0.000000 +vt 0.489770 0.575430 0.000000 +vt 0.488920 0.567630 0.000000 +vt 0.446640 0.789290 0.000000 +vt 0.445920 0.784580 0.000000 +vt 0.436170 0.791430 0.000000 +vt 0.435460 0.786390 0.000000 +vt 0.434740 0.781350 0.000000 +vt 0.445190 0.779870 0.000000 +vt 0.425700 0.793580 0.000000 +vt 0.425000 0.788210 0.000000 +vt 0.424290 0.782840 0.000000 +vt 0.423590 0.777470 0.000000 +vt 0.434030 0.776320 0.000000 +vt 0.444470 0.775160 0.000000 +vt 0.387870 0.647780 0.000000 +vt 0.400810 0.647400 0.000000 +vt 0.398650 0.659840 0.000000 +vt 0.385780 0.660300 0.000000 +vt 0.413750 0.647020 0.000000 +vt 0.411520 0.659380 0.000000 +vt 0.409280 0.671740 0.000000 +vt 0.396480 0.672280 0.000000 +vt 0.383680 0.672830 0.000000 +vt 0.178300 0.735840 0.000000 +vt 0.178080 0.759360 0.000000 +vt 0.178510 0.712330 0.000000 +vt 0.190610 0.713460 0.000000 +vt 0.190190 0.736950 0.000000 +vt 0.189770 0.760440 0.000000 +vt 0.178730 0.688810 0.000000 +vt 0.191040 0.689970 0.000000 +vt 0.203340 0.691120 0.000000 +vt 0.202710 0.714590 0.000000 +vt 0.202080 0.738060 0.000000 +vt 0.201460 0.761530 0.000000 +vt 0.323540 0.627380 0.000000 +vt 0.336640 0.627350 0.000000 +vt 0.321570 0.619720 0.000000 +vt 0.334920 0.619540 0.000000 +vt 0.348260 0.619350 0.000000 +vt 0.349750 0.627320 0.000000 +vt 0.319600 0.612070 0.000000 +vt 0.333190 0.611720 0.000000 +vt 0.346780 0.611370 0.000000 +vt 0.360360 0.611030 0.000000 +vt 0.361610 0.619160 0.000000 +vt 0.362850 0.627290 0.000000 +vt 0.301130 0.786390 0.000000 +vt 0.300470 0.779670 0.000000 +vt 0.317120 0.782460 0.000000 +vt 0.317810 0.788690 0.000000 +vt 0.299800 0.772940 0.000000 +vt 0.316440 0.776220 0.000000 +vt 0.333080 0.779490 0.000000 +vt 0.333780 0.785240 0.000000 +vt 0.334490 0.791000 0.000000 +vt 0.299140 0.766220 0.000000 +vt 0.315760 0.769980 0.000000 +vt 0.332370 0.773740 0.000000 +vt 0.348990 0.777500 0.000000 +vt 0.349720 0.782770 0.000000 +vt 0.350440 0.788030 0.000000 +vt 0.351170 0.793300 0.000000 +vt 0.253570 0.636700 0.000000 +vt 0.253420 0.624720 0.000000 +vt 0.253730 0.648680 0.000000 +vt 0.240940 0.647420 0.000000 +vt 0.240660 0.635450 0.000000 +vt 0.240370 0.623470 0.000000 +vt 0.253880 0.660650 0.000000 +vt 0.241230 0.659390 0.000000 +vt 0.228570 0.658130 0.000000 +vt 0.228160 0.646160 0.000000 +vt 0.227740 0.634190 0.000000 +vt 0.227320 0.622220 0.000000 +vt 0.349360 0.720920 0.000000 +vt 0.336300 0.720490 0.000000 +vt 0.338690 0.708510 0.000000 +vt 0.351630 0.709030 0.000000 +vt 0.323230 0.720070 0.000000 +vt 0.325750 0.707980 0.000000 +vt 0.328260 0.695900 0.000000 +vt 0.341080 0.696520 0.000000 +vt 0.353890 0.697140 0.000000 +vt 0.388570 0.569940 0.000000 +vt 0.388140 0.577900 0.000000 +vt 0.401650 0.569120 0.000000 +vt 0.401430 0.577130 0.000000 +vt 0.401220 0.585140 0.000000 +vt 0.387720 0.585860 0.000000 +vt 0.414730 0.568300 0.000000 +vt 0.414720 0.576360 0.000000 +vt 0.414710 0.584420 0.000000 +vt 0.414710 0.592480 0.000000 +vt 0.401000 0.593140 0.000000 +vt 0.387290 0.593810 0.000000 +vt 0.373830 0.742860 0.000000 +vt 0.386230 0.741740 0.000000 +vt 0.387040 0.752730 0.000000 +vt 0.374800 0.753770 0.000000 +vt 0.398630 0.740620 0.000000 +vt 0.399270 0.751680 0.000000 +vt 0.399910 0.762750 0.000000 +vt 0.387850 0.763710 0.000000 +vt 0.375780 0.764680 0.000000 +# 713 texture coords + +g rocksCombined014 +usemtl rocksSculpts +f 167/3 166/4 1/1 163/2 +f 164/6 167/3 163/2 43/5 +f 47/7 165/8 167/3 164/6 +f 165/8 46/9 166/4 167/3 +f 171/11 164/6 43/5 168/10 +f 169/13 171/11 168/10 27/12 +f 44/14 170/15 171/11 169/13 +f 170/15 47/7 164/6 171/11 +f 175/16 174/17 47/7 170/15 +f 172/18 175/16 170/15 44/14 +f 33/19 173/20 175/16 172/18 +f 173/20 45/21 174/17 175/16 +f 178/22 177/23 46/9 165/8 +f 174/17 178/22 165/8 47/7 +f 45/21 176/24 178/22 174/17 +f 176/24 20/25 177/23 178/22 +f 183/28 182/29 5/26 179/27 +f 180/31 183/28 179/27 48/30 +f 52/32 181/33 183/28 180/31 +f 181/33 51/34 182/29 183/28 +f 187/36 180/31 48/30 184/35 +f 185/38 187/36 184/35 21/37 +f 49/39 186/40 187/36 185/38 +f 186/40 52/32 180/31 187/36 +f 191/41 190/42 52/32 186/40 +f 188/43 191/41 186/40 49/39 +f 34/44 189/45 191/41 188/43 +f 189/45 50/46 190/42 191/41 +f 194/47 193/48 51/34 181/33 +f 190/42 194/47 181/33 52/32 +f 50/46 192/49 194/47 190/42 +f 192/49 31/50 193/48 194/47 +f 198/52 197/53 1/1 166/51 +f 195/55 198/52 166/51 46/54 +f 56/56 196/57 198/52 195/55 +f 196/57 55/58 197/53 198/52 +f 201/60 195/55 46/54 177/59 +f 199/62 201/60 177/59 20/61 +f 53/63 200/64 201/60 199/62 +f 200/64 56/56 195/55 201/60 +f 205/65 204/66 56/56 200/64 +f 202/67 205/65 200/64 53/63 +f 23/68 203/69 205/65 202/67 +f 203/69 54/70 204/66 205/65 +f 208/71 207/72 55/58 196/57 +f 204/66 208/71 196/57 56/56 +f 54/70 206/73 208/71 204/66 +f 206/73 10/74 207/72 208/71 +f 213/77 212/78 30/75 209/76 +f 210/80 213/77 209/76 57/79 +f 61/81 211/82 213/77 210/80 +f 211/82 60/83 212/78 213/77 +f 217/85 210/80 57/79 214/84 +f 215/87 217/85 214/84 32/86 +f 58/88 216/89 217/85 215/87 +f 216/89 61/81 210/80 217/85 +f 221/90 220/91 61/81 216/89 +f 218/92 221/90 216/89 58/88 +f 9/93 219/94 221/90 218/92 +f 219/94 59/95 220/91 221/90 +f 224/96 223/97 60/83 211/82 +f 220/91 224/96 211/82 61/81 +f 59/95 222/98 224/96 220/91 +f 222/98 2/99 223/97 224/96 +f 229/102 228/103 19/100 225/101 +f 226/105 229/102 225/101 62/104 +f 66/106 227/107 229/102 226/105 +f 227/107 65/108 228/103 229/102 +f 233/110 226/105 62/104 230/109 +f 231/112 233/110 230/109 24/111 +f 63/113 232/114 233/110 231/112 +f 232/114 66/106 226/105 233/110 +f 237/115 236/116 66/106 232/114 +f 234/117 237/115 232/114 63/113 +f 11/118 235/119 237/115 234/117 +f 235/119 64/120 236/116 237/115 +f 240/121 239/122 65/108 227/107 +f 236/116 240/121 227/107 66/106 +f 64/120 238/123 240/121 236/116 +f 238/123 4/124 239/122 240/121 +f 245/127 244/128 3/125 241/126 +f 242/130 245/127 241/126 67/129 +f 71/131 243/132 245/127 242/130 +f 243/132 70/133 244/128 245/127 +f 249/135 242/130 67/129 246/134 +f 247/137 249/135 246/134 38/136 +f 68/138 248/139 249/135 247/137 +f 248/139 71/131 242/130 249/135 +f 253/140 252/141 71/131 248/139 +f 250/142 253/140 248/139 68/138 +f 40/143 251/144 253/140 250/142 +f 251/144 69/145 252/141 253/140 +f 256/146 255/147 70/133 243/132 +f 252/141 256/146 243/132 71/131 +f 69/145 254/148 256/146 252/141 +f 254/148 12/149 255/147 256/146 +f 261/152 260/153 6/150 257/151 +f 258/155 261/152 257/151 72/154 +f 76/156 259/157 261/152 258/155 +f 259/157 75/158 260/153 261/152 +f 265/160 258/155 72/154 262/159 +f 263/162 265/160 262/159 21/161 +f 73/163 264/164 265/160 263/162 +f 264/164 76/156 258/155 265/160 +f 269/165 268/166 76/156 264/164 +f 266/167 269/165 264/164 73/163 +f 23/68 267/168 269/165 266/167 +f 267/168 74/169 268/166 269/165 +f 272/170 271/171 75/158 259/157 +f 268/166 272/170 259/157 76/156 +f 74/169 270/172 272/170 268/166 +f 270/172 9/173 271/171 272/170 +f 277/175 276/176 11/118 273/174 +f 274/178 277/175 273/174 77/177 +f 81/179 275/180 277/175 274/178 +f 275/180 80/181 276/176 277/175 +f 281/183 274/178 77/177 278/182 +f 279/185 281/183 278/182 8/184 +f 78/186 280/187 281/183 279/185 +f 280/187 81/179 274/178 281/183 +f 285/188 284/189 81/179 280/187 +f 282/190 285/188 280/187 78/186 +f 39/191 283/192 285/188 282/190 +f 283/192 79/193 284/189 285/188 +f 288/194 287/195 80/181 275/180 +f 284/189 288/194 275/180 81/179 +f 79/193 286/196 288/194 284/189 +f 286/196 37/197 287/195 288/194 +f 293/199 292/200 12/149 289/198 +f 290/202 293/199 289/198 82/201 +f 86/203 291/204 293/199 290/202 +f 291/204 85/205 292/200 293/199 +f 297/207 290/202 82/201 294/206 +f 295/209 297/207 294/206 7/208 +f 83/210 296/211 297/207 295/209 +f 296/211 86/203 290/202 297/207 +f 301/212 300/213 86/203 296/211 +f 298/214 301/212 296/211 83/210 +f 22/215 299/216 301/212 298/214 +f 299/216 84/217 300/213 301/212 +f 304/218 303/219 85/205 291/204 +f 300/213 304/218 291/204 86/203 +f 84/217 302/220 304/218 300/213 +f 302/220 24/111 303/219 304/218 +f 308/221 307/222 5/26 182/29 +f 305/223 308/221 182/29 51/34 +f 90/224 306/225 308/221 305/223 +f 306/225 89/226 307/222 308/221 +f 311/227 305/223 51/34 193/48 +f 309/228 311/227 193/48 31/50 +f 87/229 310/230 311/227 309/228 +f 310/230 90/224 305/223 311/227 +f 315/231 314/232 90/224 310/230 +f 312/233 315/231 310/230 87/229 +f 29/234 313/235 315/231 312/233 +f 313/235 88/236 314/232 315/231 +f 318/237 317/238 89/226 306/225 +f 314/232 318/237 306/225 90/224 +f 88/236 316/239 318/237 314/232 +f 316/239 10/74 317/238 318/237 +f 323/241 322/242 38/136 319/240 +f 320/244 323/241 319/240 91/243 +f 95/245 321/246 323/241 320/244 +f 321/246 94/247 322/242 323/241 +f 327/249 320/244 91/243 324/248 +f 325/251 327/249 324/248 41/250 +f 92/252 326/253 327/249 325/251 +f 326/253 95/245 320/244 327/249 +f 331/254 330/255 95/245 326/253 +f 328/256 331/254 326/253 92/252 +f 25/257 329/258 331/254 328/256 +f 329/258 93/259 330/255 331/254 +f 334/260 333/261 94/247 321/246 +f 330/255 334/260 321/246 95/245 +f 93/259 332/262 334/260 330/255 +f 332/262 13/263 333/261 334/260 +f 339/266 338/267 39/264 335/265 +f 336/269 339/266 335/265 96/268 +f 100/270 337/271 339/266 336/269 +f 337/271 99/272 338/267 339/266 +f 343/274 336/269 96/268 340/273 +f 341/276 343/274 340/273 42/275 +f 97/277 342/278 343/274 341/276 +f 342/278 100/270 336/269 343/274 +f 347/279 346/280 100/270 342/278 +f 344/281 347/279 342/278 97/277 +f 26/282 345/283 347/279 344/281 +f 345/283 98/284 346/280 347/279 +f 350/285 349/286 99/272 337/271 +f 346/280 350/285 337/271 100/270 +f 98/284 348/287 350/285 346/280 +f 348/287 15/288 349/286 350/285 +f 355/291 354/292 35/289 351/290 +f 352/294 355/291 351/290 101/293 +f 105/295 353/296 355/291 352/294 +f 353/296 104/297 354/292 355/291 +f 359/299 352/294 101/293 356/298 +f 357/300 359/299 356/298 37/197 +f 102/301 358/302 359/299 357/300 +f 358/302 105/295 352/294 359/299 +f 363/303 362/304 105/295 358/302 +f 360/305 363/303 358/302 102/301 +f 17/306 361/307 363/303 360/305 +f 361/307 103/308 362/304 363/303 +f 366/309 365/310 104/297 353/296 +f 362/304 366/309 353/296 105/295 +f 103/308 364/311 366/309 362/304 +f 364/311 14/312 365/310 366/309 +f 371/314 370/315 13/263 367/313 +f 368/317 371/314 367/313 106/316 +f 110/318 369/319 371/314 368/317 +f 369/319 109/320 370/315 371/314 +f 375/322 368/317 106/316 372/321 +f 373/323 375/322 372/321 27/12 +f 107/324 374/325 375/322 373/323 +f 374/325 110/318 368/317 375/322 +f 379/326 378/327 110/318 374/325 +f 376/328 379/326 374/325 107/324 +f 29/234 377/329 379/326 376/328 +f 377/329 108/330 378/327 379/326 +f 382/331 381/332 109/320 369/319 +f 378/327 382/331 369/319 110/318 +f 108/330 380/333 382/331 378/327 +f 380/333 18/334 381/332 382/331 +f 387/337 386/338 28/335 383/336 +f 384/340 387/337 383/336 111/339 +f 115/341 385/342 387/337 384/340 +f 385/342 114/343 386/338 387/337 +f 391/345 384/340 111/339 388/344 +f 389/346 391/345 388/344 32/86 +f 112/347 390/348 391/345 389/346 +f 390/348 115/341 384/340 391/345 +f 395/349 394/350 115/341 390/348 +f 392/351 395/349 390/348 112/347 +f 17/306 393/352 395/349 392/351 +f 393/352 113/353 394/350 395/349 +f 398/354 397/355 114/343 385/342 +f 394/350 398/354 385/342 115/341 +f 113/353 396/356 398/354 394/350 +f 396/356 15/357 397/355 398/354 +f 403/360 402/361 16/358 399/359 +f 400/363 403/360 399/359 116/362 +f 120/364 401/365 403/360 400/363 +f 401/365 119/366 402/361 403/360 +f 407/368 400/363 116/362 404/367 +f 405/370 407/368 404/367 36/369 +f 117/371 406/372 407/368 405/370 +f 406/372 120/364 400/363 407/368 +f 411/373 410/374 120/364 406/372 +f 408/375 411/373 406/372 117/371 +f 40/143 409/376 411/373 408/375 +f 409/376 118/377 410/374 411/373 +f 414/378 413/379 119/366 401/365 +f 410/374 414/378 401/365 120/364 +f 118/377 412/380 414/378 410/374 +f 412/380 18/334 413/379 414/378 +f 419/382 418/383 25/257 415/381 +f 416/385 419/382 415/381 121/384 +f 125/386 417/387 419/382 416/385 +f 417/387 124/388 418/383 419/382 +f 423/390 416/385 121/384 420/389 +f 421/392 423/390 420/389 14/391 +f 122/393 422/394 423/390 421/392 +f 422/394 125/386 416/385 423/390 +f 427/395 426/396 125/386 422/394 +f 424/397 427/395 422/394 122/393 +f 30/398 425/399 427/395 424/397 +f 425/399 123/400 426/396 427/395 +f 430/401 429/402 124/388 417/387 +f 426/396 430/401 417/387 125/386 +f 123/400 428/403 430/401 426/396 +f 428/403 33/19 429/402 430/401 +f 434/406 257/407 6/404 431/405 +f 432/409 434/406 431/405 126/408 +f 128/410 433/411 434/406 432/409 +f 433/411 72/412 257/407 434/406 +f 438/414 432/409 126/408 435/413 +f 436/416 438/414 435/413 28/415 +f 127/417 437/418 438/414 436/416 +f 437/418 128/410 432/409 438/414 +f 441/419 440/420 128/410 437/418 +f 439/421 441/419 437/418 127/417 +f 34/44 188/43 441/419 439/421 +f 188/43 49/39 440/420 441/419 +f 442/422 262/423 72/412 433/411 +f 440/420 442/422 433/411 128/410 +f 49/39 185/38 442/422 440/420 +f 185/38 21/37 262/423 442/422 +f 446/425 199/62 20/61 443/424 +f 444/427 446/425 443/424 129/426 +f 130/428 445/429 446/425 444/427 +f 445/429 53/63 199/62 446/425 +f 449/431 444/427 129/426 447/430 +f 222/433 449/431 447/430 2/432 +f 59/434 448/435 449/431 222/433 +f 448/435 130/428 444/427 449/431 +f 451/436 450/437 130/428 448/435 +f 219/438 451/436 448/435 59/434 +f 9/173 270/172 451/436 219/438 +f 270/172 74/169 450/437 451/436 +f 452/439 202/67 53/63 445/429 +f 450/437 452/439 445/429 130/428 +f 74/169 267/168 452/439 450/437 +f 267/168 23/68 202/67 452/439 +f 456/440 455/441 3/125 244/128 +f 453/442 456/440 244/128 70/133 +f 132/443 454/444 456/440 453/442 +f 454/444 131/445 455/441 456/440 +f 458/446 453/442 70/133 255/147 +f 292/200 458/446 255/147 12/149 +f 85/205 457/447 458/446 292/200 +f 457/447 132/443 453/442 458/446 +f 460/448 459/449 132/443 457/447 +f 303/219 460/448 457/447 85/205 +f 24/111 230/109 460/448 303/219 +f 230/109 62/104 459/449 460/448 +f 462/450 461/451 131/445 454/444 +f 459/449 462/450 454/444 132/443 +f 62/104 225/101 462/450 459/449 +f 225/101 19/100 461/451 462/450 +f 465/453 263/162 21/161 184/452 +f 463/455 465/453 184/452 48/454 +f 133/456 464/457 465/453 463/455 +f 464/457 73/163 263/162 465/453 +f 467/459 463/455 48/454 179/458 +f 307/222 467/459 179/458 5/26 +f 89/226 466/460 467/459 307/222 +f 466/460 133/456 463/455 467/459 +f 469/461 468/462 133/456 466/460 +f 317/238 469/461 466/460 89/226 +f 10/74 206/73 469/461 317/238 +f 206/73 54/70 468/462 469/461 +f 470/463 266/167 73/163 464/457 +f 468/462 470/463 464/457 133/456 +f 54/70 203/69 470/463 468/462 +f 203/69 23/68 266/167 470/463 +f 474/464 473/465 8/184 278/182 +f 471/466 474/464 278/182 77/177 +f 135/467 472/468 474/464 471/466 +f 472/468 134/469 473/465 474/464 +f 476/470 471/466 77/177 273/174 +f 234/117 476/470 273/174 11/118 +f 63/113 475/471 476/470 234/117 +f 475/471 135/467 471/466 476/470 +f 478/472 477/473 135/467 475/471 +f 231/112 478/472 475/471 63/113 +f 24/111 302/220 478/472 231/112 +f 302/220 84/217 477/473 478/472 +f 480/474 479/475 134/469 472/468 +f 477/473 480/474 472/468 135/467 +f 84/217 299/216 480/474 477/473 +f 299/216 22/215 479/475 480/474 +f 484/478 239/479 4/476 481/477 +f 482/481 484/478 481/477 136/480 +f 139/482 483/483 484/478 482/481 +f 483/483 65/484 239/479 484/478 +f 488/486 482/481 136/480 485/485 +f 486/488 488/486 485/485 35/487 +f 137/489 487/490 488/486 486/488 +f 487/490 139/482 482/481 488/486 +f 492/491 491/492 139/482 487/490 +f 489/493 492/491 487/490 137/489 +f 41/250 490/494 492/491 489/493 +f 490/494 138/495 491/492 492/491 +f 494/496 228/497 65/484 483/483 +f 491/492 494/496 483/483 139/482 +f 138/495 493/498 494/496 491/492 +f 493/498 19/499 228/497 494/496 +f 498/501 295/502 7/208 495/500 +f 496/504 498/501 495/500 140/503 +f 143/505 497/506 498/501 496/504 +f 497/506 83/507 295/502 498/501 +f 502/509 496/504 140/503 499/508 +f 500/510 502/509 499/508 36/369 +f 141/511 501/512 502/509 500/510 +f 501/512 143/505 496/504 502/509 +f 506/513 505/514 143/505 501/512 +f 503/515 506/513 501/512 141/511 +f 42/275 504/516 506/513 503/515 +f 504/516 142/517 505/514 506/513 +f 508/518 298/519 83/507 497/506 +f 505/514 508/518 497/506 143/505 +f 142/517 507/520 508/518 505/514 +f 507/520 22/521 298/519 508/518 +f 511/522 169/13 27/12 372/321 +f 509/523 511/522 372/321 106/316 +f 144/524 510/525 511/522 509/523 +f 510/525 44/14 169/13 511/522 +f 513/526 509/523 106/316 367/313 +f 332/262 513/526 367/313 13/263 +f 93/259 512/527 513/526 332/262 +f 512/527 144/524 509/523 513/526 +f 515/528 514/529 144/524 512/527 +f 329/258 515/528 512/527 93/259 +f 25/257 418/383 515/528 329/258 +f 418/383 124/388 514/529 515/528 +f 516/530 172/18 44/14 510/525 +f 514/529 516/530 510/525 144/524 +f 124/388 429/402 516/530 514/529 +f 429/402 33/19 172/18 516/530 +f 521/532 520/533 26/282 517/531 +f 518/535 521/532 517/531 145/534 +f 148/536 519/537 521/532 518/535 +f 519/537 147/538 520/533 521/532 +f 525/540 518/535 145/534 522/539 +f 523/541 525/540 522/539 16/358 +f 146/542 524/543 525/540 523/541 +f 524/543 148/536 518/535 525/540 +f 528/544 527/545 148/536 524/543 +f 526/546 528/544 524/543 146/542 +f 31/50 192/49 528/544 526/546 +f 192/49 50/46 527/545 528/544 +f 530/547 529/548 147/538 519/537 +f 527/545 530/547 519/537 148/536 +f 50/46 189/45 530/547 527/545 +f 189/45 34/44 529/548 530/547 +f 533/549 421/550 14/312 364/311 +f 531/551 533/549 364/311 103/308 +f 149/552 532/553 533/549 531/551 +f 532/553 122/554 421/550 533/549 +f 535/555 531/551 103/308 361/307 +f 392/351 535/555 361/307 17/306 +f 112/347 534/556 535/555 392/351 +f 534/556 149/552 531/551 535/555 +f 537/557 536/558 149/552 534/556 +f 389/346 537/557 534/556 112/347 +f 32/86 214/84 537/557 389/346 +f 214/84 57/79 536/558 537/557 +f 538/559 424/560 122/554 532/553 +f 536/558 538/559 532/553 149/552 +f 57/79 209/76 538/559 536/558 +f 209/76 30/75 424/560 538/559 +f 541/561 309/228 31/50 526/546 +f 539/562 541/561 526/546 146/542 +f 150/563 540/564 541/561 539/562 +f 540/564 87/229 309/228 541/561 +f 543/565 539/562 146/542 523/541 +f 402/361 543/565 523/541 16/358 +f 119/366 542/566 543/565 402/361 +f 542/566 150/563 539/562 543/565 +f 545/567 544/568 150/563 542/566 +f 413/379 545/567 542/566 119/366 +f 18/334 380/333 545/567 413/379 +f 380/333 108/330 544/568 545/567 +f 546/569 312/233 87/229 540/564 +f 544/568 546/569 540/564 150/563 +f 108/330 377/329 546/569 544/568 +f 377/329 29/234 312/233 546/569 +f 549/570 373/323 27/12 168/10 +f 547/571 549/570 168/10 43/5 +f 151/572 548/573 549/570 547/571 +f 548/573 107/324 373/323 549/570 +f 551/574 547/571 43/5 163/2 +f 197/53 551/574 163/2 1/1 +f 55/58 550/575 551/574 197/53 +f 550/575 151/572 547/571 551/574 +f 553/576 552/577 151/572 550/575 +f 207/72 553/576 550/575 55/58 +f 10/74 316/239 553/576 207/72 +f 316/239 88/236 552/577 553/576 +f 554/578 376/328 107/324 548/573 +f 552/577 554/578 548/573 151/572 +f 88/236 313/235 554/578 552/577 +f 313/235 29/234 376/328 554/578 +f 557/581 431/582 6/579 260/580 +f 555/584 557/581 260/580 75/583 +f 152/585 556/586 557/581 555/584 +f 556/586 126/587 431/582 557/581 +f 559/589 555/584 75/583 271/588 +f 218/92 559/589 271/588 9/93 +f 58/88 558/590 559/589 218/92 +f 558/590 152/585 555/584 559/589 +f 561/591 560/592 152/585 558/590 +f 215/87 561/591 558/590 58/88 +f 32/86 388/344 561/591 215/87 +f 388/344 111/339 560/592 561/591 +f 562/593 435/594 126/587 556/586 +f 560/592 562/593 556/586 152/585 +f 111/339 383/336 562/593 560/592 +f 383/336 28/335 435/594 562/593 +f 565/597 223/598 2/595 447/596 +f 563/600 565/597 447/596 129/599 +f 153/601 564/602 565/597 563/600 +f 564/602 60/603 223/598 565/597 +f 567/605 563/600 129/599 443/604 +f 176/24 567/605 443/604 20/25 +f 45/21 566/606 567/605 176/24 +f 566/606 153/601 563/600 567/605 +f 569/607 568/608 153/601 566/606 +f 173/20 569/607 566/606 45/21 +f 33/19 428/403 569/607 173/20 +f 428/403 123/400 568/608 569/607 +f 570/609 212/610 60/603 564/602 +f 568/608 570/609 564/602 153/601 +f 123/400 425/399 570/609 568/608 +f 425/399 30/398 212/610 570/609 +f 573/612 436/416 28/415 386/611 +f 571/614 573/612 386/611 114/613 +f 154/615 572/616 573/612 571/614 +f 572/616 127/417 436/416 573/612 +f 575/618 571/614 114/613 397/617 +f 348/287 575/618 397/617 15/288 +f 98/284 574/619 575/618 348/287 +f 574/619 154/615 571/614 575/618 +f 577/620 576/621 154/615 574/619 +f 345/283 577/620 574/619 98/284 +f 26/282 520/533 577/620 345/283 +f 520/533 147/538 576/621 577/620 +f 578/622 439/421 127/417 572/616 +f 576/621 578/622 572/616 154/615 +f 147/538 529/548 578/622 576/621 +f 529/548 34/44 439/421 578/622 +f 581/623 247/137 38/136 322/242 +f 579/624 581/623 322/242 94/247 +f 155/625 580/626 581/623 579/624 +f 580/626 68/138 247/137 581/623 +f 583/627 579/624 94/247 333/261 +f 370/315 583/627 333/261 13/263 +f 109/320 582/628 583/627 370/315 +f 582/628 155/625 579/624 583/627 +f 585/629 584/630 155/625 582/628 +f 381/332 585/629 582/628 109/320 +f 18/334 412/380 585/629 381/332 +f 412/380 118/377 584/630 585/629 +f 586/631 250/142 68/138 580/626 +f 584/630 586/631 580/626 155/625 +f 118/377 409/376 586/631 584/630 +f 409/376 40/143 250/142 586/631 +f 589/632 349/633 15/357 396/356 +f 587/634 589/632 396/356 113/353 +f 156/635 588/636 589/632 587/634 +f 588/636 99/637 349/633 589/632 +f 591/638 587/634 113/353 393/352 +f 360/305 591/638 393/352 17/306 +f 102/301 590/639 591/638 360/305 +f 590/639 156/635 587/634 591/638 +f 593/640 592/641 156/635 590/639 +f 357/300 593/640 590/639 102/301 +f 37/197 286/196 593/640 357/300 +f 286/196 79/193 592/641 593/640 +f 594/642 338/643 99/637 588/636 +f 592/641 594/642 588/636 156/635 +f 79/193 283/192 594/642 592/641 +f 283/192 39/191 338/643 594/642 +f 597/645 241/126 3/125 455/644 +f 595/647 597/645 455/644 131/646 +f 157/648 596/649 597/645 595/647 +f 596/649 67/129 241/126 597/645 +f 599/651 595/647 131/646 461/650 +f 493/498 599/651 461/650 19/499 +f 138/495 598/652 599/651 493/498 +f 598/652 157/648 595/647 599/651 +f 601/653 600/654 157/648 598/652 +f 490/494 601/653 598/652 138/495 +f 41/250 324/248 601/653 490/494 +f 324/248 91/243 600/654 601/653 +f 602/655 246/134 67/129 596/649 +f 600/654 602/655 596/649 157/648 +f 91/243 319/240 602/655 600/654 +f 319/240 38/136 246/134 602/655 +f 605/658 279/659 8/656 473/657 +f 603/661 605/658 473/657 134/660 +f 158/662 604/663 605/658 603/661 +f 604/663 78/664 279/659 605/658 +f 607/666 603/661 134/660 479/665 +f 507/520 607/666 479/665 22/521 +f 142/517 606/667 607/666 507/520 +f 606/667 158/662 603/661 607/666 +f 609/668 608/669 158/662 606/667 +f 504/516 609/668 606/667 142/517 +f 42/275 340/273 609/668 504/516 +f 340/273 96/268 608/669 609/668 +f 610/670 282/671 78/664 604/663 +f 608/669 610/670 604/663 158/662 +f 96/268 335/265 610/670 608/669 +f 335/265 39/264 282/671 610/670 +f 613/672 481/673 4/124 238/123 +f 611/674 613/672 238/123 64/120 +f 159/675 612/676 613/672 611/674 +f 612/676 136/677 481/673 613/672 +f 615/678 611/674 64/120 235/119 +f 276/176 615/678 235/119 11/118 +f 80/181 614/679 615/678 276/176 +f 614/679 159/675 611/674 615/678 +f 617/680 616/681 159/675 614/679 +f 287/195 617/680 614/679 80/181 +f 37/197 356/298 617/680 287/195 +f 356/298 101/293 616/681 617/680 +f 618/682 485/683 136/677 612/676 +f 616/681 618/682 612/676 159/675 +f 101/293 351/290 618/682 616/681 +f 351/290 35/289 485/683 618/682 +f 621/684 405/370 36/369 499/508 +f 619/685 621/684 499/508 140/503 +f 160/686 620/687 621/684 619/685 +f 620/687 117/371 405/370 621/684 +f 623/688 619/685 140/503 495/500 +f 294/206 623/688 495/500 7/208 +f 82/201 622/689 623/688 294/206 +f 622/689 160/686 619/685 623/688 +f 625/690 624/691 160/686 622/689 +f 289/198 625/690 622/689 82/201 +f 12/149 254/148 625/690 289/198 +f 254/148 69/145 624/691 625/690 +f 626/692 408/375 117/371 620/687 +f 624/691 626/692 620/687 160/686 +f 69/145 251/144 626/692 624/691 +f 251/144 40/143 408/375 626/692 +f 629/694 486/488 35/487 354/693 +f 627/696 629/694 354/693 104/695 +f 161/697 628/698 629/694 627/696 +f 628/698 137/489 486/488 629/694 +f 631/700 627/696 104/695 365/699 +f 420/389 631/700 365/699 14/391 +f 121/384 630/701 631/700 420/389 +f 630/701 161/697 627/696 631/700 +f 633/702 632/703 161/697 630/701 +f 415/381 633/702 630/701 121/384 +f 25/257 328/256 633/702 415/381 +f 328/256 92/252 632/703 633/702 +f 634/704 489/493 137/489 628/698 +f 632/703 634/704 628/698 161/697 +f 92/252 325/251 634/704 632/703 +f 325/251 41/250 489/493 634/704 +f 637/705 500/510 36/369 404/367 +f 635/706 637/705 404/367 116/362 +f 162/707 636/708 637/705 635/706 +f 636/708 141/511 500/510 637/705 +f 639/709 635/706 116/362 399/359 +f 522/539 639/709 399/359 16/358 +f 145/534 638/710 639/709 522/539 +f 638/710 162/707 635/706 639/709 +f 641/711 640/712 162/707 638/710 +f 517/531 641/711 638/710 145/534 +f 26/282 344/281 641/711 517/531 +f 344/281 97/277 640/712 641/711 +f 642/713 503/515 141/511 636/708 +f 640/712 642/713 636/708 162/707 +f 97/277 341/276 642/713 640/712 +f 341/276 42/275 503/515 642/713 +# 640 polygons + diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj.meta new file mode 100644 index 0000000..a0e7a74 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/meshes/rocksCombined014.obj.meta @@ -0,0 +1,82 @@ +fileFormatVersion: 2 +guid: 5868812a64c47e74cbfe27d2868b2448 +timeCreated: 1484958683 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: rocksCombined014 + 100002: //RootNode + 400000: rocksCombined014 + 400002: //RootNode + 2300000: rocksCombined014 + 3300000: rocksCombined014 + 4300000: rocksCombined014 + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 0 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures.meta new file mode 100644 index 0000000..36e415c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e1191237302da64ab658f8c29397d6b +folderAsset: yes +timeCreated: 1484958997 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png new file mode 100644 index 0000000..dfe51b5 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png.meta new file mode 100644 index 0000000..57d1661 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_C.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: c6a3f6d9fbcc6004596801d5261df671 +timeCreated: 1484959006 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png new file mode 100644 index 0000000..b24067f Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png.meta new file mode 100644 index 0000000..2f765d4 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_M_AO_G.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 36f20889c67262c4b9e92fdb19461cbe +timeCreated: 1484959004 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png new file mode 100644 index 0000000..51b162d Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png differ diff --git a/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png.meta b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png.meta new file mode 100644 index 0000000..4cadbdc --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/Models/Rocks/textures/rocksToSculpt_LOW_defaultMat_N.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 5302d1d6da6dda54f9c779e2b814822c +timeCreated: 1484959005 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures.meta b/IronToad_UnityProject/Assets/Art/terrainTextures.meta new file mode 100644 index 0000000..7a080c3 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/terrainTextures.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b15d1240b5cc6e443bb3b47aed46323c +folderAsset: yes +timeCreated: 1484959236 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png new file mode 100644 index 0000000..3fb0bfc Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png differ diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png.meta b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png.meta new file mode 100644 index 0000000..b4b434c --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_basecolor.png.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 3df4c6c07e9ae1244bd330e8a7761117 +timeCreated: 1484961633 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga new file mode 100644 index 0000000..450d981 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga differ diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga.meta b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga.meta new file mode 100644 index 0000000..f977d01 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_DistanceCliffWithTrees_2k_n.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: 9ea77760a6a625148bc252c2865067a4 +timeCreated: 1484961635 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png new file mode 100644 index 0000000..f5c9692 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png differ diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png.meta b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png.meta new file mode 100644 index 0000000..c737dc3 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_alb.png.meta @@ -0,0 +1,68 @@ +fileFormatVersion: 2 +guid: eb9a65ce3348e9644906596be96a1ebb +timeCreated: 1484961384 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga new file mode 100644 index 0000000..8cf0615 Binary files /dev/null and b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga differ diff --git a/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga.meta b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga.meta new file mode 100644 index 0000000..55eddf4 --- /dev/null +++ b/IronToad_UnityProject/Assets/Art/terrainTextures/Rock_sandColored_1k_n.tga.meta @@ -0,0 +1,76 @@ +fileFormatVersion: 2 +guid: b8cfd7426e06b344496a1304fe7545f5 +timeCreated: 1484961384 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 1 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz.meta b/IronToad_UnityProject/Assets/BansheeGz.meta new file mode 100644 index 0000000..32380ef --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4c2a3a5b1b8384d5c8af8ee8bae092aa +folderAsset: yes +timeCreated: 1484953020 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve.meta new file mode 100644 index 0000000..a842f22 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 57191a445dbf4436eb022e58a93c378b +folderAsset: yes +timeCreated: 1484953020 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples.meta new file mode 100644 index 0000000..0d210bb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3f6e9929ec3d4d143b1fbea21cc0d3ff +folderAsset: yes +timeCreated: 1458400496 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations.meta new file mode 100644 index 0000000..e411cd6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 758f9f59418c8c54da21525f0f062516 +folderAsset: yes +timeCreated: 1476657327 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller new file mode 100644 index 0000000..896944e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller.meta new file mode 100644 index 0000000..41e5f35 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimatedObjectsForPoints.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db3da87b26ed5d0448acc48198ffa770 +timeCreated: 1477969440 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim new file mode 100644 index 0000000..2771716 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim.meta new file mode 100644 index 0000000..a1071e9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGAnimationTest.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be87f1a6c5eefe34b9aa201349f0c3d0 +timeCreated: 1476658635 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller new file mode 100644 index 0000000..1956833 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller.meta new file mode 100644 index 0000000..c9f5f89 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGComponentTest.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87d06f2350ef4e94daec3edf4dd97b72 +timeCreated: 1476658635 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller new file mode 100644 index 0000000..709c6c3 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller.meta new file mode 100644 index 0000000..90e2a90 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingAdaptiveMath.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4a9c0fd6deb9f8418329c54a11468e6 +timeCreated: 1476936696 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller new file mode 100644 index 0000000..cbc59e2 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller.meta new file mode 100644 index 0000000..02bcf56 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGCurveSnappingBaseMath.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 516ff215bfef74c4ebe1b3b634c7f489 +timeCreated: 1476936686 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller new file mode 100644 index 0000000..a8032dc Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller.meta new file mode 100644 index 0000000..aab67eb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGLeafs.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76ad43ce2f816254090bb04929bb9e55 +timeCreated: 1476838167 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller new file mode 100644 index 0000000..5ae545a Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller.meta new file mode 100644 index 0000000..bbb5b64 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoomin.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb3c033f1dfe7964dac7eeddac8b1a56 +timeCreated: 1476944185 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim new file mode 100644 index 0000000..5320eec Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim.meta new file mode 100644 index 0000000..052154a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoominAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ad2186b334267245a953ff31e7ce1fd +timeCreated: 1476944185 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller new file mode 100644 index 0000000..e47f0e3 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller.meta new file mode 100644 index 0000000..06b3265 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoon.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 38aa8bab7803d794ca7285b4bf017945 +timeCreated: 1476807795 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim new file mode 100644 index 0000000..f3fc0be Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim.meta new file mode 100644 index 0000000..1cb0ae9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f91122ae46f42fb4e88dd5ecad9a7403 +timeCreated: 1476807795 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim new file mode 100644 index 0000000..c7696ef Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim.meta new file mode 100644 index 0000000..90f03c9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGMoonIdleAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c65020880747fa241bf235f7e6e29b16 +timeCreated: 1476808692 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim new file mode 100644 index 0000000..d429c87 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim.meta new file mode 100644 index 0000000..31c4f07 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointTransformsAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ca93d1b2992418548b16f01ac657af1f +timeCreated: 1477969440 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim new file mode 100644 index 0000000..20a8efb Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim.meta new file mode 100644 index 0000000..aea7aa4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGPointsModeSphereAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ab8b640f7d94674c926ecbd6452e733 +timeCreated: 1477839802 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim new file mode 100644 index 0000000..a16f89a Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim.meta new file mode 100644 index 0000000..67391cf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap1Animation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 55f60c7466992b3468cf6475c8f54eb5 +timeCreated: 1476936686 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim new file mode 100644 index 0000000..89328a2 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim.meta new file mode 100644 index 0000000..dd87064 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnap2Animation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f14f007c89370af44b7e39032619b8dc +timeCreated: 1476936696 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller new file mode 100644 index 0000000..9812e4a Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller.meta new file mode 100644 index 0000000..01b5907 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkin.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bdf0f3c49bb0a35409c240dadbe57fe0 +timeCreated: 1476949544 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim new file mode 100644 index 0000000..da1b6e4 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim.meta new file mode 100644 index 0000000..f7a2729 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSnufkinAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 051cca5984a41bb418d953714382b62e +timeCreated: 1476949544 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller new file mode 100644 index 0000000..db8a52e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller.meta new file mode 100644 index 0000000..819c43c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSphere.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c13ca1ff3eda6e94ca464be8b351d23e +timeCreated: 1477839802 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller new file mode 100644 index 0000000..bb57cb4 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller.meta new file mode 100644 index 0000000..4b4b56e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectile.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4381832d97e48b343ab2c1cc3d0d1cf9 +timeCreated: 1476924217 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim new file mode 100644 index 0000000..cf431f2 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim.meta new file mode 100644 index 0000000..00a8807 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGStarProjectileAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b161154b027eb8347bef0a765e6bb3dd +timeCreated: 1476924217 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller new file mode 100644 index 0000000..acf4a97 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller.meta new file mode 100644 index 0000000..ca8aa25 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSun.controller.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ab0bd3e92df901142ae5b83904aadf63 +timeCreated: 1476800669 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim new file mode 100644 index 0000000..36c7b33 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim.meta new file mode 100644 index 0000000..5a8352b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGSunAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4cb7c4a1ee9b590498e6866202fe23ca +timeCreated: 1476800669 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim new file mode 100644 index 0000000..64a3400 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim.meta new file mode 100644 index 0000000..c502a16 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Animations/BGTreeAnimation.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dab27e7b63564f4419261a691368b852 +timeCreated: 1476838167 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity new file mode 100644 index 0000000..83a0f48 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity.meta new file mode 100644 index 0000000..d509900 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8800f51ec9c6b754a8df17b14a2c6ff3 +timeCreated: 1458400524 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity new file mode 100644 index 0000000..66c6cd9 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity.meta new file mode 100644 index 0000000..fa21037 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveDemo2.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9c119faa3d242b45ba786dfe2e3f8a8 +timeCreated: 1476650409 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity new file mode 100644 index 0000000..42a82be Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity.meta new file mode 100644 index 0000000..36545f5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveMainMenu.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f610a1fed574e58438e8d9d13506a00d +timeCreated: 1477522827 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity new file mode 100644 index 0000000..a27afde Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity.meta new file mode 100644 index 0000000..e802144 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCcChangeCursorLinear.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 033171da8db1994499ead13b8ec05dc0 +timeCreated: 1477542088 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity new file mode 100644 index 0000000..02c9992 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity.meta new file mode 100644 index 0000000..df7e1c3 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestClosestPoint.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce52d115c270eef42bc0891ccdb4d2e8 +timeCreated: 1476651640 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity new file mode 100644 index 0000000..b8965a5 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity.meta new file mode 100644 index 0000000..358202d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestComponents.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cfc6f54abf0c59a44a0e227bba8eee52 +timeCreated: 1476650452 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity new file mode 100644 index 0000000..6d24a0e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity.meta new file mode 100644 index 0000000..34c7b27 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestCustomFields.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf8a28d06b5552f418492e2816f17f9a +timeCreated: 1477391785 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity new file mode 100644 index 0000000..a27c54d Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity.meta new file mode 100644 index 0000000..a7d2539 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestMath.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4a340a876dfa92848aa868ed979eff31 +timeCreated: 1476651353 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity new file mode 100644 index 0000000..6ee0b2e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity.meta new file mode 100644 index 0000000..dba9355 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPerformance.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6f95d49a695ede441b1dc953ab80ccea +timeCreated: 1476651781 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity new file mode 100644 index 0000000..670ff08 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity.meta new file mode 100644 index 0000000..18b34df --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsMode.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73541577b3f697c44a11313a118a5cdf +timeCreated: 1477839477 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity new file mode 100644 index 0000000..59d7424 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity.meta new file mode 100644 index 0000000..1daa5b2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestPointsTransforms.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f9c252eb9b86c045abec185eeaf56cb +timeCreated: 1477962967 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity new file mode 100644 index 0000000..6edb574 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity.meta new file mode 100644 index 0000000..3c5c3ba --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntime.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cc6fac9de9cc1c4198b9a986f2ced0e +timeCreated: 1476651544 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity new file mode 100644 index 0000000..a25a2c5 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity.meta new file mode 100644 index 0000000..9d296bf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestRuntimeCustomFields.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 069231f22cd3fdd4e80459175f290597 +timeCreated: 1480534258 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity new file mode 100644 index 0000000..fb50bb7 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity.meta new file mode 100644 index 0000000..d124b75 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/BGCurveTestSnapping.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e960b8306460399409434b1280f8c9b0 +timeCreated: 1476935558 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials.meta new file mode 100644 index 0000000..1dc76f6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dcbc0c43653154e41bc9880c9294d8b8 +folderAsset: yes +timeCreated: 1458645295 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png new file mode 100644 index 0000000..1ec06e9 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png.meta new file mode 100644 index 0000000..211c6f6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoard.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 3a4eefcafddd73142a4ceaefb345a49a +timeCreated: 1472808092 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat new file mode 100644 index 0000000..47e56e4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat @@ -0,0 +1,138 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: BGTestCheckerBoardMaterial + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: -1 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 3a4eefcafddd73142a4ceaefb345a49a, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: 0.5 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 0 + data: + first: + name: _Metallic + second: 0 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat.meta new file mode 100644 index 0000000..a0c627f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestCheckerBoardMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2f4894a38511664429af761d6a5d8e39 +timeCreated: 1476477684 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png new file mode 100644 index 0000000..ac6d3fc Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png.meta new file mode 100644 index 0000000..c6d8a1d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestGrass.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 1a1345ea99d095547b416fae47e2d9f1 +timeCreated: 1476824191 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat new file mode 100644 index 0000000..d25a84d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: BGTestLineRenderer + m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: + m_LightmapFlags: 5 + m_CustomRenderQueue: 3000 + stringTagMap: {} + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 0, y: 0.6278035} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 1 + data: + first: + name: _DstBlend + second: 0 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _ZWrite + second: 1 + data: + first: + name: _Glossiness + second: 0.5 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 0 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _InvFade + second: 1 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _TintColor + second: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 0.5019608} diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat.meta new file mode 100644 index 0000000..f586724 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRenderer.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e1d1eae4a23f8294cb3213b2bccfba73 +timeCreated: 1458645316 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat new file mode 100644 index 0000000..a8d90bb Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat.meta new file mode 100644 index 0000000..eadccbd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestLineRendererCheckerBox.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ae3eb8adc3950cb4899d2a8dc3564602 +timeCreated: 1473155545 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat new file mode 100644 index 0000000..4540361 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat.meta new file mode 100644 index 0000000..9d52cb7 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestMoonMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0eee3b445c49c204badd4329bcefe33f +timeCreated: 1476798409 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat new file mode 100644 index 0000000..21996d1 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat.meta new file mode 100644 index 0000000..23cc949 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestSunMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30754a36b3e17624e9fb692f43141a77 +timeCreated: 1476671354 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat new file mode 100644 index 0000000..1b00d09 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat @@ -0,0 +1,147 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 6 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: BGTestTrailRenderer + m_Shader: {fileID: 200, guid: 0000000000000000f000000000000000, type: 0} + m_ShaderKeywords: _ALPHABLEND_ON + m_LightmapFlags: 5 + m_CustomRenderQueue: 3000 + stringTagMap: + RenderType: Transparent + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailNormalMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ParallaxMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _OcclusionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _EmissionMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailMask + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _DetailAlbedoMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _MetallicGlossMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _SrcBlend + second: 5 + data: + first: + name: _DstBlend + second: 10 + data: + first: + name: _Cutoff + second: 0.5 + data: + first: + name: _Parallax + second: 0.02 + data: + first: + name: _ZWrite + second: 0 + data: + first: + name: _Glossiness + second: 0.5 + data: + first: + name: _BumpScale + second: 1 + data: + first: + name: _OcclusionStrength + second: 1 + data: + first: + name: _DetailNormalMapScale + second: 1 + data: + first: + name: _UVSec + second: 0 + data: + first: + name: _Mode + second: 2 + data: + first: + name: _Metallic + second: 0 + data: + first: + name: _InvFade + second: 0.68 + m_Colors: + data: + first: + name: _EmissionColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _Color + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _TintColor + second: {r: 1, g: 1, b: 1, a: 0.309} diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat.meta new file mode 100644 index 0000000..294ad4e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrailRenderer.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d35e47db85705e4685d4124921a2aee +timeCreated: 1472455730 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat new file mode 100644 index 0000000..4a92d7b Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat.meta new file mode 100644 index 0000000..c14939e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeLeafsMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5f399b603419be14ba9bffcf786e93cd +timeCreated: 1476837719 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat new file mode 100644 index 0000000..99a5e26 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat.meta new file mode 100644 index 0000000..b409f3d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTreeTrunkMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4f8b792cce88f944e987ce9c635c0b6e +timeCreated: 1476824693 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat new file mode 100644 index 0000000..f7ea09c Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat.meta new file mode 100644 index 0000000..ab8049d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8996621c7d91d01498be54470d647f3a +timeCreated: 1476825659 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png new file mode 100644 index 0000000..61f3c01 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png.meta new file mode 100644 index 0000000..d084214 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Materials/BGTestTrunk.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 3bde5aacfe0a5e94684f114f910c4f69 +timeCreated: 1476825649 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts.meta new file mode 100644 index 0000000..2dbe228 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e6304e86eef112241a61fbb81e7bbcb1 +folderAsset: yes +timeCreated: 1458540160 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs new file mode 100644 index 0000000..837b338 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace BansheeGz.BGSpline.Example +{ + //camera movements + public class BGTestCamera : MonoBehaviour + { + private const int Speed = 100; + + private GUIStyle style; + + // Update is called once per frame + private void Update() + { + if (Input.GetKey(KeyCode.A)) transform.RotateAround(Vector3.zero, Vector3.up, Speed*Time.deltaTime); + else if (Input.GetKey(KeyCode.D)) transform.RotateAround(Vector3.zero, Vector3.up, -Speed*Time.deltaTime); + } + + private void OnGUI() + { + if (style == null) style = new GUIStyle(GUI.skin.label) {fontSize = 24}; + + GUILayout.BeginHorizontal(); + + GUILayout.Label("Use A and D to rotate camera", style); + + if (BGTestMainMenu.Inited && GUILayout.Button("To Main Menu")) SceneManager.LoadScene("BGCurveMainMenu"); + + GUILayout.EndHorizontal(); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs.meta new file mode 100644 index 0000000..8a18216 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCamera.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b39cc109801a26b4289d4bd8b6fc6b01 +timeCreated: 1471249888 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs new file mode 100644 index 0000000..bee5bc1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs @@ -0,0 +1,489 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + //testing BGCcCursorChangeLinear (this test is automated) + /* + * Abbreviations for GameObjects names + * F- Forward (speed positive) + * B- Backward (speed negative) + * Cycle- Cycle mode + * PP- PingPong mode + * Closed- closed curve + * Open- Not closed curve + * D0- delay at point 0 + * DL- delay at last point + * DA- delay at all points + * SF- speed field is present + * */ + + public class BGTestCcChangeCursorLinear : MonoBehaviour + { + private readonly List sequences = new List(10); + + // Use this for initialization + void Start() + { + var changeCursors = GetComponentsInChildren(true); + + // for this to work we need to rename curves +// Array.Sort(changeCursors, (o1, o2) => string.Compare(o1.gameObject.name, o2.gameObject.name)); + + for (var i = 0; i < changeCursors.Length; i++) Register(changeCursors[i]); + } + + private void Register(BGCcCursorChangeLinear curve) + { + sequences.Add(new Sequence(curve)); + } + + // Update is called once per frame + void Update() + { + foreach (var sequence in sequences) + if (sequence.Curve.gameObject.activeInHierarchy) + { + sequence.Check(); + } + } + + + // no luck here. There shoould be some way to pass curve's number and get rid of this? + /* + public void PointReached(int point, int curve) + { + Process(curve, point); + } + */ + + //Nigthmare start (idea.. we need to switch to non persistent events for this test, which send reference to a curve) + public void PointReached0(int point) + { + Process(0, point); + } + + public void PointReached1(int point) + { + Process(1, point); + } + + public void PointReached2(int point) + { + Process(2, point); + } + + public void PointReached3(int point) + { + Process(3, point); + } + + public void PointReached4(int point) + { + Process(4, point); + } + + public void PointReached5(int point) + { + Process(5, point); + } + + public void PointReached6(int point) + { + Process(6, point); + } + + public void PointReached7(int point) + { + Process(7, point); + } + + public void PointReached8(int point) + { + Process(8, point); + } + + public void PointReached9(int point) + { + Process(9, point); + } + + public void PointReached10(int point) + { + Process(10, point); + } + + public void PointReached11(int point) + { + Process(11, point); + } + + public void PointReached12(int point) + { + Process(12, point); + } + + public void PointReached13(int point) + { + Process(13, point); + } + + public void PointReached14(int point) + { + Process(14, point); + } + + public void PointReached15(int point) + { + Process(15, point); + } + + public void PointReached16(int point) + { + Process(16, point); + } + + public void PointReached17(int point) + { + Process(17, point); + } + + public void PointReached18(int point) + { + Process(18, point); + } + + public void PointReached19(int point) + { + Process(19, point); + } + + public void PointReached20(int point) + { + Process(20, point); + } + + public void PointReached21(int point) + { + Process(21, point); + } + + public void PointReached22(int point) + { + Process(22, point); + } + + public void PointReached23(int point) + { + Process(23, point); + } + + public void PointReached24(int point) + { + Process(24, point); + } + + public void PointReached25(int point) + { + Process(25, point); + } + + public void PointReached26(int point) + { + Process(26, point); + } + + public void PointReached27(int point) + { + Process(27, point); + } + + public void PointReached28(int point) + { + Process(28, point); + } + + public void PointReached29(int point) + { + Process(29, point); + } + + public void PointReached30(int point) + { + Process(30, point); + } + + public void PointReached31(int point) + { + Process(31, point); + } + + public void PointReached32(int point) + { + Process(32, point); + } + + + private void Process(int curve, int pointIndex) + { + var sequence = sequences[curve]; + if (!sequence.Curve.gameObject.activeSelf) return; + +// print("Reached {" + pointIndex + "} for curve =" + curve); + + sequence.Reached(pointIndex); + } + + private sealed class Sequence + { + //precision does not matter too much idea.. lower the value, something wrong here + public const float Epsilon = 0.1f; + + private readonly List expectedPoints = new List(); + private BGCcCursorChangeLinear changeCursor; + + private int pointCursor; + private bool valid = true; + private float lastPoint; + + private float started; + + public BGCurve Curve; + + + private float Elapsed + { + get { return Time.time - started; } + } + + public Sequence(BGCcCursorChangeLinear changeCursor) + { + this.changeCursor = changeCursor; + var cursor = changeCursor.Cursor; + var curve = changeCursor.Curve; + Curve = curve; + started = Time.time; + + + if (!Curve.gameObject.activeInHierarchy) return; + + ThrowIf("Stop overflow control is not supported", changeCursor.OverflowControl == BGCcCursorChangeLinear.OverflowControlEnum.Stop); + + + var pointsCount = curve.PointsCount; + ThrowIf("Curve should have at least 2 points.", pointsCount < 2); + + var math = changeCursor.Cursor.Math.Math; + + var sectionIndex = cursor.CalculateSectionIndex(); + var speed = changeCursor.CurrentSpeed; + var speedPositive = speed > 0; + + if (speedPositive) + { + //=================================== Positive speed + //first point + if (curve.Closed && sectionIndex == pointsCount - 1) + { + expectedPoints.Add(new ExpectedPoint(0, math.GetDistance() - cursor.Distance, speed, 0)); + } + else if (!curve.Closed && sectionIndex == pointsCount - 2) + { + expectedPoints.Add(new ExpectedPoint(pointsCount - 1, math.GetDistance() - cursor.Distance, speed, 0)); + } + else + { + expectedPoints.Add(new ExpectedPoint(sectionIndex + 1, math[sectionIndex + 1].DistanceFromStartToOrigin - cursor.Distance, speed, 0)); + } + + //go towards end + for (var i = sectionIndex + 2; i < pointsCount; i++) + { + expectedPoints.Add(new ExpectedPoint(i, math[i - 1].Distance, changeCursor.GetSpeedAtPoint(i - 1), changeCursor.GetDelayAtPoint(i - 1))); + } + + //add last point + if (curve.Closed && sectionIndex != pointsCount) + { + expectedPoints.Add(new ExpectedPoint(0, math[pointsCount - 1].Distance, changeCursor.GetSpeedAtPoint(pointsCount - 1), changeCursor.GetDelayAtPoint(pointsCount - 1))); + } + + + if (changeCursor.OverflowControl == BGCcCursorChangeLinear.OverflowControlEnum.PingPong) + { + if (curve.Closed) + expectedPoints.Add(new ExpectedPoint(pointsCount - 1, math[pointsCount - 1].Distance, + changeCursor.GetSpeedAtPoint(pointsCount - 1), changeCursor.GetDelayAtPoint(0))); + + //go all the way down + for (var i = pointsCount - 2; i >= 0; i--) + { + expectedPoints.Add(new ExpectedPoint(i, math[i].Distance, changeCursor.GetSpeedAtPoint(i), changeCursor.GetDelayAtPoint(i + 1))); + } + } + else + { + if (!curve.Closed) + { + expectedPoints.Add(new ExpectedPoint(0, math[pointsCount - 2].Distance, 0, changeCursor.GetDelayAtPoint(pointsCount - 1))); + } + } + + //go up to initial position + for (var i = 1; i <= sectionIndex; i++) + { + expectedPoints.Add(new ExpectedPoint(i, math[i - 1].Distance, changeCursor.GetSpeedAtPoint(i - 1), changeCursor.GetDelayAtPoint(i - 1))); + } + + //last point + expectedPoints.Add(new ExpectedPoint(-1, cursor.Distance - math[sectionIndex].DistanceFromStartToOrigin, speed, changeCursor.GetDelayAtPoint(sectionIndex))); + } + else + { + //=================================== Negative speed + //first point + expectedPoints.Add(new ExpectedPoint(sectionIndex, cursor.Distance - math[sectionIndex].DistanceFromStartToOrigin, speed, 0)); + + //go towards start + for (var i = sectionIndex - 1; i >= 0; i--) + { + expectedPoints.Add(new ExpectedPoint(i, math[i].Distance, changeCursor.GetSpeedAtPoint(i), changeCursor.GetDelayAtPoint(i + 1))); + } + + if (changeCursor.OverflowControl == BGCcCursorChangeLinear.OverflowControlEnum.PingPong) + { + for (var i = 1; i < pointsCount; i++) + { + expectedPoints.Add(new ExpectedPoint(i, math[i - 1].Distance, changeCursor.GetSpeedAtPoint(i - 1), changeCursor.GetDelayAtPoint(i - 1))); + } + + if (curve.Closed) + { + expectedPoints.Add(new ExpectedPoint(0, math[pointsCount - 1].Distance, changeCursor.GetSpeedAtPoint(pointsCount - 1), changeCursor.GetDelayAtPoint(pointsCount - 1))); + expectedPoints.Add(new ExpectedPoint(pointsCount - 1, math[pointsCount - 1].Distance, + changeCursor.GetSpeedAtPoint(pointsCount - 1), changeCursor.GetDelayAtPoint(0))); + } + } + else + { + if (curve.Closed) + { + expectedPoints.Add(new ExpectedPoint(pointsCount - 1, math[pointsCount - 1].Distance, + changeCursor.GetSpeedAtPoint(pointsCount - 1), changeCursor.GetDelayAtPoint(0))); + } + else + { + expectedPoints.Add(new ExpectedPoint(pointsCount - 1, 0, 0, changeCursor.GetDelayAtPoint(0))); + } + } + + + //go from end to initial section + for (var i = pointsCount - 2; i > sectionIndex; i--) + { + expectedPoints.Add(new ExpectedPoint(i, math[i].Distance, changeCursor.GetSpeedAtPoint(i), changeCursor.GetDelayAtPoint(i + 1))); + } + + //last point + expectedPoints.Add(new ExpectedPoint(-1, math[sectionIndex].DistanceFromEndToOrigin - cursor.Distance, changeCursor.GetSpeedAtPoint(sectionIndex), + changeCursor.GetDelayAtPoint(sectionIndex + 1))); + } + } + + private void ThrowIf(string message, bool condition) + { + if (condition) throw GetException(message); + } + + private UnityException GetException(string message) + { + return new UnityException(message + ". Curve=" + changeCursor.Curve.gameObject.name); + } + + public void Check() + { + if (!valid) return; + + var toCheck = expectedPoints[pointCursor]; + + if (toCheck.PointIndex == -1) + { + if (toCheck.ExpectedDelay < Elapsed) + { + MoveNext(); + } + } + else if (toCheck.ExpectedDelay < Elapsed - Epsilon) + { + valid = false; + Debug.LogException(GetException("Missing event: expected " + toCheck + " event did not occur")); + return; + } + } + + public void Reached(int point) + { + if (!valid) return; + + var toCompare = expectedPoints[pointCursor]; + if (toCompare.PointIndex >= 0 && toCompare.PointIndex != point) + { + valid = false; + Debug.LogException(GetException("Points indexes mismatch: expected " + toCompare.PointIndex + ", actual=" + point)); + return; + } + + var expectedDelay = toCompare.ExpectedDelay; + var actualDelay = Elapsed; + if (Math.Abs(expectedDelay - actualDelay) > Epsilon) + { + valid = false; + Debug.LogException(GetException("Timing mismatch at point {" + toCompare.PointIndex + "}: expected " + expectedDelay + ", actual=" + actualDelay)); + return; + } + + MoveNext(); + } + + private void MoveNext() + { + started = Time.time; + pointCursor = pointCursor == expectedPoints.Count - 1 ? 0 : pointCursor + 1; + } + } + + private sealed class ExpectedPoint + { + public readonly float Distance; + public readonly int PointIndex; + public readonly float Speed; + public readonly float Delay; + + public ExpectedPoint(int pointIndex, float distance, float speed, float delay) + { + Speed = speed; + Distance = distance; + PointIndex = pointIndex; + Delay = delay; + } + + public double ExpectedDelay + { + get + { + var speed = Math.Abs(Speed); + var delay = Mathf.Clamp(Delay, 0, float.MaxValue); + return delay + (speed < Sequence.Epsilon ? Sequence.Epsilon : Distance/speed); + } + } + + public override string ToString() + { + return "Point " + PointIndex + " after " + ExpectedDelay + " delay."; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs.meta new file mode 100644 index 0000000..15e7260 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCcChangeCursorLinear.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9ae216fc3e845094f987bb267515c24f +timeCreated: 1477542371 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs new file mode 100644 index 0000000..1699a5c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs @@ -0,0 +1,32 @@ +using UnityEngine; + +namespace BansheeGz.BGSpline.Example +{ + // rotate and scale an object + public class BGTestCurveChange : MonoBehaviour + { + private const float RotationSpeed = 40; + private const float ScaleUpperLimit = 1.25f; + private const float ScaleLowerLimit = .5f; + + private Vector3 scaleSpeed = Vector3.one*.1f; + + // Update is called once per frame + private void Update() + { + //rotate + transform.RotateAround(transform.position, Vector3.up, RotationSpeed*Time.deltaTime); + + //scale + var localScale = transform.localScale; + var upperLimit = localScale.x > ScaleUpperLimit; + var lowerLimit = localScale.x < ScaleLowerLimit; + if (upperLimit || lowerLimit) + { + scaleSpeed = -scaleSpeed; + localScale = upperLimit ? new Vector3(ScaleUpperLimit, ScaleUpperLimit, ScaleUpperLimit) : new Vector3(ScaleLowerLimit, ScaleLowerLimit, ScaleLowerLimit); + } + transform.localScale = localScale + scaleSpeed*Time.deltaTime; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs.meta new file mode 100644 index 0000000..e93daf2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveChange.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 878d4ca641b7844418bd302124244337 +timeCreated: 1474194271 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs new file mode 100644 index 0000000..92fbfdc --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs @@ -0,0 +1,321 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using Random = UnityEngine.Random; + +namespace BansheeGz.BGSpline.Example +{ + //check math's CalcPositionByClosestPoint method. (this test can be automated with CheckResults set to true) + public class BGTestCurveClosestPoint : MonoBehaviour + { + [Tooltip("Line renderer material")] public Material LineRendererMaterial; + + [Tooltip("Object to use for point's indication")] public GameObject PointIndicator; + + [Range(1, 100)] [Tooltip("How much points to use with search")] public int NumberOfPointsToSeek = 10; + + [Range(2, 100)] [Tooltip("How much points to add to the curve")] public int NumberOfCurvePoints = 100; + + [Range(1, 30)] [Tooltip("How much sections to use for splitting each curve's segment")] public int NumberOfSplits = 30; + + [Range(1, 5)] [Tooltip("Transition period")] public int Period = 4; + + [Tooltip("Use slow check method to validate results")] public bool CheckResults = false; + + + private BGCurve curve; + private BGCcMath math; + + //this is an area, defined by camera frustum (so we could see curve and points) + private static Vector3 min = new Vector3(-10, 0, -2); + private static Vector3 max = new Vector3(10, 10, 2); + + + //indicator objects + private GameObject[] objects; + + //curve's points positions + private Vector3[] oldCurvePointPos; + private Vector3[] newCurvePointPos; + + //point's positions + private Vector3[] oldPointPos; + private Vector3[] newPointPos; + + //for transitions + private float startTime = -100000; + + private int ErrorPointIndex = -1; + private GUIStyle style; + + private bool HasError + { + get { return ErrorPointIndex >= 0; } + } + + // Use this for initialization + private void Start() + { + //init components + curve = gameObject.AddComponent(); + curve.Closed = true; + math = gameObject.AddComponent(); + gameObject.AddComponent(); + var lineRenderer = gameObject.GetComponent(); + lineRenderer.sharedMaterial = LineRendererMaterial; + var color = new Color(.2f, .2f, .2f, 1f); +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.startWidth = lineRenderer.endWidth = .03f; + lineRenderer.startColor = lineRenderer.endColor = color; +#else + lineRenderer.SetWidth(.03f, .03f); + lineRenderer.SetColors(color, color); +#endif + math.SectionParts = NumberOfSplits; + + //create curve's points + for (var i = 0; i < NumberOfCurvePoints; i++) + { + var controlRandom = Random.Range(0, 3); + var controlType = BGCurvePoint.ControlTypeEnum.Absent; + switch (controlRandom) + { + case 1: + controlType = BGCurvePoint.ControlTypeEnum.BezierIndependant; + break; + case 2: + controlType = BGCurvePoint.ControlTypeEnum.BezierSymmetrical; + break; + } + curve.AddPoint(new BGCurvePoint(curve, + Vector3.zero, + controlType, + RandomVector()*.3f, + RandomVector()*.3f)); + } + + //init arrays + oldPointPos = new Vector3[NumberOfPointsToSeek]; + newPointPos = new Vector3[NumberOfPointsToSeek]; + oldCurvePointPos = new Vector3[NumberOfCurvePoints]; + newCurvePointPos = new Vector3[NumberOfCurvePoints]; + + InitArray(newCurvePointPos, oldCurvePointPos); + InitArray(newPointPos, oldPointPos); + + //create objects + objects = new GameObject[NumberOfPointsToSeek]; + for (var i = 0; i < NumberOfPointsToSeek; i++) + { + var clone = Instantiate(PointIndicator); + clone.transform.parent = transform; + objects[i] = clone; + } + PointIndicator.SetActive(false); + + //init cycle + InitCycle(); + } + + private void OnGUI() + { + if (style == null) style = new GUIStyle(GUI.skin.label) {fontSize = 20}; + GUI.Label(new Rect(0, 30, 600, 30), "Turn on Gizmos to see Debug lines", style); + } + + + private void InitCycle() + { + InitArray(oldCurvePointPos, newCurvePointPos); + InitArray(oldPointPos, newPointPos); + } + + // Update is called once per frame + private void Update() + { + if (HasError) + { + //use it for debugging + Process(ErrorPointIndex, true); + } + else + { + Calculate(null, null); + + + var elapsed = Time.time - startTime; + if (elapsed > Period) + { + startTime = Time.time; + InitCycle(); + elapsed = 0; + } + + //lerp + var ratio = elapsed/Period; + for (var i = 0; i < NumberOfCurvePoints; i++) + { + curve[i].PositionLocal = Vector3.Lerp(oldCurvePointPos[i], newCurvePointPos[i], ratio); + } + for (var i = 0; i < NumberOfPointsToSeek; i++) + { + objects[i].transform.localPosition = Vector3.Lerp(oldPointPos[i], newPointPos[i], ratio); + } + } + } + + + private void Calculate(object sender, EventArgs e) + { + for (var i = 0; i < NumberOfPointsToSeek; i++) + { + Process(i); + if (HasError) break; + } + } + + private void Process(int i, bool suppressWarning = false) + { + var point = objects[i].transform.position; + float distanceUsingMath; + var posUsingMath = math.CalcPositionByClosestPoint(point, out distanceUsingMath); + + Debug.DrawLine(point, posUsingMath, Color.yellow); + + if (!CheckResults) return; + + float distanceUsingCheckMethod; + var posUsingCheckMethod = CalcPositionByClosestPoint(math, point, out distanceUsingCheckMethod); + Debug.DrawLine(point, posUsingCheckMethod, Color.blue); + + var distanceCheck = Math.Abs(distanceUsingMath - distanceUsingCheckMethod) > .01f; + var pointCheck = Vector3.Magnitude(posUsingMath - posUsingCheckMethod) > 0.001f; + if ((distanceCheck || pointCheck) && Mathf.Abs((point - posUsingMath).magnitude - (point - posUsingCheckMethod).magnitude) > BGCurve.Epsilon) + { + ErrorPointIndex = i; + if (!suppressWarning) + { + Debug.Log("Error detected. Simulation stopped, but erroneous iteration's still running. Use debugger to debug the issue."); + Debug.Log("!!! Discrepancy detected while calculating pos by closest point: 1) [Using math] pos=" + posUsingMath + ", distance=" + distanceUsingMath + + " 2) [Using check method] pos=" + posUsingCheckMethod + ", distance=" + distanceUsingCheckMethod); + + + if (pointCheck) + { + Debug.Log("Reason: Result points varies more than " + BGCurve.Epsilon + ". Difference=" + Vector3.Magnitude(posUsingMath - posUsingCheckMethod)); + } + if (distanceCheck) + { + Debug.Log("Reason: Distances varies more than 1cm. Difference=" + Math.Abs(distanceUsingMath - distanceUsingCheckMethod)); + } + + var mathPos = math.CalcByDistance(BGCurveBaseMath.Field.Position, distanceUsingMath); + var checkMethodPos = math.CalcByDistance(BGCurveBaseMath.Field.Position, distanceUsingCheckMethod); + Debug.Log("Distance check: 1) [Using math] check=" + (Vector3.SqrMagnitude(mathPos - posUsingMath) < BGCurve.Epsilon ? "passed" : "failed") + + " 2) [Using check method] check=" + (Vector3.SqrMagnitude(checkMethodPos - posUsingCheckMethod) < BGCurve.Epsilon ? "passed" : "failed")); + + + var actualDistUsingMath = Vector3.Distance(point, posUsingMath); + var actualDistanceUsingCheckMethod = Vector3.Distance(point, posUsingCheckMethod); + Debug.Log("Actual distance: 1) [Using math] Dist=" + actualDistUsingMath + + " 2) [Using check method] Dist=" + actualDistanceUsingCheckMethod + + + (Math.Abs(actualDistUsingMath - actualDistanceUsingCheckMethod) > BGCurve.Epsilon + ? (". And the winner is " + (actualDistUsingMath < actualDistanceUsingCheckMethod ? "math" : "check method")) + : "")); + } + } + } + + //Bruteforce method for checking results only. Do not use it. + private static Vector3 CalcPositionByClosestPoint(BGCcMath math, Vector3 targetPoint, out float distance) + { + var sections = math.Math.SectionInfos; + var sectionsCount = sections.Count; + var result = sections[0][0].Position; + var minDistance = Vector3.SqrMagnitude(sections[0][0].Position - targetPoint); + distance = 0; + for (var i = 0; i < sectionsCount; i++) + { + var currentSection = sections[i]; + + + var points = currentSection.Points; + var pointsCount = points.Count; + for (var j = 1; j < pointsCount; j++) + { + var point = points[j]; + float ratio; + + var closestPoint = CalcClosestPointToLine(points[j - 1].Position, point.Position, targetPoint, out ratio); + + var sqrMagnitude = Vector3.SqrMagnitude(targetPoint - closestPoint); + if (!(minDistance > sqrMagnitude)) continue; + + + minDistance = sqrMagnitude; + result = closestPoint; + + if (ratio == 1) + { + var sectionIndex = i; + var pointIndex = j; + if (j == pointsCount - 1 && i < sectionsCount - 1) + { + sectionIndex = i + 1; + pointIndex = 0; + } + distance = sections[sectionIndex].DistanceFromStartToOrigin + sections[sectionIndex][pointIndex].DistanceToSectionStart; + } + else + { + distance = sections[i].DistanceFromStartToOrigin + Mathf.Lerp(currentSection[j - 1].DistanceToSectionStart, point.DistanceToSectionStart, ratio); + } + } + } + return result; + } + + + private static Vector3 RandomVector() + { + return new Vector3(Random.Range(min.x, max.x), Random.Range(min.y, max.y), Random.Range(min.z, max.z)); + } + + private static void InitArray(Vector3[] oldArray, Vector3[] newArray) + { + for (var i = 0; i < oldArray.Length; i++) + { + oldArray[i] = newArray[i]; + newArray[i] = RandomVector(); + } + } + + private static Vector3 CalcClosestPointToLine(Vector3 a, Vector3 b, Vector3 p, out float ratio) + { + var ap = p - a; + var ab = b - a; + var sqrtMagnitude = ab.sqrMagnitude; + if (Math.Abs(sqrtMagnitude) < BGCurve.Epsilon) + { + ratio = 1; + return b; + } + + var distance = Vector3.Dot(ap, ab)/sqrtMagnitude; + if (distance < 0) + { + ratio = 0; + return a; + } + if (distance > 1) + { + ratio = 1; + return b; + } + ratio = distance; + return a + ab*distance; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs.meta new file mode 100644 index 0000000..9639075 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveClosestPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e541fe02faf348f4a82165f3484dbb8c +timeCreated: 1474039391 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs new file mode 100644 index 0000000..d7381c1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs @@ -0,0 +1,77 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + // This is old obsolete example class, left for compatibility only. + // DO NOT USE IT AS AN EXAMPLE PLEASE + // Use Cc components (BGCurveBaseMath -> BGCcMath, LineRenderer -> BGCcVisualizationLineRenderer) + [RequireComponent(typeof (BGCurve))] + [RequireComponent(typeof (LineRenderer))] + public class BGTestCurveDynamic : MonoBehaviour + { + private const int TimeToMoveUp = 3; + + public GameObject ObjectToMove; + + private BGCurve curve; + private BGCurveBaseMath curveBaseMath; + + private float started; + private float ratio; + private LineRenderer lineRenderer; + + + // Use this for initialization + private void Start() + { + curve = GetComponent(); +// curve.TraceChanges = true; + + lineRenderer = GetComponent(); + +// curveBaseMath = new BGCurveBaseMath(curve, true); + curveBaseMath = new BGCurveBaseMath(curve); + started = Time.time; + + ResetLineRenderer(); + curve.Changed += (sender, args) => ResetLineRenderer(); + } + + private void ResetLineRenderer() + { + const int points = 50; + + var positions = new Vector3[points]; + for (var i = 0; i < points; i++) + { + positions[i] = curveBaseMath.CalcPositionByDistanceRatio(((float) i/(points - 1))); + } + +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = points; +#else + lineRenderer.SetVertexCount(points); +#endif + + lineRenderer.SetPositions(positions); + } + + // Update is called once per frame + private void Update() + { + transform.RotateAround(Vector3.zero, Vector3.up, 40*Time.deltaTime); + + ratio = (Time.time - started)/TimeToMoveUp; + if (ratio >= 1) + { + started = Time.time; + ratio = 0; + } + else + { + ObjectToMove.transform.position = curveBaseMath.CalcPositionByDistanceRatio(ratio); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs.meta new file mode 100644 index 0000000..6ca7b9a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveDynamic.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 14e1aa9c8356b444eb28ff9fadb1e98e +timeCreated: 1473297298 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs new file mode 100644 index 0000000..4b0314a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs @@ -0,0 +1,324 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using BansheeGz.BGSpline.Curve; +using Random = UnityEngine.Random; + +namespace BansheeGz.BGSpline.Example +{ + // math visual testing (for internal use) + public class BGTestCurveMath : MonoBehaviour + { + [Tooltip("Material to use with LineRenderer")] public Material LineRendererMaterial; + + [Tooltip("Object to move along a curve")] public MeshRenderer ObjectToMove; + + private const float Period = 3; + private const int ObjectsCount = 4; + private const float ObjectsSpeed = .3f; + + private TestCurves testCurves; + + private GUIStyle style; + + // Use this for initialization + private void Start() + { + testCurves = new TestCurves(GetComponent(), new BGCurveBaseMath.Config(BGCurveBaseMath.Fields.PositionAndTangent), ObjectToMove, LineRendererMaterial); + + //Base, OptimizeStraightLines + testCurves.Add(new CurveData(testCurves, "BGBaseStraightLines", "Base, OptimizeStraightLines = true", transform.position + new Vector3(-4, 1), + new BGCurveBaseMath.Config(BGCurveBaseMath.Fields.PositionAndTangent) {OptimizeStraightLines = true}, CurveData.MathTypeEnum.Base)); + + //Base, UsePointPositionsToCalcTangents + testCurves.Add(new CurveData(testCurves, "BGBasePos2Tangents", "Base, UsePointPositionsToCalcTangents = true", transform.position + new Vector3(-4, 4), + new BGCurveBaseMath.Config(BGCurveBaseMath.Fields.PositionAndTangent) {UsePointPositionsToCalcTangents = true}, CurveData.MathTypeEnum.Base)); + + //Adaptive + testCurves.Add(new CurveData(testCurves, "BGAdaptive", "Adaptive", transform.position + new Vector3(4, 4), + new BGCurveAdaptiveMath.ConfigAdaptive(BGCurveBaseMath.Fields.PositionAndTangent) /* { Tolerance = .2f }*/, CurveData.MathTypeEnum.Adaptive)); + + //Formula + testCurves.Add(new CurveData(testCurves, "BGFormula", "Formula", transform.position + new Vector3(4, 1), + new BGCurveBaseMath.Config(BGCurveBaseMath.Fields.PositionAndTangent), CurveData.MathTypeEnum.Formula)); + } + + + // Update is called once per frame + private void Update() + { + testCurves.Update(); + if (Input.GetKeyDown(KeyCode.LeftArrow)) testCurves.MoveLeft(); + if (Input.GetKeyDown(KeyCode.RightArrow)) testCurves.MoveRight(); + } + + private void OnGUI() + { + if (style == null) style = new GUIStyle(GUI.skin.label) {fontSize = 18}; + GUI.Label(new Rect(0, 24, 800, 30), "Left Arrow - move left, Right Arrow - move right", style); + GUI.Label(new Rect(0, 48, 800, 30), "Comparing with: " + testCurves.CurrentToString(), style); + } + + + //==================================== abstract curve's data + private abstract class CurveDataAbstract + { + private readonly List objectsToMove = new List(); + private readonly Material objectToMoveMaterial; + private readonly LineRenderer lineRenderer; + public readonly Material LineRendererMaterial; + protected readonly GameObject GameObject; + + protected BGCurveBaseMath Math; + + private BGCurve curve; + + public BGCurve Curve + { + get { return curve; } + protected set + { + curve = value; + curve.Changed += (sender, args) => UpdateLineRenderer(); + } + } + + + protected CurveDataAbstract(GameObject gameObject, Material lineRendererMaterial, Color color) + { + GameObject = gameObject; + LineRendererMaterial = lineRendererMaterial; + + //change material + objectToMoveMaterial = Instantiate(lineRendererMaterial); + objectToMoveMaterial.SetColor("_TintColor", color); + + + //add lineRenderer + lineRenderer = gameObject.AddComponent(); + lineRenderer.material = lineRendererMaterial; +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.startWidth = lineRenderer.endWidth = 0.05f; + lineRenderer.startColor = lineRenderer.endColor = color; +#else + lineRenderer.SetWidth(0.05f, 0.05f); + lineRenderer.SetColors(color, color); +#endif + + } + + //=================== line renderer + private void UpdateLineRenderer() + { + const int count = 100; + var positions = new Vector3[100]; + const float countMinusOne = count - 1; + for (var i = 0; i < 100; i++) + { + var distanceRatio = i/countMinusOne; + positions[i] = Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, distanceRatio); + } +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = count; +#else + lineRenderer.SetVertexCount(count); +#endif + lineRenderer.SetPositions(positions); + } + + //=================== objects + protected void AddObjects(int count, MeshRenderer pattern, Transform parent) + { + for (var i = 0; i < count; i++) + { + var clone = Instantiate(pattern.gameObject); + clone.transform.parent = parent; + AddObject(clone); + } + } + + protected void AddObject(GameObject obj) + { + obj.GetComponent().sharedMaterial = objectToMoveMaterial; + objectsToMove.Add(obj.gameObject); + } + + protected void UpdateObjects(List distanceRatios) + { + for (var i = 0; i < objectsToMove.Count; i++) + { + var position = Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, distanceRatios[i]); + var tangent = Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Tangent, distanceRatios[i]); + + objectsToMove[i].transform.position = position; + objectsToMove[i].transform.LookAt(position + tangent); + } + } + + public abstract void Update(); + } + + //==================================== Reference Curve + private sealed class TestCurves : CurveDataAbstract + { + public readonly List DistanceRatios = new List(); + public readonly MeshRenderer ObjectToMove; + private readonly List curves = new List(); + + private float startTime = -Period*2; + private Quaternion fromRotation; + private Quaternion toRotation; + private int currentCurveIndex = -1; + + + public TestCurves(BGCurve curve, BGCurveBaseMath.Config config, MeshRenderer objectToMove, Material lineRendererMaterial) + : base(curve.gameObject, lineRendererMaterial, Color.green) + { + Curve = curve; + Math = new BGCurveBaseMath(curve, config); + ObjectToMove = objectToMove; + + AddObject(objectToMove.gameObject); + AddObjects(ObjectsCount - 1, objectToMove, curve.transform); + + const float offset = 1/(float) ObjectsCount; + for (var i = 0; i < ObjectsCount; i++) DistanceRatios.Add(i*offset); + } + + public void MoveRight() + { + currentCurveIndex++; + if (currentCurveIndex == curves.Count) currentCurveIndex = 0; + } + + public void MoveLeft() + { + currentCurveIndex--; + if (currentCurveIndex < 0) currentCurveIndex = curves.Count - 1; + } + + public override void Update() + { + if (Time.time - startTime > Period) + { + startTime = Time.time; + + fromRotation = Curve.transform.rotation; + toRotation = Quaternion.Euler(Random.Range(0.0f, 360.0f), Random.Range(0.0f, 360.0f), Random.Range(0.0f, 360.0f)); + } + + var ratio = (Time.time - startTime)/Period; + Curve.transform.rotation = Quaternion.Lerp(fromRotation, toRotation, ratio); + for (var i = 0; i < DistanceRatios.Count; i++) + { + DistanceRatios[i] += ObjectsSpeed*Time.deltaTime; + if (DistanceRatios[i] > 1) DistanceRatios[i] = 0; + } + UpdateObjects(DistanceRatios); + + foreach (var data in curves) data.Update(); + } + + public bool IsCurrent(CurveData curve) + { + return currentCurveIndex >= 0 && currentCurveIndex < curves.Count && curves[currentCurveIndex] == curve; + } + + public void Add(CurveData curveData) + { + curves.Add(curveData); + } + + public string CurrentToString() + { + return currentCurveIndex < 0 ? "None" : curves[currentCurveIndex].Description; + } + } + + //==================================== Some Curve + private sealed class CurveData : CurveDataAbstract + { + public enum MathTypeEnum + { + Base, + Formula, + Adaptive + } + + private readonly Vector3 origin; + private readonly TestCurves testCurves; + private readonly Vector3 originalScale = new Vector3(.7f, .7f, .7f); + + private readonly string description; + + public string Description + { + get { return description; } + } + + public CurveData(TestCurves testCurves, string name, string description, Vector3 position, BGCurveBaseMath.Config config, MathTypeEnum mathType) + : base(new GameObject(name), testCurves.LineRendererMaterial, Color.magenta) + { + this.testCurves = testCurves; + this.description = description; + + //game object + GameObject.transform.position = position; + origin = position; + + //curve + Curve = GameObject.AddComponent(); + Curve.Closed = testCurves.Curve.Closed; + + //add points + for (var i = 0; i < testCurves.Curve.PointsCount; i++) + { + var point = testCurves.Curve[i]; + var clonePoint = new BGCurvePoint(Curve, point.PositionLocal, point.ControlType, point.ControlFirstLocal, point.ControlSecondLocal); + Curve.AddPoint(clonePoint); + } + + //init math after points are added + switch (mathType) + { + case MathTypeEnum.Base: + Math = new BGCurveBaseMath(Curve, config); + break; + case MathTypeEnum.Formula: +#pragma warning disable 0618 + Math = new BGCurveFormulaMath(Curve, config); +#pragma warning restore 0618 + + break; + case MathTypeEnum.Adaptive: + Math = new BGCurveAdaptiveMath(Curve, (BGCurveAdaptiveMath.ConfigAdaptive) config); + break; + default: + throw new ArgumentOutOfRangeException("mathType", mathType, null); + } + + AddObjects(ObjectsCount, testCurves.ObjectToMove, GameObject.transform); + + //scale down + GameObject.transform.localScale = originalScale; + } + + public override void Update() + { + var curveTransform = Curve.gameObject.transform; + + var referenceTransform = testCurves.Curve.transform; + + curveTransform.rotation = referenceTransform.rotation; + + var moveTime = 10*Time.deltaTime; + + var current = testCurves.IsCurrent(this); + curveTransform.position = Vector3.MoveTowards(curveTransform.position, current ? referenceTransform.position : origin, moveTime); + curveTransform.localScale = Vector3.MoveTowards(curveTransform.localScale, current ? referenceTransform.transform.localScale : originalScale, moveTime/4); + + UpdateObjects(testCurves.DistanceRatios); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs.meta new file mode 100644 index 0000000..45eeaa0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f583c3c12fc27e84e93751f76bb81bc5 +timeCreated: 1471388845 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs new file mode 100644 index 0000000..638651c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs @@ -0,0 +1,120 @@ +using BansheeGz.BGSpline.Components; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + // test class for example only (adding moving deleting points at runtime) + [RequireComponent(typeof (BGCcMath))] + public class BGTestCurveRuntime : MonoBehaviour + { + // the height between 2 points + private const float OneTierHeight = 2; + //number of points to add (so total is 9). Should be even. + private const int PointsCountToAdd = 8; + //point's move time + private const float PointMoveTime = 1.5f; + //spread for control points + private const int MaximumControlSpread = 4; + + + public GameObject ObjectToMove; + + private BGCurve curve; + + private BGCcMath math; + + // section spawn start time + private float started; + + // current point's pointer (index) + private int counter; + // position for new point. The point will be moved slowly towards it. + private Vector3 nextPosition; + // position for new point's 1st control + private Vector3 nextControl1; + // position for previous point's 2nd control. + private Vector3 nextControl2; + + // Use this for initialization + private void Start() + { + curve = GetComponent(); + math = GetComponent(); + Reset(); + } + + //new cycle + private void Reset() + { + //delete all points (use curve.Delete to remove a single point) + curve.Clear(); + + //add very first point + curve.AddPoint(new BGCurvePoint(curve, Vector3.zero) {ControlType = BGCurvePoint.ControlTypeEnum.BezierIndependant}); + + started = Time.time; + counter = 0; + } + + // Update is called once per frame + private void Update() + { + var elapsed = Time.time - started; + + if (elapsed >= PointMoveTime || curve.PointsCount < 2) + { + if (counter == PointsCountToAdd) + { + //=========================================== Reset (end of cycle) + Reset(); + } + else + { + //=========================================== New point spawning + //spawn new point at the same position as the last one + var position = curve[curve.PointsCount - 1].PositionLocal; + curve.AddPoint(new BGCurvePoint(curve, position) + { + ControlType = BGCurvePoint.ControlTypeEnum.BezierIndependant, + //unfortunately by default ControlFirstLocal and ControlSecondLocal are not equal to Vector3.zero. That was a mistake. + ControlFirstLocal = Vector3.zero, + ControlSecondLocal = Vector3.zero + }); + + // are we going up or down + var up = counter < (PointsCountToAdd >> 1); + + //assign next positions to drag a point (and controls) to + nextPosition = position + new Vector3(0, up ? OneTierHeight : -OneTierHeight, 0); + var controlPosition = new Vector3( + Random.Range(-MaximumControlSpread, MaximumControlSpread), + (up ? OneTierHeight : -OneTierHeight)*.5f, + Random.Range(-MaximumControlSpread, MaximumControlSpread)); + nextControl1 = Vector3.Lerp(position - nextPosition, controlPosition, .8f); + nextControl2 = Vector3.Lerp(nextPosition - position, controlPosition, .8f); + started = Time.time; + + counter++; + if (curve.PointsCount > 2) curve.Delete(0); + } + } + else + { + var ratio = elapsed/PointMoveTime; + //=========================================== Moving a current point (and adjacent controls) slowly to their future positions + // changing curve's attributes, like point's positions or controls fires curve.Changed event (in curve's LateUpdate) + // math object uses this event to recalculate it's cached data (and it's relatively expensive operation). + // we also use this event to call UpdateLineRenderer to update UI. + var lastPoint = curve[curve.PointsCount - 1]; + lastPoint.PositionLocal = Vector3.Lerp(lastPoint.PositionLocal, nextPosition, ratio); + lastPoint.ControlFirstLocal = Vector3.Lerp(lastPoint.PositionLocal, nextControl1, ratio); + lastPoint.ControlFirstLocal = Vector3.Lerp(lastPoint.PositionLocal, nextControl2, ratio); + + // move particles. we can use math's cached data directly, if we want to + var section = math.Math[0]; + ObjectToMove.transform.position = math.Math.CalcByDistance(BGCurveBaseMath.Field.Position, section.DistanceFromStartToOrigin + section.Distance*ratio); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs.meta new file mode 100644 index 0000000..8c4dbc9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntime.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4b89742ecd879a046849644e458dc278 +timeCreated: 1471249888 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs new file mode 100644 index 0000000..0032cba --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs @@ -0,0 +1,65 @@ +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using UnityEngine; + +namespace BansheeGz.BGSpline.Example +{ + // Testing creating custom fields from scratch at runtime + public class BGTestCurveRuntimeCustomFields : MonoBehaviour + { + private const string SpeedFieldName = "speed"; + private const string DelayFieldName = "delay"; + private const float Width = .02f; + + + public Transform ObjectToMove; + public Material LineRendererMaterial; + + // Use this for initialization + void Start() + { + //move object + var translateObject = gameObject.AddComponent(); + translateObject.ObjectToManipulate = ObjectToMove; + + //move cursor + var changeCursor = gameObject.AddComponent(); + + //add line renderer + gameObject.AddComponent(); + var lineRenderer = gameObject.GetComponent(); + lineRenderer.sharedMaterial = LineRendererMaterial; +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.startWidth = lineRenderer.endWidth = Width; +#else + lineRenderer.SetWidth(Width, Width); +#endif + + //set up curve + var curve = changeCursor.Curve; + curve.Closed = true; + curve.Mode2D = BGCurve.Mode2DEnum.XY; + curve.PointsMode = BGCurve.PointsModeEnum.GameObjectsTransform; + + //add points + curve.AddPoint(new BGCurvePoint(curve, new Vector2(-5, 0))); + curve.AddPoint(new BGCurvePoint(curve, new Vector2(0, 5), BGCurvePoint.ControlTypeEnum.BezierSymmetrical, new Vector2(-5, 0), new Vector2(5, 0))); + curve.AddPoint(new BGCurvePoint(curve, new Vector2(5, 0))); + + //setup custom fields + //---speed + changeCursor.SpeedField = NewFloatField(changeCursor, SpeedFieldName, 5, 10, 15); + //---delay + changeCursor.DelayField = NewFloatField(changeCursor, DelayFieldName, 3, 1, 2); + } + + //Add field with values + private static BGCurvePointField NewFloatField(BGCcCursorChangeLinear changeCursor, string fieldName, params float[] values) + { + var curve = changeCursor.Curve; + var field = curve.AddField(fieldName, BGCurvePointField.TypeEnum.Float); + for (var i = 0; i < values.Length; i++) curve[i].SetFloat(fieldName, values[i]); + return field; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs.meta new file mode 100644 index 0000000..8bdee64 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveRuntimeCustomFields.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 69984b3a12156f746b3c5b5c83d103c6 +timeCreated: 1480534479 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs new file mode 100644 index 0000000..55f13fe --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs @@ -0,0 +1,416 @@ +using UnityEngine; +using System.Collections.Generic; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + //for 1.1 version Demo scene + public class BGTestCurveShowcase : MonoBehaviour + { + [Header("Light")] public Light Light; + + [Header("Logo parts")] public BGCcCursorObjectTranslate B; + public BGCcCursorObjectTranslate G; + public BGCcMath Curve; + + [Header("Projectiles")] public GameObject ProjectileFolder; + public TrailRenderer Projectile1; + public TrailRenderer Projectile2; + public BGCcCursor ProjectileCurve1; + + [Header("Particles")] public ParticleSystem BParticles; + public ParticleSystem GParticles; + public ParticleSystem CurveParticles1; + public ParticleSystem CurveParticles2; + + //============== dynamic + [Header("Dynamic")] public GameObject DynamicCurve; + public Light Light1; + public Light Light2; + public Light Light3; + + //============== some useless stuff + private readonly List effects = new List(); + + + //============== misc + private const float ScaleMin = 0.85f; + private const float ScaleMax = 1.15f; + private static readonly Vector3 FromScale = new Vector3(ScaleMin, ScaleMin, ScaleMin); + private static readonly Vector3 ToScale = new Vector3(ScaleMax, ScaleMax, ScaleMax); + private const float ScalePeriodMin = 1; + private const float ScalePeriodMax = 2; + + + //============== Unity callbacks + // Use this for initialization + private void Start() + { + //comment the effect to disable it + // scale the whole thing + effects.Add(new EffectScale(gameObject, ScalePeriodMin, ScalePeriodMax, FromScale, ToScale)); + + // scale parts + effects.Add(new EffectScale(B.gameObject, ScalePeriodMin, ScalePeriodMax, FromScale, ToScale)); + effects.Add(new EffectScale(G.gameObject, ScalePeriodMin, ScalePeriodMax, FromScale, ToScale)); + effects.Add(new EffectScale(Curve.gameObject, ScalePeriodMin, ScalePeriodMax, FromScale, ToScale)); + + //rotate letters + effects.Add(new EffectRotate(EffectRotate.CycleType.Random, B.gameObject, 1f, Vector3.zero, new Vector3(0, 360, 0), 2, 3)); + effects.Add(new EffectRotate(EffectRotate.CycleType.Random, G.gameObject, 1.6f, Vector3.zero, new Vector3(0, 360, 0), 4, 6)); + + //particles + // particles movements are done with Cc components + + //change tiling (on shared material) + effects.Add(new EffectChangeTiling(2, B.GetComponent().sharedMaterial, 0, 0, .2f, 1)); + + //rotate light + effects.Add(new EffectRotate(EffectRotate.CycleType.Swing, Light.gameObject, 3f, new Vector3(70, -90, 0), new Vector3(110, -90, 0))); + + //projectiles + effects.Add(new EffectRotate(EffectRotate.CycleType.FirstToLast, ProjectileFolder, 10, Vector3.zero, new Vector3(360, 0, 0))); + effects.Add(new EffectMoveAndRotateAlongCurve(ProjectileCurve1, Projectile1.gameObject, 3, 5, .1f)); + effects.Add(new EffectMoveAndRotateAlongCurve(ProjectileCurve1, Projectile2.gameObject, 3, 5, .1f, Mathf.PI)); + + //dynamic + effects.Add(new EffectDynamicCurve(DynamicCurve, 4, Light1, Light2, Light3)); + } + + // Update is called once per frame + private void Update() + { + foreach (var effect in effects) effect.Update(); + } + + + //========================================== Abstract Phase + private abstract class Phase + { + private readonly float periodMin; + private readonly float periodMax; + + internal float period = -10000; + internal float startTime; + + protected Phase(float periodMin, float periodMax) + { + this.periodMin = periodMin; + this.periodMax = periodMax; + } + + protected internal virtual void PhaseStart() + { + startTime = Time.time; + period = Random.Range(periodMin, periodMax); + } + + public abstract void Update(); + } + + private sealed class PhaseDelay : Phase + { + public PhaseDelay(float periodMin, float periodMax) : base(periodMin, periodMax) + { + } + + public override void Update() + { + } + } + + //========================================== Abstract Effect (compound phase) + private abstract class Effect : Phase + { + private readonly List phases = new List(); + + private int currentPhaseIndex; + + protected Effect(float periodMin, float periodMax) : base(periodMin, periodMax) + { + phases.Add(this); + } + + protected void AddPhase(Phase phase) + { + phases.Add(phase); + } + + protected void AddPhase(Phase phase, int index) + { + phases.Insert(index, phase); + } + + public override void Update() + { + var phase = phases[currentPhaseIndex]; + + var newPhase = false; + if (Time.time - phase.startTime > phase.period) + { + //next phase + newPhase = true; + currentPhaseIndex++; + if (currentPhaseIndex == phases.Count) currentPhaseIndex = 0; + + phase = phases[currentPhaseIndex]; + phase.PhaseStart(); + } + + if (phase is Effect) + { + var effect = (Effect) phase; + + if (newPhase) effect.Start(); + + effect.Update((Time.time - phase.startTime)/phase.period); + } + } + + protected float CheckReverse(float ratio, bool reverse) + { + return reverse ? (1 - ratio) : ratio; + } + + protected abstract void Update(float ratio); + + protected virtual void Start() + { + } + + //remap ratio value to new range (for example, if count=2, .25 and 0.75 will become 0.5) + protected static float Scale(float ratio, float count) + { + var smallPeriod = 1f/count; + return (ratio - Mathf.FloorToInt(ratio/smallPeriod)*smallPeriod)/smallPeriod; + } + } + + + //========================================== Change Scale + private sealed class EffectScale : Effect + { + private readonly GameObject target; + + private Vector3 min; + private Vector3 max; + private Vector3 oldScale; + private Vector3 newScale; + + public EffectScale(GameObject target, float periodMin, float periodMax, Vector3 min, Vector3 max) + : base(periodMin, periodMax) + { + this.target = target; + newScale = target.transform.localScale; + this.min = min; + this.max = max; + } + + protected override void Update(float ratio) + { + target.transform.localScale = Vector3.Lerp(oldScale, newScale, ratio); + } + + protected override void Start() + { + oldScale = newScale; + newScale = new Vector3(Random.Range(min.x, max.x), Random.Range(min.y, max.y), Random.Range(min.z, max.z)); + } + } + + //========================================== Change Rotate + private sealed class EffectRotate : Effect + { + internal enum CycleType + { + FirstToLast, + Swing, + Random + } + + private readonly GameObject target; + private readonly Vector3 min; + private readonly Vector3 max; + private readonly CycleType cycleType; + + private bool reverse; + + //full 360 on y + public EffectRotate(CycleType cycleType, GameObject target, float period, Vector3 min, Vector3 max, float delayMin, float delayMax) + : this(cycleType, target, period, min, max) + { + AddPhase(new PhaseDelay(delayMin, delayMax), 0); + } + + public EffectRotate(CycleType cycleType, GameObject target, float period, Vector3 min, Vector3 max) + : base(period, period) + { + this.target = target; + this.cycleType = cycleType; + this.min = min; + this.max = max; + } + + protected override void Update(float ratio) + { + target.transform.eulerAngles = Vector3.Lerp(min, max, CheckReverse(ratio, reverse)); + } + + protected override void Start() + { + switch (cycleType) + { + case CycleType.FirstToLast: + reverse = false; + break; + case CycleType.Swing: + reverse = !reverse; + break; + default: + reverse = Random.Range(0, 2) == 0; + break; + } + } + } + + //========================================== Change tiling + private sealed class EffectChangeTiling : Effect + { + private readonly float tileXMin; + private readonly float tileXMax; + private readonly float tileYMin; + private readonly float tileYMax; + private readonly Material material; + + private bool reverse; + + public EffectChangeTiling(float period, Material material, float tileXMin, float tileXMax, float tileYMin, float tileYMax) + : base(period, period) + { + this.material = material; + this.tileXMin = tileXMin; + this.tileXMax = tileXMax; + this.tileYMin = tileYMin; + this.tileYMax = tileYMax; + } + + protected override void Update(float ratio) + { + ratio = CheckReverse(ratio, reverse); + material.mainTextureScale = new Vector2(Mathf.Lerp(tileXMin, tileXMax, ratio), Mathf.Lerp(tileYMin, tileYMax, ratio)); + } + + protected override void Start() + { + reverse = !reverse; + } + } + + + //============================================================================================================== + // Working with BGCurve + //============================================================================================================== + //========================================== Move object along and rotate around tangent + private sealed class EffectMoveAndRotateAlongCurve : Effect + { + private readonly GameObject target; + private readonly BGCcCursor cursor; + private readonly float rotateCount; + private readonly float rotationDistance; + private readonly float initialRotationRadians; + + public EffectMoveAndRotateAlongCurve(BGCcCursor cursor, GameObject target, float period, int rotateCount, float rotationDistance, float initialRotationRadians = 0) + : base(period, period) + { + this.target = target; + this.cursor = cursor; + this.rotateCount = rotateCount; + this.rotationDistance = rotationDistance; + this.initialRotationRadians = initialRotationRadians; + } + + protected override void Update(float ratio) + { + var position = cursor.CalculatePosition(); + //Tangent should be included in Math calculation + var tangent = cursor.CalculateTangent(); + + var angle = initialRotationRadians + Mathf.Lerp(0, Mathf.PI*2, Scale(ratio, rotateCount)); + var pos = position + Quaternion.LookRotation(tangent)*(new Vector3(Mathf.Sin(angle), Mathf.Cos(angle))*rotationDistance); + + target.transform.position = pos; + } + } + + //========================================== creating BGCurve at runtime + private sealed class EffectDynamicCurve : Effect + { + private const int PointsCount = 3; + private const float SpanX = 8; + private const float SpanZ = 4; + + private readonly BGCcMath math; + private readonly Light[] lights; + private readonly float[] fromDistanceRatios; + private readonly float[] toDistanceRatios; + + public EffectDynamicCurve(GameObject target, float period, params Light[] lights) + : base(period, period) + { + target.AddComponent(); + math = target.AddComponent(); + math.Curve.Closed = true; + this.lights = lights; + fromDistanceRatios = new float[lights.Length]; + toDistanceRatios = new float[lights.Length]; + } + + protected override void Update(float ratio) + { + for (var i = 0; i < lights.Length; i++) + { + var light = lights[i]; + + //move + light.gameObject.transform.position = math.Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, Mathf.Lerp(fromDistanceRatios[i], toDistanceRatios[i], ratio)); + + if (ratio < .1) + { + //lights on + light.intensity = Mathf.Lerp(0, 3, ratio*10); + } + else if (ratio > .9) + { + //lights off + light.intensity = Mathf.Lerp(3, 0, (ratio - .9f)*10); + } + } + } + + protected override void Start() + { + var curve = math.Curve; + curve.Clear(); + for (var i = 0; i < PointsCount; i++) AddPoint(curve); + + for (var i = 0; i < fromDistanceRatios.Length; i++) + { + fromDistanceRatios[i] = Random.Range(0f, 1); + toDistanceRatios[i] = Random.Range(0f, 1); + } + } + + private void AddPoint(BGCurve curve) + { + var control = RandomVector(); + curve.AddPoint(new BGCurvePoint(curve, RandomVector(), BGCurvePoint.ControlTypeEnum.BezierSymmetrical, control, -control)); + } + + private Vector3 RandomVector() + { + return new Vector3(Random.Range(-SpanX, SpanX), 0, Random.Range(-SpanZ, SpanZ)); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs.meta new file mode 100644 index 0000000..61f53e9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveShowcase.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7958ebe98960fcd45a797f75226031f5 +timeCreated: 1472366315 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs new file mode 100644 index 0000000..ee7d9d8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + // This is old obsolete example class, left for compatibility only. + // DO NOT USE IT AS AN EXAMPLE PLEASE + // Use Cc components (BGCurveBaseMath -> BGCcMath, LineRenderer -> BGCcVisualizationLineRenderer) + [RequireComponent(typeof (BGCurve))] + [RequireComponent(typeof (LineRenderer))] + public class BGTestCurveStatic : MonoBehaviour + { + private const int TimeToMoveUp = 3; + + public GameObject ObjectToMove; + + private BGCurve curve; + private BGCurveBaseMath curveBaseMath; + + private float started; + private float ratio; + private LineRenderer lineRenderer; + + + // Use this for initialization + private void Start() + { + curve = GetComponent(); + lineRenderer = GetComponent(); + +// curveBaseMath = new BGCurveBaseMath(curve, false, 30); + curveBaseMath = new BGCurveBaseMath(curve); + started = Time.time; + + ResetLineRenderer(); + } + + private void ResetLineRenderer() + { + const int points = 100; + + var positions = new Vector3[points]; + for (var i = 0; i < 100; i++) + { + positions[i] = curveBaseMath.CalcPositionByDistanceRatio(((float) i/(points - 1))); + } +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = points; +#else + lineRenderer.SetVertexCount(points); +#endif + lineRenderer.SetPositions(positions); + } + + // Update is called once per frame + private void Update() + { + ratio = (Time.time - started)/TimeToMoveUp; + if (ratio >= 1) + { + started = Time.time; + ratio = 0; + } + else + { + ObjectToMove.transform.position = curveBaseMath.CalcPositionByDistanceRatio(ratio); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs.meta new file mode 100644 index 0000000..0b1adb5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestCurveStatic.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0e58e9b269669674fb2020bb632d196f +timeCreated: 1473297298 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs new file mode 100644 index 0000000..74cae35 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs @@ -0,0 +1,96 @@ +using UnityEngine; +using System.Collections; + +namespace BansheeGz.BGSpline.Example +{ + //for 1.2 version demo scene + public class BGTestDirector : MonoBehaviour + { + private static readonly Color NightColor = Color.black; + private static readonly Color DayColor = new Color32(176, 224, 240, 255); + + //Day + public Light SunLight; + public Light DirectionalLight; + public ParticleSystem SunParticles; + + //Night + public Animator MoonAnimator; + public Light MoonLight; + public ParticleSystem StarsParticles; + + //Stars + public GameObject Stars; + + //callback for sun, reaching particular point + public void Sun(int point) + { + switch (point) + { + case 0: + StartCoroutine(ChangeBackColor(NightColor, DayColor)); + StartCoroutine(ChangeDirectLightIntensity(0, .8f)); + SunParticles.Play(); + break; + case 1: + SunLight.intensity = 1; + Stars.transform.localPosition += new Vector3(0, -20); + break; + case 3: + Stars.transform.localPosition -= new Vector3(0, -20); + SunLight.intensity = 0; + SunParticles.Stop(); + break; + } + } + + //callback for moon, reaching particular point + public void Moon(int point) + { + switch (point) + { + case 0: + StartCoroutine(ChangeBackColor(DayColor, NightColor)); + StartCoroutine(ChangeDirectLightIntensity(.8f, 0)); + StarsParticles.Play(); + break; + case 1: + MoonAnimator.SetBool("play", true); + MoonLight.intensity = 1; + break; + case 2: + StarsParticles.Stop(); + break; + case 3: + MoonAnimator.SetBool("play", false); + MoonLight.intensity = 0; + break; + } + } + + + private IEnumerator ChangeBackColor(Color from, Color to) + { + var started = Time.time; + const float changeTime = 1; + + while (Time.time - started < changeTime) + { + Camera.main.backgroundColor = Color.Lerp(from, to, (Time.time - started)/changeTime); + yield return null; + } + } + + private IEnumerator ChangeDirectLightIntensity(float from, float to) + { + var started = Time.time; + const float changeTime = 1; + + while (Time.time - started < changeTime) + { + DirectionalLight.intensity = Mathf.Lerp(from, to, (Time.time - started)/changeTime); + yield return null; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs.meta new file mode 100644 index 0000000..eb74c8b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestDirector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dbe40e6961ee5c74cb358876bec697f9 +timeCreated: 1476809059 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs new file mode 100644 index 0000000..fc9610f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs @@ -0,0 +1,24 @@ +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace BansheeGz.BGSpline.Example +{ + //for main menu scene + public class BGTestMainMenu : MonoBehaviour + { + //to let know that scenes are loaded via menu + public static bool Inited; + + // Use this for initialization + void Start() + { + Inited = true; + } + + //for loading scenes + public void LoadScene(string scene) + { + SceneManager.LoadScene(scene); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs.meta new file mode 100644 index 0000000..0ed9afd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestMainMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 1bfad38550106584c93e18ad90e98703 +timeCreated: 1477523840 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs new file mode 100644 index 0000000..7025c50 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Example +{ + //for testing performance + //DO NOT USE Unity Handles (for curve's points) with this test class! + [RequireComponent(typeof (BGCcMath))] + public class BGTestPerformance : MonoBehaviour + { + public enum ControlTypeForNewPoints + { + Random, + Absent, + Bezier + } + + //speed range for objects + private const float SpeedRange = 5f; + //transition period for points + private const int Period = 10; + + //===========================Public + [Tooltip("Object's prefab")] public GameObject ObjectToMove; + [Tooltip("Limits for points positions and transitions")] public Bounds Bounds = new Bounds(Vector3.zero, Vector3.one); + [Tooltip("Number of points to spawn")] [Range(2, 2000)] public int PointsCount = 100; + [Tooltip("Number of objects to spawn")] [Range(1, 500)] public int ObjectsCount = 100; + [Tooltip("Control Type")] public ControlTypeForNewPoints ControlType; + + //===========================Private + + private float startTime = -1000; + private BGCurve curve; + private BGCurveBaseMath math; + + //points + private Vector3[] oldPos; + private Vector3[] newPos; + + //objs + private GameObject[] objects; + private float[] speed; + private float[] distances; + + private float oldDistance; + + //Unity callback + private void Start() + { + curve = GetComponent(); + var ccMath = GetComponent(); + math = ccMath.Math; + curve = ccMath.Curve; + + //init arrays + oldPos = new Vector3[PointsCount]; + newPos = new Vector3[PointsCount]; + speed = new float[ObjectsCount]; + distances = new float[ObjectsCount]; + objects = new GameObject[ObjectsCount]; + + + //--------------------------- init from points + for (var i = 0; i < PointsCount; i++) + { + var controlTypeEnum = BGCurvePoint.ControlTypeEnum.BezierIndependant; + switch (ControlType) + { + case ControlTypeForNewPoints.Absent: + controlTypeEnum = BGCurvePoint.ControlTypeEnum.Absent; + break; + case ControlTypeForNewPoints.Random: + controlTypeEnum = (BGCurvePoint.ControlTypeEnum) Random.Range(0, 3); + break; + } + curve.AddPoint(new BGCurvePoint(curve, RandomVector(), controlTypeEnum, RandomVector(), RandomVector())); + } + + //Recalculate manually after points were added (normally you would not do it) + math.Recalculate(); + + //---------------------------- init objects + if (ObjectToMove != null) + { + var totalDistance = oldDistance = math.GetDistance(); + for (var i = 0; i < ObjectsCount; i++) + { + var obj = Instantiate(ObjectToMove, Vector3.zero, Quaternion.identity) as GameObject; + obj.transform.parent = transform; + objects[i] = obj; + distances[i] = Random.Range(0, totalDistance); + } + ObjectToMove.SetActive(false); + //--------------------------- init speed + for (var i = 0; i < ObjectsCount; i++) + { + speed[i] = Random.Range(0, 2) == 0 ? Random.Range(-SpeedRange, -SpeedRange*0.3f) : Random.Range(SpeedRange*0.3f, SpeedRange); + } + } + } + + //Unity callback + private void Update() + { + //reset transitions + if (Time.time - startTime > Period) + { + startTime = Time.time; + for (var i = 0; i < PointsCount; i++) + { + oldPos[i] = newPos[i]; + newPos[i] = RandomVector(); + } + } + + //move points + var ratio = (Time.time - startTime)/Period; + var points = curve.Points; + for (var i = 0; i < PointsCount; i++) points[i].PositionLocal = Vector3.Lerp(oldPos[i], newPos[i], ratio); + + //move objects + var totalDistance = math.GetDistance(); + if (ObjectToMove != null) + { + var remapRatio = totalDistance/oldDistance; + for (var i = 0; i < ObjectsCount; i++) + { + var distance = distances[i]; + + //since curve's length changed-remap + distance = distance*remapRatio; + + distance = distance + speed[i]*Time.deltaTime; + if (distance < 0) + { + speed[i] = -speed[i]; + distance = 0; + } + else if (distance > totalDistance) + { + speed[i] = -speed[i]; + distance = totalDistance; + } + distances[i] = distance; + + objects[i].transform.position = math.CalcByDistance(BGCurveBaseMath.Field.Position, distance); + } + } + oldDistance = totalDistance; + } + + //misc utility methods + private Vector3 RandomVector() + { + return new Vector3(Range(0), Range(1), Range(2)); + } + + private float Range(int index) + { + return Random.Range(Bounds.min[index], Bounds.max[index]); + } + } +} + + diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs.meta new file mode 100644 index 0000000..475c152 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Scripts/BGTestPerformance.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fd365c04f9bb4241803aced3a970a79 +timeCreated: 1473296685 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain.meta new file mode 100644 index 0000000..4c47095 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d8330cb9504691b4795df7a28fd10477 +folderAsset: yes +timeCreated: 1476659936 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset new file mode 100644 index 0000000..9fe26ea Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset.meta new file mode 100644 index 0000000..d25782c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestDemoTerrain.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 737d7a849d554e141aa574ee80ee3fce +timeCreated: 1476659987 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset new file mode 100644 index 0000000..76d7970 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset.meta new file mode 100644 index 0000000..758fa36 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Examples/Terrain/BGTestSnappingTerrain.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 763f4ae12b87e6b4b980c9d761465159 +timeCreated: 1476935958 +licenseType: Store +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons.meta new file mode 100644 index 0000000..cbaea5a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: dea56a8d07951be4e84ca5f838b758db +folderAsset: yes +timeCreated: 1458400512 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png new file mode 100644 index 0000000..95e8bc1 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png.meta new file mode 100644 index 0000000..1c5f3c6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGAdd123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 03ce3b24581c7414eaca31c2b196ecc6 +timeCreated: 1458521116 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png new file mode 100644 index 0000000..2ea0724 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png.meta new file mode 100644 index 0000000..3f59db8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWhite123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ded8bd90f16890a408091013c9b03b43 +timeCreated: 1472605753 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png new file mode 100644 index 0000000..5142b78 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png.meta new file mode 100644 index 0000000..45fc7d5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGBoxWithBorder123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: e14f8a9efcef446448911c88a64bf86a +timeCreated: 1472058752 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png new file mode 100644 index 0000000..b8f845c Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png.meta new file mode 100644 index 0000000..d9441ad --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcEditName123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: e087ffb98e49ae34eb43f2f4d66da109 +timeCreated: 1473063659 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png new file mode 100644 index 0000000..1e2fd87 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png.meta new file mode 100644 index 0000000..93bbe89 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCcNoImage123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: a414723b197ce2f4a9fd841e965f138e +timeCreated: 1472488893 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png new file mode 100644 index 0000000..0d41968 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png.meta new file mode 100644 index 0000000..869a6f8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapseAll123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: db1c9655fc10b724eb307b7e321ac31c +timeCreated: 1472909534 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png new file mode 100644 index 0000000..77ece6d Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png.meta new file mode 100644 index 0000000..44686ff --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCollapsed123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: d576ae51c051b294d978d836848416bf +timeCreated: 1472909534 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png new file mode 100644 index 0000000..deb194c Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png.meta new file mode 100644 index 0000000..4670524 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGComponents123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ace41ad38c804f34a961b1f7624cb0bb +timeCreated: 1471761007 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png new file mode 100644 index 0000000..077f420 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png.meta new file mode 100644 index 0000000..2dbf1ce --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlAbsent123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ed1ce6f1c6c55454c8302d8c78840174 +timeCreated: 1472300443 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png new file mode 100644 index 0000000..56f6f8b Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png.meta new file mode 100644 index 0000000..0d7f106 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierIndependent123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 7a229d4c49ec7a04e9772d939231a8ad +timeCreated: 1472300443 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png new file mode 100644 index 0000000..a7614b6 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png.meta new file mode 100644 index 0000000..abcc4f4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGControlBezierSymmetrical123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 41860c26ee4a2c444afde8d31ba5f57f +timeCreated: 1472300443 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png new file mode 100644 index 0000000..d036a25 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png.meta new file mode 100644 index 0000000..2dee12e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGConvertAll123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: bb7f32b6d453d8f4f99301a76ba8fe6d +timeCreated: 1458530462 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png new file mode 100644 index 0000000..2e0d9ec Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png.meta new file mode 100644 index 0000000..d9371b6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCopy123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ee35c284a32612c429d5fa9be3a4a535 +timeCreated: 1477995243 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png new file mode 100644 index 0000000..f70d7e5 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png.meta new file mode 100644 index 0000000..24dba01 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveComponents123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: a5b7666fd68eee74ea8390d47cb34a42 +timeCreated: 1472489767 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png new file mode 100644 index 0000000..8633937 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png.meta new file mode 100644 index 0000000..3a57bba --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGCurveLogo123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 5a06bd789ce83514da6205207ff54c0d +timeCreated: 1458414750 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png new file mode 100644 index 0000000..940047a Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png.meta new file mode 100644 index 0000000..1a0e02d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDeSelectAll123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 119252f46a08a6c40a4cad087e0cec60 +timeCreated: 1458533499 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png new file mode 100644 index 0000000..28ce032 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png.meta new file mode 100644 index 0000000..4546b64 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGDelete123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: fcc2685fe63bfea449c91455d49e65a5 +timeCreated: 1458400542 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: 1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png new file mode 100644 index 0000000..53df01c Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png.meta new file mode 100644 index 0000000..feb5dc0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpandAll123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 2f28d70650a3865498f01cfa3de75a10 +timeCreated: 1472909534 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png new file mode 100644 index 0000000..aefc7c0 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png.meta new file mode 100644 index 0000000..57eac92 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGExpanded123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: dc96184b02b25ad45a6a23eb39b83b91 +timeCreated: 1472909534 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png new file mode 100644 index 0000000..46e1467 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png.meta new file mode 100644 index 0000000..186002c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGFields123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 0c858be9b0c10534cad42984dc3d2b77 +timeCreated: 1471761007 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png new file mode 100644 index 0000000..5b478d2 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png.meta new file mode 100644 index 0000000..3dcfd24 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOff123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 983231345b8a72746867a924b0375d51 +timeCreated: 1476159626 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png new file mode 100644 index 0000000..0ac2224 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png.meta new file mode 100644 index 0000000..26b400a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHandlesOn123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: b6b3c686fb07aa0448eb20914ba73271 +timeCreated: 1476159626 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png new file mode 100644 index 0000000..4637694 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png.meta new file mode 100644 index 0000000..dcae7fd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHelp123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 974c3f86d59ae4c4aaeb18abc1b04b7f +timeCreated: 1472530071 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png new file mode 100644 index 0000000..97355cf Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png.meta new file mode 100644 index 0000000..c44a9cb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 94ab056a92cf75c47ab8adcde965871f +timeCreated: 1472629649 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png new file mode 100644 index 0000000..80522d4 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png.meta new file mode 100644 index 0000000..c560bb1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyErrorSelectedIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 1621a394d1618b047a3fd6ddb5ee1a65 +timeCreated: 1472629649 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png new file mode 100644 index 0000000..7b0ec9e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png.meta new file mode 100644 index 0000000..f01c15f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: b2b36280c75a2ba44921866c2c6d7fdb +timeCreated: 1472627466 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png new file mode 100644 index 0000000..79f7281 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png.meta new file mode 100644 index 0000000..3930e7a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchySelectedIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: dceb510e1662d644a909812caca5b951 +timeCreated: 1472628860 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png new file mode 100644 index 0000000..ba81295 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png.meta new file mode 100644 index 0000000..a7e4474 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 8f4d290373499e94f94187cdc78c6f46 +timeCreated: 1472720551 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png new file mode 100644 index 0000000..4a78ce7 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png.meta new file mode 100644 index 0000000..8c04724 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGHierarchyWarningSelectedIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: f3a7ac617df5b574ba63b171b3ae8114 +timeCreated: 1472720551 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png new file mode 100644 index 0000000..c4a3a14 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png.meta new file mode 100644 index 0000000..edb81bf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOff123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 45a92439e841a594ab7df00f55b18d91 +timeCreated: 1472306768 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png new file mode 100644 index 0000000..e4350e5 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png.meta new file mode 100644 index 0000000..de223f9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGLockOn123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 535564b74ec2c1b4d9df8f6f5430a3f5 +timeCreated: 1472306768 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png new file mode 100644 index 0000000..bbd733f Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png.meta new file mode 100644 index 0000000..d3bb70a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMenuItemBackground123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 48df368591a03fa4583ab62aa8facd31 +timeCreated: 1472736046 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png new file mode 100644 index 0000000..7dfa15c Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png.meta new file mode 100644 index 0000000..f7d25b4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveDown123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: e3e4ceb5bbc46d24aa7c095e2d01d0a6 +timeCreated: 1458523994 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png new file mode 100644 index 0000000..1623d76 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png.meta new file mode 100644 index 0000000..36c8d3b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGMoveUp123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 16d471e6b1100174e99104967a4a5371 +timeCreated: 1458523994 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png new file mode 100644 index 0000000..256802e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png.meta new file mode 100644 index 0000000..4502fa6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOff123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: b1aef48490f4ed0428d5c198de902252 +timeCreated: 1472713091 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png new file mode 100644 index 0000000..4ed7e01 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png.meta new file mode 100644 index 0000000..27e9e1e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGOn123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ce573ece89da18f498539bf492e4fc89 +timeCreated: 1472713091 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png new file mode 100644 index 0000000..e61bbe1 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png.meta new file mode 100644 index 0000000..0c975ad --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPaste123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 5654b1bf9b5758d4292b8b5fae9480b4 +timeCreated: 1477995243 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png new file mode 100644 index 0000000..4dbf389 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png.meta new file mode 100644 index 0000000..480b409 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointControlBS123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 72e35837ef2d6e144b6d6dc21a5a836f +timeCreated: 1472299645 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png new file mode 100644 index 0000000..9009de3 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png.meta new file mode 100644 index 0000000..500cbaa --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointDelete123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 285c5dc0cef41774b99e38ea9a1dd9ab +timeCreated: 1472300690 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png new file mode 100644 index 0000000..d99a061 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png.meta new file mode 100644 index 0000000..dd87626 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertAfter123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ddd4a46b3f2129546a7bd2c9ee33481a +timeCreated: 1472739488 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png new file mode 100644 index 0000000..9aec75d Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png.meta new file mode 100644 index 0000000..5cc4c66 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointInsertBefore123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 6c4383b335fb4f84d8b4891eb8162aa5 +timeCreated: 1472739488 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png new file mode 100644 index 0000000..cf1b00d Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png.meta new file mode 100644 index 0000000..b187ffb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPointSelected123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: c2df81ec1d6e7a7429f8b01c6503d2f6 +timeCreated: 1472281979 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png new file mode 100644 index 0000000..ea35677 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png.meta new file mode 100644 index 0000000..6a08073 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGPoints123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: bfc1eb453ec737f46b11184eaf5ed806 +timeCreated: 1458400542 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png new file mode 100644 index 0000000..9fa64ba Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png.meta new file mode 100644 index 0000000..9b5f002 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectAll123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: dede35dbc7af6e7489d42029b6b694f4 +timeCreated: 1458533499 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png new file mode 100644 index 0000000..f96afb3 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png.meta new file mode 100644 index 0000000..5904b7e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionAdd123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: cf5fc4a27a2691e4e8a4f7945b3328c8 +timeCreated: 1472746448 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png new file mode 100644 index 0000000..208da0e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png.meta new file mode 100644 index 0000000..5a53e9a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSelectionRemove123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 433f6e35670079941910fc178f9bce4c +timeCreated: 1472746448 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png new file mode 100644 index 0000000..56aa4ac Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png.meta new file mode 100644 index 0000000..45b70f8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettings123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 4d7dfc35a926ca14d9ddd3f3d6986d61 +timeCreated: 1458400542 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png new file mode 100644 index 0000000..0684743 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png.meta new file mode 100644 index 0000000..439c2d2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGSettingsIcon123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 94e25c1cd35aa4649ba3d4357982aeff +timeCreated: 1472983008 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png new file mode 100644 index 0000000..d55413b Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png.meta new file mode 100644 index 0000000..c8b68e2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableCell123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 59bb3d50c693c0b41b9ad2688737d022 +timeCreated: 1471855053 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png new file mode 100644 index 0000000..4d78502 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png.meta new file mode 100644 index 0000000..14d350a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableHeader123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 688c50e97be6de94c97dfebffc0232ef +timeCreated: 1471855053 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png new file mode 100644 index 0000000..7053893 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png.meta new file mode 100644 index 0000000..5fe0800 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTableTitle123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: d5ac72114a58e9a4a96233d3b26b7d50 +timeCreated: 1471859604 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 16 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png new file mode 100644 index 0000000..59f79b9 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png.meta new file mode 100644 index 0000000..aa0bb49 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickNo123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 095ffc4f31a16bf4a931b1fe2f14b0f2 +timeCreated: 1458400542 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png new file mode 100644 index 0000000..2d378de Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png.meta new file mode 100644 index 0000000..a77ca54 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/BGTickYes123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: c5b649d34ba7fee4d80a14ac192a1cd5 +timeCreated: 1458400542 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components.meta new file mode 100644 index 0000000..26f5e43 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c93d1ca76bb7c1e4191b3fafb5e2c7e3 +folderAsset: yes +timeCreated: 1472488316 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png new file mode 100644 index 0000000..44a9c9e Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png.meta new file mode 100644 index 0000000..613af6b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 2e8bc914727b8974e9302c4788246b6e +timeCreated: 1472492039 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png new file mode 100644 index 0000000..db30383 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png.meta new file mode 100644 index 0000000..dd528f4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 271b8ad5a36deae43b56d79270be2caf +timeCreated: 1472942522 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png new file mode 100644 index 0000000..a50e361 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png.meta new file mode 100644 index 0000000..6637c50 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 5e55633039becc942bb8a380d8cf6d77 +timeCreated: 1472942522 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png new file mode 100644 index 0000000..59d6c94 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png.meta new file mode 100644 index 0000000..fefed03 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: d2786fd700db6304d82b0eb6badf912a +timeCreated: 1476113367 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png new file mode 100644 index 0000000..933a1b9 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png.meta new file mode 100644 index 0000000..c77decb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: db2c2a331f01c584c8d02062fedaeac6 +timeCreated: 1472942522 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png new file mode 100644 index 0000000..a8848ac Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png.meta new file mode 100644 index 0000000..f7e976e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 913b0df64e0187e4e844d7fba6bd1e5f +timeCreated: 1472488522 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png new file mode 100644 index 0000000..a445dea Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png.meta new file mode 100644 index 0000000..966c3a1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 0def80e3c2695d345b205d3d2752e5b9 +timeCreated: 1474946153 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png new file mode 100644 index 0000000..cbafa42 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png.meta new file mode 100644 index 0000000..386f775 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: f95ffc49338c9e241a8b77d87ccb1317 +timeCreated: 1476469956 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png new file mode 100644 index 0000000..6ac1205 Binary files /dev/null and b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png differ diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png.meta new file mode 100644 index 0000000..58c70aa --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 7b4f1912d4b7c8841b28c9b596a7ace9 +timeCreated: 1473076361 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts.meta new file mode 100644 index 0000000..c82250c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 0843b6513bb58f147abafe88acbdf49b +folderAsset: yes +timeCreated: 1458400502 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc.meta new file mode 100644 index 0000000..6f1b0e8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a25bc0e736a11d546bd0490d3cc13f88 +folderAsset: yes +timeCreated: 1471596338 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs new file mode 100644 index 0000000..0184bc6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs @@ -0,0 +1,102 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Identify the position on the curve by the distance from the start. + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcCursor")] + [ + CcDescriptor( + Description = "Identify location on the curve by distance.", + Name = "Cursor", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursor123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcCursor")] + public class BGCcCursor : BGCcWithMath + { + //=============================================================================================== + // Fields + //=============================================================================================== + + [SerializeField] [Tooltip("Distance from start of the curve.")] private float distance; + + /// Distance from the start + public float Distance + { + get { return distance; } + set + { + distance = Math.ClampDistance(value); + FireChangedParams(); + } + } + + /// Normalized distance from the start [Range(0,1)] + public float DistanceRatio + { + get { return Mathf.Clamp01(distance/Math.GetDistance()); } + set + { + distance = Math.GetDistance()*Mathf.Clamp01(value); + FireChangedParams(); + } + } + + public override bool SupportHandles + { + get { return true; } + } + + public override bool SupportHandlesSettings + { + get { return true; } + } + +#if UNITY_EDITOR + [Range(.5f, 1.5f)] [SerializeField] private float handlesScale = 1; + [SerializeField] private Color handlesColor = Color.white; + + public float HandlesScale + { + get { return handlesScale; } + set { handlesScale = value; } + } + + public Color HandlesColor + { + get { return handlesColor; } + set { handlesColor = value; } + } +#endif + + //=============================================================================================== + // Public functions + //=============================================================================================== + /// Calculates tangent by current distance + public Vector3 CalculateTangent() + { + return Math.CalcByDistance(BGCurveBaseMath.Field.Tangent, distance); + } + + /// Calculates position by current distance + public Vector3 CalculatePosition() + { + return Math.CalcByDistance(BGCurveBaseMath.Field.Position, distance); + } + + /// Calculates section's index by current distance + public int CalculateSectionIndex() + { + return Math.CalcSectionIndexByDistance(distance); + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + public override void Start() + { + //clamp + Distance = distance; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs.meta new file mode 100644 index 0000000..f82c3f3 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 924df4c68ad59e943b47b75f2323f73a +timeCreated: 1471831265 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs new file mode 100644 index 0000000..cc8712a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs @@ -0,0 +1,551 @@ +using System; +using UnityEngine; +using UnityEngine.Events; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Change cursor position linearly + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcCursorChangeLinear")] + [ + CcDescriptor( + Description = "Change cursor position linearly", + Name = "Cursor Change Linear", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorChangeLinear123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcCursorChangeLinear")] + + //idea.. refactor it.. the whole class looks like a nightmare + public class BGCcCursorChangeLinear : BGCcWithCursor + { + //=============================================================================================== + // Static & Enums + //=============================================================================================== + /// Speed, that is so small, that it can be ignored + public const float SpeedThreshold = 0.00001f; + + /// What to do, then cursor reaches first or last points + public enum OverflowControlEnum + { + /// Cycle in the same direction. For example, if it reaches the end point, start from the first point again + Cycle = 0, + + /// Change speed to -speed, and go in opposite direction + PingPong = 1, + + /// Stop + Stop = 2, + } + + //=============================================================================================== + // Events (Not persistent) + //=============================================================================================== + /// point was reached + public event EventHandler PointReached; + + //=============================================================================================== + // Fields (persistent) + //=============================================================================================== + + + [SerializeField] [Tooltip("Constant movement speed along the curve (Speed * Time.deltaTime)." + + "You can override this value for each point with speedField")] private float speed = 5; + + [SerializeField] [Tooltip("How to change speed, then curve's end reached.")] private OverflowControlEnum overflowControl; + + [SerializeField] [Tooltip("If curve's length changed, " + + "cursor position be adjusted with curve's length to ensure visually constant speed along the curve. ")] private bool adjustByTotalLength; + + [SerializeField] [Tooltip("Field to store the speed between each point. It should be a float field.")] private BGCurvePointField speedField; + + + [SerializeField] [Tooltip("Delay at each point. You can override this value for each point with delayField")] private float delay; + + [SerializeField] [Tooltip("Field to store the delays at points. It should be a float field.")] private BGCurvePointField delayField; + + [SerializeField] [Tooltip("Event is fired, then point is reached")] private PointReachedEvent pointReachedEvent = new PointReachedEvent(); + + + /// What to do, then cursor reaches first or last points + public OverflowControlEnum OverflowControl + { + get { return overflowControl; } + set + { + if (ParamChanged(ref overflowControl, value)) Stopped = false; + } + } + + /// Speed. It can be overriden for each point by SpeedField. The result speed is calculated as Speed * Time.deltaTime + public float Speed + { + get { return speed; } + set { ParamChanged(ref speed, value); } + } + + /// Should we adjust cursor position by the total length of the curve + public bool AdjustByTotalLength + { + get { return adjustByTotalLength; } + set { ParamChanged(ref adjustByTotalLength, value); } + } + + /// Custom field to get speed value. It should be a float field. If it's null, "Speed" property is used. The result speed is calculated as Speed * Time.deltaTime + public BGCurvePointField SpeedField + { + get { return speedField; } + set { ParamChanged(ref speedField, value); } + } + + /// Delay at each point. It can be overriden for each point by DelayField. + public float Delay + { + get { return delay; } + set { ParamChanged(ref delay, value); } + } + + /// Custom field to get delay value. It should be a float field. If it's null, "Delay" property is used. + public BGCurvePointField DelayField + { + get { return delayField; } + set { ParamChanged(ref delayField, value); } + } + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + //curve's length at last calculation (only if adjustByTotalLength=true) + private float oldLength; + //is speed is reversed (if speed field is present) + private bool speedReversed; + //current section index (it's calculated only if it's required) + private int currentSectionIndex; + //delay started time + private float delayStarted = -1; + //if speed was positive while delay occured + private bool speedWasPositiveWhileDelayed; + //this is a part of overall nightmare, this class is. + private bool skipZeroPoint; + + + /// If it's stopped or moving + public bool Stopped { get; set; } + + /// If speed field is present and actual speed is reversed at the moment. It can be the case if PingPong is used. + public bool SpeedReversed + { + get { return speedReversed; } + } + + /// Speed at current cursor position + public float CurrentSpeed + { + get + { + if (Curve.PointsCount < 2) return 0; + + //no field + if (speedField == null) return speed; + + //by field + var speedAtPoint = Curve[Cursor.CalculateSectionIndex()].GetFloat(speedField.FieldName); + return speedReversed ? -speedAtPoint : speedAtPoint; + } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + public override void Start() + { + oldLength = Cursor.Math.GetDistance(); + if (Application.isPlaying && Curve.PointsCount > 1 && (delay > 0 || delayField != null || pointReachedEvent.GetPersistentEventCount() > 0 || PointReached != null)) + currentSectionIndex = Cursor.Math.Math.CalcSectionIndexByDistance(Cursor.Distance); + } + + // Update is called once per frame + private void Update() + { + if (Stopped || (speedField == null && Mathf.Abs(speed) < SpeedThreshold)) return; + + var pointsCount = Curve.PointsCount; + if (pointsCount < 2) return; + + var cursor = Cursor; + var math = cursor.Math.Math; + var isPlaying = Application.isPlaying; + + //===================================================== cursor is delayed at point + if (isPlaying && delayStarted >= 0 && !CheckIfDelayIsOver(math, cursor)) return; + + //we are delayed so no need to process movement- return + if (delayStarted >= 0) return; + + + //===================================================== cursor is moving + //calculate adjustment if needed + var distance = cursor.Distance; + var newLength = 0f; + if (adjustByTotalLength) + { + newLength = math.GetDistance(); + if (Math.Abs(newLength) > BGCurve.Epsilon && Math.Abs(oldLength) > BGCurve.Epsilon && Math.Abs(newLength - oldLength) > BGCurve.Epsilon) distance = distance*newLength/oldLength; + } + + //-------------------------------- Check for new Delay + var newSectionIndex = -1; + + //check for new delays (and fire events) + var firingEvents = pointReachedEvent.GetPersistentEventCount() > 0 || PointReached != null; + var checkDelay = isPlaying && (delay > 0 || delayField != null); + if ((checkDelay || firingEvents) && CheckForNewDelay(math, distance, ref newSectionIndex, checkDelay, firingEvents)) return; + + //-------------------------------- calculate speed + var currentSpeed = speed; + if (speedField != null) + { + //we need to retrieve speed from a field value + if (newSectionIndex == -1) newSectionIndex = math.CalcSectionIndexByDistance(distance); + currentSpeed = Curve[newSectionIndex].GetFloat(speedField.FieldName); + if (speedReversed) currentSpeed = -currentSpeed; + } + + //-------------------------------- change distance + var newDistance = distance + currentSpeed*Time.deltaTime; + + + //-------------------------------- Check Overflows + if (newDistance < 0 || newDistance > math.GetDistance()) Overflow(math, ref newDistance, currentSpeed >= 0, checkDelay, firingEvents); + + //assign new value + cursor.Distance = newDistance; + oldLength = newLength; + } + + //=============================================================================================== + // Public functions + //=============================================================================================== + /// Delay at specified point + public float GetDelayAtPoint(int point) + { + return delayField == null ? delay : Curve[point].GetFloat(delayField.FieldName); + } + + /// Speed at specified point + public float GetSpeedAtPoint(int point) + { + return speedField == null ? speed : Curve[point].GetFloat(speedField.FieldName); + } + + //=============================================================================================== + // Private functions + //=============================================================================================== + //if delay required at given point + private bool IsDelayRequired(int pointIndex) + { + var hasDelayField = delayField != null; + return (!hasDelayField && delay > 0) || (hasDelayField && Curve[pointIndex].GetFloat(delayField.FieldName) > BGCurve.Epsilon); + } + + //start delay at current point + private void StartDelay(bool speedIsPositive) + { + delayStarted = Time.time; + speedWasPositiveWhileDelayed = speedIsPositive; + } + + //checks if cursor passed a point (current section is changed) and if new delay occured. Also fires events if needed + private bool CheckForNewDelay(BGCurveBaseMath math, float distance, ref int newSectionIndex, bool checkDelay, bool firingEvents) + { + if (currentSectionIndex == 0 && skipZeroPoint) return false; + if (!math.Curve.Closed && currentSectionIndex == math.Curve.PointsCount - 1) return false; + + newSectionIndex = math.CalcSectionIndexByDistance(distance); + if (currentSectionIndex != newSectionIndex) + { + //section is changed (there could be several points between) + + //if speed was positive or negative? + bool speedPositive; + if (speedField == null) speedPositive = speed > 0; + else + { + speedPositive = Curve[currentSectionIndex].GetFloat(speedField.FieldName) > 0; + if (speedReversed) speedPositive = !speedPositive; + } + + if (CheckDelayAtSectionChanged(newSectionIndex, checkDelay, firingEvents, speedPositive)) return true; + } + //no delay + delayStarted = -1; + + return false; + } + + //section is changed- check if delay required + private bool CheckDelayAtSectionChanged(int newSectionIndex, bool checkDelay, bool firingEvents, bool speedPositive) + { + var cursor = Cursor; + var math = cursor.Math.Math; + + var lastPointIndex = Curve.PointsCount - 1; + + //now we need to iterate all passed points + if (speedPositive) + { + //check for infinite loop (just in case) + if (newSectionIndex > currentSectionIndex) + { + for (var i = currentSectionIndex + 1; i <= newSectionIndex; i++) + { + if (firingEvents) FirePointReachedEvent(i); + + if (checkDelay && CheckDelayAtPoint(math, cursor, i, speedPositive)) return true; + } + } + } + else + { + //if speed is negative, the processing is slightly different + + if (currentSectionIndex == 0 && !Curve.Closed) currentSectionIndex = lastPointIndex; + + //check for infinite loop (just in case) + if (newSectionIndex < currentSectionIndex) + { + for (var i = currentSectionIndex; i > newSectionIndex; i--) + { + if (firingEvents) FirePointReachedEvent(i); + + if (checkDelay && CheckDelayAtPoint(math, cursor, i, speedPositive)) return true; + } + } + } + + currentSectionIndex = newSectionIndex; + return false; + } + + //points was passed and we check if delay is required at this point + private bool CheckDelayAtPoint(BGCurveBaseMath math, BGCcCursor cursor, int pointIndex, bool speedPositive) + { + if (IsDelayRequired(pointIndex)) + { + //we gotta delay at this point + currentSectionIndex = pointIndex; + //move cursor straight to the point + cursor.Distance = Curve.PointsCount - 1 == pointIndex && !Curve.Closed ? math.GetDistance() : math[pointIndex].DistanceFromStartToOrigin; + + // !!!!!!! start delay + StartDelay(speedPositive); + //we does not need to process movement (it will be ignored at any rate, cause we stick to the particular point) + return true; + } + return false; + } + + // overflow occurred + private void Overflow(BGCurveBaseMath math, ref float newDistance, bool currentSpeedPositive, bool checkDelay, bool firingEvents) + { + var lessThanZero = newDistance < 0; + var totalDistance = math.GetDistance(); + var lastPointIndex = Curve.PointsCount - 1; + + //we need to check delays. (all points up to boundary point) + if (checkDelay || firingEvents) + { + if (currentSpeedPositive) + { + //process all passed points +// var lastPointIndexToCheck = Curve.Closed ? lastPointIndex : lastPointIndex - 1; + var lastPointIndexToCheck = lastPointIndex; + if (currentSectionIndex != lastPointIndexToCheck) if (CheckDelayAtSectionChanged(lastPointIndexToCheck, checkDelay, firingEvents, true)) return; + } + else + { + if (currentSectionIndex > 0) + { + if (CheckDelayAtSectionChanged(0, checkDelay, firingEvents, false)) return; + } + + //this needs to be refactored + if (!skipZeroPoint) + { + if (checkDelay && CheckDelayAtPoint(math, Cursor, 0, false)) + { + if (firingEvents) FirePointReachedEvent(0); + skipZeroPoint = true; + return; + } + } + } + } + + + //overflow + switch (overflowControl) + { + case OverflowControlEnum.Stop: + newDistance = lessThanZero ? 0 : totalDistance; + Stopped = true; + break; + + case OverflowControlEnum.Cycle: + newDistance = lessThanZero ? totalDistance + newDistance : newDistance - totalDistance; + break; + + case OverflowControlEnum.PingPong: + if (speedField == null) speed = -speed; + speedReversed = !speedReversed; + currentSpeedPositive = !currentSpeedPositive; + newDistance = lessThanZero ? -newDistance : totalDistance*2 - newDistance; + break; + } + + if (newDistance < 0) newDistance = 0; + else if (newDistance > totalDistance) newDistance = totalDistance; + + + //ok, we need to check delays.. once again. (single boundary point) + if (checkDelay || firingEvents) + { + if (Curve.Closed) + { + if (skipZeroPoint) + { + skipZeroPoint = false; + } + else + { + if (firingEvents) FirePointReachedEvent(0); + + currentSectionIndex = currentSpeedPositive ? 0 : lastPointIndex; + + if (checkDelay && CheckDelayAtPoint(math, Cursor, 0, currentSpeedPositive)) return; + } + } + else + { + if (lessThanZero) + { + //original speed was negative + if (skipZeroPoint) + { + skipZeroPoint = false; + } + else + { + currentSectionIndex = 0; + if (firingEvents) FirePointReachedEvent(0); + if (checkDelay && CheckDelayAtPoint(math, Cursor, 0, currentSpeedPositive)) return; + } + } + else + { + //original speed was positive + if (!Curve.Closed) + { + if (currentSpeedPositive) + { + //last->first + currentSectionIndex = 0; + if (firingEvents) FirePointReachedEvent(0); + if (checkDelay && CheckDelayAtPoint(math, Cursor, 0, currentSpeedPositive)) return; + } + else + { + //last->last (pingpong) + currentSectionIndex = lastPointIndex - 1; + } + } + } + } + } + } + + //check if delay is over + private bool CheckIfDelayIsOver(BGCurveBaseMath math, BGCcCursor cursor) + { + var pointsCountMinusOne = Curve.PointsCount - 1; + + if (adjustByTotalLength) oldLength = math.GetDistance(); + + //curve is not closed and delayed at last point + var delayAtLastPoint = !Curve.Closed && currentSectionIndex == pointsCountMinusOne; + + //curve may be changing, so we need to adjust a position anyway + cursor.Distance = delayAtLastPoint ? math.GetDistance() : math[currentSectionIndex].DistanceFromStartToOrigin; + var delayValue = GetDelayAtPoint(currentSectionIndex); + + // we are still delayed + if (!(Time.time - delayStarted > delayValue)) return false; + + + // delay is over, start moving + delayStarted = -1; + if (speedWasPositiveWhileDelayed) + { + // if (delayAtLastPoint) cursor.Distance = 0; + // else cursor.Distance += BGCurve.Epsilon; + cursor.Distance += BGCurve.Epsilon; + } + else + { + if (currentSectionIndex > 0) + { + currentSectionIndex--; + cursor.Distance -= BGCurve.Epsilon; + } + else + { + if (!skipZeroPoint) + { + currentSectionIndex = pointsCountMinusOne; + cursor.Distance = math.GetDistance() - BGCurve.Epsilon; + } + } + } + return true; + } + + //fire "point is reached" event + private void FirePointReachedEvent(int pointIndex) + { + if (PointReached != null) PointReached(this, PointReachedArgs.GetInstance(pointIndex)); + + //probably we could skip pointPassed.GetPersistentEventCount() check + if (pointReachedEvent.GetPersistentEventCount() > 0) pointReachedEvent.Invoke(pointIndex); + } + + //=============================================================================================== + // Unity Persistent event + //=============================================================================================== + /// Fired when cursor reaches a point + [Serializable] + public class PointReachedEvent : UnityEvent + { + } + + //=============================================================================================== + // C# not persistent event + //=============================================================================================== + /// Fired when cursor reaches a point + public class PointReachedArgs : EventArgs + { + private static readonly PointReachedArgs Instance = new PointReachedArgs(); + + //point's index + public int PointIndex { get; private set; } + + private PointReachedArgs() + { + } + + public static PointReachedArgs GetInstance(int index) + { + Instance.PointIndex = index; + return Instance; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs.meta new file mode 100644 index 0000000..adabe67 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorChangeLinear.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 535a3a5d00075854a98f71fdd486b248 +timeCreated: 1472620386 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs new file mode 100644 index 0000000..95d60f7 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs @@ -0,0 +1,387 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// + /// Rotates an object. + /// if no rotation field is defined, object rotation is based on the curve's tangent at current Cursor position. + /// If rotation field is used, 2 rotation values, taken from boundary points, are lerped by current Cursor position. + /// + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcCursorObjectRotate")] + [ + CcDescriptor( + Description = "Align the object's rotation with curve's tangent or 'rotation' field values at the point, the Cursor provides.", + Name = "Rotate Object By Cursor", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectRotate123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcRotateObject")] + [ExecuteInEditMode] + public class BGCcCursorObjectRotate : BGCcWithCursorObject + { + //=============================================================================================== + // Enums + //=============================================================================================== + /// Rotation interpolation between current rotation and target rotation + public enum RotationInterpolationEnum + { + None = 0, + Lerp = 1, + Slerp = 2, + } + + /// Up direction for target rotation. It's used only if rotationField is not assigned. + public enum RotationUpEnum + { + WorldUp = 0, + WorldCustom = 1, + + LocalUp = 2, + LocalCustom = 3, + + TargetParentUp = 4, + TargetParentUpCustom = 5, + } + + //=============================================================================================== + // Events + //=============================================================================================== + + /// object was rotated + public event EventHandler ChangedObjectRotation; + + + //=============================================================================================== + // Fields (persistent) + //=============================================================================================== + + //============================================= Common + [SerializeField] [Tooltip("Rotation interpolation mode.")] private RotationInterpolationEnum rotationInterpolation; + + [SerializeField] [Tooltip("Rotation Lerp rotationSpeed. (Quaternion.Lerp(from,to, lerpSpeed * Time.deltaTime)) ")] private float lerpSpeed = 5; + + [SerializeField] [Tooltip("Rotation Slerp rotationSpeed. (Quaternion.Slerp(from,to, slerpSpeed * Time.deltaTime)) ")] private float slerpSpeed = 5; + + [SerializeField] [Tooltip("Angle to add to final result.")] private Vector3 offsetAngle; + + //============================================= Tangent rotation + [SerializeField] [Tooltip("Up mode for tangent Quaternion.LookRotation. It's used only if rotationField is not assigned." + + "\r\n1) WorldUp - use Vector.up in world coordinates" + + "\r\n2) WorldCustom - use custom Vector in world coordinates" + + "\r\n3) LocalUp - use Vector.up in local coordinates " + + "\r\n4) LocalCustom - use custom Vector in local coordinates" + + "\r\n5) TargetParentUp - use Vector.up in target object parent's local coordinates" + + "\r\n6) TargetParentUpCustom- use custom Vector in target object parent's local coordinates" + )] private RotationUpEnum upMode = RotationUpEnum.WorldUp; + + [SerializeField] [Tooltip("Custom Up vector for tangent Quaternion.LookRotation. It's used only if rotationField is not assigned.")] private Vector3 upCustom = Vector3.up; + + //============================================= By field rotation + [SerializeField] [Tooltip("Field to store the rotation between each point. It should be a Quaternion field.")] private BGCurvePointField rotationField; + + [SerializeField] [Tooltip("Additional 360 degree revolutions around tangent. It's used only if rotationField is assigned. " + + "It can be overriden with 'int' revolutionsAroundTangentField field.")] private int revolutionsAroundTangent; + + [SerializeField] [Tooltip("Field to store additional 360 degree revolutions around tangent for each point. It's used only if rotationField is assigned. " + + "It should be an int field.")] private BGCurvePointField revolutionsAroundTangentField; + + [SerializeField] [Tooltip("By default revolutions around tangent is counter-clockwise. Set it to true to reverse direction. It's used only if rotationField is assigned." + + "It can be overriden with bool field")] private bool revolutionsClockwise; + + [SerializeField] [Tooltip("Field to store direction for revolutions around tangent. It should be an bool field. It's used only if rotationField is assigned.")] private BGCurvePointField + revolutionsClockwiseField; + + + /// Rotation interpolation between current rotation and target rotation + public RotationInterpolationEnum RotationInterpolation + { + get { return rotationInterpolation; } + set { ParamChanged(ref rotationInterpolation, value); } + } + + /// Rotation speed for Lerp rotation interpolation + public float LerpSpeed + { + get { return lerpSpeed; } + set { ParamChanged(ref lerpSpeed, value); } + } + + /// Rotation speed for Slerp rotation interpolation + public float SlerpSpeed + { + get { return slerpSpeed; } + set { ParamChanged(ref slerpSpeed, value); } + } + + /// Custom Up Vector(direction) for target rotaion + public Vector3 UpCustom + { + get { return upCustom; } + set { ParamChanged(ref upCustom, value); } + } + + /// Up mode for tangent rotation. It's used only if rotationField is not assigned. + public RotationUpEnum UpMode + { + get { return upMode; } + set { ParamChanged(ref upMode, value); } + } + + /// Rotation field to get rotation values from. It should be a Quaternion field + public BGCurvePointField RotationField + { + get { return rotationField; } + set { ParamChanged(ref rotationField, value); } + } + + /// Field for a number of full turnovers around tangent. It's used only if rotationField is assigned. It should be an int field + public BGCurvePointField RevolutionsAroundTangentField + { + get { return revolutionsAroundTangentField; } + set { ParamChanged(ref revolutionsAroundTangentField, value); } + } + + /// Number of full turnovers around tangent for each section.It's used only if rotationField is assigned. It can be overriden with RevolutionsAroundTangentField + public int RevolutionsAroundTangent + { + get { return revolutionsAroundTangent; } + set { ParamChanged(ref revolutionsAroundTangent, value); } + } + + /// Field for identifying if RevolutionsAroundTangent should be clockwise or counter clockwise.It's used only if rotationField is assigned. It should be an bool field + public BGCurvePointField RevolutionsClockwiseField + { + get { return revolutionsClockwiseField; } + set { ParamChanged(ref revolutionsClockwiseField, value); } + } + + /// Should RevolutionsAroundTangent be clockwise or counter clockwise. It's used only if rotationField is assigned. It can be overriden by RevolutionsClockwiseField + public bool RevolutionsClockwise + { + get { return revolutionsClockwise; } + set { ParamChanged(ref revolutionsClockwise, value); } + } + + /// offset to apply to final rotation + public Vector3 OffsetAngle + { + get { return offsetAngle; } + set { ParamChanged(ref offsetAngle, value); } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get + { + return ChoseMessage(base.Error, + () => + { + if (!Cursor.Math.IsCalculated(BGCurveBaseMath.Field.Tangent)) + { + if (rotationField == null) return "Math should calculate tangents if rotation field is null."; + + if (RevolutionsAroundTangent != 0 || RevolutionsAroundTangentField != null) return "Math should calculate tangents if revolutions are used."; + } + + return null; + }); + } + } + + public override string Warning + { + get + { + return rotationField == null && (upMode == RotationUpEnum.TargetParentUp || upMode == RotationUpEnum.TargetParentUpCustom) + && ObjectToManipulate != null && ObjectToManipulate.parent == null + ? "Up Mode is set to " + upMode + ", however object's parent is null" + : null; + } + } + + public override bool SupportHandles + { + get { return true; } + } + + public override bool SupportHandlesSettings + { + get { return true; } + } + +#if UNITY_EDITOR + [Range(.5f, 1.5f)] [SerializeField] private float handlesScale = 1; + [SerializeField] private Color handlesColor = Color.white; + + public float HandlesScale + { + get { return handlesScale; } + set { handlesScale = value; } + } + + public Color HandlesColor + { + get { return handlesColor; } + set { handlesColor = value; } + } +#endif + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + //latest successfull rotation that was used + private Quaternion rotation = Quaternion.identity; + + /// latest successfull rotation that was used + public Quaternion Rotation + { + get { return rotation; } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + // Update is called once per frame + private void Update() + { + if (Curve.PointsCount == 0) return; + + var targetTransform = ObjectToManipulate; + if (targetTransform == null) return; + + if (!TryToCalculateRotation(ref rotation)) return; + + targetTransform.rotation = rotation; + + if (ChangedObjectRotation != null) ChangedObjectRotation(this, null); + } + + //=============================================================================================== + // Public Functions + //=============================================================================================== + /// Try to calculate target rotation at current Cursor positon + /// true if result was actually calculated and changed, false if calculation is failed + public bool TryToCalculateRotation(ref Quaternion result) + { + var pointsCount = Curve.PointsCount; + if (pointsCount == 0) return false; + + var cursor = Cursor; + var math = cursor.Math; + + if (rotationField == null) + { + // =============================================== By tangent + if (math == null || !math.IsCalculated(BGCurveBaseMath.Field.Tangent)) return false; + + if (pointsCount == 1) result = Quaternion.identity; + else + { + var tangent = cursor.CalculateTangent(); + if (Vector3.SqrMagnitude(tangent) < 0.01) return false; + + // up vector + Vector3 upwards; + switch (upMode) + { + case RotationUpEnum.WorldUp: + upwards = Vector3.up; + break; + case RotationUpEnum.WorldCustom: + upwards = upCustom; + break; + case RotationUpEnum.LocalUp: + upwards = transform.InverseTransformDirection(Vector3.up); + break; + case RotationUpEnum.LocalCustom: + upwards = transform.InverseTransformDirection(upCustom); + break; + default: + //TargetParentUp or TargetParentUpCustom + var targetTransform = ObjectToManipulate; + if (targetTransform.parent != null) + { + upwards = targetTransform.parent.InverseTransformDirection(upMode == RotationUpEnum.TargetParentUp ? Vector3.up : upCustom); + } + else + { + upwards = upMode == RotationUpEnum.TargetParentUp ? Vector3.up : upCustom; + } + break; + } + result = Quaternion.LookRotation(tangent, upwards); + } + } + else + { + // =============================================== By field + if (pointsCount == 1) result = Curve[0].GetQuaternion(rotationField.FieldName); + else + { + if (revolutionsAroundTangentField == null && revolutionsAroundTangent == 0) result = LerpQuaternion(rotationField.FieldName); //no compications + else + { + // there is possible revolutions involved- we need to check field if it exists + + //we need currentSection only if field is present + var currentSection = revolutionsAroundTangentField != null || revolutionsClockwiseField != null ? cursor.CalculateSectionIndex() : -1; + //rotaion without revolutoins + result = LerpQuaternion(rotationField.FieldName, currentSection); + + //do we have revolutions? + var additionalRevolutions = Mathf.Clamp( + revolutionsAroundTangentField != null + ? Curve[currentSection].GetInt(revolutionsAroundTangentField.FieldName) + : revolutionsAroundTangent + , 0, int.MaxValue); + + if (additionalRevolutions > 0 && math.IsCalculated(BGCurveBaseMath.Field.Tangent)) + { + //additional rotation around tangent is needed + var tangent = cursor.CalculateTangent(); + + if (Vector3.SqrMagnitude(tangent) > 0.01) + { + // targetAngle- target angle at t=1 + var targetAngle = 360*additionalRevolutions; + + //change if Clockwise + if (revolutionsClockwiseField != null ? Curve[currentSection].GetBool(revolutionsClockwiseField.FieldName) : revolutionsClockwise) targetAngle = -targetAngle; + + //calculate t ratio for lerping. 0- at start (from point), 1= at the end (to point) + int indexFrom, indexTo; + var t = GetT(out indexFrom, out indexTo, currentSection); + var angle = Mathf.Lerp(0, targetAngle, t); + + //sum up rotaitons + result = result*Quaternion.AngleAxis(angle, tangent); + } + } + } + } + } + + + // sum up rotations + result *= Quaternion.Euler(offsetAngle); + + // interpolation (rotation speed) + switch (rotationInterpolation) + { + case RotationInterpolationEnum.Lerp: + result = Quaternion.Lerp(ObjectToManipulate.rotation, rotation, lerpSpeed*Time.deltaTime); + break; + case RotationInterpolationEnum.Slerp: + result = Quaternion.Slerp(ObjectToManipulate.rotation, rotation, slerpSpeed*Time.deltaTime); + break; + } + + //success + return true; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs.meta new file mode 100644 index 0000000..8223ffa --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectRotate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23f6c63f13e40be449a87a9114fb11ff +timeCreated: 1471833132 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs new file mode 100644 index 0000000..6ab75a6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs @@ -0,0 +1,74 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Scale an object according to the cursor's position. Scale values are taken from a curve's Vector3 field + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcCursorObjectScale")] + [ + CcDescriptor( + Description = "Scale the object, according to cursor position. Scale values are taken from curve's field values.", + Name = "Scale Object By Cursor", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectScale123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcScaleObject")] + [ExecuteInEditMode] + public class BGCcCursorObjectScale : BGCcWithCursorObject + { + //=============================================================================================== + // Events + //=============================================================================================== + /// object was scaled + public event EventHandler ObjectScaled; + + //=============================================================================================== + // Fields(Persistent) + //=============================================================================================== + + [SerializeField] [Tooltip("Field to store the scale value at points. It should be a Vector3 field.")] private BGCurvePointField scaleField; + + public BGCurvePointField ScaleField + { + get { return scaleField; } + set { ParamChanged(ref scaleField, value); } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get { return ChoseMessage(base.Error, () => scaleField == null ? "Scale field is not defined." : null); } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + + // Update is called once per frame + private void Update() + { + if (ObjectToManipulate == null || scaleField == null) return; + + var pointsCount = Curve.PointsCount; + + switch (pointsCount) + { + case 0: + return; + case 1: + ObjectToManipulate.localScale = Curve[0].GetVector3(scaleField.FieldName); + break; + default: + var result = LerpVector(scaleField.FieldName); + if (float.IsNaN(result.x) || float.IsNaN(result.y) || float.IsNaN(result.z)) return; + + ObjectToManipulate.localScale = result; + + if (ObjectScaled != null) ObjectScaled(this, null); + break; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs.meta new file mode 100644 index 0000000..458366f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectScale.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f7dfbbb5e66f759498113fb337587365 +timeCreated: 1476113428 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs new file mode 100644 index 0000000..0398864 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs @@ -0,0 +1,54 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Components +{ + /// Moves an object to cursor's position + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcCursorObjectTranslate")] + [ + CcDescriptor( + Description = "Translate an object to the position, the cursor provides.", + Name = "Translate Object By Cursor", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcCursorObjectTranslate123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcTranslateObject")] + [ExecuteInEditMode] + public class BGCcCursorObjectTranslate : BGCcWithCursorObject + { + //=============================================================================================== + // Events + //=============================================================================================== + /// object was moved + public event EventHandler ObjectTranslated; + + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + // Update is called once per frame + private void Update() + { + var transformToMove = ObjectToManipulate; + + if (transformToMove == null) return; + + var pointsCount = Curve.PointsCount; + + switch (pointsCount) + { + case 0: + return; + case 1: + transformToMove.position = Curve[0].PositionWorld; + break; + default: + + transformToMove.position = Cursor.CalculatePosition(); + + if (ObjectTranslated != null) ObjectTranslated(this, null); + + break; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs.meta new file mode 100644 index 0000000..b4e0a89 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcCursorObjectTranslate.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d916ef28168e544d9dc5bb790f67ba0 +timeCreated: 1471733597 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs new file mode 100644 index 0000000..e4f71fd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs @@ -0,0 +1,696 @@ +using System; +using System.Collections; +using UnityEngine; +using UnityEngine.Events; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Math solver for the curve. + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcMath")] + [DisallowMultipleComponent] + [ + CcDescriptor( + Description = "Math solver for the curve (position, tangent, total distance, position by closest point). With this component you can use math functions.", + Name = "Math", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcMath123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcMath")] + public class BGCcMath : BGCc, BGCurveMathI + { + //=============================================================================================== + // Static + //=============================================================================================== + // maximum parts for Base math sectionParts parameter + private const int PartsMax = 100; + //reusable empty vertices array + private static readonly Vector3[] EmptyVertices = new Vector3[0]; + + //=============================================================================================== + // Enums + //=============================================================================================== + /// Type of approximation + public enum MathTypeEnum + { + /// Every spline's section will be split to even parts + Base, + + /// Every spline's section will be split to uneven parts, based on the spline's curvature + Adaptive + } + + /// How math should be updated + public enum UpdateModeEnum + { + /// Always update math then spline is changed + Always = 0, + + /// Update math only if Axis Aligned Bounding Box for the spline is visible + AabbVisible = 1, + + /// Update math only if some renderer is visible + RendererVisible = 2, + } + + //=============================================================================================== + // Events (Not persistent) + //=============================================================================================== + + /// if underlying math is recalculated + public event EventHandler ChangedMath; + + + //=============================================================================================== + // Fields (Persistent) + //=============================================================================================== + + //=========================================================== Fields to calculate + [SerializeField] [Tooltip("Which fields you want to use.")] private BGCurveBaseMath.Fields fields = BGCurveBaseMath.Fields.Position; + + + //=========================================================== Math type + [SerializeField] [Tooltip("Math type to use.\r\n" + + "Base - uses uniformely split sections;\r\n " + + "Adaptive - uses non-uniformely split sections, based on the curvature. Expiremental.")] private MathTypeEnum mathType; + + + //=========================================================== Base + + [SerializeField] [Tooltip("The number of equal parts for each section, used by Base math.")] [Range(1, PartsMax)] private int sectionParts = 30; + + [SerializeField] [Tooltip("Use only 2 points for straight lines. Tangents may be calculated slightly different. Used by Base math.")] private bool optimizeStraightLines; + + //=========================================================== Adaptive + [SerializeField] [Tooltip("Tolerance, used by Adaptive Math. The bigger the tolerance- the lesser splits. " + + "Note: The final tolerance used by Math is based on this value but different.")] [Range(BGCurveAdaptiveMath.MinTolerance, BGCurveAdaptiveMath.MaxTolerance)] private + float tolerance = .2f; + + //=========================================================== Common + [SerializeField] [Tooltip("Points position will be used for tangent calculation. This can gain some performance")] private bool usePositionToCalculateTangents; + + + //=========================================================== Update modes + [SerializeField] [Tooltip("Updating math takes some resources. You can fine-tune in which cases math is updated." + + "\r\n1) Always- always update" + + "\r\n2) AabbVisible- update only if AABB (Axis Aligned Bounding Box) around points and controls is visible" + + "\r\n3) RendererVisible- update only if some renderer is visible" + )] private UpdateModeEnum updateMode; + + [SerializeField] [Tooltip("Renderer to check for updating math. Math will be updated only if renderer is visible")] private Renderer rendererForUpdateCheck; + + //=========================================================== Persistent Event + [SerializeField] [Tooltip("Event is fired, then math is recalculated")] private MathChangedEvent mathChangedEvent = new MathChangedEvent(); + + + //--------------------------------------------------------------------------------------------- + + + /// Underlying math type + public MathTypeEnum MathType + { + get { return mathType; } + set { ParamChanged(ref mathType, value); } + } + + //=========================================================== Base + /// How many parts to use for splitting every spline's section for Base Math + public int SectionParts + { + get { return Mathf.Clamp(sectionParts, 1, PartsMax); } + set { ParamChanged(ref sectionParts, Mathf.Clamp(value, 1, PartsMax)); } + } + + /// Should we use 2 points for straight lines or should we split it to sectionParts. Used by Base math. + public bool OptimizeStraightLines + { + get { return optimizeStraightLines; } + set { ParamChanged(ref optimizeStraightLines, value); } + } + + //=========================================================== Adaptive + /// Tolerance parameter for Adaptive math. Note, the final value math uses is based on it but differs + public float Tolerance + { + get { return tolerance; } + set { ParamChanged(ref tolerance, value); } + } + + + //=========================================================== Common + /// Which fields to calculate + public BGCurveBaseMath.Fields Fields + { + get { return fields; } + set { ParamChanged(ref fields, value); } + } + + + public bool UsePositionToCalculateTangents + { + get { return usePositionToCalculateTangents; } + set { ParamChanged(ref usePositionToCalculateTangents, value); } + } + + + public UpdateModeEnum UpdateMode + { + get { return updateMode; } + set { ParamChanged(ref updateMode, value); } + } + + public Renderer RendererForUpdateCheck + { + get { return rendererForUpdateCheck; } + set { ParamChanged(ref rendererForUpdateCheck, value); } + } + + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get + { + return updateMode == UpdateModeEnum.RendererVisible && RendererForUpdateCheck == null + ? "Update mode is set to " + updateMode + ", however the RendererForUpdateCheck is null" + : null; + } + } + + public override string Warning + { + get + { + if (Curve.SnapType == BGCurve.SnapTypeEnum.Curve && Fields == BGCurveBaseMath.Fields.PositionAndTangent && !UsePositionToCalculateTangents) + return "Your curve's snap mode is Curve, and you are calculating tangents. However you use formula for tangents, instead of points positions." + + "This may result in wrong tangents. Set UsePositionToCalculateTangents to true."; + return null; + } + } + + public override string Info + { + get { return Math == null ? null : "Math uses " + Math.PointsCount + " points"; } + } + + public override bool SupportHandles + { + get { return true; } + } + + public override bool SupportHandlesSettings + { + get { return true; } + } + +#if UNITY_EDITOR + [Range(.5f, 1.5f)] [Tooltip("Spheres scale")] [SerializeField] private float spheresScale = 1; + [SerializeField] [Tooltip("Spheres color")] private Color spheresColor = Color.white; + [Range(2, 100)] [Tooltip("Maximum number of spheres. This parameter only affects how much points are shown in the Editor")] [SerializeField] private int spheresCount = 100; + + public float SpheresScale + { + get { return spheresScale; } + set { spheresScale = value; } + } + + public Color SpheresColor + { + get { return spheresColor; } + set { spheresColor = value; } + } + + public int SpheresCount + { + get { return spheresCount; } + set { spheresCount = value; } + } +#endif + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + // underlying math solver. + private BGCurveBaseMath math; + + // visibility checking Component. It uses standard Unity callbacks method to trace attached renderer visibility (AabbVisible and RendererVisible modes) + private VisibilityCheck visibilityCheck; + + // Mesh filter for generated mesh with 2 points for visibility check (AabbVisible mode) + private MeshFilter meshFilter; + // Reusable array for 2 points for visibility check (AabbVisible mode) + private readonly Vector3[] vertices = new Vector3[2]; + + /// Underlying math solver. You should not cache it, unless you are sure, mathType can not be changed at runtime. + public BGCurveBaseMath Math + { + get + { + if (math == null) InitMath(null, null); + return math; + } + } + + //is new math object is required? + private bool NewMathRequired + { + get + { + return math == null + || (mathType == MathTypeEnum.Base && math.GetType() != typeof(BGCurveBaseMath)) + || (mathType == MathTypeEnum.Adaptive && math.GetType() != typeof(BGCurveAdaptiveMath)); + } + } + + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + public override void Start() + { + Curve.Changed += SendEventsIfMathIsNotCreated; + } + + public override void OnDestroy() + { + if (math != null) + { + math.Changed -= MathWasChanged; + math.ChangeRequested -= MathOnChangeRequested; + math.Dispose(); + } + ChangedParams -= InitMath; + } + + //=============================================================================================== + // Public Functions + //=============================================================================================== + + /// By default math is created only if it's required. Call this method to ensure math is created + public void EnsureMathIsCreated() + { +#pragma warning disable 0168 + //ensure math exists + var temp = Math; +#pragma warning restore 0168 + } + + /// Recalculate internal caches. this is a costly operation + /// Ignore all checks and force recalculation at any rate + public void Recalculate(bool force = false) + { + Math.Recalculate(force); + } + + + //================================ Misc + /// Is given field is calculated? + public bool IsCalculated(BGCurveBaseMath.Field field) + { + var math = Math; + return math != null && math.IsCalculated(field); + } + + /// Clamp distance to valid range + public float ClampDistance(float distance) + { + var math = Math; + return distance < 0 ? 0 : (distance > math.GetDistance() ? math.GetDistance() : distance); + } + + + //================================ Total Distance + //see interface for comments + public float GetDistance() + { + return Math.GetDistance(); + } + + + //================================ Calc by ratio + //see interface for comments + public Vector3 CalcByDistanceRatio(BGCurveBaseMath.Field field, float ratio, bool useLocal = false) + { + return Math.CalcByDistanceRatio(field, ratio, useLocal); + } + + //see interface for comments + public Vector3 CalcByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false) + { + return Math.CalcByDistanceRatio(distanceRatio, out tangent, useLocal); + } + + //see interface for comments + public Vector3 CalcPositionByDistanceRatio(float ratio, bool useLocal = false) + { + return Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, ratio, useLocal); + } + + //see interface for comments + public Vector3 CalcTangentByDistanceRatio(float ratio, bool useLocal = false) + { + return Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Tangent, ratio, useLocal); + } + + //see interface for comments + public Vector3 CalcPositionAndTangentByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false) + { + return Math.CalcPositionAndTangentByDistanceRatio(distanceRatio, out tangent, useLocal); + } + + //================================ Calc by distance + //see interface for comments + public Vector3 CalcByDistance(BGCurveBaseMath.Field field, float distance, bool useLocal = false) + { + return Math.CalcByDistance(field, distance, useLocal); + } + + //see interface for comments + public Vector3 CalcByDistance(float distance, out Vector3 tangent, bool useLocal = false) + { + return Math.CalcByDistance(distance, out tangent, useLocal); + } + + //see interface for comments + public Vector3 CalcPositionByDistance(float distance, bool useLocal = false) + { + return Math.CalcByDistance(BGCurveBaseMath.Field.Position, distance, useLocal); + } + + //see interface for comments + public Vector3 CalcTangentByDistance(float distance, bool useLocal = false) + { + return Math.CalcByDistance(BGCurveBaseMath.Field.Tangent, distance, useLocal); + } + + //see interface for comments + public Vector3 CalcPositionAndTangentByDistance(float distance, out Vector3 tangent, bool useLocal = false) + { + return Math.CalcPositionAndTangentByDistance(distance, out tangent, useLocal); + } + + /// Access calculated section's data by index + public BGCurveBaseMath.SectionInfo this[int i] + { + get { return Math[i]; } + } + + + //================================ Calc by closest point + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, out Vector3 tangent, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + return Math.CalcPositionByClosestPoint(point, out distance, out tangent, skipSectionsOptimization, skipPointsOptimization); + } + + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + return Math.CalcPositionByClosestPoint(point, out distance, skipSectionsOptimization, skipPointsOptimization); + } + + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + return Math.CalcPositionByClosestPoint(point, skipSectionsOptimization, skipPointsOptimization); + } + + //================================ Calc section index + //see interface for comments + public int CalcSectionIndexByDistance(float distance) + { + return Math.CalcSectionIndexByDistance(distance); + } + + //see interface for comments + public int CalcSectionIndexByDistanceRatio(float distanceRatio) + { + return Math.CalcSectionIndexByDistanceRatio(distanceRatio); + } + + + //=============================================================================================== + // Private Functions + //=============================================================================================== + //we do not have to create a math implementation until it's needed, but we have to trace spline's changes and fire events + private void SendEventsIfMathIsNotCreated(object sender, BGCurveChangedArgs e) + { + //no more need to trace changes, since math is tracing it by itself + if (math != null) Curve.Changed -= SendEventsIfMathIsNotCreated; + //implementation is not created yet, but we need to fire events to indicate math 'would be' changed if it is created + else MathWasChanged(sender, e); + } + + //init math with current params + private void InitMath(object sender, EventArgs e) + { + //new config + var config = mathType == MathTypeEnum.Adaptive + ? new BGCurveAdaptiveMath.ConfigAdaptive(fields) {Tolerance = tolerance} + : new BGCurveBaseMath.Config(fields) {Parts = sectionParts}; + + config.UsePointPositionsToCalcTangents = usePositionToCalculateTangents; + config.OptimizeStraightLines = optimizeStraightLines; + config.Fields = fields; + + if (updateMode != UpdateModeEnum.Always && Application.isPlaying) + { + switch (updateMode) + { + case UpdateModeEnum.AabbVisible: + InitAabbVisibleBefore(config); + break; + case UpdateModeEnum.RendererVisible: + InitRendererVisible(config); + break; + } + } + + if (NewMathRequired) + { + //we need to create new math object + + var mathWasNull = math == null; + + if (mathWasNull) ChangedParams += InitMath; + else + { + math.ChangeRequested -= MathOnChangeRequested; + math.Changed -= MathWasChanged; + math.Dispose(); + } + + switch (MathType) + { + case MathTypeEnum.Base: + math = new BGCurveBaseMath(Curve, config); + break; + default: + // case MathTypeEnum.Adaptive: + math = new BGCurveAdaptiveMath(Curve, (BGCurveAdaptiveMath.ConfigAdaptive) config); + break; + } + + + math.Changed += MathWasChanged; + + if (!mathWasNull) MathWasChanged(this, null); + } + else + { + //we can reuse existing math object + + math.ChangeRequested -= MathOnChangeRequested; + //reinit math with new params (it will be recalculated as result) + math.Init(config); + } + + //init AABB + if (updateMode == UpdateModeEnum.AabbVisible) InitAabbVisibleAfter(); + } + + //before math was created (or inited) + private void InitAabbVisibleBefore(BGCurveBaseMath.Config config) + { + if (!Application.isPlaying) return; + + if (meshFilter != null) Destroy(meshFilter.gameObject); + + var aabbGameObject = new GameObject("AabbBox"); + aabbGameObject.transform.parent = transform; + var renderer = aabbGameObject.AddComponent(); + meshFilter = aabbGameObject.AddComponent(); + meshFilter.mesh = new Mesh(); + InitVisibilityCheck(config, renderer); + + MathOnChangeRequested(this, null); + } + + //after math was created (or inited) + private void InitAabbVisibleAfter() + { + if (!Application.isPlaying) return; + + math.ChangeRequested += MathOnChangeRequested; + } + + //math received change request (but not changed yet). This callback is called only if updateMode=UpdateModeEnum.AabbVisible + private void MathOnChangeRequested(object sender, EventArgs eventArgs) + { + if (!Application.isPlaying) return; + + // if visibilityCheck is not inited or the mesh is already visible, we dont need to recalculate the mesh + if (visibilityCheck == null || visibilityCheck.Visible) return; + + // here we should construct a mesh with 2 points (min to max), so Unity calls its OnBecameVisible OnBecameInvisible callbacks + // I'm not sure how fast it is, but it (probably) should be faster than calculating it manually without this mesh + var points = Curve.Points; + var mesh = meshFilter.sharedMesh; + + switch (points.Length) + { + case 0: + mesh.vertices = EmptyVertices; + break; + case 1: + vertices[0] = points[0].PositionWorld; + vertices[1] = vertices[0]; + mesh.vertices = vertices; + break; + default: + var matrix = transform.localToWorldMatrix; + var firstPoint = points[0].PositionWorld; + var pointsCount = points.Length; + var lastPointIndex = pointsCount - 1; + var closed = Curve.Closed; + + var min = firstPoint; + var max = firstPoint; + for (var i = 0; i < pointsCount; i++) + { + var point = points[i]; + var posLocal = point.PositionLocal; + var posWorld = matrix.MultiplyPoint(posLocal); + + //copy/pasted for the sake of performance + if (min.x > posWorld.x) min.x = posWorld.x; + if (min.y > posWorld.y) min.y = posWorld.y; + if (min.z > posWorld.z) min.z = posWorld.z; + + if (max.x < posWorld.x) max.x = posWorld.x; + if (max.y < posWorld.y) max.y = posWorld.y; + if (max.z < posWorld.z) max.z = posWorld.z; + + if (point.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + { + if (closed || i != 0) + { + var controlWorld = matrix.MultiplyPoint(point.ControlFirstLocal + posLocal); + + //copy/pasted for the sake of performance + if (min.x > controlWorld.x) min.x = controlWorld.x; + if (min.y > controlWorld.y) min.y = controlWorld.y; + if (min.z > controlWorld.z) min.z = controlWorld.z; + + if (max.x < controlWorld.x) max.x = controlWorld.x; + if (max.y < controlWorld.y) max.y = controlWorld.y; + if (max.z < controlWorld.z) max.z = controlWorld.z; + } + if (closed || i != lastPointIndex) + { + var controlWorld = matrix.MultiplyPoint(point.ControlSecondLocal + posLocal); + + //copy/pasted for the sake of performance + if (min.x > controlWorld.x) min.x = controlWorld.x; + if (min.y > controlWorld.y) min.y = controlWorld.y; + if (min.z > controlWorld.z) min.z = controlWorld.z; + + if (max.x < controlWorld.x) max.x = controlWorld.x; + if (max.y < controlWorld.y) max.y = controlWorld.y; + if (max.z < controlWorld.z) max.z = controlWorld.z; + } + } + } + + vertices[0] = min; + vertices[1] = max; + + mesh.vertices = vertices; + break; + } + } + + + //setup renderer visible option for update mode + private void InitRendererVisible(BGCurveBaseMath.Config config) + { + InitVisibilityCheck(config, RendererForUpdateCheck); + } + + //attach visibility check component to target GameObject (the one, the renderer is attached to) + private void InitVisibilityCheck(BGCurveBaseMath.Config config, Renderer renderer) + { + if (visibilityCheck != null) + { + visibilityCheck.BecameVisible -= BecameVisible; + Destroy(visibilityCheck); + } + + if (renderer == null) return; + + visibilityCheck = renderer.gameObject.AddComponent(); + + visibilityCheck.BecameVisible += BecameVisible; + + config.ShouldUpdate = () => visibilityCheck.Visible; + } + + //became visible callback for use with VisibilityCheck Component + private void BecameVisible(object sender, EventArgs e) + { + math.Configuration.FireUpdate(); + } + + //math was changed callback + private void MathWasChanged(object sender, EventArgs e) + { + if (ChangedMath != null) ChangedMath(this, null); + + if (mathChangedEvent.GetPersistentEventCount() > 0) mathChangedEvent.Invoke(); + } + + //=============================================================================================== + // Private classes + //=============================================================================================== + //it's used for visibility checks + private sealed class VisibilityCheck : MonoBehaviour + { + //Fired when became visible + public event EventHandler BecameVisible; + + /// Is currently visible + public bool Visible { get; private set; } + + //================================== Unity Callbacks + private void OnBecameVisible() + { + Visible = true; + if (BecameVisible != null) BecameVisible(this, null); + } + + private void OnBecameInvisible() + { + Visible = false; + } + } + + //=============================================================================================== + // Unity Persistent Event + //=============================================================================================== + [Serializable] + public class MathChangedEvent : UnityEvent + { + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs.meta new file mode 100644 index 0000000..a94ab97 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b6d20671ad38ded4fa2362df353b9a31 +timeCreated: 1471598370 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs new file mode 100644 index 0000000..afeb610 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs @@ -0,0 +1,567 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// + /// Splits the curve to single line. This class does not change anything except providing point's positions. + /// Subclasses, like BGCcVisualizationLineRenderer or BGCcTriangulate2D uses this data for their own purposes. + /// + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcSplitterPolyline")] + [ + CcDescriptor( + Description = "Calculates points positions for polyline along the curve. It does not change or modify anything. Use Positions field to access points.", + Name = "Splitter Polyline", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcSplitterPolyline123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcSplitterPolyline")] + public class BGCcSplitterPolyline : BGCcWithMath + { + //=============================================================================================== + // Events + //=============================================================================================== + /// ui updated + public event EventHandler ChangedPositions; + + + //=============================================================================================== + // Enums + //=============================================================================================== + /// Split mode + public enum SplitModeEnum + { + /// Math precalculated data is reused + UseMathData = 0, + + /// Use specified number of parts for whole spline + PartsTotal = 1, + + /// Use specified number of parts for each spline's section + PartsPerSection = 2 + } + + //=============================================================================================== + // Fields (Persistent) + //=============================================================================================== + [SerializeField] [Tooltip("How to split the curve. " + + "TotalSections -total sections for whole curve;\r\n " + + "PartSections - each part (between 2 points) will use the same amount of splits;\r\n" + + "UseMathData -use data, precalculated by Math component. " + + "Note, you can tweak some params at Math as well.")] private SplitModeEnum splitMode = SplitModeEnum.UseMathData; + + [SerializeField] [Range(1, 1000)] [Tooltip("Total number of parts to split a curve to. " + + "The actual number of parts can be less than partsTotal due to optimization, but never more.")] private int partsTotal = 30; + + + [SerializeField] [Range(1, 150)] [Tooltip("Every section of the curve will be split on even parts. " + + "The actual number of parts can be less than partsPerSection due to optimization, but never more.")] private int partsPerSection = 30; + + [SerializeField] [Tooltip("Split straight lines. Straight lines are optimized by default and are not split.")] private bool doNotOptimizeStraightLines; + + [SerializeField] [Tooltip("By default positions in world coordinates. Set this parameter to true to use local coordinates. " + + "Local coordinates are calculated slower.")] protected bool useLocal; + + + /// Split mode + public SplitModeEnum SplitMode + { + get { return splitMode; } + set { ParamChanged(ref splitMode, value); } + } + + /// Number of parts for PartsTotal splitMode + public int PartsTotal + { + get { return Mathf.Clamp(partsTotal, 1, 1000); } + //idea.. we may skip updateui if splitmode is not PartsTotal + set { ParamChanged(ref partsTotal, Mathf.Clamp(value, 1, 1000)); } + } + + /// Number of parts for PartsPerSection splitMode + public int PartsPerSection + { + get { return Mathf.Clamp(partsPerSection, 1, 150); } + //idea.. we may skip updateui if splitmode is not PartsPerSection + set { ParamChanged(ref partsPerSection, Mathf.Clamp(value, 1, 150)); } + } + + + /// skip straight lines optimization. Used by Base Math + public bool DoNotOptimizeStraightLines + { + get { return doNotOptimizeStraightLines; } + set { ParamChanged(ref doNotOptimizeStraightLines, value); } + } + + /// Use local coordinates instead of world for positions + public virtual bool UseLocal + { + get { return useLocal; } + set { ParamChanged(ref useLocal, value); } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Warning + { + get + { + var math = Math; + var warning = ""; + + if (math == null) return warning; + + //check math precision + switch (SplitMode) + { + case SplitModeEnum.PartsTotal: + + var curvedSectionsCount = math.Math.SectionsCount - (DoNotOptimizeStraightLines ? 0 : CountStraightLines(Math.Math, null)); + var partsForCurved = curvedSectionsCount == 0 ? 0 : PartsTotal/curvedSectionsCount; + + if (partsForCurved > math.SectionParts) + warning = "Math use less parts per section (" + math.SectionParts + "). You now use " + partsForCurved + + " parts for curved section. You need to increase Math's 'SectionParts' field accordingly to increase polyline precision."; + break; + case SplitModeEnum.PartsPerSection: + + if (PartsPerSection > math.SectionParts) + warning = "Math use less parts per section (" + math.SectionParts + "). You need to increase Math's 'SectionParts' field accordingly to increase polyline precision."; + + break; + } + return warning; + } + } + + public override string Info + { + get { return "Polyline has " + PointsCount + " points"; } + } + + + public override bool SupportHandles + { + get { return true; } + } + + public override bool SupportHandlesSettings + { + get { return true; } + } + +#if UNITY_EDITOR + [Range(.5f, 1.5f)] [Tooltip("Spheres scale")] [SerializeField] private float spheresScale = 1; + [SerializeField] [Tooltip("Spheres color")] private Color spheresColor = Color.white; + [Range(2, 100)] [Tooltip("Maximum number of spheres. This parameter only affects how much points are shown in the Editor")] [SerializeField] private int spheresCount = 100; + + public float SpheresScale + { + get { return spheresScale; } + set { spheresScale = value; } + } + + public Color SpheresColor + { + get { return spheresColor; } + set { spheresColor = value; } + } + + public int SpheresCount + { + get { return spheresCount; } + set { spheresCount = value; } + } +#endif + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + + //do not remove readonly. Reusable positions list, storing last calculated positions + protected readonly List positions = new List(); + //if current data valid? + private bool dataValid; + //reusable array, storing if section is straight. + private bool[] straightBits; + + + //different providers for different modes + private PositionsProvider positionsProvider; + + + /// latest points count. It's not getting updated until it's queried + public int PointsCount + { + get + { + if (!dataValid) UpdateData(); + return positions == null ? 0 : positions.Count; + } + } + + /// latest points positions used. It's not getting updated until it's queried + public List Positions + { + get + { + if (!dataValid) UpdateData(); + return positions; + } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + public override void Start() + { + AddListeners(); + } + + public override void OnDestroy() + { + RemoveListeners(); + } + + //=============================================================================================== + // Public methods + //=============================================================================================== + /// init all listeners for math and it's own params + public void AddListeners() + { + //monitor underlying math changes + Math.ChangedMath -= UpdateRequested; + Math.ChangedMath += UpdateRequested; + + //monitor own params + ChangedParams -= UpdateRequested; + ChangedParams += UpdateRequested; + } + + /// mark data as invalid + public void InvalidateData() + { + dataValid = false; + if (ChangedPositions != null) ChangedPositions(this, null); + } + + /// remove attached listeners + public void RemoveListeners() + { + try + { + Math.ChangedMath -= UpdateRequested; + ChangedParams -= UpdateRequested; + } + catch (MissingReferenceException) + { + } + } + + + //=============================================================================================== + // Private methods + //=============================================================================================== + //refresh data + private void UpdateData() + { + dataValid = true; + + + Transform myTransform; + try + { + myTransform = transform; + } + catch (MissingReferenceException) + { + RemoveListeners(); + return; + } + + + var noData = true; + + //have no idea how to cope with UndoRedo + try + { + noData = Math == null || Math.Math == null || Math.Math.SectionsCount == 0; + } + catch (MissingReferenceException) + { + } + + positions.Clear(); + if (noData) return; + + var baseMath = Math.Math; + var sectionsCount = baseMath.SectionsCount; + + //count number of straight lines + var straightLinesCount = 0; + if (!doNotOptimizeStraightLines) + { + //resize only if length < sectionsCount to reduce GC + if (straightBits == null || straightBits.Length < sectionsCount) Array.Resize(ref straightBits, sectionsCount); + straightLinesCount = CountStraightLines(baseMath, straightBits); + } + + //recalculate points + InitProvider(ref positionsProvider, this).Build(positions, straightLinesCount, straightBits); + + + if (!UseLocal) return; + + //slow convertion (world->local) + var matrix = myTransform.worldToLocalMatrix; + var count = positions.Count; + for (var i = 0; i < count; i++) positions[i] = matrix.MultiplyPoint(positions[i]); + } + + + //curve was updated + protected virtual void UpdateRequested(object sender, EventArgs e) + { + InvalidateData(); + } + + //init required provider. Each mode has it's own provider + private static PositionsProvider InitProvider(ref PositionsProvider positionsProvider, BGCcSplitterPolyline cc) + { + //assign positions provider if needed + var mode = cc.splitMode; + var providerObsolete = positionsProvider == null || !positionsProvider.Comply(mode); + switch (mode) + { + case SplitModeEnum.PartsTotal: + if (providerObsolete) positionsProvider = new PositionsProviderTotalParts(); + ((PositionsProviderTotalParts) positionsProvider).Init(cc.Math, cc.PartsTotal); + break; + case SplitModeEnum.PartsPerSection: + if (providerObsolete) positionsProvider = new PositionsProviderPartsPerSection(); + ((PositionsProviderPartsPerSection) positionsProvider).Init(cc.Math, cc.PartsPerSection); + break; + default: + // case SplitModeEnum.UseMathData: + if (providerObsolete) positionsProvider = new PositionsProviderMath(); + ((PositionsProviderMath) positionsProvider).Init(cc.Math); + break; + } + return positionsProvider; + } + + //count the number of straight lines + public static int CountStraightLines(BGCurveBaseMath math, bool[] straight) + { + var curve = math.Curve; + var points = curve.Points; + if (points.Length == 0) return 0; + + var sections = math.SectionInfos; + var sectionsCount = sections.Count; + var fillArray = straight != null; + + var straightLinesCount = 0; + var previousControlAbsent = points[0].ControlType == BGCurvePoint.ControlTypeEnum.Absent; + for (var i = 0; i < sectionsCount; i++) + { + var nextPoint = curve.Closed && i == sectionsCount - 1 ? points[0] : points[i + 1]; + var nextControlAbsent = nextPoint.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + + if (previousControlAbsent && nextControlAbsent) + { + if (fillArray) straight[i] = true; + straightLinesCount++; + } + else if (fillArray) straight[i] = false; + + previousControlAbsent = nextControlAbsent; + } + return straightLinesCount; + } + + + //=============================================================================================== + // Helper classes + //=============================================================================================== + + //============================================= Abstract provider + /// Abstract provider + public abstract class PositionsProvider + { + //used math + protected BGCcMath Math; + + protected virtual void InitInner(BGCcMath math) + { + Math = math; + } + + /// if this provider can build points for the given mode + public abstract bool Comply(SplitModeEnum splitMode); + + /// calculate points fro polyline + public virtual void Build(List positions, int straightLinesCount, bool[] straightBits) + { + var math = Math.Math; + + var sections = math.SectionInfos; + var sectionsCount = sections.Count; + + + //first point always present + positions.Add(math[0][0].Position); + + //fill in points + if (straightLinesCount == 0) for (var i = 0; i < sectionsCount; i++) FillInSplitSection(sections[i], positions); + else + { + for (var i = 0; i < sectionsCount; i++) + { + var section = sections[i]; + + if (straightBits[i]) positions.Add(section[section.PointsCount - 1].Position); + else FillInSplitSection(section, positions); + } + } + } + + // add points for a section by a given number of points + protected static void FillIn(BGCurveBaseMath.SectionInfo section, List result, int parts) + { + var onePartDistance = section.Distance/parts; + for (var j = 1; j <= parts; j++) + { + Vector3 tangent; + Vector3 pos; + section.CalcByDistance(onePartDistance*j, out pos, out tangent, true, false); + result.Add(pos); + } + } + + // add points for a split section + protected abstract void FillInSplitSection(BGCurveBaseMath.SectionInfo section, List result); + } + + //============================================= Provider for total parts mode + /// Provider for total parts mode + public sealed class PositionsProviderTotalParts : PositionsProvider + { + private int parts; + private int reminderForCurved; + private int partsPerSectionFloor; + + + public void Init(BGCcMath math, int parts) + { + InitInner(math); + + this.parts = parts; + } + + public override bool Comply(SplitModeEnum splitMode) + { + return splitMode == SplitModeEnum.PartsTotal; + } + + public override void Build(List positions, int straightLinesCount, bool[] straightBits) + { + var curve = Math.Curve; + var sections = Math.Math.SectionInfos; + var sectionsCount = sections.Count; + + //at least one section is curved (maxParts>=sectionsCount, so floatParts >=1) + var floatParts = (parts - straightLinesCount)/(float) (sectionsCount - straightLinesCount); + + reminderForCurved = (int) ((parts - straightLinesCount)%(float) (sectionsCount - straightLinesCount)); + partsPerSectionFloor = Mathf.FloorToInt(floatParts); + + + if (parts < sectionsCount) + { + if (parts == 1) + { + //only one part per whole curve (one->last) + positions.Add(sections[0][0].Position); + positions.Add(curve.Closed ? Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, .5f) : sections[sectionsCount - 1][sections[sectionsCount - 1].PointsCount - 1].Position); + } + else if (parts == 2 && curve.Closed) + { + positions.Add(sections[0][0].Position); + positions.Add(Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, .3333f)); + positions.Add(Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, .6667f)); + } + else for (var i = 0; i <= parts; i++) positions.Add(Math.CalcByDistanceRatio(BGCurveBaseMath.Field.Position, i/(float) parts)); + } + else base.Build(positions, straightLinesCount, straightBits); + } + + // add points for a split section + protected override void FillInSplitSection(BGCurveBaseMath.SectionInfo section, List result) + { + //curved + var partsForSection = partsPerSectionFloor; + if (reminderForCurved > 0) + { + partsForSection++; + reminderForCurved--; + } + + FillIn(section, result, partsForSection); + } + } + + //============================================= Provider for parts per section mode + + /// Provider for parts per section mode + public sealed class PositionsProviderPartsPerSection : PositionsProvider + { + private int parts; + + public void Init(BGCcMath math, int partsPerSection) + { + InitInner(math); + parts = partsPerSection; + } + + public override bool Comply(SplitModeEnum splitMode) + { + return splitMode == SplitModeEnum.PartsPerSection; + } + + // add points for a split section + protected override void FillInSplitSection(BGCurveBaseMath.SectionInfo section, List result) + { + FillIn(section, result, parts); + } + } + + //============================================= Provider for useMath mode + + /// Provider for useMath mode + public sealed class PositionsProviderMath : PositionsProvider + { + public void Init(BGCcMath ccMath) + { + InitInner(ccMath); + } + + public override bool Comply(SplitModeEnum splitMode) + { + return splitMode == SplitModeEnum.UseMathData; + } + + // add points for a split section + protected override void FillInSplitSection(BGCurveBaseMath.SectionInfo section, List result) + { + var sectionPoints = section.Points; + var count = sectionPoints.Count; + + for (var j = 1; j < count; j++) result.Add(sectionPoints[j].Position); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs.meta new file mode 100644 index 0000000..b8d137e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcSplitterPolyline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 62cd433e62a5ee04c956c0f388f66df1 +timeCreated: 1474931604 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs new file mode 100644 index 0000000..cd7e82c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs @@ -0,0 +1,404 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Triangulate 2D spline. Currently only simple polygons are supported + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcTriangulate2D")] + [DisallowMultipleComponent] + [ + CcDescriptor( + Description = "Triangulate 2D spline. Currently only simple polygons are supported.", + Name = "Triangulate 2D", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcTriangulate2D123.png") + ] + [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcTriangulate2D")] + [ExecuteInEditMode] + public class BGCcTriangulate2D : BGCcSplitterPolyline + { + //=============================================================================================== + // Static + //=============================================================================================== + //min scale for UV + private const float MinUvScale = 0.000001f; + //max scale for UV + private const float MaxUvScale = 1000000; + + //temp List to avoid GC (it's used by traingulation algorithm) + private static readonly List V = new List(); + + //=============================================================================================== + // Fields (Persistent) + //=============================================================================================== + + [SerializeField] [Tooltip("UV scale")] private Vector2 scaleUV = new Vector2(1, 1); + [SerializeField] [Tooltip("UV offset")] private Vector2 offsetUV = new Vector2(0, 0); + [SerializeField] [Tooltip("Flip triangles")] private bool flip; + [SerializeField] [Tooltip("Double sided")] private bool doubleSided; + [SerializeField] [Tooltip("UV scale for back side")] private Vector2 scaleBackUV = new Vector2(1, 1); + [SerializeField] [Tooltip("UV offset for back side")] private Vector2 offsetBackUV = new Vector2(0, 0); + [SerializeField] [Tooltip("Update mesh every frame, even if curve's not changed. This can be useful, if UVs are animated.")] private bool updateEveryFrame; + + + //the number of frame, last triangulation was build + private int updateAtFrame; + + //keeps track about running Coroutine for every frame update + private bool everyFrameUpdateIsRunning; + + /// Scale all UV values + public Vector2 ScaleUv + { + get { return scaleUV; } + set + { + if (Mathf.Abs(scaleUV.x - value.x) < BGCurve.Epsilon && Mathf.Abs(scaleUV.y - value.y) < BGCurve.Epsilon) return; + ParamChanged(ref scaleUV, value); + } + } + + /// Should faces be flipped + public bool Flip + { + get { return flip; } + set + { + if (flip == value) return; + ParamChanged(ref flip, value); + } + } + + /// Generate triangles for backside + public bool DoubleSided + { + get { return doubleSided; } + set { ParamChanged(ref doubleSided, value); } + } + + /// Should triangulation occur every frame even if curve is not changed + public bool UpdateEveryFrame + { + get { return updateEveryFrame; } + set + { + if (updateEveryFrame == value) return; + updateEveryFrame = value; + ParamChanged(ref updateEveryFrame, value); + + if (updateEveryFrame && !everyFrameUpdateIsRunning && gameObject.activeSelf && Application.isPlaying) StartCoroutine(UiUpdater()); + } + } + + // override parent UseLocal to be always true. I doubt, there is any way to use world's coordinates for meshes (like local for LineRenderer) + public override bool UseLocal + { + get { return true; } + set { } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + + public override string Error + { + get { return !Curve.Mode2DOn ? "Curve should be in 2D mode" : null; } + } + + public override string Info + { + get { return "Mesh uses " + vertices.Count + " vertices and " + (triangles.Count / 3) + " triangles."; } + } + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + + [NonSerialized] private MeshFilter meshFilter; + [NonSerialized] private readonly List vertices = new List(); + [NonSerialized] private readonly List points = new List(); + [NonSerialized] private readonly List uvs = new List(); + [NonSerialized] private readonly List triangles = new List(); + + + + public MeshFilter MeshFilter + { + get + { + //do not replace with ?? + if (meshFilter == null) meshFilter = GetComponent(); + return meshFilter; + } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + + public override void Start() + { + base.Start(); + if (MeshFilter.sharedMesh == null) UpdateUI(); + + if (updateEveryFrame && gameObject.activeSelf && Application.isPlaying) StartCoroutine(UiUpdater()); + } + + void OnEnable() + { + if (updateEveryFrame && !everyFrameUpdateIsRunning && Application.isPlaying) StartCoroutine(UiUpdater()); + } + + void OnDisable() + { + if (updateEveryFrame && everyFrameUpdateIsRunning && Application.isPlaying) everyFrameUpdateIsRunning = false; + } + + //=============================================================================================== + // Public Functions + //=============================================================================================== + public void UpdateUI() + { + updateAtFrame = Time.frameCount; + + if (!Curve.Mode2DOn) return; + + var mode2D = Curve.Mode2D; + + var positions = Positions; + + var positionsCount = positions.Count; + //I dont know why, but triangulator works wrong in case first pos= last pos + if (Curve.Closed) positionsCount--; + + MeshFilter meshFilter; + try + { + meshFilter = MeshFilter; + } + catch (MissingReferenceException) + { + RemoveListeners(); + return; + } + var mesh = meshFilter.sharedMesh; + if (mesh == null) + { + mesh = new Mesh(); + meshFilter.mesh = mesh; + } + + vertices.Clear(); + triangles.Clear(); + uvs.Clear(); + if (positionsCount > 2) + { + //we need to triangulate + points.Clear(); + var minMax = new Vector4(float.MaxValue, float.MaxValue, float.MinValue, float.MinValue); + for (var i = 0; i < positionsCount; i++) + { + var pos = positions[i]; + + Vector3 vert; + Vector2 point; + switch (mode2D) + { + case BGCurve.Mode2DEnum.XY: + vert = new Vector3(pos.x, pos.y); + point = new Vector2(pos.x, pos.y); + break; + case BGCurve.Mode2DEnum.XZ: + vert = new Vector3(pos.x, 0, pos.z); + point = new Vector2(pos.x, pos.z); + break; + default: + // case BGCurve.Mode2DEnum.YZ: + vert = new Vector3(0, pos.y, pos.z); + point = new Vector2(pos.y, pos.z); + break; + } + vertices.Add(vert); + points.Add(point); + + //min + if (point.x < minMax.x) minMax.x = point.x; + if (point.y < minMax.y) minMax.y = point.y; + //max + if (point.x > minMax.z) minMax.z = point.x; + if (point.y > minMax.w) minMax.w = point.y; + } + + //tris + Triangulate(points, triangles); + if (!flip) triangles.Reverse(); + + //uvs + var width = minMax.z - minMax.x; + var height = minMax.w - minMax.y; + var pointsCount = points.Count; + var scaleX = Mathf.Clamp(scaleUV.x, MinUvScale, MaxUvScale); + var scaleY = Mathf.Clamp(scaleUV.y, MinUvScale, MaxUvScale); + for (var i = 0; i < pointsCount; i++) + { + var point = points[i]; + uvs.Add(new Vector2(offsetUV.x + ((point.x - minMax.x) / width) * scaleX, offsetUV.y + ((point.y - minMax.y) / height) * scaleY)); + } + + // doubleSided + if (doubleSided) + { + //add points, we can not reuse the same points, cause we need unique UVs + var verticesCount = vertices.Count; + for (var i = 0; i < verticesCount; i++) vertices.Add(vertices[i]); + + //add triangles + var trianglesCount = triangles.Count; + for (var i = trianglesCount - 1; i >= 0; i--) triangles.Add(triangles[i] + verticesCount); + + //uvs + scaleX = Mathf.Clamp(scaleBackUV.x, MinUvScale, MaxUvScale); + scaleY = Mathf.Clamp(scaleBackUV.y, MinUvScale, MaxUvScale); + for (var i = 0; i < pointsCount; i++) + { + var point = points[i]; + uvs.Add(new Vector2(offsetBackUV.x + ((point.x - minMax.x) / width) * scaleX, offsetBackUV.y + ((point.y - minMax.y) / height) * scaleY)); + } + } + } + + mesh.Clear(); + mesh.SetVertices(vertices); + mesh.SetTriangles(triangles, 0); + mesh.SetUVs(0, uvs); + mesh.RecalculateNormals(); + } + + //=============================================================================================== + // Private Functions + //=============================================================================================== + // curve's changed + protected override void UpdateRequested(object sender, EventArgs e) + { + base.UpdateRequested(sender, e); + UpdateUI(); + } + + private IEnumerator UiUpdater() + { + everyFrameUpdateIsRunning = true; + while (updateEveryFrame) + { + if (updateAtFrame != Time.frameCount) UpdateUI(); + yield return null; + } + + everyFrameUpdateIsRunning = false; + } + + + //==================================== This code from http://wiki.unity3d.com/index.php?title=Triangulator + // Triangulate simple polygon. I have no idea how good this algorithm is and what it's actually doing + private static void Triangulate(List points, List tris) + { + tris.Clear(); + + int n = points.Count; + if (n < 3) return; + + V.Clear(); + + if (Area(points) > 0) for (int v = 0; v < n; v++) V.Add(v); + else for (int v = 0; v < n; v++) V.Add((n - 1) - v); + + int nv = n; + int count = 2*nv; + for (int m = 0, v = nv - 1; nv > 2;) + { + if ((count--) <= 0) return; + + int u = v; + if (nv <= u) u = 0; + + v = u + 1; + + if (nv <= v) v = 0; + int w = v + 1; + if (nv <= w) w = 0; + + if (Snip(points, u, v, w, nv, V)) + { + int a, b, c, s, t; + a = V[u]; + b = V[v]; + c = V[w]; + tris.Add(a); + tris.Add(b); + tris.Add(c); + m++; + for (s = v, t = v + 1; t < nv; s++, t++) V[s] = V[t]; + nv--; + count = 2*nv; + } + } + } + + private static float Area(List points) + { + int n = points.Count; + float A = 0.0f; + for (int p = n - 1, q = 0; q < n; p = q++) + { + Vector2 pval = points[p]; + Vector2 qval = points[q]; + A += pval.x*qval.y - qval.x*pval.y; + } + return (A*0.5f); + } + + private static bool Snip(List points, int u, int v, int w, int n, List V) + { + int p; + Vector2 A = points[V[u]]; + Vector2 B = points[V[v]]; + Vector2 C = points[V[w]]; + if (Mathf.Epsilon > (((B.x - A.x)*(C.y - A.y)) - ((B.y - A.y)*(C.x - A.x)))) return false; + for (p = 0; p < n; p++) + { + if ((p == u) || (p == v) || (p == w)) continue; + Vector2 P = points[V[p]]; + if (InsideTriangle(A, B, C, P)) return false; + } + return true; + } + + private static bool InsideTriangle(Vector2 A, Vector2 B, Vector2 C, Vector2 P) + { + float ax, ay, bx, by, cx, cy, apx, apy, bpx, bpy, cpx, cpy; + float cCROSSap, bCROSScp, aCROSSbp; + + ax = C.x - B.x; + ay = C.y - B.y; + bx = A.x - C.x; + by = A.y - C.y; + cx = B.x - A.x; + cy = B.y - A.y; + apx = P.x - A.x; + apy = P.y - A.y; + bpx = P.x - B.x; + bpy = P.y - B.y; + cpx = P.x - C.x; + cpy = P.y - C.y; + + aCROSSbp = ax*bpy - ay*bpx; + cCROSSap = cx*apy - cy*apx; + bCROSScp = bx*cpy - by*cpx; + + return ((aCROSSbp >= 0.0f) && (bCROSScp >= 0.0f) && (cCROSSap >= 0.0f)); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs.meta new file mode 100644 index 0000000..869f0cc --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcTriangulate2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 60c959525d457be479e941b787ed7a5d +timeCreated: 1476469986 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs new file mode 100644 index 0000000..b469c3f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs @@ -0,0 +1,200 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Components +{ + /// + /// Visualize curve in Play mode with standard LineRenderer Component. + /// This component updates LineRenderer vertex count & positions only + /// + [HelpURL("http://www.bansheegz.com/BGCurve/Cc/BGCcVisualizationLineRenderer")] + [RequireComponent(typeof(LineRenderer))] + [DisallowMultipleComponent] + [ + CcDescriptor( + Description = "Visualize curve with standard LineRenderer Unity component.", + Name = "Cc Line Renderer", + Image = "Assets/BansheeGz/BGCurve/Icons/Components/BGCcVisualizationLineRenderer123.png") + ] + [AddComponentMenu("BansheeGz/BGCurve/Components/BGCcLineRenderer")] + public class BGCcVisualizationLineRenderer : BGCcSplitterPolyline + { + //=============================================================================================== + // Events + //=============================================================================================== + /// ui updated + public event EventHandler ChangedVisualization; + + //=============================================================================================== + // Fields (Persistent) + //=============================================================================================== + [SerializeField] [Tooltip("Update LineRenderer at Start method.")] private bool updateAtStart; + + /// If LineRenderer should be updated then Start is called + public bool UpdateAtStart + { + get { return updateAtStart; } + set { updateAtStart = value; } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get { return ChoseMessage(base.Error, () => (LineRenderer == null) ? "LineRenderer is null" : null); } + } + + public override string Warning + { + get + { + var warning = base.Warning; + + var lineRenderer = LineRenderer; + if (lineRenderer == null) return warning; + + if (!lineRenderer.useWorldSpace) + warning += "\r\nLineRenderer uses local space (LineRenderer.useWorldSpace=false)! " + + "This is not optimal, especially if you plan to update a curve at runtime. Try to set LineRenderer.useWorldSpace to true"; + + return warning.Length == 0 ? null : warning; + } + } + + public override string Info + { + get { return lineRenderer != null ? "LineRenderer uses " + PointsCount + " points" : "LineRenderer is null"; } + } + + public override bool SupportHandles + { + get { return false; } + } + + + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + //linerenderer cached + private LineRenderer lineRenderer; + + /// Get Unity's LineRenderer component + public LineRenderer LineRenderer + { + get + { + //do not replace with ?? + if (lineRenderer == null) lineRenderer = GetComponent(); + return lineRenderer; + } + } + + //=============================================================================================== + // Unity Callbacks + //=============================================================================================== + // Use this for initialization + public override void Start() + { + base.Start(); + + if (updateAtStart) UpdateUI(); + else Math.EnsureMathIsCreated(); + } + + //=============================================================================================== + // Public functions + //=============================================================================================== + //see parent for comments + public override void AddedInEditor() + { + UpdateUI(); + } + + /// Update underlying Unity's LineRenderer component + public void UpdateUI() + { + try + { + //have no idea how to cope with UndoRedo + if (Math == null) return; + } + catch (MissingReferenceException) + { + return; + } + var math = Math.Math; + + if (math == null) return; + + LineRenderer lineRenderer; + try + { + //have no idea how to cope with UndoRedo + lineRenderer = LineRenderer; + } + catch (MissingReferenceException) + { + return; + } + + if (lineRenderer == null) return; + + var curve = Curve; + + if (curve == null) return; + + + if (math.SectionsCount == 0) + { + //not enough points +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = 0; +#else + lineRenderer.SetVertexCount(0); +#endif + + if (positions != null && positions.Count > 0 && ChangedVisualization != null) ChangedVisualization(this, null); + positions.Clear(); + } + else + { + //============== ok + useLocal = !lineRenderer.useWorldSpace; + var newPositions = Positions; + + //update LineRenderer + var count = newPositions.Count; + if (count > 0) + { +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = count; +#else + lineRenderer.SetVertexCount(count); +#endif + //the only way to get rid of GC is to use slow one-by-one setter unfortunately + for (var i = 0; i < count; i++) lineRenderer.SetPosition(i, newPositions[i]); + } + else + { +#if UNITY_5_5 || UNITY_5_6 + lineRenderer.numPositions = 0; +#else + lineRenderer.SetVertexCount(0); +#endif + } + if (ChangedVisualization != null) ChangedVisualization(this, null); + } + } + + //=============================================================================================== + // Private functions + //=============================================================================================== + //math/curve is changed + protected override void UpdateRequested(object sender, EventArgs e) + { + base.UpdateRequested(sender, e); + UpdateUI(); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs.meta new file mode 100644 index 0000000..32699a3 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcVisualizationLineRenderer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8a69af748a081a14dbc7aa333bece5af +timeCreated: 1471596363 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs new file mode 100644 index 0000000..da2d667 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs @@ -0,0 +1,97 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// CC + cursor + [RequireComponent(typeof (BGCcCursor))] + public abstract class BGCcWithCursor : BGCc + { + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + //cursor Cc component + private BGCcCursor cursor; + + public BGCcCursor Cursor + { + get + { + //do not replace with ?? + if (cursor == null) cursor = GetParent(); + return cursor; + } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + + public override string Error + { + get { return Cursor == null ? "Cursor is null" : null; } + } + + + //=============================================================================================== + // Public methods + //=============================================================================================== + /// Lerp 2 Quaternion field values by current cursor position (optionally currentSection is provided to reduce required calculation) + public Quaternion LerpQuaternion(string fieldName, int currentSection = -1) + { + int indexFrom, indexTo; + var t = GetT(out indexFrom, out indexTo, currentSection); + + //get values + var from = Curve[indexFrom].GetQuaternion(fieldName); + var to = Curve[indexTo].GetQuaternion(fieldName); + + //not sure how to handle zero cases + if (from.x == 0 && from.y == 0 && from.z == 0 && from.w == 0) from = Quaternion.identity; + if (to.x == 0 && to.y == 0 && to.z == 0 && to.w == 0) to = Quaternion.identity; + + //lerp + var result = Quaternion.Lerp(@from, to, t); + return float.IsNaN(result.x) || float.IsNaN(result.y) || float.IsNaN(result.z) || float.IsNaN(result.w) ? Quaternion.identity : result; + } + + /// Lerp 2 Vector3 field values by current cursor position (optionally currentSection is provided to reduce required calculation) + public Vector3 LerpVector(string name, int currentSection = -1) + { + int indexFrom, indexTo; + var t = GetT(out indexFrom, out indexTo, currentSection); + + //get values + var from = Curve[indexFrom].GetVector3(name); + var to = Curve[indexTo].GetVector3(name); + + //lerp + return Vector3.Lerp(@from, to, t); + } + + /// get T value for interpolation (optionally currentSection is provided to reduce required calculation) + public float GetT(out int indexFrom, out int indexTo, int currentSection = -1) + { + var math = Cursor.Math.Math; + var distance = Cursor.Distance; + + GetFromToIndexes(out indexFrom, out indexTo, currentSection); + + //get t value + var section = math[indexFrom]; + var t = (distance - section.DistanceFromStartToOrigin)/section.Distance; + + return t; + } + + //=============================================================================================== + // Private methods + //=============================================================================================== + // get points indexes by cursor position (optionally currentSection is provided to reduce required calculation) + protected void GetFromToIndexes(out int indexFrom, out int indexTo, int currentSection = -1) + { + indexFrom = currentSection < 0 ? Cursor.CalculateSectionIndex() : currentSection; + indexTo = indexFrom == Curve.PointsCount - 1 ? 0 : indexFrom + 1; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs.meta new file mode 100644 index 0000000..e5a2a3d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b76de9a8934b6214a8672a403d2252ca +timeCreated: 1472620770 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs new file mode 100644 index 0000000..60ae08f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs @@ -0,0 +1,33 @@ +using UnityEngine; + +namespace BansheeGz.BGSpline.Components +{ + /// CC + cursor + object to manipulate + public abstract class BGCcWithCursorObject : BGCcWithCursor + { + //=============================================================================================== + // Static + //=============================================================================================== + //error message to use (probably can be inlined without any effect) + private const string ErrorObjectNotSet = "Object To Manipulate is not set."; + + //=============================================================================================== + // Fields (Persistent) + //=============================================================================================== + [SerializeField] [Tooltip("Object to manipulate.\r\n")] private Transform objectToManipulate; + + public Transform ObjectToManipulate + { + get { return objectToManipulate; } + set { ParamChanged(ref objectToManipulate, value); } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get { return objectToManipulate == null ? ErrorObjectNotSet : null; } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs.meta new file mode 100644 index 0000000..d639fd8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithCursorObject.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 12c8a5c3f07ca5c45b3361e5f8482f54 +timeCreated: 1471738385 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs new file mode 100644 index 0000000..147a7bc --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs @@ -0,0 +1,33 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Components +{ + /// Cc + math + [RequireComponent(typeof (BGCcMath))] + public abstract class BGCcWithMath : BGCc + { + //=============================================================================================== + // Fields (Not persistent) + //=============================================================================================== + private BGCcMath math; + + public BGCcMath Math + { + get + { + //do not replace with ?? + if (math == null) math = GetComponent(); + return math; + } + } + + //=============================================================================================== + // Editor stuff + //=============================================================================================== + public override string Error + { + get { return Math == null ? "Math is null" : null; } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs.meta new file mode 100644 index 0000000..2cf7a5b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Cc/BGCcWithMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ea6e5d4a7e5fc4949b54bdf635d14073 +timeCreated: 1471733928 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve.meta new file mode 100644 index 0000000..479f49b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d243b7f5d60cbc64185d2dbbfaa3021b +folderAsset: yes +timeCreated: 1458400564 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs new file mode 100644 index 0000000..bdac355 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs @@ -0,0 +1,287 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// Abstract superclass for components. + /// + /// Current Requirements: + /// 1) editor should be extended from BGCcEditor + /// 2) Should have a descriptor. + /// 3) Only one RequireComponent of type BGCc (parent). Parent is another Cc component, this component is totally depends on and can not operate without it. + /// + /// Cc stands for "Curve's component" + /// + [RequireComponent(typeof (BGCurve))] + public abstract class BGCc : MonoBehaviour + { + /// if component's parameters changed + public event EventHandler ChangedParams; + + /// Any information Cc wants to provide (for editor) + public virtual string Info + { + get { return null; } + } + + /// Warning (for editor) + public virtual string Warning + { + get { return null; } + } + + /// Error if something is wrong (for editor) + public virtual string Error + { + get { return null; } + } + + +#if UNITY_EDITOR + // ============================================== !!! This is editor only field +#pragma warning disable 0414 + //should CC's handles be shown in SceneView + [SerializeField] private bool showHandles = true; +#pragma warning restore 0414 +#endif + + /// Does this Cc supports handles in SceneView? + public virtual bool SupportHandles + { + get { return false; } + } + + /// Does this Cc supports some adjustable settings for handles in SceneView? + public virtual bool SupportHandlesSettings + { + get { return false; } + } + + //=============================================== Curve + private BGCurve curve; + + public BGCurve Curve + { + get + { + //do not replace with ?? + if (curve == null) curve = GetComponent(); + return curve; + } + } + + + //=============================================== Parent + //parent is another Cc component, this component is totally depends on and can not operate without it + [SerializeField] private BGCc parent; + + public void SetParent(BGCc parent) + { + this.parent = parent; + } + + public T GetParent() where T : BGCc + { + return (T) GetParent(typeof (T)); + } + + public BGCc GetParent(Type type) + { + if (parent != null) return parent; + parent = (BGCc) GetComponent(type); + return parent; + } + + + //=============================================== Name + //you can name your Cc + [SerializeField] private string ccName; + + public string CcName + { + get { return string.IsNullOrEmpty(ccName) ? "" + GetInstanceID() : ccName; } + set { ccName = value; } + } + + //=============================================== Transaction + //transaction is for events grouping only + private int transactionLevel; + + //=============================================== Descriptor + //descriptor is used to add icon, name and description to Cc + private CcDescriptor descriptor; + + + public CcDescriptor Descriptor + { + get + { + //do not replace with ?? + if (descriptor == null) descriptor = GetDescriptor(GetType()); + return descriptor; + } + } + + // www page, containing help info + public virtual string HelpURL + { + get + { + var helpUrl = GetHelpUrl(GetType()); + return helpUrl == null ? null : helpUrl.URL; + } + } + + //=================================================== Unity Methods + public virtual void Start() + { + } + + public virtual void OnDestroy() + { + } + + //=================================================== Methods + //in case any param changed + protected bool ParamChanged(ref T oldValue, T newValue) + { + var oldValueNull = oldValue == null; + var newValueNull = newValue == null; + if (oldValueNull && newValueNull) return false; + + if (oldValueNull == newValueNull && oldValue.Equals(newValue)) return false; + + oldValue = newValue; + FireChangedParams(); + return true; + } + + + /// if component has an error + public bool HasError() + { + return !string.IsNullOrEmpty(Error); + } + + /// if component has a warning + public bool HasWarning() + { + return !string.IsNullOrEmpty(Warning); + } + + //utility method for chosing error message + protected string ChoseMessage(string baseError, Func childError) + { + return !string.IsNullOrEmpty(baseError) ? baseError : childError(); + } + + /// if any parameter changed + public void FireChangedParams() + { + if (ChangedParams != null && transactionLevel == 0) ChangedParams(this, null); + } + + /// component was added via editor menu + public virtual void AddedInEditor() + { + } + + /// get parent Cc class + public Type GetParentClass() + { + return GetParentClass(GetType()); + } + + /// get parent Cc class + public static Type GetParentClass(Type ccType) + { + //gather required + var requiredList = BGReflectionAdapter.GetCustomAttributes(ccType, typeof (RequireComponent), true); + if (requiredList.Length == 0) return null; + + var result = new List(); + foreach (var item in requiredList) + { + var requiredComponent = (RequireComponent) item; + CheckRequired(requiredComponent.m_Type0, result); + CheckRequired(requiredComponent.m_Type1, result); + CheckRequired(requiredComponent.m_Type2, result); + } + + if (result.Count == 0) return null; + if (result.Count > 1) throw new CcException(ccType + " has more than one parent (extended from BGCc class), calculated by RequireComponent attribute"); + return result[0]; + } + + //add class if it's not abstract and a child of BGCc + private static void CheckRequired(Type type, List result) + { + if (type == null || BGReflectionAdapter.IsAbstract(type) || !BGReflectionAdapter.IsClass(type) || !BGReflectionAdapter.IsSubclassOf(type,typeof (BGCc)))return; + + result.Add(type); + } + + /// Check standard Unity's DisallowMultipleComponent attribute + public static bool IsSingle(Type ccType) + { + return BGReflectionAdapter.GetCustomAttributes(ccType, typeof(DisallowMultipleComponent), true).Length > 0; + } + + /// This is used to group events. Use it to change several params and fire one single event + public void Transaction(Action action) + { + transactionLevel++; + try + { + action(); + } + finally + { + transactionLevel--; + if (transactionLevel == 0) + { + if (ChangedParams != null) ChangedParams(this, null); + } + } + } + + //======================== descriptor for Editor + /// this descriptor is used by editor + [AttributeUsage(AttributeTargets.Class)] + public class CcDescriptor : Attribute + { + /// Component's name + public string Name { get; set; } + /// Component's desciption + public string Description { get; set; } + /// Component's icon + public string Image { get; set; } + } + /// Retrieves the descriptor from "type" + public static CcDescriptor GetDescriptor(Type type) + { + var propertyInfos = BGReflectionAdapter.GetCustomAttributes(type, typeof(CcDescriptor), false); + if (propertyInfos.Length > 0) return (CcDescriptor) propertyInfos[0]; + return null; + } + + // get Unity's HelpURLAttribute attrubute + private static HelpURLAttribute GetHelpUrl(Type type) + { + var propertyInfos = BGReflectionAdapter.GetCustomAttributes(type,typeof (HelpURLAttribute), false); + if (propertyInfos.Length > 0) return (HelpURLAttribute) propertyInfos[0]; + return null; + } + + //======================== Exception + /// Exception if something is wrong with Cc related stuff + public class CcException :Exception + { + public CcException(string message) : base(message) + { + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs.meta new file mode 100644 index 0000000..e2ff3d6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCc.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0ea9b7560ce13a143be3db48f8a69684 +timeCreated: 1471605336 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs new file mode 100644 index 0000000..5cf3bba --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs @@ -0,0 +1,2063 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace BansheeGz.BGSpline.Curve +{ + /// Basic class for spline's points data + [HelpURL("http://www.bansheegz.com/BGCurve/")] + [ExecuteInEditMode] + [DisallowMultipleComponent] + [Serializable] + [AddComponentMenu("BansheeGz/BGCurve/BGCurve")] + public class BGCurve : MonoBehaviour + { + #region static + + //=============================================================================================== + // Static + //=============================================================================================== + + //Package version + public const float Version = 1.22f; + //Epsilon value (very small value, that can be ignored). Assuming 1=1 meter (Unity's recommendation), it equals to (1*10^-5)=10 micrometers + public const float Epsilon = 0.00001f; + + //min snapping distance + public const float MinSnapDistance = 0.1f; + //max snapping distance + public const float MaxSnapDistance = 100; + + //Some private methods names (editor may invoke private methods and fields to properly handle Undo/Redo operations and points mode conversion) + public const string MethodAddPoint = "AddPoint"; + public const string MethodDeletePoint = "Delete"; + public const string MethodSetPointsNames = "SetPointsNames"; + public const string MethodAddField = "AddField"; + public const string MethodDeleteField = "DeleteField"; + public const string MethodConvertPoints = "ConvertPoints"; + + + //Event names (these events are fired at any rate) + public const string EventClosed = "closed is changed"; + public const string EventSnapType = "snapType is changed"; + public const string EventSnapAxis = "snapAxis is changed"; + public const string EventSnapDistance = "snapDistance is changed"; + public const string EventSnapTrigger = "snapTriggerInteraction is changed"; + public const string EventSnapBackfaces = "snapToBackFaces is changed"; + public const string EventSnapLayerMask = "snapLayerMask is changed"; + public const string EventAddField = "add a field"; + public const string EventDeleteField = "delete a field"; + public const string EventFieldName = "field name is changed"; + public const string Event2D = "2d mode is changed"; + public const string EventForceUpdate = "force update is changed"; + + public const string EventPointsMode = "points mode is changed"; + public const string EventClearAllPoints = "clear all points"; + public const string EventAddPoint = "add a point"; + public const string EventAddPoints = "add points"; + public const string EventDeletePoints = "delete points"; + public const string EventSwapPoints = "swap points"; + public const string EventReversePoints = "reverse points"; + + + //Event names (these events are fired only if events args are enabled). this is done for performance sake + public const string EventTransaction = "changes in transaction"; + public const string EventTransform = "transform is changed"; + public const string EventForcedUpdate = "forced update"; + public const string EventPointPosition = "point position is changed"; + public const string EventPointTransform = "point transform is changed"; + public const string EventPointControl = "point control is changed"; + public const string EventPointControlType = "point control type is changed"; + public const string EventPointField = "point field value is changed"; + + //static reusable array for snapping double sided + private static readonly RaycastHit[] raycastHitArray = new RaycastHit[50]; + //static reusable array for deleting points + private static readonly BGCurvePointI[] pointArray = new BGCurvePointI[1]; + //static reusable list for storing Unity objects + private static readonly List pointsList = new List(); + //static reusable list for storing points index + private static readonly List pointsIndexesList = new List(); + + #endregion + + #region enums + + //=============================================================================================== + // Enums + //=============================================================================================== + + /// 2D mode for a curve. If mode is on, only 2 points and controls coordinates matter, the third one is always 0 + public enum Mode2DEnum + { + Off, + XY, + XZ, + YZ + } + + /// + /// Snap mode for a curve. If mode is on, every curve's point (and every approximation point, if mode=Curve) will be snapped to the closest collider if any. + /// With 'Curve' mode, Base Math gives better result, than Adaptive Math, cause it splits the curve into equal parts. + /// Note, 'Curve' mode will add a huge overhead if you are changing the curve at runtime, cause for every approximation point 2 raycasts will be cast + /// + public enum SnapTypeEnum + { + /// No snapping + Off, + + /// Only curve's points are snapped + Points, + + /// Both curve's points and approximation points are snapped + Curve + } + + /// Snapping axis. For terrain use Y + public enum SnapAxisEnum + { + X, + Y, + Z + } + + /// Then events are fired + public enum EventModeEnum + { + /// events are fired once per frame in Update + Update, + + /// events are fired once per frame in LateUpdate. Use it if you are using animations + LateUpdate, + + /// events are suppressed + NoEvents + } + + /// Force Changed event firing + public enum ForceChangedEventModeEnum + { + /// Changed event is fired only if some change is detected + Off, + + /// Forced Changed event is fired only in Editor + EditorOnly, + + /// Forced Changed event is fired in Editor and every frame at Runtime + EditorAndRuntime + } + + /// How points are stored + public enum PointsModeEnum + { + /// Points are stored right inside curve's components. + Inlined, + + /// Points are stored as separate components(MonoBehaviours) attached to curve's GameObject. + Components, + + /// Points are stored as separate components(MonoBehaviours) attached to their own GameObjects. Unity's transform is not used. + GameObjectsNoTransform, + + /// + /// Points are stored as separate components(MonoBehaviours) attached to their own GameObjects. Unity's transform position is used as point position. + /// Rotation and Scale affects controls positions. + /// + GameObjectsTransform + } + + #endregion + + #region Fields & Events & Props & Delegates + + //=============================================================================================== + // Fields + //=============================================================================================== + + +#if UNITY_EDITOR + // ============================================== !!! This is editor ONLY field +#pragma warning disable 0414 + [SerializeField] private BGCurveSettings settings = new BGCurveSettings(); +#pragma warning restore 0414 +#endif + + // ======================================= Delegates + + /// Iteration method callback, used by ForEach method for iterating over each point + public delegate void IterationCallback(BGCurvePointI point, int index, int count); + + // ======================================= Events + + /// Any curve's change. By default events are fired once per frame in Update, set ImmediateChangeEvents to fire event as soon as any change + public event EventHandler Changed; + + /// Before any change. + public event EventHandler BeforeChange; + + // ======================================= Fields (persistent) + + // 2D mode + [Tooltip("2d Mode for a curve. In 2d mode, only 2 coordinates matter, the third will always be 0 (including controls). " + + "Handles in Editor will also be switched to 2d mode")] [SerializeField] private Mode2DEnum mode2D = Mode2DEnum.Off; + + //if curve is closed (e.g. if last and first point are connected) + [Tooltip("If curve is closed")] [SerializeField] private bool closed; + + + //points inlined + [SerializeField] private BGCurvePoint[] points = new BGCurvePoint[0]; + + //points components + [SerializeField] private BGCurvePointComponent[] pointsComponents = new BGCurvePointComponent[0]; + + //points as separate game objects + [SerializeField] private BGCurvePointGO[] pointsGameObjects = new BGCurvePointGO[0]; + + //custom fields + [SerializeField] private BGCurvePointField[] fields = new BGCurvePointField[0]; + + //snapping mode + [Tooltip("Snap type. A collider should exists for points to snap to." + + "\r\n 1) Off - snaping is off" + + "\r\n 2) Points - only curve's points will be snapped." + + "\r\n 3) Curve - both curve's points and split points will be snapped. " + + "With 'Curve' mode Base Math type gives better results, than Adaptive Math, cause snapping occurs after approximation." + + "Also, 'Curve' mode can add a huge overhead if you are changing curve's points at runtime.")] [SerializeField] private SnapTypeEnum snapType = SnapTypeEnum.Off; + + //snapping axis + [Tooltip("Axis for snapping points")] [SerializeField] private SnapAxisEnum snapAxis = SnapAxisEnum.Y; + + //snapping distance + [Tooltip("Snapping distance.")] [SerializeField] [Range(MinSnapDistance, MaxSnapDistance)] private float snapDistance = 10; + + //snapping layer mask + [Tooltip("Layer mask for snapping")] [SerializeField] private LayerMask snapLayerMask = -1; + + //should snapping take triggers into account + [Tooltip("Should snapping takes triggers into account")] [SerializeField] private QueryTriggerInteraction snapTriggerInteraction = QueryTriggerInteraction.UseGlobal; + + //should snapping take triggers into account + [Tooltip("Should snapping takes backfaces of colliders into account")] [SerializeField] private bool snapToBackFaces; + + //events mode + [Tooltip("Event mode for runtime")] [SerializeField] private EventModeEnum eventMode = EventModeEnum.Update; + + //points mode + [Tooltip("Points mode, how points are stored. " + + "\r\n 1) Inline - points stored inlined with the curve's component." + + "\r\n 2) Component - points are stored as MonoBehaviour scripts attached to the curve's GameObject." + + "\r\n 3) GameObject - points are stored as MonoBehaviour scripts attached to separate GameObject for each point.")] [SerializeField] private PointsModeEnum pointsMode = + PointsModeEnum.Inlined; + + //force firing Update event + [Tooltip("Force firing of Changed event. This can be useful if you use Unity's Animation. Do not use it unless you really need it.")] [SerializeField] private ForceChangedEventModeEnum + forceChangedEventMode; + + + // ======================================= Props + /// Curve's points + public BGCurvePointI[] Points + { + get + { + switch (pointsMode) + { + case PointsModeEnum.Inlined: + return points; + case PointsModeEnum.Components: + return pointsComponents; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + return pointsGameObjects; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + } + + /// Number of curve's points + public int PointsCount + { + get + { + switch (pointsMode) + { + case PointsModeEnum.Inlined: + return points.Length; + case PointsModeEnum.Components: + return pointsComponents.Length; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + return pointsGameObjects.Length; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + } + + /// Curve's custom fields + public BGCurvePointField[] Fields + { + get { return fields; } + } + + /// Number of curve's custom fields + public int FieldsCount + { + get { return fields.Length; } + } + + /// If curve is closed, e.g. last and first points are connected + public bool Closed + { + get { return closed; } + set + { + if (value == closed) return; + FireBeforeChange(EventClosed); + closed = value; + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventClosed)); + } + } + + /// How points are stored + public PointsModeEnum PointsMode + { + get { return pointsMode; } + set + { + if (pointsMode == value) return; + ConvertPoints(value); + } + } + + + /// In 2d mode only 2 coordinates matter, the 3rd one will always be 0 (including control) + public Mode2DEnum Mode2D + { + get { return mode2D; } + set + { + if (mode2D == value) return; + + Apply2D(value); + } + } + + /// Is 2D mode On? + public bool Mode2DOn + { + get { return mode2D != Mode2DEnum.Off; } + } + + /// Snapping mode + public SnapTypeEnum SnapType + { + get { return snapType; } + set + { + if (snapType == value) return; + FireBeforeChange(EventSnapType); + snapType = value; + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapType)); + } + } + + /// Snapping axis. For terrain use Y + public SnapAxisEnum SnapAxis + { + get { return snapAxis; } + set + { + if (snapAxis == value) return; + FireBeforeChange(EventSnapAxis); + snapAxis = value; + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapAxis)); + } + } + + /// Snapping distance + public float SnapDistance + { + get { return snapDistance; } + set + { + if (Math.Abs(snapDistance - value) < Epsilon) return; + + FireBeforeChange(EventSnapDistance); + snapDistance = Mathf.Clamp(value, MinSnapDistance, MaxSnapDistance); + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapDistance)); + } + } + + /// Should snapping take triggers into account + public QueryTriggerInteraction SnapTriggerInteraction + { + get { return snapTriggerInteraction; } + set + { + if (snapTriggerInteraction == value) return; + + FireBeforeChange(EventSnapTrigger); + snapTriggerInteraction = value; + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapTrigger)); + } + } + + /// Should snapping take colliders backfaces into account + public bool SnapToBackFaces + { + get { return snapToBackFaces; } + set + { + if (snapToBackFaces == value) return; + + FireBeforeChange(EventSnapBackfaces); + snapToBackFaces = value; + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapBackfaces)); + } + } + + /// Snapping layer mask + public LayerMask SnapLayerMask + { + get { return snapLayerMask; } + set + { + if (snapLayerMask == value) return; + + FireBeforeChange(EventSnapLayerMask); + snapLayerMask = value; + if (snapType != SnapTypeEnum.Off) ApplySnapping(); + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Snap, EventSnapLayerMask)); + } + } + + /// Force firing of Changed event. This can be useful if you use Unity's Animation. Do not use it unless you really need it. + public ForceChangedEventModeEnum ForceChangedEventMode + { + get { return forceChangedEventMode; } + set + { + if (forceChangedEventMode == value) return; + + FireBeforeChange(EventForceUpdate); + forceChangedEventMode = value; + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Curve, EventForceUpdate)); + } + } + + //------------------------------ these fields are not persistent + //for batch operation (to avoid event firing for every operation) + private int transactionLevel; + + //list of events grouped by transaction (this is used only if UseEventsArgs is set to true) + private List changeList; + + //store custom fields structure for values. see FieldsTree comments for more info + private FieldsTree fieldsTree; + + //changed flag is reset every frame. + private bool changed; + + //fire Changed event as soon as change is made. By default they are grouped within a frame (for performance sake) + private bool immediateChangeEvents; + + //stores event mode for reset after SupressEvent is set to false. + private EventModeEnum eventModeOld = EventModeEnum.Update; + + //keeps last used eventType to use in FireFinalEvent. (if UseEventsArgs is false, we dont keep events list, fired during one single frame, and use only the last one) + private BGCurveChangedArgs.ChangeTypeEnum lastEventType; + + //keeps last event message to use in FireFinalEvent. (if UseEventsArgs is false, we dont keep events list, fired during one single frame, and use only the last one) + private string lastEventMessage; + + //list of points with Transforms attached () + private List pointsWithTransforms; + + + [Obsolete("It is not used anymore and should be removed")] + public bool TraceChanges + { + get { return Changed != null; } + set { } + } + + /// Disable events firing temporarily + public bool SupressEvents + { + get { return eventMode == EventModeEnum.NoEvents; } + set + { + if (value && eventMode != EventModeEnum.NoEvents) eventModeOld = eventMode; + eventMode = value ? EventModeEnum.NoEvents : eventModeOld; + } + } + + /// Use events args (no need for them if you do not use them). + public bool UseEventsArgs { get; set; } + + /// How events are fired + public EventModeEnum EventMode + { + get { return eventMode; } + set { eventMode = value; } + } + + /// Should events be fired immediately after the change. This mode is used by Editors and not recommended for runtime. + public bool ImmediateChangeEvents + { + get { return immediateChangeEvents; } + set { immediateChangeEvents = value; } + } + + //the list of events accumulated during transaction. (this is used only if UseEventsArgs is set to true) + private List ChangeList + { + get { return changeList ?? (changeList = new List()); } + } + + #endregion + + #region Public Functions + + //=============================================================================================== + // Public functions + //=============================================================================================== + // only required ones- no math. to use math use BGCurveBaseMath or BGCurveAdaptiveMath or your own class with provided classes as an example + + // ======================================= Points construction + /// Create a point, world coordinate are used + public BGCurvePoint CreatePointFromWorldPosition(Vector3 worldPos, BGCurvePoint.ControlTypeEnum controlType) + { + return new BGCurvePoint(this, worldPos, controlType, true); + } + + /// Create a point, world coordinate are used + public BGCurvePoint CreatePointFromWorldPosition(Vector3 worldPos, BGCurvePoint.ControlTypeEnum controlType, + Vector3 control1WorldPos, Vector3 control2WorldPos) + { + return new BGCurvePoint(this, worldPos, controlType, control1WorldPos, control2WorldPos, true); + } + + /// Create a point, local coordinate are used + public BGCurvePoint CreatePointFromLocalPosition(Vector3 localPos, BGCurvePoint.ControlTypeEnum controlType) + { + return new BGCurvePoint(this, localPos, controlType); + } + + /// Create a point, local coordinate are used + public BGCurvePoint CreatePointFromLocalPosition(Vector3 localPos, BGCurvePoint.ControlTypeEnum controlType, + Vector3 control1LocalPos, Vector3 control2LocalPos) + { + return new BGCurvePoint(this, localPos, controlType, control1LocalPos, control2LocalPos); + } + + + // ======================================= Points handling + /// Remove all points + public void Clear() + { + var pointsCount = PointsCount; + if (pointsCount == 0) return; + + FireBeforeChange(EventClearAllPoints); + + switch (pointsMode) + { + case PointsModeEnum.Inlined: + points = new BGCurvePoint[0]; + break; + case PointsModeEnum.Components: + if (pointsCount > 0) for (var i = pointsCount - 1; i >= 0; i--) DestroyIt(pointsComponents[i]); + pointsComponents = new BGCurvePointComponent[0]; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + if (pointsCount > 0) for (var i = pointsCount - 1; i >= 0; i--) DestroyIt(pointsGameObjects[i].gameObject); + pointsGameObjects = new BGCurvePointGO[0]; + break; + } + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventClearAllPoints)); + } + + /// Returns a point's index + public int IndexOf(BGCurvePointI point) + { + return IndexOf(Points, point); + } + + + /// Add a point to the end + public BGCurvePointI AddPoint(BGCurvePoint point) + { + return AddPoint(point, PointsCount, null); + } + + /// Add a point at specified index + public BGCurvePointI AddPoint(BGCurvePoint point, int index) + { + return AddPoint(point, index, null); + } + + /// Add several points. + public void AddPoints(BGCurvePoint[] points) + { + AddPoints(points, PointsCount, false); + } + + /// Add several points at specified index. + public void AddPoints(BGCurvePoint[] points, int index) + { + AddPoints(points, index, false); + } + + /// Removes a point + public void Delete(BGCurvePointI point) + { + Delete(IndexOf(point), null); + } + + /// Removes a point at specified index + public void Delete(int index) + { + Delete(index, null); + } + + /// Removes several points + public void Delete(BGCurvePointI[] points) + { + Delete(points, null); + } + + /// Swaps 2 points + public void Swap(int index1, int index2) + { + if (index1 < 0 || index1 >= PointsCount || index2 < 0 || index2 >= PointsCount) throw new UnityException("Unable to remove a point. Invalid indexes: " + index1 + ", " + index2); + + FireBeforeChange(EventSwapPoints); + + var points = Points; + + var point1 = points[index1]; + var point2 = points[index2]; + + var hasTransform = point1.PointTransform != null || point2.PointTransform != null; + + points[index2] = point1; + points[index1] = point2; + + if (IsGoMode(pointsMode)) SetPointsNames(); + + if (hasTransform) CachePointsWithTransforms(); + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventSwapPoints)); + } + + /// Reverse points order, keeping curve intact + public void Reverse() + { + var pointsCount = PointsCount; + + if (pointsCount < 2) return; + FireBeforeChange(EventReversePoints); + + var points = Points; + var hasFields = FieldsCount > 0; + var pointsMode = PointsMode; + + var mid = pointsCount >> 1; + var countMinusOne = pointsCount - 1; + for (var i = 0; i < mid; i++) + { + var point1 = points[i]; + var point2 = points[countMinusOne - i]; + + var position = point2.PositionLocal; + var controlType = point2.ControlType; + var control1 = point2.ControlFirstLocal; + var control2 = point2.ControlSecondLocal; + var fields2 = hasFields ? GetFieldsValues(point2, pointsMode) : null; + + point2.PositionLocal = point1.PositionLocal; + point2.ControlType = point1.ControlType; + point2.ControlFirstLocal = point1.ControlSecondLocal; + point2.ControlSecondLocal = point1.ControlFirstLocal; + if (hasFields) SetFieldsValues(point2, pointsMode, GetFieldsValues(point1, pointsMode)); + + point1.PositionLocal = position; + point1.ControlType = controlType; + point1.ControlFirstLocal = control2; + point1.ControlSecondLocal = control1; + if (hasFields) SetFieldsValues(point1, pointsMode, fields2); + } + + if (pointsCount%2 != 0) + { + //point at the center- we need to swap controls + var point = points[mid]; + var control = point.ControlFirstLocal; + point.ControlFirstLocal = point.ControlSecondLocal; + point.ControlSecondLocal = control; + } + + if (IsGoMode(pointsMode)) SetPointsNames(); + + CachePointsWithTransforms(); + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventReversePoints)); + } + + /// Access a point by index + public BGCurvePointI this[int i] + { + get + { + switch (pointsMode) + { + case PointsModeEnum.Inlined: + return points[i]; + case PointsModeEnum.Components: + return pointsComponents[i]; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + return pointsGameObjects[i]; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + set + { + switch (pointsMode) + { + case PointsModeEnum.Inlined: + points[i] = (BGCurvePoint) value; + break; + case PointsModeEnum.Components: + pointsComponents[i] = (BGCurvePointComponent) value; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + pointsGameObjects[i] = (BGCurvePointGO) value; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + } + + // ============================================== Custom Fields + /// Add a custom field + public BGCurvePointField AddField(string name, BGCurvePointField.TypeEnum type) + { + return AddField(name, type, null); + } + + + /// Delete a custom field + public void DeleteField(BGCurvePointField field) + { + DeleteField(field, null); + } + + /// Get number of field + public int IndexOf(BGCurvePointField field) + { + return IndexOf(fields, field); + } + + /// is curve has a field with provided name + public bool HasField(string name) + { + if (FieldsCount == 0) return false; + foreach (var field in fields) if (String.Equals(name, field.FieldName)) return true; + return false; + } + + /// + /// get the index of field's value within array of values + /// this method is meant to be private, but we can not keep it private cause of performance + /// + public int IndexOfFieldValue(string name) + { + if (fieldsTree == null || !fieldsTree.Comply(fields)) PrivateUpdateFieldsValuesIndexes(); + return fieldsTree.GetIndex(name); + } + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + // updates indexes for custom fields values. See FieldsTree for details. + public void PrivateUpdateFieldsValuesIndexes() + { + fieldsTree = fieldsTree ?? new FieldsTree(); + fieldsTree.Update(fields); + } + + // ============================================== 2D mode. + /// apply 2D mode to all points + public void Apply2D(Mode2DEnum value) + { + FireBeforeChange(Event2D); + mode2D = value; + + if (mode2D != Mode2DEnum.Off && PointsCount > 0) + { + Transaction(() => + { + var points = Points; + var count = points.Length; + for (var i = 0; i < count; i++) Apply2D(points[i]); + }); + } + else FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, Event2D)); + } + + /// change point's coordinate to comply to 2d mode + public virtual void Apply2D(BGCurvePointI point) + { + point.PositionLocal = point.PositionLocal; + point.ControlFirstLocal = point.ControlFirstLocal; + point.ControlSecondLocal = point.ControlSecondLocal; + } + + /// change vector coordinates to comply to 2d mode + public virtual Vector3 Apply2D(Vector3 point) + { + switch (mode2D) + { + case Mode2DEnum.XY: + return new Vector3(point.x, point.y, 0); + case Mode2DEnum.XZ: + return new Vector3(point.x, 0, point.z); + case Mode2DEnum.YZ: + return new Vector3(0, point.y, point.z); + } + return point; + } + + // ============================================== Snapping. + /// apply snapping to all points + public void ApplySnapping() + { + if (snapType == SnapTypeEnum.Off) return; + + var points = Points; + var length = points.Length; + for (var i = 0; i < length; i++) ApplySnapping(points[i]); + } + + /// apply snapping to one single point + public void ApplySnapping(BGCurvePointI point) + { + if (snapType == SnapTypeEnum.Off) return; + var pos = point.PositionWorld; + + if (ApplySnapping(ref pos)) point.PositionWorld = pos; + } + + /// apply snapping to one position and returns true if position was changed + public bool ApplySnapping(ref Vector3 pos) + { + if (snapType == SnapTypeEnum.Off) return false; + + //assign direction + Vector3 direction; + switch (snapAxis) + { + case SnapAxisEnum.Y: + direction = Vector3.up; + break; + case SnapAxisEnum.X: + direction = Vector3.right; + break; + default: + // case SnapAxisEnum.Z: + direction = Vector3.forward; + break; + } + + //cast front side + var resultPos = new Vector3(); + float minDistance = -1; + for (var k = 0; k < 2; k++) + { + var ray = new Ray(pos, k == 0 ? direction : -direction); + + RaycastHit hit; + if (!Physics.Raycast(ray, out hit, snapDistance, snapLayerMask, snapTriggerInteraction)) continue; + + if (!(minDistance < 0) && !(minDistance > hit.distance)) continue; + + minDistance = hit.distance; + resultPos = hit.point; + } + + //cast back side + if (snapToBackFaces) + { + for (var j = 0; j < 2; j++) + { + var count = Physics.RaycastNonAlloc(j == 0 + ? new Ray(new Vector3(pos.x + direction.x*snapDistance, pos.y + direction.y*snapDistance, pos.z + direction.z*snapDistance), -direction) + : new Ray(new Vector3(pos.x - direction.x*snapDistance, pos.y - direction.y*snapDistance, pos.z - direction.z*snapDistance), direction), + raycastHitArray, snapDistance, snapLayerMask, snapTriggerInteraction); + if (count == 0) continue; + + //iterate all unsorted results + for (var i = 0; i < count; i++) + { + var raycastHit = raycastHitArray[i]; + var distanceToCheck = snapDistance - raycastHit.distance; + if (!(minDistance < 0) && !(minDistance > distanceToCheck)) continue; + + minDistance = distanceToCheck; + resultPos = raycastHit.point; + } + } + } + + if (minDistance < 0) return false; + + //assign new pos + pos = resultPos; + + return true; + } + + + // ============================================== batch handling (to avoid event firing for every operation). + /// + /// Executes a batch operation. + /// During batch operation events firing will be suppressed, and event will be fired only after Transaction. + /// it is for event handling only . + /// + public void Transaction(Action action) + { + FireBeforeChange(EventTransaction); + transactionLevel++; + if (UseEventsArgs && transactionLevel == 1) ChangeList.Clear(); + try + { + action(); + } + finally + { + transactionLevel--; + if (transactionLevel == 0) + { + FireChange(UseEventsArgs + ? BGCurveChangedArgs.GetInstance(this, ChangeList.ToArray(), EventTransaction) + : null); + if (UseEventsArgs) ChangeList.Clear(); + } + } + } + + /// Current transaction level. + public int TransactionLevel + { + get { return transactionLevel; } + } + + // search for index within array + protected internal static int IndexOf(T[] array, T item) + { + return Array.IndexOf(array, item); + } + + + // ============================================== event handling + /// Fires BeforeChange event if not within transaction and events are not suppressed. + public void FireBeforeChange(string operation) + { + if (eventMode == EventModeEnum.NoEvents || transactionLevel > 0 || BeforeChange == null) return; + + BeforeChange(this, UseEventsArgs ? BGCurveChangedArgs.BeforeChange.GetInstance(operation) : null); + } + + /// Fires Changed event (if some conditions are met) + public void FireChange(BGCurveChangedArgs change, bool ignoreEventsGrouping = false, object sender = null) + { + if (eventMode == EventModeEnum.NoEvents || Changed == null) return; + + if (transactionLevel > 0 || (!immediateChangeEvents && !ignoreEventsGrouping)) + { + changed = true; + if (change != null) + { + lastEventType = change.ChangeType; + lastEventMessage = change.Message; + } + if (UseEventsArgs && !ChangeList.Contains(change)) ChangeList.Add((BGCurveChangedArgs) change.Clone()); + return; + } + + Changed(sender ?? this, change); + } + + // ============================================== Unity callbacks + public void Start() + { + CachePointsWithTransforms(); + } + + // Unity's Update callback + protected virtual void Update() + { + // is transform.hasChanged is true by default? + if (Time.frameCount == 1) transform.hasChanged = false; + if (eventMode != EventModeEnum.Update || Changed == null) return; + FireFinalEvent(); + } + + // Unity's LateUpdate callback + protected virtual void LateUpdate() + { + if (eventMode != EventModeEnum.LateUpdate || Changed == null) return; + FireFinalEvent(); + } + + // ============================================== Utility methods + /// world position to local position + public Vector3 ToLocal(Vector3 worldPoint) + { + return transform.InverseTransformPoint(worldPoint); + } + + /// local position to world position + public Vector3 ToWorld(Vector3 localPoint) + { + return transform.TransformPoint(localPoint); + } + + /// direction from world to local + public Vector3 ToLocalDirection(Vector3 direction) + { + return transform.InverseTransformDirection(direction); + } + + /// direction from local to world + public Vector3 ToWorldDirection(Vector3 direction) + { + return transform.TransformDirection(direction); + } + + /// execute Action for each point. Params are Point,index,length. + public void ForEach(IterationCallback iterationCallback) + { + //do not replace PointsCount with local var, cause it can be changed while iteration + for (var i = 0; i < PointsCount; i++) iterationCallback(Points[i], i, PointsCount); + } + + //update points GameObjects names and sort + private void SetPointsNames() + { + try + { + if (gameObject == null) return; + } + catch (MissingReferenceException) + { + return; + } + + var name = gameObject.name; + var length = pointsGameObjects.Length; + for (var i = 0; i < length; i++) + { + var go = pointsGameObjects[i].gameObject; + + //set name + go.name = name + "[" + i + "]"; + + //move to bottom + go.transform.SetSiblingIndex(go.transform.parent.childCount - 1); + } + } + + // copy arrays and add a new element + public static T[] Insert(T[] oldArray, int index, T[] newElements) + { + var newArray = new T[oldArray.Length + newElements.Length]; + + //copy before index + if (index > 0) Array.Copy(oldArray, newArray, index); + + //copy after index + if (index < oldArray.Length) Array.Copy(oldArray, index, newArray, index + newElements.Length, oldArray.Length - index); + + //copy new elements + Array.Copy(newElements, 0, newArray, index, newElements.Length); + + return newArray; + } + + // copy arrays and add a new element + public static T[] Insert(T[] oldArray, int index, T newElement) + { + var newArray = new T[oldArray.Length + 1]; + + //copy before index + if (index > 0) Array.Copy(oldArray, newArray, index); + + //copy after index + if (index < oldArray.Length) Array.Copy(oldArray, index, newArray, index + 1, oldArray.Length - index); + + newArray[index] = newElement; + + return newArray; + } + + // copy arrays and removes an element + public static T[] Remove(T[] oldArray, int index) + { + var newArray = new T[oldArray.Length - 1]; + if (index > 0) Array.Copy(oldArray, newArray, index); + + if (index < oldArray.Length - 1) Array.Copy(oldArray, index + 1, newArray, index, oldArray.Length - 1 - index); + + return newArray; + } + + /// standard c# toString override + public override string ToString() + { + return "BGCurve [id=" + GetInstanceID() + "], points=" + PointsCount; + } + + /// if this mode uses separate GameObjects for points + public static bool IsGoMode(PointsModeEnum pointsMode) + { + return pointsMode == PointsModeEnum.GameObjectsNoTransform || pointsMode == PointsModeEnum.GameObjectsTransform; + } + + // ============================================== Point's transforms + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + //if a transform was added to a point + public void PrivateTransformForPointAdded(int index) + { + if (index < 0 || PointsCount >= index) return; + if (pointsWithTransforms == null) pointsWithTransforms = new List(); + + if (pointsWithTransforms.IndexOf(index) == -1) pointsWithTransforms.Add(index); + } + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + //if a transform was removed from a point + public void PrivateTransformForPointRemoved(int index) + { + if (pointsWithTransforms == null || pointsWithTransforms.IndexOf(index) == -1) return; + + pointsWithTransforms.Remove(index); + } + + #endregion + + #region Private Functions + + //=============================================================================================== + // Private functions + //=============================================================================================== + + // ============================================== Points + //add a point. this method is not meant to be public, Editor uses it via reflection + private BGCurvePointI AddPoint(BGCurvePoint point, int index, Func provider = null) + { + if (index < 0 || index > PointsCount) throw new UnityException("Unable to add a point. Invalid index: " + index); + + FireBeforeChange(EventAddPoint); + + BGCurvePointI result; + + //insert a point + switch (pointsMode) + { + case PointsModeEnum.Inlined: + points = Insert(points, index, point); + result = point; + break; + + case PointsModeEnum.Components: + var pointComponent = (BGCurvePointComponent) Convert(point, PointsModeEnum.Inlined, pointsMode, provider); + pointsComponents = Insert(pointsComponents, index, pointComponent); + result = pointComponent; + break; + + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + var pointGameObject = (BGCurvePointGO) Convert(point, PointsModeEnum.Inlined, pointsMode, provider); + pointsGameObjects = Insert(pointsGameObjects, index, pointGameObject); + + SetPointsNames(); + + result = pointGameObject; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + + //fields + if (FieldsCount > 0) + { + var fieldValues = GetFieldsValues(result, pointsMode); + foreach (var field in fields) BGCurvePoint.PrivateFieldAdded(field, fieldValues); + } + + //point transforms + if ((point.PointTransform != null) || (pointsWithTransforms != null && pointsWithTransforms.Count > 0)) CachePointsWithTransforms(); + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Point, EventAddPoint)); + + return result; + } + + //retrieve fields values from point + private BGCurvePoint.FieldsValues GetFieldsValues(BGCurvePointI point, PointsModeEnum pointsMode) + { + BGCurvePoint.FieldsValues fieldValues; + switch (pointsMode) + { + case PointsModeEnum.Inlined: + fieldValues = ((BGCurvePoint) point).PrivateValuesForFields; + break; + case PointsModeEnum.Components: + fieldValues = ((BGCurvePointComponent) point).Point.PrivateValuesForFields; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + fieldValues = ((BGCurvePointGO) point).PrivateValuesForFields; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + return fieldValues; + } + + //set fields values for point + private void SetFieldsValues(BGCurvePointI point, PointsModeEnum pointsMode, BGCurvePoint.FieldsValues fieldsValues) + { + switch (pointsMode) + { + case PointsModeEnum.Inlined: + ((BGCurvePoint) point).PrivateValuesForFields = fieldsValues; + break; + case PointsModeEnum.Components: + ((BGCurvePointComponent) point).Point.PrivateValuesForFields = fieldsValues; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + ((BGCurvePointGO) point).PrivateValuesForFields = fieldsValues; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + + // add several points. this method is not meant to be public, Editor uses it via reflection + private void AddPoints(BGCurvePoint[] points, int index, bool skipFieldsProcessing = false, Func provider = null) + { + if (points == null) return; + + var pointsLength = points.Length; + + if (pointsLength == 0) return; + + if (index < 0 || index > PointsCount) throw new UnityException("Unable to add points. Invalid index: " + index); + + + FireBeforeChange(EventAddPoints); + + BGCurvePointI[] addedPoints; + var hasPointTransform = pointsWithTransforms != null && pointsWithTransforms.Count > 0; + + //add points + switch (pointsMode) + { + case PointsModeEnum.Inlined: + + this.points = Insert(this.points, index, points); + if (!hasPointTransform) + { + for (var i = 0; i < pointsLength; i++) + { + if (points[i].PointTransform == null) continue; + hasPointTransform = true; + break; + } + } + addedPoints = points; + break; + case PointsModeEnum.Components: + + var toAdd = new BGCurvePointComponent[pointsLength]; + for (var i = 0; i < pointsLength; i++) + { + var point = points[i]; + hasPointTransform = hasPointTransform || point.PointTransform != null; + toAdd[i] = (BGCurvePointComponent) Convert(point, PointsModeEnum.Inlined, pointsMode, provider); + } + pointsComponents = Insert(pointsComponents, index, toAdd); + + addedPoints = points; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + + var pointsToAdd = new BGCurvePointGO[pointsLength]; + for (var i = 0; i < pointsLength; i++) + { + var point = points[i]; + hasPointTransform = hasPointTransform || point.PointTransform != null; + pointsToAdd[i] = (BGCurvePointGO) Convert(point, PointsModeEnum.Inlined, pointsMode, provider); + } + pointsGameObjects = Insert(pointsGameObjects, index, pointsToAdd); + + SetPointsNames(); + + addedPoints = pointsToAdd; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + + + //process fields + if (!skipFieldsProcessing && FieldsCount > 0) AddFields(pointsMode, addedPoints); + + //point transforms + if (hasPointTransform) CachePointsWithTransforms(); + + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventAddPoints)); + } + + // removes a point. this method is not meant to be public, Editor uses it via reflection + private void Delete(int index, Action destroyer) + { + if (index < 0 || index >= PointsCount) throw new UnityException("Unable to remove a point. Invalid index: " + index); + + switch (pointsMode) + { + case PointsModeEnum.Inlined: + pointArray[0] = points[index]; + break; + case PointsModeEnum.Components: + pointArray[0] = pointsComponents[index]; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + pointArray[0] = pointsGameObjects[index]; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + Delete(pointArray, destroyer); + } + + // removes points. this method is not meant to be public, Editor uses it via reflection + private void Delete(BGCurvePointI[] pointsToDelete, Action destroyer) + { + if (pointsToDelete == null || pointsToDelete.Length == 0 || PointsCount == 0) return; + + pointsList.Clear(); + pointsIndexesList.Clear(); + + var oldPoints = Points; + + //find point indexes + var length = pointsToDelete.Length; + for (var i = 0; i < length; i++) + { + var index = Array.IndexOf(oldPoints, pointsToDelete[i]); + if (index >= 0) pointsIndexesList.Add(index); + } + + //no luck + if (pointsIndexesList.Count == 0) return; + + //at this point we know for sure we have to delete at least one point + FireBeforeChange(EventDeletePoints); + + //assign new array + var newLength = oldPoints.Length - pointsIndexesList.Count; + BGCurvePointI[] newPoints; + switch (pointsMode) + { + case PointsModeEnum.Inlined: + points = new BGCurvePoint[newLength]; + newPoints = points; + break; + case PointsModeEnum.Components: + pointsComponents = new BGCurvePointComponent[newLength]; + newPoints = pointsComponents; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + pointsGameObjects = new BGCurvePointGO[newLength]; + newPoints = pointsGameObjects; + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + + //sort indexes to delete + pointsIndexesList.Sort(); + + //fill new array + var cursor = 0; + var count = pointsIndexesList.Count; + for (var i = 0; i < count; i++) + { + var indexToRemove = pointsIndexesList[i]; + + if (indexToRemove > cursor) Array.Copy(oldPoints, cursor, newPoints, cursor - i, indexToRemove - cursor); + + cursor = indexToRemove + 1; + + switch (pointsMode) + { + case PointsModeEnum.Components: + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + pointsList.Add(oldPoints[indexToRemove]); + break; + } + } + if (cursor < oldPoints.Length) Array.Copy(oldPoints, cursor, newPoints, cursor - count, oldPoints.Length - cursor); + + + //sort and set new names for GO points + switch (pointsMode) + { + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + SetPointsNames(); + break; + } + + //destroy + if (pointsList.Count > 0) + { + var pointsCount = pointsList.Count; + for (var i = 0; i < pointsCount; i++) + { + var toDelete = pointsList[i]; + + if (destroyer != null) destroyer(toDelete); + else + { + switch (pointsMode) + { + case PointsModeEnum.Components: + DestroyIt((Object) toDelete); + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + DestroyIt(((BGCurvePointGO) toDelete).gameObject); + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + } + } + } + + CachePointsWithTransforms(); + + pointsList.Clear(); + pointsIndexesList.Clear(); + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventDeletePoints)); + } + + // ============================================== Point conversion + //convert between points store options, attached to GameObject. it's also accessed via reflection by Editor + // !! NOTE: do not change the order of different actions- it affects Undo/Redo operations + private void ConvertPoints(PointsModeEnum pointsMode, Func provider = null, Action destroyer = null) + { + var oldMode = PointsMode; + if (oldMode == pointsMode) return; + + FireBeforeChange(EventPointsMode); + + switch (oldMode) + { + case PointsModeEnum.Inlined: + + if (points.Length > 0) + { + //------------------------------------------------------- from inlined + + switch (pointsMode) + { + case PointsModeEnum.Components: + { + // to components + var toAdd = new BGCurvePointComponent[points.Length]; + for (var i = 0; i < points.Length; i++) toAdd[i] = (BGCurvePointComponent) Convert(points[i], oldMode, pointsMode, provider); + + this.pointsMode = pointsMode; + pointsComponents = Insert(pointsComponents, 0, toAdd); + + //no need to process fields, cause the same point is reused + } + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + { + // to gameobjects + var toAdd = new BGCurvePointGO[points.Length]; + + for (var i = 0; i < points.Length; i++) toAdd[i] = (BGCurvePointGO) Convert(points[i], oldMode, pointsMode, provider); + + this.pointsMode = pointsMode; + pointsGameObjects = Insert(pointsGameObjects, 0, toAdd); + + SetPointsNames(); + + //fields + if (FieldsCount > 0) AddFields(pointsMode, toAdd); + } + break; + } + points = new BGCurvePoint[0]; + } + break; + case PointsModeEnum.Components: + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + + var hasAnyPoint = oldMode == PointsModeEnum.Components && pointsComponents.Length > 0 || (IsGoMode(oldMode) && pointsGameObjects.Length > 0); + + if (hasAnyPoint) + { + //------------------------------------------------------- from components OR from GO + BGCurvePointI[] toRemove = null; + if (oldMode == PointsModeEnum.Components) + { + //------------------------------------------------------- from components + switch (pointsMode) + { + case PointsModeEnum.Inlined: + var pointsToAdd = new BGCurvePoint[pointsComponents.Length]; + + for (var i = 0; i < pointsComponents.Length; i++) pointsToAdd[i] = (BGCurvePoint) Convert(pointsComponents[i], oldMode, pointsMode, provider); + + points = Insert(points, 0, pointsToAdd); + + //no need to process fields, cause the same point is reused + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + var toAdd = new BGCurvePointGO[pointsComponents.Length]; + + for (var i = 0; i < pointsComponents.Length; i++) toAdd[i] = (BGCurvePointGO) Convert(pointsComponents[i], oldMode, pointsMode, provider); + + pointsGameObjects = Insert(pointsGameObjects, 0, toAdd); + + SetPointsNames(); + + //fields + if (FieldsCount > 0) AddFields(pointsMode, toAdd); + + break; + } + + toRemove = pointsComponents; + pointsComponents = new BGCurvePointComponent[0]; + } + else + { + //------------------------------------------------------- from GO + + switch (pointsMode) + { + case PointsModeEnum.Inlined: + + var pointsToAdd = new BGCurvePoint[pointsGameObjects.Length]; + + for (var i = 0; i < pointsGameObjects.Length; i++) pointsToAdd[i] = (BGCurvePoint) Convert(pointsGameObjects[i], oldMode, pointsMode, provider); + + points = Insert(points, 0, pointsToAdd); + + toRemove = pointsGameObjects; + break; + + case PointsModeEnum.Components: + + var toAdd = new BGCurvePointComponent[pointsGameObjects.Length]; + + for (var i = 0; i < pointsGameObjects.Length; i++) toAdd[i] = (BGCurvePointComponent) Convert(pointsGameObjects[i], oldMode, pointsMode, provider); + + pointsComponents = Insert(pointsComponents, 0, toAdd); + + toRemove = pointsGameObjects; + break; + + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + + for (var i = 0; i < pointsGameObjects.Length; i++) Convert(pointsGameObjects[i], oldMode, pointsMode, provider); + break; + } + + if (toRemove != null) pointsGameObjects = new BGCurvePointGO[0]; + } + + //------------------------------------------------------- from components OR from GO + //do not remove (it's here for undo/redo) + this.pointsMode = pointsMode; + if (toRemove != null) + { + //here we need to destroy Unity's persistent objects we dont use anymore (it should be the last action) + var useComponents = oldMode == PointsModeEnum.Components; + for (var i = 0; i < toRemove.Length; i++) + { + var pointComponent = toRemove[i]; + + if (destroyer != null) destroyer(pointComponent); + else DestroyIt(useComponents ? (Object) pointComponent : ((BGCurvePointGO) pointComponent).gameObject); + } + } + } + + break; + default: + throw new ArgumentOutOfRangeException("pointsMode"); + } + + this.pointsMode = pointsMode; + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Points, EventPointsMode)); + } + + //convert point's mode + private static BGCurvePointI Convert(BGCurvePointI point, PointsModeEnum from, PointsModeEnum to, Func provider) + { + BGCurvePointI result; + switch (from) + { + case PointsModeEnum.Inlined: + //------------------------------------------ From inline + switch (to) + { + case PointsModeEnum.Components: + + //---------- To components + + result = provider == null ? point.Curve.gameObject.AddComponent() : (BGCurvePointComponent) provider(); + ((BGCurvePointComponent) result).PrivateInit((BGCurvePoint) point); + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + + //---------- To GO + result = ConvertInlineToGo((BGCurvePoint) point, to, provider); + break; + default: + throw new ArgumentOutOfRangeException("to", to, null); + } + break; + case PointsModeEnum.Components: + //------------------------------------------ From Component + switch (to) + { + case PointsModeEnum.Inlined: + + //---------- To inline + + result = ((BGCurvePointComponent) point).Point; + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + + //---------- To GO + result = ConvertInlineToGo(((BGCurvePointComponent) point).Point, to, provider); + break; + default: + throw new ArgumentOutOfRangeException("to", to, null); + } + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + //------------------------------------------ From GO + + switch (to) + { + case PointsModeEnum.Inlined: + + //---------- To inline + + result = ConvertGoToInline((BGCurvePointGO) point, from); + break; + + case PointsModeEnum.Components: + + //---------- To Component + + result = provider != null ? (BGCurvePointComponent) provider() : point.Curve.gameObject.AddComponent(); + ((BGCurvePointComponent) result).PrivateInit(ConvertGoToInline((BGCurvePointGO) point, from)); + break; + case PointsModeEnum.GameObjectsNoTransform: + case PointsModeEnum.GameObjectsTransform: + ((BGCurvePointGO) point).PrivateInit(null, to); + result = point; + break; + default: + throw new ArgumentOutOfRangeException("to", to, null); + } + break; + default: + throw new ArgumentOutOfRangeException("from", @from, null); + } + + //point references + var pointTransform = point.PointTransform; + if (pointTransform != null) + { + BGCurveReferenceToPoint reference = null; + + if (from != PointsModeEnum.Inlined) reference = BGCurveReferenceToPoint.GetReferenceToPoint(point); + + if (to != PointsModeEnum.Inlined) + { + //not inlined + if (reference == null) reference = pointTransform.gameObject.AddComponent(); + reference.Point = result; + } + else + { + //inlined + if (reference != null) DestroyIt(reference); + } + } + + return result; + } + + //convert point from Inline to GameObject + private static BGCurvePointGO ConvertInlineToGo(BGCurvePoint point, PointsModeEnum to, Func provider) + { + BGCurvePointGO pointGO; + if (provider != null) pointGO = (BGCurvePointGO) provider(); + else + { + var gameObjectForPoint = new GameObject(); + var pointTransform = gameObjectForPoint.transform; + pointTransform.parent = point.Curve.transform; + pointTransform.localRotation = Quaternion.identity; + pointTransform.localPosition = Vector3.zero; + pointTransform.localScale = Vector3.one; + pointGO = gameObjectForPoint.AddComponent(); + } + + pointGO.PrivateInit(point, to); + + //transfer fields + pointGO.PrivateValuesForFields = point.PrivateValuesForFields; + + return pointGO; + } + + //convert point from GameObject to Inline + private static BGCurvePoint ConvertGoToInline(BGCurvePointGO pointGO, PointsModeEnum @from) + { + BGCurvePoint result; + switch (@from) + { + case PointsModeEnum.GameObjectsNoTransform: + result = new BGCurvePoint(pointGO.Curve, pointGO.PointTransform, pointGO.PositionLocal, pointGO.ControlType, pointGO.ControlFirstLocal, pointGO.ControlSecondLocal); + break; + case PointsModeEnum.GameObjectsTransform: + var transform = pointGO.PointTransform != null ? pointGO.PointTransform : pointGO.Curve.transform; + var control1 = transform.InverseTransformVector(pointGO.ControlFirstLocalTransformed); + var control2 = transform.InverseTransformVector(pointGO.ControlSecondLocalTransformed); + result = new BGCurvePoint(pointGO.Curve, pointGO.PointTransform, pointGO.PositionLocal, pointGO.ControlType, control1, control2); + break; + default: + throw new ArgumentOutOfRangeException("PointsModeEnum"); + } + + + //transfer fields + if (pointGO.Curve.FieldsCount > 0) result.PrivateValuesForFields = pointGO.PrivateValuesForFields; + + return result; + } + + + // ============================================== Events + //fires a "final" event. By default events are grouped within single frame and one single event is fired at Update or LateUpdate + private void FireFinalEvent() + { + var transformChanged = transform.hasChanged; + + var forceUpdateEveryFrame = forceChangedEventMode == ForceChangedEventModeEnum.EditorAndRuntime; + + if (!transformChanged && immediateChangeEvents && !forceUpdateEveryFrame) return; + + //check additionally for point's changes + if (pointsMode == PointsModeEnum.GameObjectsTransform) + { + var points = (BGCurvePointGO[]) Points; + var length = points.Length; + for (var i = 0; i < length; i++) + { + var point = points[i]; + var pointTransform = point.gameObject.transform; + if (!pointTransform.hasChanged) continue; + + pointTransform.hasChanged = false; + changed = true; + lastEventType = BGCurveChangedArgs.ChangeTypeEnum.Points; + lastEventMessage = EventPointPosition; + } + } + + //check points transforms + if (pointsWithTransforms != null) + { + var pointsWithTransformsCount = pointsWithTransforms.Count; + if (pointsWithTransformsCount > 0) + { + var points = Points; + var pointCount = points.Length; + for (var i = 0; i < pointsWithTransformsCount; i++) + { + var index = pointsWithTransforms[i]; + if (index >= pointCount) continue; + + var point = points[index]; + var pointTransform = point.PointTransform; + if (pointTransform == null || !pointTransform.hasChanged) continue; + + pointTransform.hasChanged = false; + changed = true; + lastEventType = BGCurveChangedArgs.ChangeTypeEnum.Points; + lastEventMessage = EventPointPosition; + } + } + } + + if (!transformChanged && !changed && !forceUpdateEveryFrame) return; + + if (changed) FireChange(UseEventsArgs ? BGCurveChangedArgs.GetInstance(this, lastEventType, lastEventMessage) : null, true); + else if (transformChanged) FireChange(UseEventsArgs ? BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.CurveTransform, EventTransform) : null, true); + else FireChange(UseEventsArgs ? BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Curve, EventForcedUpdate) : null, true); + + transform.hasChanged = changed = false; + } + + + // ============================================== Fields + + //add fields to provided points + private void AddFields(PointsModeEnum pointsMode, BGCurvePointI[] addedPoints) + { + foreach (var point in addedPoints) + { + var fieldsValues = GetFieldsValues(point, pointsMode); + foreach (var field in fields) BGCurvePoint.PrivateFieldAdded(field, fieldsValues); + } + } + + //add a custom field. this method is not meant to be public, Editor uses it via reflection + private BGCurvePointField AddField(string name, BGCurvePointField.TypeEnum type, Func provider = null) + { + //check if name is ok + BGCurvePointField.CheckName(this, name, true); + + FireBeforeChange(EventAddField); + + //at this point the change is certainly will occur + //add a field + var field = provider == null ? gameObject.AddComponent() : provider(); + field.hideFlags = HideFlags.HideInInspector; + field.Init(this, name, type); + + fields = Insert(fields, fields.Length, field); + + PrivateUpdateFieldsValuesIndexes(); + + if (PointsCount > 0) + { + //update all points + var points = Points; + foreach (var point in points) BGCurvePoint.PrivateFieldAdded(field, GetFieldsValues(point, pointsMode)); + } + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Fields, EventAddField)); + + return field; + } + + // delete a custom field. this method is not meant to be public, Editor uses it via reflection + private void DeleteField(BGCurvePointField field, Action destroyer = null) + { + //find field index + var deletedIndex = IndexOf(fields, field); + if (deletedIndex < 0 || deletedIndex >= fields.Length) throw new UnityException("Unable to remove a fields. Invalid index: " + deletedIndex); + + //get the index for field's value + var indexOfField = IndexOfFieldValue(field.FieldName); + + FireBeforeChange(EventDeleteField); + + //at this point the change is certainly will occur + //remove field from list + fields = Remove(fields, deletedIndex); + + //update fields values indexes. See FieldsTree commments for more details + PrivateUpdateFieldsValuesIndexes(); + + if (PointsCount > 0) + { + //update all points + var points = Points; + foreach (var point in points) BGCurvePoint.PrivateFieldDeleted(field, indexOfField, GetFieldsValues(point, pointsMode)); + } + + //destroy field component + if (destroyer == null) DestroyIt(field); + else destroyer(field); + + + FireChange(BGCurveChangedArgs.GetInstance(this, BGCurveChangedArgs.ChangeTypeEnum.Fields, EventDeleteField)); + } + + // ============================================== Point's transforms + //find points with Transforms attached + private void CachePointsWithTransforms() + { + if (pointsWithTransforms != null) pointsWithTransforms.Clear(); + var points = Points; + var count = points.Length; + for (var i = 0; i < count; i++) + { + if (points[i].PointTransform != null) + { + if (pointsWithTransforms == null) pointsWithTransforms = new List(); + pointsWithTransforms.Add(i); + } + } + } + + // ============================================== Utils + //destroy Unity object + public static void DestroyIt(Object obj) + { + if (Application.isEditor) DestroyImmediate(obj); + else Destroy(obj); + } + + #endregion + + #region Private Classes + + //=============================================================================================== + // Private classes + //=============================================================================================== + + // stores info about how fields values should be stored. + // fields values are stored in arrays, so we need to keep track of index within this array for each field + private sealed class FieldsTree + { + private readonly Dictionary fieldName2Index = new Dictionary(); + + /// if current index is up-to-date? + public bool Comply(BGCurvePointField[] fields) + { + return fields == null ? fieldName2Index.Count == 0 : fieldName2Index.Count == fields.Length; + } + + /// get index by field's name + public int GetIndex(string name) + { + int index; + if (fieldName2Index.TryGetValue(name, out index)) return index; + throw new UnityException("Can not find a index of field " + name); + } + + /// update whole index + public void Update(BGCurvePointField[] fields) + { + fieldName2Index.Clear(); + int boolIndex = 0, + intIndex = 0, + floatIndex = 0, + vector3Index = 0, + boundsIndex = 0, + colorIndex = 0, + stringIndex = 0, + quaternionIndex = 0, + animationCurveIndex = 0, + gameObjectIndex = 0, + componentIndex = 0, + bgCurveIndex = 0, + bgCurvePointComponentIndex = 0, + bgCurvePointGOIndex = 0; + + foreach (var field in fields) + { + int index; + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bool: + index = boolIndex++; + break; + case BGCurvePointField.TypeEnum.Int: + index = intIndex++; + break; + case BGCurvePointField.TypeEnum.Float: + index = floatIndex++; + break; + case BGCurvePointField.TypeEnum.Vector3: + index = vector3Index++; + break; + case BGCurvePointField.TypeEnum.Bounds: + index = boundsIndex++; + break; + case BGCurvePointField.TypeEnum.Color: + index = colorIndex++; + break; + case BGCurvePointField.TypeEnum.String: + index = stringIndex++; + break; + case BGCurvePointField.TypeEnum.Quaternion: + index = quaternionIndex++; + break; + case BGCurvePointField.TypeEnum.AnimationCurve: + index = animationCurveIndex++; + break; + case BGCurvePointField.TypeEnum.GameObject: + index = gameObjectIndex++; + break; + case BGCurvePointField.TypeEnum.Component: + index = componentIndex++; + break; + case BGCurvePointField.TypeEnum.BGCurve: + index = bgCurveIndex++; + break; + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + index = bgCurvePointComponentIndex++; + break; + case BGCurvePointField.TypeEnum.BGCurvePointGO: + index = bgCurvePointGOIndex++; + break; + default: + throw new UnityException("Unknown type " + field.Type); + } + + fieldName2Index[field.FieldName] = index; + } + } + } + + #endregion + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs.meta new file mode 100644 index 0000000..69f5610 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurve.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e70f079e2a6bf364e8185b765fbe61c0 +timeCreated: 1476942102 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs new file mode 100644 index 0000000..14352cf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs @@ -0,0 +1,421 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// Adaptive curve subdivision math. It split the spline into uneven parts, based on the curvature. + /// Strictly speaking, it still uses uniform splitting, but it can omit and add points when needed, resulting in better approximation and less points. + /// + public class BGCurveAdaptiveMath : BGCurveBaseMath + { + //------------------------------------------------------------------------ + //min tolerance value + public const float MinTolerance = 0.1f; + //max tolerance value + public const float MaxTolerance = 0.9999750f; + //distance tolerance (to avoid spamming points at one single location) + public const float DistanceTolerance = 0.01f; + //max recursion level + private const int RecursionLimit = 24; + + //force section to recalculate + private bool ignoreSectionChangedCheckOverride; + + //normalized tolerance + private float toleranceRatio; + //normalized tolerance squared + private float toleranceRatioSquared; + + //tolerance + private float tolerance; + + /// Create new math with config options + public BGCurveAdaptiveMath(BGCurve curve, ConfigAdaptive config) + : base(curve, config) + { + } + + /// Init math with new config and recalculate data + public override void Init(Config config) + { + var configAdaptive = (ConfigAdaptive) config; + + tolerance = Mathf.Clamp(configAdaptive.Tolerance, MinTolerance, MaxTolerance); + + //pow 4 + tolerance *= tolerance; + tolerance *= tolerance; + + //normalized + toleranceRatio = 1/(1 - tolerance); + toleranceRatioSquared = toleranceRatio*toleranceRatio; + + //if old tolerance is different- we force section recalculation + ignoreSectionChangedCheckOverride = this.config == null || Math.Abs(((ConfigAdaptive) this.config).Tolerance - tolerance) > BGCurve.Epsilon; + + //recalculate + base.Init(config); + } + + //Reset pooled section with new data and recalculates if needed + protected override bool Reset(SectionInfo section, BGCurvePointI @from, BGCurvePointI to, int pointsCount) + { + return section.Reset(@from, to, section.PointsCount, ignoreSectionChangedCheck || ignoreSectionChangedCheckOverride); + } + + protected override bool IsUseDistanceToAdjustTangents(SectionInfo section, SectionInfo prevSection) + { + return true; + } + + //approximate split section + //this method contains some intentional copy/paste + protected override void CalculateSplitSection(SectionInfo section, BGCurvePointI @from, BGCurvePointI to) + { + //if set to true, tangent formula will be used to calc tangents + var calcTangents = cacheTangent && !config.UsePointPositionsToCalcTangents; + + + var points = section.points; + var count = points.Count; + //move all existing points to the pool (the number of points depends on the curvature) + for (var i = 0; i < count; i++) poolPointInfos.Add(points[i]); + points.Clear(); + + //original points and control types + var p0 = section.OriginalFrom; + var p1 = section.OriginalFromControl; + var p2 = section.OriginalToControl; + var p3 = section.OriginalTo; + + //type of the curve (0-absent,3-both Bezier, 1 or 2 - one of the points has Bezier controls) + var type = (section.OriginalFromControlType != BGCurvePoint.ControlTypeEnum.Absent ? 2 : 0) + (section.OriginalToControlType != BGCurvePoint.ControlTypeEnum.Absent ? 1 : 0); + + //===================================== first point + SectionPointInfo firstPoint; + var poolCursor = poolPointInfos.Count - 1; + if (poolCursor >= 0) + { + firstPoint = poolPointInfos[poolCursor]; + poolPointInfos.RemoveAt(poolCursor); + } + else firstPoint = new SectionPointInfo(); + firstPoint.Position = p0; + firstPoint.DistanceToSectionStart = 0; + points.Add(firstPoint); + + //==================================== split recursively + switch (type) + { + case 3: + RecursiveCubicSplit(section, p0.x, p0.y, p0.z, p1.x, p1.y, p1.z, p2.x, p2.y, p2.z, p3.x, p3.y, p3.z, 0, calcTangents, 0, 1); + break; + case 2: + RecursiveQuadraticSplit(section, p0.x, p0.y, p0.z, p1.x, p1.y, p1.z, p3.x, p3.y, p3.z, 0, false, calcTangents, 0, 1); + break; + case 1: + RecursiveQuadraticSplit(section, p0.x, p0.y, p0.z, p2.x, p2.y, p2.z, p3.x, p3.y, p3.z, 0, true, calcTangents, 0, 1); + break; + } + + //===================================== last point + SectionPointInfo lastPoint; + poolCursor = poolPointInfos.Count - 1; + if (poolCursor >= 0) + { + lastPoint = poolPointInfos[poolCursor]; + poolPointInfos.RemoveAt(poolCursor); + } + else lastPoint = new SectionPointInfo(); + lastPoint.Position = p3; + points.Add(lastPoint); + + + //calculate distances (and optionally tangents) + //if set to true, points positions will be used to calculate tangents + calcTangents = cacheTangent && config.UsePointPositionsToCalcTangents; + var prevPoint = points[0]; + for (var i = 1; i < points.Count; i++) + { + var point = points[i]; + + var pos = point.Position; + var prevPos = prevPoint.Position; + + var dX = (double) pos.x - prevPos.x; + var dY = (double) pos.y - prevPos.y; + var dZ = (double) pos.z - prevPos.z; + + //distance + point.DistanceToSectionStart = prevPoint.DistanceToSectionStart + ((float) Math.Sqrt(dX*dX + dY*dY + dZ*dZ)); + + //tangents + if (calcTangents) point.Tangent = Vector3.Normalize(pos - prevPos); + + prevPoint = point; + } + + //set first and last points tangents (cause they was omitted during recursive split) + if (cacheTangent) + { + if (config.UsePointPositionsToCalcTangents) + { + firstPoint.Tangent = (points[1].Position - firstPoint.Position).normalized; + lastPoint.Tangent = points[points.Count - 2].Tangent; + } + else + { + switch (type) + { + case 0: + firstPoint.Tangent = lastPoint.Tangent = (lastPoint.Position - firstPoint.Position).normalized; + break; + case 1: + firstPoint.Tangent = Vector3.Normalize(section.OriginalToControl - section.OriginalFrom); + lastPoint.Tangent = Vector3.Normalize(section.OriginalTo - section.OriginalToControl); + break; + case 2: + firstPoint.Tangent = Vector3.Normalize(section.OriginalFromControl - section.OriginalFrom); + lastPoint.Tangent = Vector3.Normalize(section.OriginalTo - section.OriginalFromControl); + break; + case 3: + firstPoint.Tangent = Vector3.Normalize(section.OriginalFromControl - section.OriginalFrom); + lastPoint.Tangent = Vector3.Normalize(section.OriginalTo - section.OriginalToControl); + break; + } + } + } + } + + + //------------------------------------------------------------------------ Quadratic + //this method contains some intentional copy/paste + private void RecursiveQuadraticSplit(SectionInfo section, double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, int level, bool useSecond, + bool calcTangents, double fromT, double toT) + { + if (level > RecursionLimit) return; + + // is curve flat + // http://www.malinc.se/m/DeCasteljauAndBezier.php + // sqr(b) + sqr(c) < sqr(a) * tolerance + var dx01 = x0 - x1; + var dy01 = y0 - y1; + var dz01 = z0 - z1; + + var dx12 = x1 - x2; + var dy12 = y1 - y2; + var dz12 = z1 - z2; + + var dx02 = x0 - x2; + var dy02 = y0 - y2; + var dz02 = z0 - z2; + + var a = dx02*dx02 + dy02*dy02 + dz02*dz02; + var b = dx01*dx01 + dy01*dy01 + dz01*dz01; + var c = dx12*dx12 + dy12*dy12 + dz12*dz12; + + var temp = a*toleranceRatioSquared - b - c; + + if (4*b*c < temp*temp || a + b + c < DistanceTolerance) return; + + //at this point we know, the curve is not flat + // split (Casteljau algorithm) + var x01 = (x0 + x1)*.5; + var y01 = (y0 + y1)*.5; + var z01 = (z0 + z1)*.5; + + var x12 = (x1 + x2)*.5; + var y12 = (y1 + y2)*.5; + var z12 = (z1 + z2)*.5; + + var x012 = (x01 + x12)*.5; + var y012 = (y01 + y12)*.5; + var z012 = (z01 + z12)*.5; + + + var t = calcTangents ? (fromT + toT)*.5 : .0; + + var pos = new Vector3((float) x012, (float) y012, (float) z012); + + //apply snapping + if (curve.SnapType == BGCurve.SnapTypeEnum.Curve) curve.ApplySnapping(ref pos); + + //split first section + RecursiveQuadraticSplit(section, x0, y0, z0, x01, y01, z01, x012, y012, z012, level + 1, useSecond, calcTangents, fromT, t); + + //add point + SectionPointInfo pointInfo; + var poolCursor = poolPointInfos.Count - 1; + if (poolCursor >= 0) + { + pointInfo = poolPointInfos[poolCursor]; + poolPointInfos.RemoveAt(poolCursor); + } + else pointInfo = new SectionPointInfo(); + pointInfo.Position = pos; + section.points.Add(pointInfo); + + //tangents + if (calcTangents) + { + var control = useSecond ? section.OriginalToControl : section.OriginalFromControl; + //idea.. optimize it + pointInfo.Tangent = Vector3.Normalize(2*(1 - (float) t)*(control - section.OriginalFrom) + 2*(float) t*(section.OriginalTo - control)); + } + + //split second section + RecursiveQuadraticSplit(section, x012, y012, z012, x12, y12, z12, x2, y2, z2, level + 1, useSecond, calcTangents, t, toT); + } + + + //------------------------------------------------------------------------ Cubic + //this method contains some intentional copy/paste + private void RecursiveCubicSplit(SectionInfo section, double x0, double y0, double z0, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, + int level, bool calcTangents, double fromT, double toT) + { + if (level > RecursionLimit) return; + + // is curve flat + // http://www.malinc.se/m/DeCasteljauAndBezier.php + // sqr(b) + sqr(c) + sqr(d) < sqr(a) * tolerance + + var dx01 = x0 - x1; + var dy01 = y0 - y1; + var dz01 = z0 - z1; + + var dx12 = x1 - x2; + var dy12 = y1 - y2; + var dz12 = z1 - z2; + + var dx23 = x2 - x3; + var dy23 = y2 - y3; + var dz23 = z2 - z3; + + var dx03 = x0 - x3; + var dy03 = y0 - y3; + var dz03 = z0 - z3; + + var a = dx03*dx03 + dy03*dy03 + dz03*dz03; + var b = dx01*dx01 + dy01*dy01 + dz01*dz01; + var c = dx12*dx12 + dy12*dy12 + dz12*dz12; + var d = dx23*dx23 + dy23*dy23 + dz23*dz23; + + //idea.. optimize sqrt. Sqrt is expensive call, and 3 Sqrt calls is super expensive to say the least + if (Math.Sqrt(b*c) + Math.Sqrt(c*d) + Math.Sqrt(b*d) < (a*toleranceRatioSquared - b - c - d)*.5 || a + b + c + d < DistanceTolerance) return; + + //at this point we know, the curve is not flat + //split (Casteljau algorithm) + var x01 = (x0 + x1)*.5; + var y01 = (y0 + y1)*.5; + var z01 = (z0 + z1)*.5; + var x12 = (x1 + x2)*.5; + var y12 = (y1 + y2)*.5; + var z12 = (z1 + z2)*.5; + var x23 = (x2 + x3)*.5; + var y23 = (y2 + y3)*.5; + var z23 = (z2 + z3)*.5; + + var x012 = (x01 + x12)*.5; + var y012 = (y01 + y12)*.5; + var z012 = (z01 + z12)*.5; + var x123 = (x12 + x23)*.5; + var y123 = (y12 + y23)*.5; + var z123 = (z12 + z23)*.5; + + var x0123 = (x012 + x123)*.5; + var y0123 = (y012 + y123)*.5; + var z0123 = (z012 + z123)*.5; + + var t = calcTangents ? (fromT + toT)*.5 : .0; + + var pos = new Vector3((float) x0123, (float) y0123, (float) z0123); + + if (curve.SnapType == BGCurve.SnapTypeEnum.Curve) curve.ApplySnapping(ref pos); + + //split first section + RecursiveCubicSplit(section, x0, y0, z0, x01, y01, z01, x012, y012, z012, x0123, y0123, z0123, level + 1, calcTangents, fromT, t); + + //add point + SectionPointInfo pointInfo; + var poolCursor = poolPointInfos.Count - 1; + if (poolCursor >= 0) + { + pointInfo = poolPointInfos[poolCursor]; + poolPointInfos.RemoveAt(poolCursor); + } + else pointInfo = new SectionPointInfo(); + pointInfo.Position = pos; + section.points.Add(pointInfo); + + //tangent + if (calcTangents) + { + var tr = 1 - t; + //idea.. optimize it + pointInfo.Tangent = Vector3.Normalize(3*((float) (tr*tr))*(section.OriginalFromControl - section.OriginalFrom) + + 6*(float) (tr*t)*(section.OriginalToControl - section.OriginalFromControl) + + 3*(float) (t*t)*(section.OriginalTo - section.OriginalToControl)); + } + + + //split second section + RecursiveCubicSplit(section, x0123, y0123, z0123, x123, y123, z123, x23, y23, z23, x3, y3, z3, level + 1, calcTangents, t, toT); + } + + /// Configuration options for Adaptive Math + public class ConfigAdaptive : Config + { + /// + /// This parameter is used to calculate if curve's flat and no more splitting is required + /// Note: The final tolerance parameter, used by Math, is based on this value, but differs + /// + public float Tolerance = .2f; + + /// Construct new config + public ConfigAdaptive(Fields fields) : base(fields) + { + } + } + + public override string ToString() + { + return "Adaptive Math for curve (" + Curve + "), sections=" + SectionsCount; + } + } + + /* + Roger Willcocks flat criteria for quadratic (something wrong here) + var ax = 2*x1 - x2 - x0; + var ay = 2*y1 - y2 - y0; + var az = 2*z1 - z2 - z0; + ax *= ax; + ay *= ay; + az *= az; + + if (ax + ay + az < tolerance) return; +*/ + + /* + Roger Willcocks flat criteria for cubic (does not work well at all)- maybe a bbug or something- have no idea + var ax = 3*x1 - 2*x0 - x3; + var ay = 3*y1 - 2*y0 - y3; + var az = 3*z1 - 2*z0 - z3; + ax *= ax; + ay *= ay; + az *= az; + + var bx = 3*x2 - x0 - 2*x3; + var by = 3*y2 - y0 - 2*y3; + var bz = 3*z2 - z0 - 2*z3; + bx *= bx; + by *= by; + bz *= bz; + + if (Math.Max(ax, bx) + Math.Max(ay, by) + Math.Max(az, bz) < tolerance) return; +*/ +/* + // For Willckock's criteria: 16 and exponenta originate from the flatness calculation + tolerance *= tolerance*16; + */ +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs.meta new file mode 100644 index 0000000..88f470c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveAdaptiveMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a072c590a2e0f41498bf52d7125be6f5 +timeCreated: 1475717589 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs new file mode 100644 index 0000000..a4b273a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs @@ -0,0 +1,1587 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// Basic math operations for curves (Distance, Position, Tangent, Closest point ). + /// It caches some data for quick access and recalculate it if curve changes. + /// It uses uniform split with forward differencing algorithm, which is the fastest available (for uniform split). + /// + public class BGCurveBaseMath : BGCurveMathI, IDisposable + { + #region events + + //=============================================================================================== + // Events + //=============================================================================================== + + /// Change was requested by changed curve's data + public event EventHandler ChangeRequested; + + /// Math was changed + public event EventHandler Changed; + + #endregion + + #region fields + + //=============================================================================================== + // Fields + //=============================================================================================== + + /// all possible attributes (fields) to calculate + public enum Field + { + Position = 1, + Tangent = 2, + } + + /// which fields to precalculate + public enum Fields + { + Position = 1, + PositionAndTangent = 3, + } + + //curve + protected readonly BGCurve curve; + //what and how to calc + protected Config config; + + //cached data for length calculations + protected readonly List cachedSectionInfos = new List(); + + // pools for sections + protected readonly List poolSectionInfos = new List(); + // pools for points + protected readonly List poolPointInfos = new List(); + + //curve's length + protected float cachedLength; + + //should we calculate position? (This is probably always true) + protected bool cachePosition; + //should we calculate tangent? + protected bool cacheTangent; + + //closest point calculator + protected BGCurveCalculatorClosestPoint closestPointCalculator; + + // frame when data was recalculated + private int recalculatedAtFrame = -1; + // frame when math was created + private int createdAtFrame; + + // force section recalculation, even if it's not changed + protected bool ignoreSectionChangedCheck; + + //some coefficients (these are used by approximation algorithm) + private double h; + private double h2; + private double h3; + + /// Suppress all warnings, printed to the log + public bool SuppressWarning { get; set; } + + /// get Curve + public BGCurve Curve + { + get { return curve; } + } + + /// Get calculated sections data + public List SectionInfos + { + get { return cachedSectionInfos; } + } + + /// Access calculated section's data by index + public SectionInfo this[int i] + { + get { return cachedSectionInfos[i]; } + } + + /// How much sections in total + public int SectionsCount + { + get { return cachedSectionInfos.Count; } + } + + /// Get last used config + public Config Configuration + { + get { return config; } + } + + // if tangent is calculated and formula is needed + protected bool NeedTangentFormula + { + get { return !config.UsePointPositionsToCalcTangents && cacheTangent; } + } + + /// How much approximation points are used in total + public int PointsCount + { + get + { + if (SectionsCount == 0) return 0; + var count = 0; + var length = cachedSectionInfos.Count; + for (var i = 0; i < length; i++) count += cachedSectionInfos[i].PointsCount; + return count; + } + } + + #endregion + + #region constructors + + //=============================================================================================== + // Constructors + //=============================================================================================== + + /// Math with default config settings + public BGCurveBaseMath(BGCurve curve) : this(curve, new Config(Fields.Position)) + { + } + + /// Math with config settings + public BGCurveBaseMath(BGCurve curve, Config config) + { + this.curve = curve; + curve.Changed += CurveChanged; + Init(config ?? new Config(Fields.Position)); + } + + /// This is an old constructor, left for compatibility. Only Fields.PositionWorld is calculated. + /// Use another constructor to specify which fields and how need to be calculated. + [Obsolete("Use another constructors")] + public BGCurveBaseMath(BGCurve curve, bool traceChanges, int parts = 30, bool usePointPositionsToCalcTangents = false) + : this(curve, new Config(Fields.Position) {Parts = parts, UsePointPositionsToCalcTangents = usePointPositionsToCalcTangents}) + { + } + + #endregion + + #region Init + + //=============================================================================================== + // Init + //=============================================================================================== + /// Init math with new config and recalculate it's data + public virtual void Init(Config config) + { + //if we calculated positions before (but not tangent) we should skip the check if section was changed or not and force recalculation (cause positions may not change) + if (this.config != null) + { + ignoreSectionChangedCheck = this.config.Fields == Fields.Position && config.Fields == Fields.PositionAndTangent; + this.config.Update -= ConfigOnUpdate; + } + else + { + ignoreSectionChangedCheck = false; + } + + //assign new config + this.config = config; + config.Parts = Mathf.Clamp(config.Parts, 1, 1000); + this.config.Update += ConfigOnUpdate; + + createdAtFrame = Time.frameCount; + cachePosition = Field.Position.In(config.Fields.Val()); + cacheTangent = Field.Tangent.In(config.Fields.Val()); + + //No fields- no need to calculate or trace anything. + if (!cachePosition && !cacheTangent) + throw new UnityException("No fields were chosen. Create math like this: new BGCurveBaseMath(curve, new BGCurveBaseMath.Config(BGCurveBaseMath.Fields.Position))"); + + //some additional init steps for subclasses + AfterInit(config); + + //calculate data, based on new config + Recalculate(true); + } + + //some additional initialization for subclasses + protected virtual void AfterInit(Config config) + { + } + + #endregion + + #region Public methods + + //=============================================================================================== + // Public methods + //=============================================================================================== + + //=========================================== Calculate by formula + + /// Calculate point world position between 2 points by a formula. This is a slow method + /// Ratio between (0,1) + /// Use local coordinates instead of world + public virtual Vector3 CalcPositionByT(BGCurvePoint @from, BGCurvePoint to, float t, bool useLocal = false) + { + t = Mathf.Clamp01(t); + + var fromPos = useLocal ? from.PositionLocal : from.PositionWorld; + var toPos = useLocal ? to.PositionLocal : to.PositionWorld; + + Vector3 result; + if (from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent) + { + //lerp + result = fromPos + ((toPos - fromPos)*t); + } + else + { + var fromPosHandle = useLocal ? from.ControlSecondLocal + fromPos : from.ControlSecondWorld; + var toPosHandle = useLocal ? to.ControlFirstLocal + toPos : to.ControlFirstWorld; + + result = (from.ControlType != BGCurvePoint.ControlTypeEnum.Absent && to.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + ? BGCurveFormulas.BezierCubic(t, fromPos, fromPosHandle, toPosHandle, toPos) + : BGCurveFormulas.BezierQuadratic(t, fromPos, (@from.ControlType == BGCurvePoint.ControlTypeEnum.Absent) ? toPosHandle : fromPosHandle, toPos); + } + return result; + } + + /// Calculate a tangent between 2 points by a formula. This is a slow method + /// Ratio between (0,1) + /// Use local coordinates instead of world + public virtual Vector3 CalcTangentByT(BGCurvePoint @from, BGCurvePoint to, float t, bool useLocal = false) + { + if (Curve.PointsCount < 2) return Vector3.zero; + + t = Mathf.Clamp01(t); + + var fromPos = useLocal ? from.PositionLocal : from.PositionWorld; + var toPos = useLocal ? to.PositionLocal : to.PositionWorld; + + Vector3 result; + if (from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent) + { + result = toPos - fromPos; + } + else + { + var fromPosHandle = useLocal ? from.ControlSecondLocal + fromPos : from.ControlSecondWorld; + var toPosHandle = useLocal ? to.ControlFirstLocal + toPos : to.ControlFirstWorld; + + result = (from.ControlType != BGCurvePoint.ControlTypeEnum.Absent && to.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + ? BGCurveFormulas.BezierCubicDerivative(t, fromPos, fromPosHandle, toPosHandle, toPos) + : BGCurveFormulas.BezierQuadraticDerivative(t, fromPos, (@from.ControlType == BGCurvePoint.ControlTypeEnum.Absent) ? toPosHandle : fromPosHandle, toPos); + } + + return result.normalized; + } + + + //=========================================== Generic methods + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false) + { + return CalcByDistance(cachedLength*distanceRatio, out tangent, useLocal); + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcByDistance(float distance, out Vector3 tangent, bool useLocal = false) + { + if (distance < 0f) distance = 0f; + else if (distance > cachedLength) distance = cachedLength; + + Vector3 position; + BinarySearchByDistance(distance, out position, out tangent, true, true); + + if (useLocal) + { + position = curve.transform.InverseTransformPoint(position); + tangent = curve.transform.InverseTransformDirection(tangent); + } + + return position; + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcByDistanceRatio(Field field, float distanceRatio, bool useLocal = false) + { + return CalcByDistance(field, cachedLength*distanceRatio, useLocal); + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcByDistance(Field field, float distance, bool useLocal = false) + { + var pointsCount = curve.PointsCount; + switch (pointsCount) + { + case 0: + return Vector3.zero; + case 1: + return field == Field.Position ? curve[0].PositionWorld : Vector3.zero; + } + + if (distance < 0f) distance = 0f; + else if (distance > cachedLength) distance = cachedLength; + + var calcPosition = field == Field.Position; + Vector3 position, tangent; + BinarySearchByDistance(distance, out position, out tangent, calcPosition, !calcPosition); + + if (useLocal) + { + switch (field) + { + case Field.Position: + position = curve.transform.InverseTransformPoint(position); + break; + case Field.Tangent: + tangent = curve.transform.InverseTransformDirection(tangent); + break; + } + } + + return calcPosition ? position : tangent; + } + + //=========================================== Position and Tangent + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcPositionAndTangentByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false) + { + return CalcByDistanceRatio(distanceRatio, out tangent, useLocal); + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcPositionAndTangentByDistance(float distance, out Vector3 tangent, bool useLocal = false) + { + return CalcByDistance(distance, out tangent, useLocal); + } + + //=========================================== Position + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcPositionByDistanceRatio(float distanceRatio, bool useLocal = false) + { + return CalcByDistanceRatio(Field.Position, distanceRatio, useLocal); + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcPositionByDistance(float distance, bool useLocal = false) + { + return CalcByDistance(Field.Position, distance, useLocal); + } + + //=========================================== Tangent + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcTangentByDistanceRatio(float distanceRatio, bool useLocal = false) + { + return CalcByDistanceRatio(Field.Tangent, distanceRatio, useLocal); + } + + //using useLocal is significantly slower. See interface for more comments + public virtual Vector3 CalcTangentByDistance(float distance, bool useLocal = false) + { + return CalcByDistance(Field.Tangent, distance, useLocal); + } + + + //=========================================== Find Secton's index + + //see interface for comments + public int CalcSectionIndexByDistance(float distance) + { + return FindSectionIndexByDistance(ClampDistance(distance)); + } + + //see interface for comments + public int CalcSectionIndexByDistanceRatio(float ratio) + { + return FindSectionIndexByDistance(DistanceByRatio(ratio)); + } + + //=========================================== Closest Point + + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + if (closestPointCalculator == null) closestPointCalculator = new BGCurveCalculatorClosestPoint(this); + float distance; + Vector3 tangent; + return closestPointCalculator.CalcPositionByClosestPoint(point, out distance, out tangent, skipSectionsOptimization, skipPointsOptimization); + } + + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + if (closestPointCalculator == null) closestPointCalculator = new BGCurveCalculatorClosestPoint(this); + Vector3 tangent; + return closestPointCalculator.CalcPositionByClosestPoint(point, out distance, out tangent, skipSectionsOptimization, skipPointsOptimization); + } + + //see interface for comments + public Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, out Vector3 tangent, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { + if (closestPointCalculator == null) closestPointCalculator = new BGCurveCalculatorClosestPoint(this); + return closestPointCalculator.CalcPositionByClosestPoint(point, out distance, out tangent, skipSectionsOptimization, skipPointsOptimization); + } + + + //=========================================== Total Distance + //see interface for comments + public virtual float GetDistance() + { + return cachedLength; + } + + //=========================================== Curve's point world coordinates (faster then using point.positionWord etc.) + + /// Get point's world position + public Vector3 GetPosition(int pointIndex) + { + var count = cachedSectionInfos.Count; + + if (count == 0 || count <= pointIndex) return curve[pointIndex].PositionWorld; + + return pointIndex < count ? cachedSectionInfos[pointIndex].OriginalFrom : cachedSectionInfos[pointIndex - 1].OriginalTo; + } + + /// Get point's world first control position + public Vector3 GetControlFirst(int pointIndex) + { + var count = cachedSectionInfos.Count; + + if (count == 0) return curve[pointIndex].ControlFirstWorld; + + if (pointIndex == 0) return curve.Closed ? cachedSectionInfos[count - 1].OriginalToControl : curve[0].ControlFirstWorld; + + return cachedSectionInfos[pointIndex - 1].OriginalToControl; + } + + /// Get point's world second control position + public Vector3 GetControlSecond(int pointIndex) + { + var count = cachedSectionInfos.Count; + + if (count == 0) return curve[pointIndex].ControlSecondWorld; + + if (pointIndex == count) return curve.Closed ? cachedSectionInfos[count - 1].OriginalFromControl : curve[pointIndex].ControlSecondWorld; + + return cachedSectionInfos[pointIndex].OriginalFromControl; + } + + + //=========================================== Misc + /// Is given field is calculated? + /// true if field is calculated + public virtual bool IsCalculated(Field field) + { + return ((int) field & (int) config.Fields) != 0; + } + + // C# standard dispose + public virtual void Dispose() + { + curve.Changed -= CurveChanged; + config.Update -= ConfigOnUpdate; + cachedSectionInfos.Clear(); + poolSectionInfos.Clear(); + } + + + //=========================================== Calculate and cache required data + + /// Calculates and cache all required data for performance reason. It is an expensive operation. + public virtual void Recalculate(bool force = false) + { + if (ChangeRequested != null) ChangeRequested(this, null); + + if (!force && config.ShouldUpdate != null && !config.ShouldUpdate()) return; + + var currentSectionsCount = cachedSectionInfos.Count; + if (curve.PointsCount < 2) + { + cachedLength = 0; + if (currentSectionsCount > 0) cachedSectionInfos.Clear(); + if (Changed != null) Changed(this, null); + return; + } + + //we should at least warn about non-optimal usage of Recalculate (with more than 1 update per frame) + if (recalculatedAtFrame != Time.frameCount || Time.frameCount == createdAtFrame) recalculatedAtFrame = Time.frameCount; + else + Warning("We noticed you are updating math more than once per frame. This is not optimal. " + + "If you use curve.ImmediateChangeEvents by some reason, try to use curve.Transaction to wrap all the changes to one single event."); + + + var pointsCount = curve.PointsCount; + var sectionsCount = curve.Closed ? pointsCount : pointsCount - 1; + + //coefficients + h = 1.0/config.Parts; + h2 = h*h; + h3 = h2*h; + + //ensure all sections inited + if (currentSectionsCount != sectionsCount) + { + if (currentSectionsCount < sectionsCount) + { + //not enough sections + var toAddCount = sectionsCount - currentSectionsCount; + + //try to get from the pool + var poolCount = poolSectionInfos.Count; + var toAddBeforePoolCount = toAddCount; + for (var i = poolCount - 1; i >= 0 && toAddCount > 0; i--, toAddCount--) cachedSectionInfos.Add(poolSectionInfos[i]); + + //pool was used + var usedPoolCount = toAddBeforePoolCount - toAddCount; + if (usedPoolCount != 0) poolSectionInfos.RemoveRange(poolSectionInfos.Count - usedPoolCount, usedPoolCount); + + // we need to create new sections (pool is empty) + if (toAddCount > 0) for (var i = 0; i < toAddCount; i++) cachedSectionInfos.Add(new SectionInfo()); + } + else + { + //too many sections + var toRemoveCount = currentSectionsCount - sectionsCount; + for (var i = sectionsCount; i < currentSectionsCount; i++) poolSectionInfos.Add(cachedSectionInfos[i]); + cachedSectionInfos.RemoveRange(currentSectionsCount - toRemoveCount, toRemoveCount); + } + } + + //calculate fields for each section + for (var i = 0; i < pointsCount - 1; i++) CalculateSection(i, cachedSectionInfos[i], i == 0 ? null : cachedSectionInfos[i - 1], curve[i], curve[i + 1]); + + var lastSection = cachedSectionInfos[sectionsCount - 1]; + if (curve.Closed) + { + CalculateSection(sectionsCount - 1, lastSection, cachedSectionInfos[sectionsCount - 2], curve[pointsCount - 1], curve[0]); + if (cacheTangent) AdjustBoundaryPointsTangents(cachedSectionInfos[0], lastSection); + } + + cachedLength = lastSection.DistanceFromEndToOrigin; + + if (Changed != null) Changed(this, null); + } + + #endregion + + #region protected methods + + //print a message to console if condition is met and calls callback method + protected virtual void Warning(string message, bool condition = true, Action callback = null) + { + if (!condition || !Application.isPlaying) return; + + if (!SuppressWarning) Debug.Log("BGCurve[BGCurveBaseMath] Warning! " + message + ". You can suppress all warnings by using BGCurveBaseMath.SuppressWarning=true;"); + + if (callback != null) callback(); + } + + + //calculates one single section data + // Performance: + // * for example: ~100 000 section points (1000 curve's points with 100 parts each) with both controls + // ~7.8 ms for Position + // ~13.5 ms for PositionAndTangent + protected virtual void CalculateSection(int index, SectionInfo section, SectionInfo prevSection, BGCurvePointI @from, BGCurvePointI to) + { + if (section == null) section = new SectionInfo(); + + section.DistanceFromStartToOrigin = prevSection == null ? 0 : prevSection.DistanceFromEndToOrigin; + + var straightAndOptimized = config.OptimizeStraightLines && @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + var pointsCount = straightAndOptimized ? 2 : config.Parts + 1; + + // do we need to recalc points? + if (Reset(section, @from, to, pointsCount)) + { + if (straightAndOptimized) + { + // ===================================================== Straight section with 2 points + Resize(section.points, 2); + + var startPoint = section.points[0]; + var endPoint = section.points[1]; + + startPoint.Position = section.OriginalFrom; + endPoint.Position = section.OriginalTo; + + //distance + endPoint.DistanceToSectionStart = Vector3.Distance(section.OriginalFrom, section.OriginalTo); + + //tangents + if (cacheTangent) startPoint.Tangent = endPoint.Tangent = (endPoint.Position - startPoint.Position).normalized; + } + else + { + // ===================================================== Section with {parts} smaller sections + CalculateSplitSection(section, @from, to); + } + if (cacheTangent) + { + section.OriginalFirstPointTangent = section[0].Tangent; + section.OriginalLastPointTangent = section[section.PointsCount - 1].Tangent; + } + } + + // we should adjust tangents for previous section's last point and first point of the current section + if (cacheTangent && prevSection != null) AdjustBoundaryPointsTangents(section, prevSection); + + section.DistanceFromEndToOrigin = section.DistanceFromStartToOrigin + section[section.PointsCount - 1].DistanceToSectionStart; + } + + //adjust neighbour adjacent points tangents + private void AdjustBoundaryPointsTangents(SectionInfo section, SectionInfo prevSection) + { + if (IsUseDistanceToAdjustTangents(section, prevSection)) + { + var distance1 = Vector3.SqrMagnitude(section[0].Position - section[1].Position); + var distance2 = Vector3.SqrMagnitude(prevSection[prevSection.PointsCount - 1].Position - prevSection[prevSection.PointsCount - 2].Position); + var overallDistance = distance1 + distance2; + + if (Math.Abs(overallDistance) < BGCurve.Epsilon) return; + + var ratio = distance1/overallDistance; + var reverseRatio = 1 - ratio; + + section[0].Tangent = prevSection[prevSection.PointsCount - 1].Tangent = Vector3.Normalize(new Vector3( + section.OriginalFirstPointTangent.x*ratio + prevSection.OriginalLastPointTangent.x*reverseRatio, + section.OriginalFirstPointTangent.y*ratio + prevSection.OriginalLastPointTangent.y*reverseRatio, + section.OriginalFirstPointTangent.z*ratio + prevSection.OriginalLastPointTangent.z*reverseRatio)); + } + else + { + //both tangents get adjusted + section[0].Tangent = prevSection[prevSection.PointsCount - 1].Tangent = Vector3.Normalize(new Vector3( + section.OriginalFirstPointTangent.x + prevSection.OriginalLastPointTangent.x, + section.OriginalFirstPointTangent.y + prevSection.OriginalLastPointTangent.y, + section.OriginalFirstPointTangent.z + prevSection.OriginalLastPointTangent.z)); + } + } + + //should we use distance between approximation points for adjusting boundary tangents + protected virtual bool IsUseDistanceToAdjustTangents(SectionInfo section, SectionInfo prevSection) + { + return config.OptimizeStraightLines && section.OriginalFromControlType == BGCurvePoint.ControlTypeEnum.Absent && + (section.OriginalToControlType == BGCurvePoint.ControlTypeEnum.Absent || prevSection.OriginalFromControlType == BGCurvePoint.ControlTypeEnum.Absent); + } + + //reset section's data and returns if recalculation is needed + protected virtual bool Reset(SectionInfo section, BGCurvePointI @from, BGCurvePointI to, int pointsCount) + { + return section.Reset(@from, to, pointsCount, ignoreSectionChangedCheck); + } + + + // this method contains some intentional 1) copy/paste 2) methods inlining 3) operators inlining- to increase performance + + /** + * Calculates one split section's data using forward differencing algorithm + * + * The technique of forward differencing allows us to compute the polynomial at t=0, + * and then incrementally calculate points by adding (and updating) the differences. + * + * Thanks to Russel Lindsay (https://gist.github.com/rlindsay/c55be560ec41144f521f) + * + * Formulas for difference between t and t+h for cubic, quadratic, and linear polynomials + * (notice that the difference between t and t+h for a cubic polynomial is quadratic ((3ak)t^2 + (3ak^2 + 2bk)t + ak^3 + bk^2 + ck), + * likewise the difference in the quadratic case is linear, and in the linear case is a constant) + * + * -------------------- + * Cubic polynomial (4 points, a, b, c, d) + * C(t) = a*t^3 + b*t^2 + c*t + d + * + * Cubic polynomial difference + * C(t + h) - C(t) http://www.wolframalpha.com/input/?i=%28a*%28t+%2B+h%29%5E3+%2B+b*%28t+%2B+h%29%5E2+%2B+c*%28t+%2B+h%29+%2B+d%29+-+%28a*t%5E3+%2B+b*t%5E2+%2B+c*t+%2B+d%29+ + * = ah^3 + 3ah^2 t + 3aht^2 + bh^2 + 2bht + ch + ---> i) = (3ah)t^2 + (3ah^2 + 2bh)t + ah^3 + bh^2 + ch + * + * -------------------- + * quadratic polynomial + * Q(t) = at^2 + bt + c + * + * quadratic polynomial difference + * Q(t + h) - Q(t) http://www.wolframalpha.com/input/?i=%28a%28t%2Bh%29%5E2+%2B+b%28t%2Bh%29+%2B+c%29+-+%28at%5E2+%2B+bt+%2B+c%29 + ---> ii) = (2ah)t + ah^2 + bh + * + * ------------------ + * linear polynomial + * L(t) = at + b + * + * linear polynomial difference + * L(t + h) - L(t) http://www.wolframalpha.com/input/?i=%28a%28t+%2B+h%29+%2B+b%29+-+%28at+%2B+b%29 + ---> iii) = ah + */ + + protected virtual void CalculateSplitSection(SectionInfo section, BGCurvePointI @from, BGCurvePointI to) + { + var parts = config.Parts; + Resize(section.points, parts + 1); + + var points = section.points; + + // all section's values + var fromPos = section.OriginalFrom; + var toPos = section.OriginalTo; + var control1 = section.OriginalFromControl; + var control2 = section.OriginalToControl; + + var controlFromAbsent = @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + var controlToAbsent = to.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + var noControls = controlFromAbsent && controlToAbsent; + var bothControls = !controlFromAbsent && !controlToAbsent; + if (!noControls && !bothControls && controlFromAbsent) control1 = control2; + + //snapping + var snapIsOn = curve.SnapType == BGCurve.SnapTypeEnum.Curve; + + //assign first last points directly to avoid accumulation errors + var firstPoint = points[0] ?? (section.points[0] = new SectionPointInfo()); + firstPoint.Position = fromPos; + var lastPoint = points[parts] ?? (section.points[parts] = new SectionPointInfo()); + lastPoint.Position = toPos; + + + if (noControls) + { + // ======================================================== NoControls + + var currentX = (double) fromPos.x; + var currentY = (double) fromPos.y; + var currentZ = (double) fromPos.z; + + var stepX = ((double) toPos.x - fromPos.x)/parts; + var stepY = ((double) toPos.y - fromPos.y)/parts; + var stepZ = ((double) toPos.z - fromPos.z)/parts; + + var fromToTangentWorld = Vector3.zero; + if (cacheTangent) fromToTangentWorld = (toPos - fromPos).normalized; + + lastPoint.DistanceToSectionStart = Vector3.Distance(toPos, fromPos); + var onePartDistance = lastPoint.DistanceToSectionStart/parts; + + //-------------------------------- Critical section + for (var i = 1; i < parts; i++) + { + var point = points[i]; + + currentX += stepX; + currentY += stepY; + currentZ += stepZ; + + var pos = new Vector3((float) currentX, (float) currentY, (float) currentZ); + + if (snapIsOn) curve.ApplySnapping(ref pos); + + point.Position = pos; + + //---------- tangents + if (cacheTangent) + { + if (config.UsePointPositionsToCalcTangents) + { + //-------- Calc by point's positions + var prevPoint = section[i - 1]; + var prevPosition = prevPoint.Position; + var tangent = new Vector3(pos.x - prevPosition.x, pos.y - prevPosition.y, pos.z - prevPosition.z); + //normalized inlined + var marnitude = (float) Math.Sqrt((double) tangent.x*(double) tangent.x + (double) tangent.y*(double) tangent.y + (double) tangent.z*(double) tangent.z); + tangent = ((double) marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x/marnitude, tangent.y/marnitude, tangent.z/marnitude) : Vector3.zero; + + prevPoint.Tangent = point.Tangent = tangent; + } + else point.Tangent = fromToTangentWorld; + } + + point.DistanceToSectionStart = onePartDistance*i; + } + //-------------------------------- Critical section ends + + //assign last point separately to get rid of accumulation errors + if (cacheTangent) firstPoint.Tangent = lastPoint.Tangent = fromToTangentWorld; + } + else + { + //for tangents + double tX = 0, tY = 0, tZ = 0, firstTDx = 0, firstTDy = 0, firstTDz = 0; + + if (bothControls) + { + // ======================================================== Both Controls (Cubic Bezier) + + /* coefficients for control points (it's a standard Bezier matrix) + * you can get these numbers by converting parametric equation to standard polinomial form + * + * | 1 0 0 0| |A| | A | + * |-3 3 0 0| * |B| = | -3A + 3B | + * | 3 -6 3 0| |C| | 3A - 6B + 3C | + * |-1 3 -3 1| |D| |-A + 3B - 3C + D| + * + * http://www.wolframalpha.com/input/?i=%7B%7B1,+0,+0,+0%7D,%7B-3,+3,+0,+0%7D,+%7B3,+-6,+3,+0%7D,+%7B-1,+3,+-3,+1%7D%7D*%7B%7Bp_0%7D,+%7Bp_1%7D,+%7Bp_2%7D,+%7Bp_3%7D%7D + * + */ + // the same as in above matrix (top down) + var cx = 3*((double) control1.x - fromPos.x); + var cy = 3*((double) control1.y - fromPos.y); + var cz = 3*((double) control1.z - fromPos.z); + + var bx = 3*((double) control2.x - control1.x) - cx; + var by = 3*((double) control2.y - control1.y) - cy; + var bz = 3*((double) control2.z - control1.z) - cz; + + var ax = (double) toPos.x - fromPos.x - cx - bx; + var ay = (double) toPos.y - fromPos.y - cy - by; + var az = (double) toPos.z - fromPos.z - cz - bz; + + var pointX = (double) fromPos.x; + var pointY = (double) fromPos.y; + var pointZ = (double) fromPos.z; + + var axH3 = ax*h3; + var ax6H3 = 6*axH3; + var ayH3 = ay*h3; + var ay6H3 = 6*ayH3; + var azH3 = az*h3; + var az6H3 = 6*azH3; + + var bxH2 = bx*h2; + var byH2 = by*h2; + var bzH2 = bz*h2; + + /* First Difference + * the difference between t and t+h. Since the curve is cubic, difference is (from Formula i, see header) + * i) (3ah)t^2 + (3ah^2 + 2bh)t + ah^3 + bh^2 + ch + * + * Since we are calculating from the start of the curve, t = 0. + * + * http://www.wolframalpha.com/input/?i=(a*(0+%2B+h)%5E3+%2B+b*(0+%2B+h)%5E2+%2B+c*(0+%2B+h)+%2B+d)+-+(a*0%5E3+%2B+b*0%5E2+%2B+c*0+%2B+d) + * D1 = ah^3 + bh^2 + ch + */ + var firstDx = axH3 + bxH2 + cx*h; + var firstDy = ayH3 + byH2 + cy*h; + var firstDz = azH3 + bzH2 + cz*h; + + /* + * Second Difference: + * + * the difference between two successive first differences. Since the form of the first difference is quadratic, the difference + * between two of them is (from Formula ii, see header ) + * ii) (2ah)t + ah^2 + bh + * + * Substituting + * t = 0 to calculate the difference at the start of the curve, + * a = 3ah, + * b = 3ah^2 + 2bh (see D1 calculation, Formula i ) + * we get + * D2 = (6ah^2)t + 6ah^3 + 2bh^2 http://www.wolframalpha.com/input/?i=%282*3*a*h*h%29t+%2B+3*a*h*h%5E2+%2B+%283*a*h%5E2+%2B+2*b*h%29h + * = 6ah^3 + 2bh^2 + */ + var secondDx = ax6H3 + 2*bxH2; + var secondDy = ay6H3 + 2*byH2; + var secondDz = az6H3 + 2*bzH2; + + /* + * Third difference: + * + * the difference between two successive second differences. since the form is linear + * iii) ah + * substituting + * a = 6ah^2 (see D2 calculation) + * D3 = 6ah^3 http://www.wolframalpha.com/input/?i=6*a*h%5E2+*+h + * + */ + var thirdDx = ax6H3; + var thirdDy = ay6H3; + var thirdDz = az6H3; + + + double secondTDx = 0, secondTDy = 0, secondTDz = 0; + if (cacheTangent && !config.UsePointPositionsToCalcTangents) + { + //the same thing as with positions + //parametric to polinomial standard + //3*(1-t)^2*(p1-p0) + 6*(1-t)*t*(p2-p1) + 3*t^2*(p3-p2)=(-3*p0+9*p1-9*p2+3*p3)*t^2 + (6*p0-12*p1+6*p2)*t + (3*p1-3*p0) + var tbx = 6*((double) fromPos.x - 2*control1.x + control2.x); + var tby = 6*((double) fromPos.y - 2*control1.y + control2.y); + var tbz = 6*((double) fromPos.z - 2*control1.z + control2.z); + + var tax = 3*((double) -fromPos.x + 3*control1.x - 3*control2.x + toPos.x); + var tay = 3*((double) -fromPos.y + 3*control1.y - 3*control2.y + toPos.y); + var taz = 3*((double) -fromPos.z + 3*control1.z - 3*control2.z + toPos.z); + + //temp + var taxH2 = tax*h2; + var tayH2 = tay*h2; + var tazH2 = taz*h2; + + + // ii) (2ah)t + ah^2 + bh, t=0 + firstTDx = taxH2 + tbx*h; + firstTDy = tayH2 + tby*h; + firstTDz = tazH2 + tbz*h; + + // iii) = ah, a=2ah + secondTDx = 2*taxH2; + secondTDy = 2*tayH2; + secondTDz = 2*tazH2; + + tX = cx; + tY = cy; + tZ = cz; + + //normalized inlined + var magnitude = Math.Sqrt(tX*tX + tY*tY + tZ*tZ); + firstPoint.Tangent = magnitude > 9.99999974737875E-06 ? new Vector3((float) (tX/magnitude), (float) (tY/magnitude), (float) (tZ/magnitude)) : Vector3.zero; + } + + //-------------------------------- Critical section + for (var i = 1; i < parts; i++) + { + var point = points[i]; + + pointX += firstDx; + pointY += firstDy; + pointZ += firstDz; + + firstDx += secondDx; + firstDy += secondDy; + firstDz += secondDz; + + secondDx += thirdDx; + secondDy += thirdDy; + secondDz += thirdDz; + + var pos = new Vector3((float) pointX, (float) pointY, (float) pointZ); + + if (snapIsOn) curve.ApplySnapping(ref pos); + + point.Position = pos; + + if (cacheTangent) + { + if (config.UsePointPositionsToCalcTangents) + { + //-------- Calc by point's positions + var prevPoint = section[i - 1]; + var prevPosition = prevPoint.Position; + var tangent = new Vector3(pos.x - prevPosition.x, pos.y - prevPosition.y, pos.z - prevPosition.z); + //normalized inlined + var marnitude = (float) Math.Sqrt((double) tangent.x*(double) tangent.x + (double) tangent.y*(double) tangent.y + (double) tangent.z*(double) tangent.z); + tangent = ((double) marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x/marnitude, tangent.y/marnitude, tangent.z/marnitude) : Vector3.zero; + + prevPoint.Tangent = point.Tangent = tangent; + } + else + { + tX += firstTDx; + tY += firstTDy; + tZ += firstTDz; + + firstTDx += secondTDx; + firstTDy += secondTDy; + firstTDz += secondTDz; + + //normalized inlined + var magnitude = Math.Sqrt(tX*tX + tY*tY + tZ*tZ); + point.Tangent = magnitude > 9.99999974737875E-06 ? new Vector3((float) (tX/magnitude), (float) (tY/magnitude), (float) (tZ/magnitude)) : Vector3.zero; + } + } + + // ---------- distance to section start (Vector3.Distance inlined) + var prevPos = section[i - 1].Position; + double deltaX = pos.x - prevPos.x; + double deltaY = pos.y - prevPos.y; + double deltaZ = pos.z - prevPos.z; + point.DistanceToSectionStart = section[i - 1].DistanceToSectionStart + ((float) Math.Sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)); + } + //-------------------------------- Critical section ends + } + else + { + // ======================================================== One Control (Quadratic Bezier) + // see comments for cubic bezier for more details + // parametric to polinomial standard form + // (1-t)^2*p0 + 2(1-t)*t*p1+t^2*p2 = (p0-2p1+p2)*t^2 + (-2p0+2p1)*t + p0 + + var bx = 2*((double) control1.x - fromPos.x); + var by = 2*((double) control1.y - fromPos.y); + var bz = 2*((double) control1.z - fromPos.z); + + var ax = (double) fromPos.x - 2*control1.x + toPos.x; + var ay = (double) fromPos.y - 2*control1.y + toPos.y; + var az = (double) fromPos.z - 2*control1.z + toPos.z; + + // ii) = (2ah)t + ah^2 + bh, t=0 + var firstDx = ax*h2 + bx*h; + var firstDy = ay*h2 + by*h; + var firstDz = az*h2 + bz*h; + + // iii) ah, a=2ah + var secondDx = 2*ax*h2; + var secondDy = 2*ay*h2; + var secondDz = 2*az*h2; + + var pointX = (double) fromPos.x; + var pointY = (double) fromPos.y; + var pointZ = (double) fromPos.z; + + if (cacheTangent && !config.UsePointPositionsToCalcTangents) + { + //the same thing as with positions + //parametric to polinomial standard + // 2*(1-t)*(p1-p0) + 2t*(p2-p1) = (2*p0-4*p1+2*p2)*t + (2*p1-2*p0) + var tax = 2*((double) fromPos.x - 2*control1.x + toPos.x); + var tay = 2*((double) fromPos.y - 2*control1.y + toPos.y); + var taz = 2*((double) fromPos.z - 2*control1.z + toPos.z); + + // iii) = ah + firstTDx = tax*h; + firstTDy = tay*h; + firstTDz = taz*h; + + tX = 2*((double) control1.x - fromPos.x); + tY = 2*((double) control1.y - fromPos.y); + tZ = 2*((double) control1.z - fromPos.z); + + //normalized inlined + var magnitude = Math.Sqrt(tX*tX + tY*tY + tZ*tZ); + firstPoint.Tangent = magnitude > 9.99999974737875E-06 ? new Vector3((float) (tX/magnitude), (float) (tY/magnitude), (float) (tZ/magnitude)) : Vector3.zero; + } + //-------------------------------- Critical section + for (var i = 1; i < parts; i++) + { + var point = points[i]; + + pointX += firstDx; + pointY += firstDy; + pointZ += firstDz; + + firstDx += secondDx; + firstDy += secondDy; + firstDz += secondDz; + + var pos = new Vector3((float) pointX, (float) pointY, (float) pointZ); + + if (snapIsOn) curve.ApplySnapping(ref pos); + + point.Position = pos; + + if (cacheTangent) + { + if (config.UsePointPositionsToCalcTangents) + { + //-------- Calc by point's positions + var prevPoint = section[i - 1]; + var prevPosition = prevPoint.Position; + var tangent = new Vector3(pos.x - prevPosition.x, pos.y - prevPosition.y, pos.z - prevPosition.z); + //normalized inlined + var marnitude = (float) Math.Sqrt((double) tangent.x*(double) tangent.x + (double) tangent.y*(double) tangent.y + (double) tangent.z*(double) tangent.z); + tangent = ((double) marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x/marnitude, tangent.y/marnitude, tangent.z/marnitude) : Vector3.zero; + + prevPoint.Tangent = point.Tangent = tangent; + } + else + { + tX += firstTDx; + tY += firstTDy; + tZ += firstTDz; + + //normalized inlined + var magnitude = Math.Sqrt(tX*tX + tY*tY + tZ*tZ); + point.Tangent = magnitude > 9.99999974737875E-06 ? new Vector3((float) (tX/magnitude), (float) (tY/magnitude), (float) (tZ/magnitude)) : Vector3.zero; + } + } + + // ---------- distance to section start (Vector3.Distance inlined) + var prevPos = section[i - 1].Position; + double deltaX = pos.x - prevPos.x; + double deltaY = pos.y - prevPos.y; + double deltaZ = pos.z - prevPos.z; + point.DistanceToSectionStart = section[i - 1].DistanceToSectionStart + ((float) Math.Sqrt(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ)); + } + //-------------------------------- Critical section ends + } + + //last point's tangent + if (cacheTangent && !config.UsePointPositionsToCalcTangents) + { + tX += firstTDx; + tY += firstTDy; + tZ += firstTDz; + var magnitude = Math.Sqrt(tX*tX + tY*tY + tZ*tZ); + lastPoint.Tangent = magnitude > 9.99999974737875E-06 ? new Vector3((float) (tX/magnitude), (float) (tY/magnitude), (float) (tZ/magnitude)) : Vector3.zero; + } + } + + //last Point's distance + var beforeLastPoint = section[parts - 1]; + var beforeLastPos = beforeLastPoint.Position; + var lastPointPos = lastPoint.Position; + double dX = lastPointPos.x - beforeLastPos.x; + double dY = lastPointPos.y - beforeLastPos.y; + double dZ = lastPointPos.z - beforeLastPos.z; + lastPoint.DistanceToSectionStart = beforeLastPoint.DistanceToSectionStart + ((float) Math.Sqrt(dX*dX + dY*dY + dZ*dZ)); + + //last point's tangent + if (cacheTangent && config.UsePointPositionsToCalcTangents) + { + //-------- Calc by point's positions + + var tangent = new Vector3((float) dX, (float) dY, (float) dZ); + //normalized inlined + var marnitude = (float) Math.Sqrt((double) tangent.x*(double) tangent.x + (double) tangent.y*(double) tangent.y + (double) tangent.z*(double) tangent.z); + tangent = ((double) marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x/marnitude, tangent.y/marnitude, tangent.z/marnitude) : Vector3.zero; + + lastPoint.Tangent = tangent; + } + } + + + //search cached data and returns point's position or tangent at given distance from curve's start + // * for example (1000 sections with 100 points each, so 100 000 points) with 10000 Random searches ~7ms + protected virtual void BinarySearchByDistance(float distance, out Vector3 position, out Vector3 tangent, bool calculatePosition, bool calculateTangent) + { + var pointsCount = Curve.PointsCount; + if (pointsCount < 2 || cachedSectionInfos.Count == 0) + { + position = Vector3.zero; + tangent = Vector3.zero; + if (pointsCount == 1 && calculatePosition) position = Curve[0].PositionWorld; + } + + // field was not set in the constructor, so it was not calculated and can not be accessed. + // Example, use new BGCurveBaseMath(new BGCurveBaseMath.Params(GetComponent(), BGCurveBaseMath.Fields.PositionAndTangent)) + // to calculate world's position and tangent + if (calculateTangent && ((int) Field.Tangent & (int) config.Fields) == 0) + throw new UnityException("Can not calculate tangent, cause it was not included in the 'fields' constructor parameter. " + + "For example, use new BGCurveBaseMath(curve, new BGCurveBaseMath.Config(" + + "BGCurveBaseMath.Fields.PositionAndTangent))" + + "to calculate world's position and tangent"); + + + var targetSection = cachedSectionInfos[FindSectionIndexByDistance(distance)]; + + //after we found a section, let's search within this section + targetSection.CalcByDistance(distance - targetSection.DistanceFromStartToOrigin, out position, out tangent, calculatePosition, calculateTangent); + } + + //find section by distance + protected int FindSectionIndexByDistance(float distance) + { + // ----- critical section start + int low = 0, mid = 0, high = cachedSectionInfos.Count, i = 0; + while (low < high) + { + mid = (low + high) >> 1; + var item = cachedSectionInfos[mid]; + + //success + if (distance >= item.DistanceFromStartToOrigin && distance <= item.DistanceFromEndToOrigin) break; + + if (distance < item.DistanceFromStartToOrigin) high = mid; + else low = mid + 1; + + //just in case + if (i++ > 100) throw new UnityException("Something wrong: more than 100 iterations inside BinarySearch"); + } + // ----- critical section end + + return mid; + } + + + //convert ratio to distance + protected float DistanceByRatio(float distanceRatio) + { + return GetDistance()*Mathf.Clamp01(distanceRatio); + } + + //ensure distance is within proper range + protected float ClampDistance(float distance) + { + return Mathf.Clamp(distance, 0, GetDistance()); + } + + public override string ToString() + { + return "Base Math for curve (" + Curve + "), sections=" + SectionsCount; + } + + #endregion + + #region private methods + + //=============================================================================================== + // Private functions + //=============================================================================================== + + protected void Resize(List points, int size) + { + var pointCount = points.Count; + if (pointCount == size) return; + + //size mismatch + if (pointCount < size) + { + //we need more points + var poolIndex = poolPointInfos.Count - 1; + for (var i = pointCount; i < size; i++) points.Add(poolIndex >= 0 ? poolPointInfos[poolIndex--] : new SectionPointInfo()); + + //pool was used + if (poolIndex != poolPointInfos.Count - 1) poolPointInfos.RemoveRange(poolIndex + 1, poolPointInfos.Count - 1 - poolIndex); + } + else + { + //we need less points + for (var i = size; i < pointCount; i++) poolPointInfos.Add(points[i]); + + points.RemoveRange(size, pointCount - size); + } + } + + + private void CurveChanged(object sender, BGCurveChangedArgs e) + { + ignoreSectionChangedCheck = e != null && e.ChangeType == BGCurveChangedArgs.ChangeTypeEnum.Snap; + Recalculate(); + ignoreSectionChangedCheck = false; + } + + private void ConfigOnUpdate(object sender, EventArgs eventArgs) + { + Recalculate(true); + } + + #endregion + + #region Helper model classes + + //=============================================================================================== + // Helper classes + //=============================================================================================== + + + /// params for calculations + public class Config + { + /// Which fields to calculate and cache. Do not use more fields then needed. + public Fields Fields = Fields.Position; + + /// number of parts each curve's section will be devided to. Range[1, 1000] + public int Parts = 30; + + /// Use points position instead of formula to calc tangents. This can increase performace. + public bool UsePointPositionsToCalcTangents; + + /// Do not split straight lines during precalculation (use only 2 points per section).Tangents may suffer + public bool OptimizeStraightLines; + + /// If not null it can control if math should update it's data. Updating cached data takes some resources, so this param can control updating strategy + public Func ShouldUpdate; + + /// If not null math will update on this event + public event EventHandler Update; + + + public Config() + { + } + + /// Fields (from BGCurveBaseMath.Field) you want to precalculate and cache. + /// 'None' means- no precalculation and caching will occur, but as a result you will be able to use CalcPositionByT and CalcTangentByT methods only. + /// See class documentation for more info. + public Config(Fields fields) + { + Fields = fields; + } + + protected bool Equals(Config other) + { + return Fields == other.Fields && Parts == other.Parts && UsePointPositionsToCalcTangents == other.UsePointPositionsToCalcTangents && + OptimizeStraightLines == other.OptimizeStraightLines; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((Config) obj); + } + + public override int GetHashCode() + { + var hashCode = (int) Fields; + hashCode = (hashCode*397) ^ Parts; + hashCode = (hashCode*397) ^ UsePointPositionsToCalcTangents.GetHashCode(); + hashCode = (hashCode*397) ^ OptimizeStraightLines.GetHashCode(); + return hashCode; + } + + /// Fire Updated event + public void FireUpdate() + { + if (Update != null) Update(this, null); + } + } + + /// information for one single section (between 2 points) of the curve + public class SectionInfo + { + /// distance from section start to curve start + public float DistanceFromStartToOrigin; + + /// distance from section end to curve start + public float DistanceFromEndToOrigin; + + //all the points in this section + protected internal readonly List points = new List(); + + + /// From location, used by calculation + public Vector3 OriginalFrom; + + /// To location, used by calculation + public Vector3 OriginalTo; + + /// From control type, used by calculation + public BGCurvePoint.ControlTypeEnum OriginalFromControlType; + + /// To control type, used by calculation + public BGCurvePoint.ControlTypeEnum OriginalToControlType; + + /// From control position, used by calculation + public Vector3 OriginalFromControl; + + /// To control position, used by calculation + public Vector3 OriginalToControl; + + // we need these 2 following fields, cause this section can get skipped while calculation, but adjacent sections may change, + // and this will affect adjacent points tangents + // so we need these "original tangents" to calculate final tangents in case this section will get skipped + /// First point tangent, calculated for the first time + public Vector3 OriginalFirstPointTangent; + + /// Last point tangent, calculated for the first time + public Vector3 OriginalLastPointTangent; + + /// Approximation points in the section + public List Points + { + get { return points; } + } + + /// Approximation points count + public int PointsCount + { + get { return points.Count; } + } + + /// Section's total distance + public float Distance + { + get { return DistanceFromEndToOrigin - DistanceFromStartToOrigin; } + } + + public override string ToString() + { + return "Section distance=(" + Distance + ")"; + } + + /// Get section's point by index + public SectionPointInfo this[int i] + { + get { return points[i]; } + set { points[i] = value; } + } + + /// Reset section's init data and returns true, if (re)calculation is needed + protected internal bool Reset(BGCurvePointI fromPoint, BGCurvePointI toPoint, int pointsCount, bool skipCheck) + { + var newFrom = fromPoint.PositionWorld; + var newTo = toPoint.PositionWorld; + var newFromControl = fromPoint.ControlSecondWorld; + var newToControl = toPoint.ControlFirstWorld; + + const float epsilon = 0.000001f; + if ( + !skipCheck + && points.Count == pointsCount + && OriginalFromControlType == fromPoint.ControlType + && OriginalToControlType == toPoint.ControlType + && Vector3.SqrMagnitude(new Vector3(OriginalFrom.x - newFrom.x, OriginalFrom.y - newFrom.y, OriginalFrom.z - newFrom.z)) < epsilon + && Vector3.SqrMagnitude(new Vector3(OriginalTo.x - newTo.x, OriginalTo.y - newTo.y, OriginalTo.z - newTo.z)) < epsilon + && Vector3.SqrMagnitude(new Vector3(OriginalFromControl.x - newFromControl.x, OriginalFromControl.y - newFromControl.y, OriginalFromControl.z - newFromControl.z)) < epsilon + && Vector3.SqrMagnitude(new Vector3(OriginalToControl.x - newToControl.x, OriginalToControl.y - newToControl.y, OriginalToControl.z - newToControl.z)) < epsilon + ) + return false; + + OriginalFrom = newFrom; + OriginalTo = newTo; + OriginalFromControlType = fromPoint.ControlType; + OriginalToControlType = toPoint.ControlType; + OriginalFromControl = newFromControl; + OriginalToControl = newToControl; + return true; + } + + //copy pasted binary search algorithm + public int FindPointIndexByDistance(float distanceWithinSection) + { + var pointsCountMinusOne = points.Count - 1; + + // ----- critical section start (copy paste) + int low = 0, mid = 0, high = points.Count, i = 0; + while (low < high) + { + mid = (low + high) >> 1; + var item = points[mid]; + + //success + if (!(distanceWithinSection < item.DistanceToSectionStart) && (mid == pointsCountMinusOne || points[mid + 1].DistanceToSectionStart >= distanceWithinSection)) break; + + if (distanceWithinSection < item.DistanceToSectionStart) high = mid; + else low = mid + 1; + + //just in case + if (i++ > 100) throw new UnityException("Something wrong: more than 100 iterations inside BinarySearch"); + } + // ----- critical section end + return mid; + } + + /// Calculates posiiton and distance by distance within this section. Note, it does not apply any checking for performance's sake + public void CalcByDistance(float distanceWithinSection, out Vector3 position, out Vector3 tangent, bool calculatePosition, bool calculateTangent) + { + position = Vector3.zero; + tangent = Vector3.zero; + + if (points.Count == 2) + { + //linear + var first = points[0]; + + if (Math.Abs(Distance) < BGCurve.Epsilon) + { + if (calculatePosition) position = first.Position; + if (calculateTangent) tangent = first.Tangent; + } + else + { + var ratio = distanceWithinSection/Distance; + var second = points[1]; + if (calculatePosition) position = Vector3.Lerp(first.Position, second.Position, ratio); + if (calculateTangent) tangent = Vector3.Lerp(first.Tangent, second.Tangent, ratio); + } + } + else + { + var pointIndex = FindPointIndexByDistance(distanceWithinSection); + var targetPoint = points[pointIndex]; + + //the very last point within section + if (pointIndex == points.Count - 1) + { + if (calculatePosition) position = targetPoint.Position; + if (calculateTangent) tangent = targetPoint.Tangent; + } + else + { + var nextPoint = points[pointIndex + 1]; + + //this is the distance between 2 points + var distanceBetweenTwoPoints = (nextPoint.DistanceToSectionStart - targetPoint.DistanceToSectionStart); + //this is smaller distance between 1st point and target distance. distanceWithinSection= the distance from section start to target distance + var distanceWithinTwoPoints = (distanceWithinSection - targetPoint.DistanceToSectionStart); + //zero division check + var ratio = Math.Abs(distanceBetweenTwoPoints) < BGCurve.Epsilon ? 0 : distanceWithinTwoPoints/distanceBetweenTwoPoints; + + //lerp target's field between 1st and 2nd points using a ratio, which is based on the distance between them + if (calculatePosition) position = Vector3.Lerp(targetPoint.Position, nextPoint.Position, ratio); + if (calculateTangent) tangent = Vector3.Lerp(targetPoint.Tangent, nextPoint.Tangent, ratio); + } + } + } + } + + /// information for one point within a section (BGCurveBaseMath.Section) + public class SectionPointInfo + { + /// point's world position + public Vector3 Position; + + + /// distance from the start of the section to this point + public float DistanceToSectionStart; + + /// point's world tangent + public Vector3 Tangent; + + //get field's value (position or tangent) + internal Vector3 GetField(Field field) + { + Vector3 result; + switch (field) + { + case Field.Position: + result = Position; + break; + case Field.Tangent: + result = Tangent; + break; + default: + throw new UnityException("Unknown field=" + field); + } + return result; + } + + //lerp field's value (position or tangent) between two points by ratio + internal Vector3 LerpTo(Field field, SectionPointInfo to, float ratio) + { + return Vector3.Lerp(GetField(field), to.GetField(field), ratio); + } + + + public override string ToString() + { + return "Point at (" + Position + ")"; + } + } + + #endregion + } + + #region Helper extensions for Field and Fields enums + + //=============================================================================================== + // Extensions + //=============================================================================================== + + //helper extension class for Field enum + public static class FieldExtensions + { + /// if given fieldEnum is contained in the mask + public static bool In(this BGCurveBaseMath.Field field, int mask) + { + return (field.Val() & mask) != 0; + } + + /// cast to int + public static int Val(this BGCurveBaseMath.Field field) + { + return (int) field; + } + } + + public static class FieldsExtensions + { + /// cast to int + public static int Val(this BGCurveBaseMath.Fields fields) + { + return (int) fields; + } + } + + #endregion +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs.meta new file mode 100644 index 0000000..e343af9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveBaseMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2d95a3b4385ca2245a96749f7eab3753 +timeCreated: 1458540196 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs new file mode 100644 index 0000000..50b6e30 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs @@ -0,0 +1,656 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// Closest point related calculations + /// + //this class contains some intentional copy/paste for the sake of performance + public class BGCurveCalculatorClosestPoint + { + // transitions ("safe" or not) + private static readonly int[] TransitionsForPartitions; + + // math to use for calculation + private readonly BGCurveBaseMath math; + + //reusable arrays to reduce GC + private bool[] excludedSections; + private float[] minSectionDistances; + + + static BGCurveCalculatorClosestPoint() + { + // Init transitions data + + //25=inside + const int nearPlane = (1 << 0) + (1 << 1) + (1 << 2) + (1 << 3) + (1 << 4) + (1 << 5) + (1 << 6) + (1 << 7) + (1 << 24); + const int farPlane = (1 << 16) + (1 << 17) + (1 << 18) + (1 << 19) + (1 << 20) + (1 << 21) + (1 << 22) + (1 << 23) + (1 << 26); + const int bottomPlane = (1 << 0) + (1 << 6) + (1 << 7) + (1 << 8) + (1 << 14) + (1 << 15) + (1 << 16) + (1 << 22) + (1 << 23); + const int topPlane = (1 << 2) + (1 << 3) + (1 << 4) + (1 << 10) + (1 << 11) + (1 << 12) + (1 << 18) + (1 << 19) + (1 << 20); + const int leftPlane = (1 << 0) + (1 << 1) + (1 << 2) + (1 << 8) + (1 << 9) + (1 << 10) + (1 << 16) + (1 << 17) + (1 << 18); + const int rightPlane = (1 << 4) + (1 << 5) + (1 << 6) + (1 << 12) + (1 << 13) + (1 << 14) + (1 << 20) + (1 << 21) + (1 << 22); + + //transition from->to which is considered safe in terms of mininum closest point search + //total 27 partitions + TransitionsForPartitions = new[] + { + //z==0 (near) + /*0*/ nearPlane | leftPlane | bottomPlane, + /*1*/ nearPlane | leftPlane, + /*2*/ nearPlane | leftPlane | topPlane, + /*3*/ nearPlane | topPlane, + /*4*/ nearPlane | rightPlane | topPlane, + /*5*/ nearPlane | rightPlane, + /*6*/ nearPlane | rightPlane | bottomPlane, + /*7*/ nearPlane | bottomPlane, + + //z==1 (middle) + /*8*/ leftPlane | bottomPlane, + /*9*/ leftPlane, + /*10*/ leftPlane | topPlane, + /*11*/ topPlane, + /*12*/ rightPlane | topPlane, + /*13*/ rightPlane, + /*14*/ rightPlane | bottomPlane, + /*15*/ bottomPlane, + + //z==2 (far) + /*16*/ farPlane | leftPlane | bottomPlane, + /*17*/ farPlane | leftPlane, + /*18*/ farPlane | leftPlane | topPlane, + /*19*/ farPlane | topPlane, + /*20*/ farPlane | rightPlane | topPlane, + /*21*/ farPlane | rightPlane, + /*22*/ farPlane | rightPlane | bottomPlane, + /*23*/ farPlane | bottomPlane, + + //3 left partitions in the middle + /*24*/ nearPlane, + /*25*/ 0, //inside + /*26*/ farPlane, + }; + } + + public BGCurveCalculatorClosestPoint(BGCurveBaseMath math) + { + this.math = math; + } + + //this method contains some intentional copy/paste for the sake of performance + public Vector3 CalcPositionByClosestPoint(Vector3 targetPoint, out float distance, out Vector3 tangent, bool skipSectionsOptimization = false, bool skipPointsOptimization = false) + { +/* + minimalistic thing to do- iterate all lines and use closest point to line formula. + + 2 ideas for optimization: + 1) Iterate all sections first, calculate min bounding box and cut off those sections far away from it + 2) Iterate points, and calculate min sphere radius to contain the result point. Then partition the space by the bounding box around this sphere, and cut off + all points, that can not be contained in the box or intersect this box with a line; +*/ + + var sections = math.SectionInfos; + var sectionsCount = sections.Count; + if (sectionsCount == 0) + { + distance = 0; + tangent = Vector3.zero; + return math.Curve.PointsCount == 1 ? math.Curve[0].PositionWorld : Vector3.zero; + } + + + //========================================================================================================================== + // Section Bbox partitioning (4 passes total) + //========================================================================================================================== + var sectionsOptimizationOn = !skipSectionsOptimization && math.Configuration.Parts > 8; + var minSectionIndex = 0; + var minSectionMaxDistance = float.MaxValue; + if (sectionsOptimizationOn) + { + //----------------------- Section Bbox Partitioning 1st pass (calculate min AABB (Axis Aligned Bounding Box) by square distance between point and section's AABB) + Array.Resize(ref excludedSections, sectionsCount); + Array.Resize(ref minSectionDistances, sectionsCount); + + var minBounds = new Bounds(); + var minAabbDistance = float.MaxValue; + for (var i = 0; i < sectionsCount; i++) + { + var section = sections[i]; + + + var fromAbsent = section.OriginalFromControlType == BGCurvePoint.ControlTypeEnum.Absent; + var toAbsent = section.OriginalToControlType == BGCurvePoint.ControlTypeEnum.Absent; + + var originalFrom = section.OriginalFrom; + var originalTo = section.OriginalTo; + var originalToControl = section.OriginalToControl; + + var fromToMinX = originalFrom.x > originalTo.x ? originalTo.x : originalFrom.x; + var fromToMinY = originalFrom.y > originalTo.y ? originalTo.y : originalFrom.y; + var fromToMinZ = originalFrom.z > originalTo.z ? originalTo.z : originalFrom.z; + + var fromToMaxX = originalFrom.x < originalTo.x ? originalTo.x : originalFrom.x; + var fromToMaxY = originalFrom.y < originalTo.y ? originalTo.y : originalFrom.y; + var fromToMaxZ = originalFrom.z < originalTo.z ? originalTo.z : originalFrom.z; + + float minX, minY, minZ, maxX, maxY, maxZ; + if (fromAbsent) + { + if (toAbsent) + { + //No controls + minX = fromToMinX; + minY = fromToMinY; + minZ = fromToMinZ; + maxX = fromToMaxX; + maxY = fromToMaxY; + maxZ = fromToMaxZ; + } + else + { + //To Control Present + minX = fromToMinX > originalToControl.x ? originalToControl.x : fromToMinX; + minY = fromToMinY > originalToControl.y ? originalToControl.y : fromToMinY; + minZ = fromToMinZ > originalToControl.z ? originalToControl.z : fromToMinZ; + + maxX = fromToMaxX < originalToControl.x ? originalToControl.x : fromToMaxX; + maxY = fromToMaxY < originalToControl.y ? originalToControl.y : fromToMaxY; + maxZ = fromToMaxZ < originalToControl.z ? originalToControl.z : fromToMaxZ; + } + } + else + { + var originalFromControl = section.OriginalFromControl; + if (toAbsent) + { + //From Control Present + minX = fromToMinX > originalFromControl.x ? originalFromControl.x : fromToMinX; + minY = fromToMinY > originalFromControl.y ? originalFromControl.y : fromToMinY; + minZ = fromToMinZ > originalFromControl.z ? originalFromControl.z : fromToMinZ; + + maxX = fromToMaxX < originalFromControl.x ? originalFromControl.x : fromToMaxX; + maxY = fromToMaxY < originalFromControl.y ? originalFromControl.y : fromToMaxY; + maxZ = fromToMaxZ < originalFromControl.z ? originalFromControl.z : fromToMaxZ; + } + else + { + //Both Controls + var fromToControlToMinX = fromToMinX > originalToControl.x ? originalToControl.x : fromToMinX; + var fromToControlToMinY = fromToMinY > originalToControl.y ? originalToControl.y : fromToMinY; + var fromToControlToMinZ = fromToMinZ > originalToControl.z ? originalToControl.z : fromToMinZ; + + var fromToControlToMaxX = fromToMaxX < originalToControl.x ? originalToControl.x : fromToMaxX; + var fromToControlToMaxY = fromToMaxY < originalToControl.y ? originalToControl.y : fromToMaxY; + var fromToControlToMaxZ = fromToMaxZ < originalToControl.z ? originalToControl.z : fromToMaxZ; + + minX = fromToControlToMinX > originalFromControl.x ? originalFromControl.x : fromToControlToMinX; + minY = fromToControlToMinY > originalFromControl.y ? originalFromControl.y : fromToControlToMinY; + minZ = fromToControlToMinZ > originalFromControl.z ? originalFromControl.z : fromToControlToMinZ; + + maxX = fromToControlToMaxX < originalFromControl.x ? originalFromControl.x : fromToControlToMaxX; + maxY = fromToControlToMaxY < originalFromControl.y ? originalFromControl.y : fromToControlToMaxY; + maxZ = fromToControlToMaxZ < originalFromControl.z ? originalFromControl.z : fromToControlToMaxZ; + } + } + + var deltaX = maxX - minX; + var deltaY = maxY - minY; + var deltaZ = maxZ - minZ; + var extents = new Vector3(deltaX*.5f, deltaY*.5f, deltaZ*.5f); + minBounds.extents = extents; + minBounds.center = new Vector3(minX + extents.x, minY + extents.y, minZ + extents.z); + + + var sqrDistance = minBounds.SqrDistance(targetPoint); + excludedSections[i] = false; + minSectionDistances[i] = sqrDistance; + + if (!(minAabbDistance > sqrDistance)) continue; + + minAabbDistance = sqrDistance; + minSectionIndex = i; + } + + //calc max (between points and their related controls) + var minSection = sections[minSectionIndex]; + minSectionMaxDistance = MaxDistance(minSection, targetPoint) - BGCurve.Epsilon; + + //----------------------- Section Bbox Partitioning 2nd pass (1) cut off sections, which min distance to point more than max distance to min sections AABB and 2) adjusting min section ) + var sectionsLeft = 0; + var maxDistanceChanged = false; + var start = minSectionIndex; + var end = Mathf.Max(start + 1, sectionsCount - start); + for (var i = 1; i < end; i++) + { + //the reason why we iterate simulteneously- to decrease chances of MaxDistance expensive calls + //to end + var j = start + i; + if (j < sectionsCount) + { + var section = sections[j]; + + if (minSectionDistances[j] > minSectionMaxDistance) excludedSections[j] = true; + else + { + var sectionDistance = MaxDistance(section, targetPoint); + if (minSectionMaxDistance > sectionDistance) + { + minSectionMaxDistance = sectionDistance; + maxDistanceChanged = true; + } + sectionsLeft++; + } + } + + //to zero (copy/pasted) + j = start - i; + if (j >= 0) + { + var section = sections[j]; + + if (minSectionDistances[j] > minSectionMaxDistance) excludedSections[j] = true; + else + { + var sectionDistance = MaxDistance(section, targetPoint); + if (minSectionMaxDistance > sectionDistance) + { + minSectionMaxDistance = sectionDistance; + maxDistanceChanged = true; + } + sectionsLeft++; + } + } + } + + + //----------------------- Section Bbox Partitioning 3rd pass (since minSectionMaxDistance may be changed in 2nd pass, we need to iterate sections and filter them again) + if (maxDistanceChanged && sectionsLeft > 1) + for (var i = 0; i < sectionsCount; i++) if (!excludedSections[i] && minSectionDistances[i] > minSectionMaxDistance) excludedSections[i] = true; + } + + //========================================================================================================================== + // Lines AABB partitioning + //========================================================================================================================== + var pointsOptimizationOn = !skipPointsOptimization; + var closestLineMaxDistance = float.MaxValue; + var fromDistance = float.MaxValue; + var fromLess = true; + var resetFrom = true; + if (pointsOptimizationOn) + { + for (var i = 0; i < sectionsCount; i++) + { + if (sectionsOptimizationOn && excludedSections[i]) + { + resetFrom = true; + continue; + } + + var section = sections[i]; + var points = section.Points; + var pointsCount = points.Count; + + if (resetFrom) + { + resetFrom = false; + fromDistance = Vector3.SqrMagnitude(section[0].Position - targetPoint); + fromLess = fromDistance <= closestLineMaxDistance; + } + + for (var j = 1; j < pointsCount; j++) + { + var to = points[j]; + + var toPos = to.Position; + + //sqr magnitude inlined + var deltaX = toPos.x - targetPoint.x; + var deltaY = toPos.y - targetPoint.y; + var deltaZ = toPos.z - targetPoint.z; + var toDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + var toLess = toDistance <= closestLineMaxDistance; + + if (fromLess && toLess) closestLineMaxDistance = fromDistance > toDistance ? fromDistance : toDistance; + + fromLess = toLess; + fromDistance = toDistance; + } + } + + //====================================================================== Section Bbox partitioning (again) + //----------------------- Section Bbox Partitioning 4th pass (cause closestLineMaxDistance may be smaller than minSectionMaxDistance we used before) + if (sectionsOptimizationOn && closestLineMaxDistance < minSectionMaxDistance) + for (var i = 0; i < sectionsCount; i++) if (!excludedSections[i] && minSectionDistances[i] > closestLineMaxDistance) excludedSections[i] = true; + } + + + //================================================================================================ + // Final Pass + //================================================================================================ + var firstPoint = sections[0][0]; + var fromPoint = firstPoint; + var result = fromPoint.Position; + var minDistance = Vector3.SqrMagnitude(targetPoint - fromPoint.Position); + var sectionIndex = 0; + var pointIndex = 0; + var resultLerp = 0f; + + var fromPartition = -1; + var resetFromPoint = true; + + + Vector3 min = Vector3.zero, max = Vector3.zero; + if (pointsOptimizationOn) + { + //bounding Box over sphere (for points optimization) + var radius = (float) Math.Sqrt(closestLineMaxDistance); + min = new Vector3(targetPoint.x - radius, targetPoint.y - radius, targetPoint.z - radius); + max = new Vector3(targetPoint.x + radius, targetPoint.y + radius, targetPoint.z + radius); + } + + for (var i = 0; i < sectionsCount; i++) + { + if (sectionsOptimizationOn && excludedSections[i]) + { + resetFromPoint = true; + continue; + } + + + var section = sections[i]; + var points = section.Points; + + if (resetFromPoint) + { + resetFromPoint = false; + fromPoint = section[0]; + + if (pointsOptimizationOn) + { + //------------------------------------------ points optimization + //xy quadrant clockwise (0-7) + var fromPos = fromPoint.Position; + var zSet = false; + if (fromPos.x < min.x) + { + if (fromPos.y < min.y) fromPartition = 0; + else if (fromPos.y > max.y) fromPartition = 2; + else fromPartition = 1; + } + else if (fromPos.x > max.x) + { + if (fromPos.y < min.y) fromPartition = 6; + else if (fromPos.y > max.y) fromPartition = 4; + else fromPartition = 5; + } + else + { + if (fromPos.y < min.y) fromPartition = 7; + else if (fromPos.y > max.y) fromPartition = 3; + else + { + if (fromPos.z > max.z) fromPartition = 26; + else if (fromPos.z < min.z) fromPartition = 24; + else fromPartition = 25; + zSet = true; + } + } + //z shift + if (!zSet) + { + if (fromPos.z > max.z) fromPartition = fromPartition | 16; + else if (fromPos.z > min.z) fromPartition = fromPartition | 8; + } + } + } + + var pointsCount = points.Count; + for (var j = 1; j < pointsCount; j++) + { + var toPoint = points[j]; + var toPointPos = toPoint.Position; + + var excludedByOptimization = false; + var toPartition = -1; + if (pointsOptimizationOn) + { + //------------------------------------------ points optimization + // copy/pasted + var zSet = false; + if (toPointPos.x < min.x) + { + if (toPointPos.y < min.y) toPartition = 0; + else if (toPointPos.y > max.y) toPartition = 2; + else toPartition = 1; + } + else if (toPointPos.x > max.x) + { + if (toPointPos.y < min.y) toPartition = 6; + else if (toPointPos.y > max.y) toPartition = 4; + else toPartition = 5; + } + else + { + if (toPointPos.y < min.y) toPartition = 7; + else if (toPointPos.y > max.y) toPartition = 3; + else + { + //center + if (toPointPos.z > max.z) toPartition = 26; + else if (toPointPos.z < min.z) toPartition = 24; + else toPartition = 25; //inside + zSet = true; + } + } + //z shift + if (!zSet) + { + if (toPointPos.z > max.z) toPartition = toPartition | 16; + else if (toPointPos.z > min.z) toPartition = toPartition | 8; + } + + excludedByOptimization = (TransitionsForPartitions[fromPartition] & (1 << toPartition)) != 0; + } + + + if (!excludedByOptimization) + { + float ratio; + var gettingCloser = false; + //============================================================================= Get closest point on line formula: Line(from->to), Point(targetPoint) + // closest on line + double pointX; + double pointY; + double pointZ; + + var fromPos = fromPoint.Position; + var toPos = toPoint.Position; + + var fromTargetX = (double) targetPoint.x - (double) fromPos.x; + var fromTargetY = (double) targetPoint.y - (double) fromPos.y; + var fromTargetZ = (double) targetPoint.z - (double) fromPos.z; + + var fromToX = (double) toPos.x - (double) fromPos.x; + var fromToY = (double) toPos.y - (double) fromPos.y; + var fromToZ = (double) toPos.z - (double) fromPos.z; + + //sqr magnitude inlined + var fromToSquaredDistance = (float) (fromToX*fromToX + fromToY*fromToY + fromToZ*fromToZ); + + + if (Math.Abs(fromToSquaredDistance) < BGCurve.Epsilon) + { + gettingCloser = true; + ratio = 1; + pointX = toPos.x; + pointY = toPos.y; + pointZ = toPos.z; + } + else + { + // dot inlined + var dot = (float) (fromTargetX*fromToX + fromTargetY*fromToY + fromTargetZ*fromToZ); + + if (dot < 0) + { + ratio = 0; + pointX = fromPos.x; + pointY = fromPos.y; + pointZ = fromPos.z; + } + else if (dot > fromToSquaredDistance) + { + gettingCloser = true; + ratio = 1; + pointX = toPos.x; + pointY = toPos.y; + pointZ = toPos.z; + } + else + { + var dotRatio = dot / fromToSquaredDistance; + ratio = dotRatio; + pointX = fromPos.x + fromToX*dotRatio; + pointY = fromPos.y + fromToY*dotRatio; + pointZ = fromPos.z + fromToZ*dotRatio; + } + } + + //------------------------------------------------------ Compare with min distance + //sqr magnitude inlined + var deltaX = (double) targetPoint.x - (double) pointX; + var deltaY = (double) targetPoint.y - (double) pointY; + var deltaZ = (double) targetPoint.z - (double) pointZ; + var sqrMagnitude = (float) (deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ); + if (sqrMagnitude < minDistance) + { + minDistance = sqrMagnitude; + result.x = (float) pointX; + result.y = (float) pointY; + result.z = (float) pointZ; + sectionIndex = i; + + if (gettingCloser) + { + //if we are getting closer-> simply move the pointer to current point + if (j == pointsCount - 1 && i < sectionsCount - 1) + { + //if it's the last point in the current section-> move pointer to 1st point of the next section (to calc distances correctly) + sectionIndex = i + 1; + pointIndex = 0; + } + else + { + pointIndex = j; + } + + resultLerp = 0; + } + else + { + //current closest point somewhere on this line (resultLerp show how far from [j - 1] to [j]) + pointIndex = j - 1; + resultLerp = ratio; + } + } + } + + fromPoint = toPoint; + fromPartition = toPartition; + } + } + + //================================================================================================ + // Final result + //================================================================================================ + var resultSection = sections[sectionIndex]; + if (resultLerp > 0 && resultLerp < 1 && pointIndex < resultSection.PointsCount - 1) + { + var lerpFrom = resultSection[pointIndex]; + var lerpTo = resultSection[pointIndex + 1]; + + tangent = Vector3.Lerp(lerpFrom.Tangent, lerpTo.Tangent, resultLerp); + distance = sections[sectionIndex].DistanceFromStartToOrigin + Mathf.Lerp(lerpFrom.DistanceToSectionStart, lerpTo.DistanceToSectionStart, resultLerp); + } + else + { + var resultPoint = sections[sectionIndex][pointIndex]; + + tangent = resultPoint.Tangent; + distance = sections[sectionIndex].DistanceFromStartToOrigin + resultPoint.DistanceToSectionStart; + } + + return result; + } + + //max distance between a point and a section + private static float MaxDistance(BGCurveBaseMath.SectionInfo section, Vector3 position) + { +// var fromDistance = Vector3.SqrMagnitude(section.OriginalFrom - position); + var deltaX = section.OriginalFrom.x - position.x; + var deltaY = section.OriginalFrom.y - position.y; + var deltaZ = section.OriginalFrom.z - position.z; + var fromDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + +// var toDistance = Vector3.SqrMagnitude(section.OriginalTo - position); + deltaX = section.OriginalTo.x - position.x; + deltaY = section.OriginalTo.y - position.y; + deltaZ = section.OriginalTo.z - position.z; + var toDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + + var fromControlAbsent = section.OriginalFromControlType == BGCurvePoint.ControlTypeEnum.Absent; + var toControlAbsent = section.OriginalToControlType == BGCurvePoint.ControlTypeEnum.Absent; + float maxDistance; + if (fromControlAbsent && toControlAbsent) + { + maxDistance = Mathf.Max(fromDistance, toDistance); + } + else + { + if (fromControlAbsent) + { + // var toControlDistance = Vector3.SqrMagnitude(section.OriginalToControl - position); + deltaX = section.OriginalToControl.x - position.x; + deltaY = section.OriginalToControl.y - position.y; + deltaZ = section.OriginalToControl.z - position.z; + var toControlDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + + maxDistance = Mathf.Max(Mathf.Max(fromDistance, toDistance), toControlDistance); + } + else if (toControlAbsent) + { + // var fromControlDistance = Vector3.SqrMagnitude(section.OriginalFromControl - position); + deltaX = section.OriginalFromControl.x - position.x; + deltaY = section.OriginalFromControl.y - position.y; + deltaZ = section.OriginalFromControl.z - position.z; + var fromControlDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + + maxDistance = Mathf.Max(Mathf.Max(fromDistance, toDistance), fromControlDistance); + } + else + { + // var fromControlDistance = Vector3.SqrMagnitude(section.OriginalFromControl - position); + deltaX = section.OriginalFromControl.x - position.x; + deltaY = section.OriginalFromControl.y - position.y; + deltaZ = section.OriginalFromControl.z - position.z; + var fromControlDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + // var toControlDistance = Vector3.SqrMagnitude(section.OriginalToControl - position); + deltaX = section.OriginalToControl.x - position.x; + deltaY = section.OriginalToControl.y - position.y; + deltaZ = section.OriginalToControl.z - position.z; + var toControlDistance = deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ; + + maxDistance = Mathf.Max(Mathf.Max(Mathf.Max(fromDistance, toDistance), fromControlDistance), toControlDistance); + } + } + return maxDistance; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs.meta new file mode 100644 index 0000000..83a8d0d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveCalculatorClosestPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 40763d37e0dc903468aa5813eb0d99d0 +timeCreated: 1474035777 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs new file mode 100644 index 0000000..d268b7b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs @@ -0,0 +1,179 @@ +using System; + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// THIS NEED TO BE REWORKED. + /// + /// Curve's change information. It's used only if Use curve.UseEventsArgs=true + /// + /// Multiple- muliple changes + /// CurveTransform- curve transform changed + /// Points- point(s) was added or removed or swapped, or 'closed' attribute changed + /// Point - point position changed + /// PointControl - point's controls changed + /// PointControlType -point's control type changed + /// Fields -point's fields changed + /// + public class BGCurveChangedArgs : EventArgs, ICloneable + { + //reusable event instance + private static readonly BGCurveChangedArgs Instance = new BGCurveChangedArgs(); + + + //all possible types of changes + public enum ChangeTypeEnum + { + Multiple, + CurveTransform, + Points, + Point, + Fields, + Snap, + Curve + } + + //type of the change + private ChangeTypeEnum changeType; + + //changed curve + private BGCurve curve; + //changed point + private BGCurvePointI point; + //event message + private string message; + //multiple changes + private BGCurveChangedArgs[] multipleChanges; + + /// Type of the change + public ChangeTypeEnum ChangeType + { + get { return changeType; } + } + + /// Changed curve + public BGCurve Curve + { + get { return curve; } + } + + /// Change message + public string Message + { + get { return message; } + } + + /// Multiple changes + public BGCurveChangedArgs[] MultipleChanges + { + get { return multipleChanges; } + } + + /* + public BGCurveChangedArgs(BGCurve curve, ChangeTypeEnum changeType) + { + this.curve = curve; + this.changeType = changeType; + } + + public BGCurveChangedArgs(BGCurve curve, BGCurvePoint point, ChangeTypeEnum changeType) : this(curve, changeType) + { + this.point = point; + } + + public BGCurveChangedArgs(BGCurve curve, BGCurveChangedArgs[] multipleChanges) + { + this.curve = curve; + changeType = ChangeTypeEnum.Multiple; + this.multipleChanges = multipleChanges; + } + */ + + private BGCurveChangedArgs() + { + } + + /// Init and get event instance + public static BGCurveChangedArgs GetInstance(BGCurve curve, ChangeTypeEnum type, string message) + { + Instance.curve = curve; + Instance.changeType = type; + Instance.message = message; + Instance.multipleChanges = null; + Instance.point = null; + return Instance; + } + + /// Init and get event instance + public static BGCurveChangedArgs GetInstance(BGCurve curve, BGCurveChangedArgs[] changes, string changesInTransaction) + { + Instance.curve = curve; + Instance.changeType = ChangeTypeEnum.Multiple; + Instance.message = BGCurve.EventTransaction; + Instance.multipleChanges = changes; + Instance.point = null; + return Instance; + } + + /// Init and get event instance + public static BGCurveChangedArgs GetInstance(BGCurve curve, BGCurvePointI point, string changesInTransaction) + { + Instance.curve = curve; + Instance.changeType = ChangeTypeEnum.Point; + Instance.message = BGCurve.EventTransaction; + Instance.point = point; + return Instance; + } + + /// Clone event + public object Clone() + { + return new BGCurveChangedArgs + { + changeType = changeType, + curve = curve, + multipleChanges = multipleChanges, + message = message, + point = point + }; + } + + protected bool Equals(BGCurveChangedArgs other) + { + return changeType == other.changeType && Equals(curve, other.curve) ; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((BGCurveChangedArgs) obj); + } + + public override int GetHashCode() + { + var hashCode = (int) changeType; + hashCode = (hashCode*397) ^ (curve != null ? curve.GetHashCode() : 0); + return hashCode; + } + + /// Before change event + public class BeforeChange : EventArgs + { + public static readonly BeforeChange BeforeChangeInstance = new BeforeChange(); + + public string Operation; + + private BeforeChange() + { + } + + public static BeforeChange GetInstance(string operation) + { + BeforeChangeInstance.Operation = operation; + return BeforeChangeInstance; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs.meta new file mode 100644 index 0000000..192bddf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveChangedArgs.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 42a0fb8b80d3c5747ad89e7288172f3a +timeCreated: 1459523844 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs new file mode 100644 index 0000000..274d721 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs @@ -0,0 +1,290 @@ +using System; +using UnityEngine; + + +namespace BansheeGz.BGSpline.Curve +{ + /// + /// Do not use it. This is an old deprecated math, using parametric formulas to get position and tangent. + /// It does not have any advantage over BGCurveBaseMath, which is slightly faster and have a little lesser memory footprint. + /// We leave this class for testing and reference purposes only. + /// + [Obsolete("Use BGCurveBaseMath. This class is for testing purpose only")] + public class BGCurveFormulaMath : BGCurveBaseMath + { + // cached data (t=some ratio [0,1], tr=1-t, t2=t*t, etc.). + //position + private float[] bakedT; + private float[] bakedT2; + private float[] bakedTr2; + private float[] bakedT3; + private float[] bakedTr3; + private float[] bakedTr2xTx3; + private float[] bakedT2xTrx3; + private float[] bakedTxTrx2; + + //tangent related + private float[] bakedTr2x3; + private float[] bakedTxTrx6; + private float[] bakedT2x3; + private float[] bakedTx2; + private float[] bakedTrx2; + + public BGCurveFormulaMath(BGCurve curve, Config config) + : base(curve, config) + { + } + + //some additional init + protected override void AfterInit(Config config) + { + //let's bake some data + var parts = config.Parts; + var sectionPointsCount = parts + 1; + + Array.Resize(ref bakedT, sectionPointsCount); + + Array.Resize(ref bakedT2, sectionPointsCount); + Array.Resize(ref bakedTr2, sectionPointsCount); + Array.Resize(ref bakedT3, sectionPointsCount); + Array.Resize(ref bakedTr3, sectionPointsCount); + + Array.Resize(ref bakedTr2xTx3, sectionPointsCount); + Array.Resize(ref bakedT2xTrx3, sectionPointsCount); + Array.Resize(ref bakedTxTrx2, sectionPointsCount); + + if (NeedTangentFormula) + { + Array.Resize(ref bakedTr2x3, sectionPointsCount); + Array.Resize(ref bakedTxTrx6, sectionPointsCount); + Array.Resize(ref bakedT2x3, sectionPointsCount); + Array.Resize(ref bakedTx2, sectionPointsCount); + Array.Resize(ref bakedTrx2, sectionPointsCount); + } + + for (var i = 0; i <= parts; i++) + { + var t = i/(float) parts; + var tr = 1 - t; + var t2 = t*t; + var tr2 = tr*tr; + + bakedT[i] = t; + + bakedT2[i] = t2; + bakedTr2[i] = tr2; + bakedT3[i] = t2*t; + bakedTr3[i] = tr2*tr; + + bakedTr2xTx3[i] = 3*tr2*t; + bakedT2xTrx3[i] = 3*tr*t2; + bakedTxTrx2[i] = 2*tr*t; + + if (!NeedTangentFormula) continue; + + + bakedTr2x3[i] = 3*tr2; + bakedTxTrx6[i] = 6*tr*t; + bakedT2x3[i] = 3*t2; + bakedTx2[i] = 2*t; + bakedTrx2[i] = 2*tr; + } + } + + //standard c# dispose + public override void Dispose() + { + base.Dispose(); + + var emptyArray = new float[0]; + bakedT = emptyArray; + bakedT2 = emptyArray; + bakedTr2 = emptyArray; + bakedT3 = emptyArray; + bakedTr3 = emptyArray; + bakedTr2xTx3 = emptyArray; + bakedT2xTrx3 = emptyArray; + bakedTxTrx2 = emptyArray; + + bakedTr2x3 = emptyArray; + bakedTxTrx6 = emptyArray; + bakedT2x3 = emptyArray; + bakedTx2 = emptyArray; + bakedTrx2 = emptyArray; + } + + //calculate one split section data + protected override void CalculateSplitSection(SectionInfo section, BGCurvePointI @from, BGCurvePointI to) + { + Resize(section.points, config.Parts + 1); + + //======================================== + // Calculate points + //======================================== + //-----------section data + var fromPos = section.OriginalFrom; + var toPos = section.OriginalTo; + var control1 = section.OriginalFromControl; + var control2 = section.OriginalToControl; + + var controlFromAbsent = @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + var controlToAbsent = to.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + var noControls = controlFromAbsent && controlToAbsent; + var bothControls = !controlFromAbsent && !controlToAbsent; + if (!noControls && !bothControls && controlFromAbsent) control1 = control2; + + //snapping + var snapIsOn = curve.SnapType == BGCurve.SnapTypeEnum.Curve; + + + //-----------calc some data + + // no controls + Vector3 fromTo = Vector3.zero, fromToTangentWorld = Vector3.zero; + if (noControls) + { + fromTo = toPos - fromPos; + if (cacheTangent) fromToTangentWorld = (to.PositionWorld - @from.PositionWorld).normalized; + } + + // tangent related + Vector3 control1MinusFrom = Vector3.zero, control2MinusControl1 = Vector3.zero, toMinusControl2 = Vector3.zero, toMinusControl1 = Vector3.zero; + if (!config.UsePointPositionsToCalcTangents && cacheTangent) + { + control1MinusFrom = control1 - fromPos; + if (bothControls) + { + control2MinusControl1 = control2 - control1; + toMinusControl2 = toPos - control2; + } + else + { + toMinusControl1 = toPos - control1; + } + } + + + //----------- Critical block starts + var length = bakedT.Length; + for (var i = 0; i < length; i++) + { + var point = section.points[i] ?? (section.points[i] = new SectionPointInfo()); + + Vector3 pos; + + if (noControls) + { + // ================= NoControls + // ---------- position + var t = bakedT[i]; + pos = new Vector3(fromPos.x + fromTo.x * t, fromPos.y + fromTo.y * t, fromPos.z + fromTo.z * t); + + if (snapIsOn) curve.ApplySnapping(ref pos); + + point.Position = pos; + + //---------- tangents + if (cacheTangent) point.Tangent = fromToTangentWorld; + } + else + { + // ================= At least One control + //---------- position + + if (bothControls) + { + var tr3 = bakedTr3[i]; + var tr2xTx3 = bakedTr2xTx3[i]; + var t2xTrx3 = bakedT2xTrx3[i]; + var t3 = bakedT3[i]; + + pos = new Vector3(tr3 * fromPos.x + tr2xTx3 * control1.x + t2xTrx3 * control2.x + t3 * toPos.x, + tr3 * fromPos.y + tr2xTx3 * control1.y + t2xTrx3 * control2.y + t3 * toPos.y, + tr3 * fromPos.z + tr2xTx3 * control1.z + t2xTrx3 * control2.z + t3 * toPos.z); + } + else + { + var tr2 = bakedTr2[i]; + var txTrx2 = bakedTxTrx2[i]; + var t2 = bakedT2[i]; + + pos = new Vector3(tr2 * fromPos.x + txTrx2 * control1.x + t2 * toPos.x, + tr2 * fromPos.y + txTrx2 * control1.y + t2 * toPos.y, + tr2 * fromPos.z + txTrx2 * control1.z + t2 * toPos.z); + } + + if (snapIsOn) curve.ApplySnapping(ref pos); + + point.Position = pos; + + + //---------- tangents + if (cacheTangent) + { + if (config.UsePointPositionsToCalcTangents) + { + //-------- Calc by point's positions + //we skip 1st point, cause we do not have enough info for it. we'll set it at the next step + if (i != 0) + { + var prevPoint = section[i - 1]; + + var prevPosition = prevPoint.Position; + + var tangent = new Vector3(pos.x - prevPosition.x, pos.y - prevPosition.y, pos.z - prevPosition.z); + //Vector3.normalized inlined (tangent=tangent.normalized) + var marnitude = (float)Math.Sqrt((double)tangent.x * (double)tangent.x + (double)tangent.y * (double)tangent.y + (double)tangent.z * (double)tangent.z); + tangent = ((double)marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x / marnitude, tangent.y / marnitude, tangent.z / marnitude) : Vector3.zero; + + prevPoint.Tangent = tangent; + + //we will adjust it later (if there is another section after this one , otherwise- no more data for more precise calculation) + if (i == config.Parts) point.Tangent = prevPoint.Tangent; + } + } + else + { + //-------- Calc by a formula + Vector3 tangent; + if (bothControls) + { + var tr2x3 = bakedTr2x3[i]; + var txTrx6 = bakedTxTrx6[i]; + var t2x3 = bakedT2x3[i]; + tangent = new Vector3(tr2x3 * control1MinusFrom.x + txTrx6 * control2MinusControl1.x + t2x3 * toMinusControl2.x, + tr2x3 * control1MinusFrom.y + txTrx6 * control2MinusControl1.y + t2x3 * toMinusControl2.y, + tr2x3 * control1MinusFrom.z + txTrx6 * control2MinusControl1.z + t2x3 * toMinusControl2.z); + } + else + { + var trx2 = bakedTrx2[i]; + var tx2 = bakedTx2[i]; + tangent = new Vector3(trx2 * control1MinusFrom.x + tx2 * toMinusControl1.x, + trx2 * control1MinusFrom.y + tx2 * toMinusControl1.y, + trx2 * control1MinusFrom.z + tx2 * toMinusControl1.z); + } + + //Vector3.normalized inlined (tangent=tangent.normalized) + var marnitude = (float)Math.Sqrt((double)tangent.x * (double)tangent.x + (double)tangent.y * (double)tangent.y + (double)tangent.z * (double)tangent.z); + tangent = ((double)marnitude > 9.99999974737875E-06) ? new Vector3(tangent.x / marnitude, tangent.y / marnitude, tangent.z / marnitude) : Vector3.zero; + + // set tangent + point.Tangent = tangent; + } + } + } + + + if (i == 0) continue; + + // ---------- distance to section start (Vector3.Distance inlined) + var prevPos = section[i - 1].Position; + double x = pos.x - prevPos.x; + double y = pos.y - prevPos.y; + double z = pos.z - prevPos.z; + point.DistanceToSectionStart = section[i - 1].DistanceToSectionStart + ((float)Math.Sqrt(x * x + y * y + z * z)); + } + //----------- Critical block ends + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs.meta new file mode 100644 index 0000000..b35740a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulaMath.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 53f2137c1b19f4641861ad8607f250af +timeCreated: 1475717228 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs new file mode 100644 index 0000000..7ce3b14 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs @@ -0,0 +1,52 @@ +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// Spline related formulas. + public static class BGCurveFormulas + { + /// Cubic Bezier curve interpolation. More info + // P0=from, P1=fromControl, P2=toControl, P3=to + public static Vector3 BezierCubic(float t, Vector3 from, Vector3 fromControl, Vector3 toControl, Vector3 to) + { + // tr= t reverse + var tr = 1 - t; + var tr2 = tr*tr; + var t2 = t*t; + + return tr*tr2*from + 3*tr2*t*fromControl + 3*tr*t2*toControl + t*t2*to; + } + + /// Quadratic Bezier curve interpolation. More info + // P0=from, P1=control, P2 = to + public static Vector3 BezierQuadratic(float t, Vector3 from, Vector3 control, Vector3 to) + { + // tr= t reverse + var tr = 1 - t; + var tr2 = tr*tr; + var t2 = t*t; + + return tr2*from + 2*tr*t*control + t2*to; + } + + /// Cubic Bezier curve derivative. More info + // P0=from, P1=fromControl, P2=toControl, P3=to + public static Vector3 BezierCubicDerivative(float t, Vector3 from, Vector3 fromControl, Vector3 toControl, Vector3 to) + { + // tr= t reverse + var tr = 1 - t; + + return 3*(tr*tr)*(fromControl - from) + 6*tr*t*(toControl - fromControl) + 3*(t*t)*(to - toControl); + } + + /// Quadratic Bezier curve derivative. More info + // P0=from, P1=control, P2 = to + public static Vector3 BezierQuadraticDerivative(float t, Vector3 from, Vector3 control, Vector3 to) + { + // tr= t reverse + var tr = 1 - t; + + return 2*tr*(control - from) + 2*t*(to - control); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs.meta new file mode 100644 index 0000000..a250dc4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveFormulas.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 076c586f3afa833488d8fc4e60e81684 +timeCreated: 1472028225 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs new file mode 100644 index 0000000..29977c1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs @@ -0,0 +1,129 @@ +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// This is an interface for curve's Math solver + public interface BGCurveMathI + { + + //=============================================================================================== + // Generic (position or tangent) + //=============================================================================================== + + /// Calculate spline's field value by distance ratio. + /// field to retrieve (like position or tangent etc.) + /// Ratio between (0,1) + /// Use local coordinates instead of world + /// result field's value + Vector3 CalcByDistanceRatio(BGCurveBaseMath.Field field, float distanceRatio, bool useLocal = false); + + /// Calculate spline's field value by distance. + /// field to retrieve + /// distance from the curve's start between (0, GetDistance()) + /// Use local coordinates instead of world + /// result field's value + Vector3 CalcByDistance(BGCurveBaseMath.Field field, float distance, bool useLocal = false); + + //=============================================================================================== + // Position and tangent + //=============================================================================================== + /// Calculate both spline's fields (position and tangent) by distance ratio. + /// Ratio between (0,1) + /// result tangent + /// Use local coordinates instead of world + /// result position + Vector3 CalcByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false); + + /// Calculate both curve's fields (position and tangent) by distance. + /// distance from the curve's start between (0, GetDistance()) + /// result tangent + /// Use local coordinates instead of world + /// result position + Vector3 CalcByDistance(float distance, out Vector3 tangent, bool useLocal = false); + + /// Calculate approximate spline's point position using distance ratio. + /// Ratio between (0,1) + /// result tangent + /// Use local coordinates instead of world + /// result position + Vector3 CalcPositionAndTangentByDistanceRatio(float distanceRatio, out Vector3 tangent, bool useLocal = false); + + /// Calculate approximate spline's point position using distance. + /// distance from curve's start between (0, GetDistance()) + /// result tangent + /// Use local coordinates instead of world + /// result position + Vector3 CalcPositionAndTangentByDistance(float distance, out Vector3 tangent, bool useLocal = false); + + //=============================================================================================== + // Position + //=============================================================================================== + /// Calculate approximate spline's point position using distance ratio. + /// Ratio between (0,1) + /// Use local coordinates instead of world + Vector3 CalcPositionByDistanceRatio(float distanceRatio, bool useLocal = false); + + /// Calculate approximate spline's point position using distance. + /// distance from curve's start between (0, GetDistance()) + /// Use local coordinates instead of world + Vector3 CalcPositionByDistance(float distance, bool useLocal = false); + + //=============================================================================================== + // Tangent + //=============================================================================================== + /// Calculate approximate spline's tangent using distance ratio. + /// Ratio between (0,1) + /// Use local coordinates instead of world + Vector3 CalcTangentByDistanceRatio(float distanceRatio, bool useLocal = false); + + /// Calculate approximate spline's tangent using distance. + /// distance from curve's start between (0, GetDistance()) + /// Use local coordinates instead of world + Vector3 CalcTangentByDistance(float distance, bool useLocal = false); + + //=============================================================================================== + // Section index + //=============================================================================================== + /// Calculate spline's section using distance. + /// distance from curve's start between (0, GetDistance()) + int CalcSectionIndexByDistance(float distance); + + /// Calculate spline's section using distance ratio. + /// Ratio between (0,1) + int CalcSectionIndexByDistanceRatio(float ratio); + + //=============================================================================================== + // By closest point + //=============================================================================================== + /// Calculate spline's world point position by a point, which is closest to a given point. + /// Point's position + /// Skip any optimization at section level, if any + /// Skip any optimization at approximation points level, if any + /// Position on the spline, which is closest to a given point + Vector3 CalcPositionByClosestPoint(Vector3 point, bool skipSectionsOptimization = false, bool skipPointsOptimization = false); + + /// Calculate spline's world point position and distance by a point, which is closest to a given point. + /// Point's position + /// Result distance from the start of the spline + /// Skip any optimization at section level, if any + /// Skip any optimization at approximation points level, if any + /// Position on the spline, which is closest to a given point + Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, bool skipSectionsOptimization = false, bool skipPointsOptimization = false); + + /// Calculate spline's world point position, distance and tangent by a point, which is closest to a given point. + /// Point's position + /// Result distance from the start of the spline + /// Result tangent + /// Skip any optimization at section level, if any + /// Skip any optimization at approximation points level, if any + /// Position on the spline, which is closest to a given point + Vector3 CalcPositionByClosestPoint(Vector3 point, out float distance, out Vector3 tangent, bool skipSectionsOptimization = false, bool skipPointsOptimization = false); + + //=============================================================================================== + // Total spline's length + //=============================================================================================== + /// Get spline's approximate total distance + /// Spline's total distance + float GetDistance(); + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs.meta new file mode 100644 index 0000000..d58dd1d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveMathI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dbf2e4dc3f6bfad45936d71c418d16e3 +timeCreated: 1477133076 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs new file mode 100644 index 0000000..fe2a4c6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs @@ -0,0 +1,817 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// One inlined point data + // !!! Note, there is a BGCurvePointGO class, partially copied from this class + [Serializable] + public class BGCurvePoint : BGCurvePointI + { + + #region enums + + /// possible point's control types + public enum ControlTypeEnum + { + /// no control point + Absent, + + /// 2 points, symmetrical to each other + BezierSymmetrical, + + /// 2 points, independant + BezierIndependant + } + + /// helper enum for system fields + public enum FieldEnum + { + PositionWorld, + PositionLocal, + ControlFirstWorld, + ControlFirstLocal, + ControlSecondWorld, + ControlSecondLocal + } + + #endregion + + #region constructors + + /// All coordinates are Local by default. positionLocal relative to curve's transform, controls are relative to positionLocal. Set useWorldCoordinates to true to use world coordinates + public BGCurvePoint(BGCurve curve, Vector3 position, bool useWorldCoordinates = false) : this(curve, position, ControlTypeEnum.Absent, useWorldCoordinates) + { + } + + /// All coordinates are Local by default. positionLocal relative to curve's transform, controls are relative to positionLocal. Set useWorldCoordinates to true to use world coordinates + public BGCurvePoint(BGCurve curve, Vector3 position, ControlTypeEnum controlType, bool useWorldCoordinates = false) + : this(curve, position, controlType, Vector3.zero, Vector3.zero, useWorldCoordinates) + { + } + + /// All coordinates are Local by default. positionLocal relative to curve's transform, controls are relative to positionLocal. Set useWorldCoordinates to true to use world coordinates + public BGCurvePoint(BGCurve curve, Vector3 position, ControlTypeEnum controlType, Vector3 controlFirst, Vector3 controlSecond, bool useWorldCoordinates = false) + : this(curve, null , position, controlType, controlFirst, controlSecond, useWorldCoordinates) + { + } + + /// All coordinates are Local by default. positionLocal relative to curve's transform, controls are relative to positionLocal. Set useWorldCoordinates to true to use world coordinates + public BGCurvePoint(BGCurve curve, Transform pointTransform, Vector3 position, ControlTypeEnum controlType, Vector3 controlFirst, Vector3 controlSecond, bool useWorldCoordinates = false ) + { + this.curve = curve; + this.controlType = controlType; + this.pointTransform = pointTransform; + + if (useWorldCoordinates) + { + positionLocal = curve.transform.InverseTransformPoint(position); + controlFirstLocal = curve.transform.InverseTransformDirection(controlFirst - position); + controlSecondLocal = curve.transform.InverseTransformDirection(controlSecond - position); + } + else + { + positionLocal = position; + controlFirstLocal = controlFirst; + controlSecondLocal = controlSecond; + } + } + + #endregion + + #region fields + + //control type + [SerializeField] private ControlTypeEnum controlType; + + //relative to curve position + [SerializeField] private Vector3 positionLocal; + + //relative to point position + [SerializeField] private Vector3 controlFirstLocal; + [SerializeField] private Vector3 controlSecondLocal; + + [SerializeField] private Transform pointTransform; + + + //point's curve + [SerializeField] private BGCurve curve; + + //custom fields values for all points. it's an array with only one element. the reason why we store it like this- is to reduce storage and serialization costs. + [SerializeField] private FieldsValues[] fieldsValues; + + /// The curve, point's belong to + public BGCurve Curve + { + get { return curve; } + } + + /// This field is not meant for use outside of BGCurve package + //all fields values + public FieldsValues PrivateValuesForFields + { + get + { + if (fieldsValues == null || fieldsValues.Length < 1 || fieldsValues[0] == null) fieldsValues = new[] {new FieldsValues()}; + return fieldsValues[0]; + } + set + { + if (fieldsValues == null || fieldsValues.Length < 1 || fieldsValues[0] == null) fieldsValues = new[] {new FieldsValues()}; + fieldsValues[0] = value; + } + } + + // =============================================== Position + //see interface for comments + public Vector3 PositionLocal + { + get { return pointTransform == null ? positionLocal : curve.transform.InverseTransformPoint(pointTransform.position); } + set { SetPosition(value); } + } + + //see interface for comments + public Vector3 PositionLocalTransformed + { + get + { + return pointTransform == null + ? curve.transform.TransformPoint(positionLocal) - curve.transform.position + : pointTransform.position - curve.transform.position; + } + set { SetPosition(value + curve.transform.position, true); } + } + + //see interface for comments + public Vector3 PositionWorld + { + get { return pointTransform == null ? curve.transform.TransformPoint(positionLocal) : pointTransform.position; } + set { SetPosition(value, true); } + } + + + // =============================================== First Handle + //see interface for comments + public Vector3 ControlFirstLocal + { + get { return controlFirstLocal; } + set { SetControlFirstLocal(value); } + } + + //see interface for comments + public Vector3 ControlFirstLocalTransformed + { + get { return (pointTransform == null ? curve.transform : pointTransform).TransformVector(controlFirstLocal); } + set + { + var transform = pointTransform == null ? curve.transform : pointTransform; + SetControlFirstLocal(transform.InverseTransformVector(value)); + } + } + + //see interface for comments + public Vector3 ControlFirstWorld + { + get + { + if (pointTransform == null) + return curve.transform.TransformPoint(new Vector3(positionLocal.x + controlFirstLocal.x, positionLocal.y + controlFirstLocal.y, positionLocal.z + controlFirstLocal.z)); + + return pointTransform.position + pointTransform.TransformVector(controlFirstLocal); + } + set + { + var pos = pointTransform == null ? curve.transform.InverseTransformPoint(value) - positionLocal : pointTransform.InverseTransformVector(value - pointTransform.position); + SetControlFirstLocal(pos); + } + } + + + // =============================================== Second Handle + //see interface for comments + public Vector3 ControlSecondLocal + { + get { return controlSecondLocal; } + set { SetControlSecondLocal(value); } + } + + //see interface for comments + public Vector3 ControlSecondLocalTransformed + { + get { return (pointTransform == null ? curve.transform : pointTransform).TransformVector(controlSecondLocal); } + set + { + var transform = pointTransform == null ? curve.transform : pointTransform; + SetControlSecondLocal(transform.InverseTransformVector(value)); + } + } + + + //see interface for comments + public Vector3 ControlSecondWorld + { + get + { + if (pointTransform == null) + return curve.transform.TransformPoint(new Vector3(positionLocal.x + controlSecondLocal.x, positionLocal.y + controlSecondLocal.y, positionLocal.z + controlSecondLocal.z)); + + return pointTransform.position + pointTransform.TransformVector(controlSecondLocal); + } + set + { + var pos = pointTransform == null ? curve.transform.InverseTransformPoint(value) - positionLocal : pointTransform.InverseTransformVector(value - pointTransform.position); + SetControlSecondLocal(pos); + } + } + + + // =============================================== Control type + //see interface for comments + public ControlTypeEnum ControlType + { + get { return controlType; } + set + { + if (controlType == value) return; + + curve.FireBeforeChange(BGCurve.EventPointControlType); + + controlType = value; + + if (controlType == ControlTypeEnum.BezierSymmetrical) controlSecondLocal = -controlFirstLocal; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControlType) : null, sender: this); + } + } + + + // =============================================== Transform + public Transform PointTransform + { + get { return pointTransform; } + set + { + if (pointTransform == value) return; + + curve.FireBeforeChange(BGCurve.EventPointTransform); + + var oldTransformNull = pointTransform == null && value != null; + var newTransformNull = value == null && pointTransform != null; + + //we need to transfer system fields + var control1 = ControlFirstLocalTransformed; + var control2 = ControlSecondLocalTransformed; + var positionWorld = PositionWorld; + + pointTransform = value; + + // transfer system fields + if (pointTransform != null) + { + pointTransform.position = positionWorld; + controlFirstLocal = pointTransform.InverseTransformVector(control1); + controlSecondLocal = pointTransform.InverseTransformVector(control2); + } + else + { + positionLocal = curve.transform.InverseTransformPoint(positionWorld); + controlFirstLocal = curve.transform.InverseTransformVector(control1); + controlSecondLocal = curve.transform.InverseTransformVector(control2); + } + + + // inform curve + if (oldTransformNull) curve.PrivateTransformForPointAdded(curve.IndexOf(this)); + else if (newTransformNull) curve.PrivateTransformForPointRemoved(curve.IndexOf(this)); + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointTransform) : null, sender: this); + } + } + + #endregion + + #region custom fields + + //=============================================================================================== + // Custom Fields (see interface for comments) + //=============================================================================================== + //----------------------------------- Getters + public T GetField(string name) + { + var type = typeof(T); + var value = GetField(name, type); + var field = (T) value; + return field; + } + + public float GetFloat(string name) + { + return PrivateValuesForFields.floatValues[curve.IndexOfFieldValue(name)]; + } + + public bool GetBool(string name) + { + return PrivateValuesForFields.boolValues[curve.IndexOfFieldValue(name)]; + } + + public int GetInt(string name) + { + return PrivateValuesForFields.intValues[curve.IndexOfFieldValue(name)]; + } + + public Vector3 GetVector3(string name) + { + return PrivateValuesForFields.vector3Values[curve.IndexOfFieldValue(name)]; + } + + public Quaternion GetQuaternion(string name) + { + return PrivateValuesForFields.quaternionValues[curve.IndexOfFieldValue(name)]; + } + + public Bounds GetBounds(string name) + { + return PrivateValuesForFields.boundsValues[curve.IndexOfFieldValue(name)]; + } + + public Color GetColor(string name) + { + return PrivateValuesForFields.colorValues[curve.IndexOfFieldValue(name)]; + } + + public object GetField(string name, Type type) + { + return FieldTypes.GetField(curve, type, name, PrivateValuesForFields); + } + + //----------------------------------- Setters + public void SetField(string name, T value) + { + SetField(name, value, typeof(T)); + } + + public void SetField(string name, object value, Type type) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + FieldTypes.SetField(curve, type, name, value, PrivateValuesForFields); + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetFloat(string name, float value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.floatValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetBool(string name, bool value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.boolValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetInt(string name, int value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.intValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetVector3(string name, Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.vector3Values[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetQuaternion(string name, Quaternion value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.quaternionValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetBounds(string name, Bounds value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.boundsValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetColor(string name, Color value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.colorValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + #endregion + + #region Misc public methods + + //================================================================================ + // Misc public functions + //================================================================================ + /// return system Vector 3 field + public Vector3 Get(FieldEnum field) + { + Vector3 result; + switch (field) + { + //position + case FieldEnum.PositionWorld: + result = PositionWorld; + break; + case FieldEnum.PositionLocal: + result = positionLocal; + break; + + //first control + case FieldEnum.ControlFirstWorld: + result = ControlFirstWorld; + break; + case FieldEnum.ControlFirstLocal: + result = controlFirstLocal; + break; + + //second control + case FieldEnum.ControlSecondWorld: + result = ControlSecondWorld; + break; + default: + result = controlSecondLocal; + break; + } + return result; + } + + //see interface for comments + + public override string ToString() + { + return "Point [localPosition=" + positionLocal + "]"; + } + + #endregion + + #region private methods + + //set local position + private void SetPosition(Vector3 value, bool worldSpaceIsUsed = false) + { + curve.FireBeforeChange(BGCurve.EventPointPosition); + + //snapping + if (curve.SnapType != BGCurve.SnapTypeEnum.Off) + { + if (worldSpaceIsUsed) curve.ApplySnapping(ref value); + else + { + //we need to transfer space before applying snapping + var pos = curve.transform.TransformPoint(value); + if (curve.ApplySnapping(ref pos)) value = curve.transform.InverseTransformPoint(pos); + } + } + + + //assign position + if (pointTransform == null) + { + if (worldSpaceIsUsed) + { + var localPos = curve.transform.InverseTransformPoint(value); + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) localPos = curve.Apply2D(localPos); + positionLocal = localPos; + } + else + { + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + positionLocal = value; + } + } + else + { + //2d mode with curve's transform changed is not working correctly + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + pointTransform.position = worldSpaceIsUsed ? value : curve.transform.TransformPoint(value); + } + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointPosition) : null, sender: this); + } + + //set local control 1 + private void SetControlFirstLocal(Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointControl); + + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + + if (controlType == ControlTypeEnum.BezierSymmetrical) controlSecondLocal = -value; + + controlFirstLocal = value; + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControl) : null, sender: this); + } + + //set local control 2 (it's basically copy/paste from SetControlFirstLocal, but we can not use delegates here because of performance) + private void SetControlSecondLocal(Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointControl); + + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + + if (controlType == ControlTypeEnum.BezierSymmetrical) controlFirstLocal = -value; + + controlSecondLocal = value; + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControl) : null, sender: this); + } + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + // field deleted callback + public static void PrivateFieldDeleted(BGCurvePointField field, int indexOfField, FieldsValues fieldsValues) + { + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bool: + Ensure(ref fieldsValues.boolValues); + fieldsValues.boolValues = BGCurve.Remove(fieldsValues.boolValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Int: + Ensure(ref fieldsValues.intValues); + fieldsValues.intValues = BGCurve.Remove(fieldsValues.intValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Float: + Ensure(ref fieldsValues.floatValues); + fieldsValues.floatValues = BGCurve.Remove(fieldsValues.floatValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Vector3: + Ensure(ref fieldsValues.vector3Values); + fieldsValues.vector3Values = BGCurve.Remove(fieldsValues.vector3Values, indexOfField); + break; + case BGCurvePointField.TypeEnum.Bounds: + Ensure(ref fieldsValues.boundsValues); + fieldsValues.boundsValues = BGCurve.Remove(fieldsValues.boundsValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Color: + Ensure(ref fieldsValues.colorValues); + fieldsValues.colorValues = BGCurve.Remove(fieldsValues.colorValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.String: + Ensure(ref fieldsValues.stringValues); + fieldsValues.stringValues = BGCurve.Remove(fieldsValues.stringValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Quaternion: + Ensure(ref fieldsValues.quaternionValues); + fieldsValues.quaternionValues = BGCurve.Remove(fieldsValues.quaternionValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.AnimationCurve: + Ensure(ref fieldsValues.animationCurveValues); + fieldsValues.animationCurveValues = BGCurve.Remove(fieldsValues.animationCurveValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.GameObject: + Ensure(ref fieldsValues.gameObjectValues); + fieldsValues.gameObjectValues = BGCurve.Remove(fieldsValues.gameObjectValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.Component: + Ensure(ref fieldsValues.componentValues); + fieldsValues.componentValues = BGCurve.Remove(fieldsValues.componentValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.BGCurve: + Ensure(ref fieldsValues.bgCurveValues); + fieldsValues.bgCurveValues = BGCurve.Remove(fieldsValues.bgCurveValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + Ensure(ref fieldsValues.bgCurvePointComponentValues); + fieldsValues.bgCurvePointComponentValues = BGCurve.Remove(fieldsValues.bgCurvePointComponentValues, indexOfField); + break; + case BGCurvePointField.TypeEnum.BGCurvePointGO: + Ensure(ref fieldsValues.bgCurvePointGOValues); + fieldsValues.bgCurvePointGOValues = BGCurve.Remove(fieldsValues.bgCurvePointGOValues, indexOfField); + break; + default: + throw new ArgumentOutOfRangeException("field.Type", field.Type, "Unsupported type " + field.Type); + } + } + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + // field added callback + public static void PrivateFieldAdded(BGCurvePointField field, FieldsValues fieldsValues) + { + var type = FieldTypes.GetType(field.Type); + var item = BGReflectionAdapter.IsValueType(type) ? Activator.CreateInstance(type) : null; + + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bool: + Ensure(ref fieldsValues.boolValues); + fieldsValues.boolValues = BGCurve.Insert(fieldsValues.boolValues, fieldsValues.boolValues.Length, (bool) item); + break; + case BGCurvePointField.TypeEnum.Int: + Ensure(ref fieldsValues.intValues); + fieldsValues.intValues = BGCurve.Insert(fieldsValues.intValues, fieldsValues.intValues.Length, (int) item); + break; + case BGCurvePointField.TypeEnum.Float: + Ensure(ref fieldsValues.floatValues); + fieldsValues.floatValues = BGCurve.Insert(fieldsValues.floatValues, fieldsValues.floatValues.Length, (float) item); + break; + case BGCurvePointField.TypeEnum.Vector3: + Ensure(ref fieldsValues.vector3Values); + fieldsValues.vector3Values = BGCurve.Insert(fieldsValues.vector3Values, fieldsValues.vector3Values.Length, (Vector3) item); + break; + case BGCurvePointField.TypeEnum.Bounds: + Ensure(ref fieldsValues.boundsValues); + fieldsValues.boundsValues = BGCurve.Insert(fieldsValues.boundsValues, fieldsValues.boundsValues.Length, (Bounds) item); + break; + case BGCurvePointField.TypeEnum.Color: + Ensure(ref fieldsValues.colorValues); + fieldsValues.colorValues = BGCurve.Insert(fieldsValues.colorValues, fieldsValues.colorValues.Length, (Color) item); + break; + case BGCurvePointField.TypeEnum.String: + Ensure(ref fieldsValues.stringValues); + fieldsValues.stringValues = BGCurve.Insert(fieldsValues.stringValues, fieldsValues.stringValues.Length, (string) item); + break; + case BGCurvePointField.TypeEnum.Quaternion: + Ensure(ref fieldsValues.quaternionValues); + fieldsValues.quaternionValues = BGCurve.Insert(fieldsValues.quaternionValues, fieldsValues.quaternionValues.Length, (Quaternion) item); + break; + case BGCurvePointField.TypeEnum.AnimationCurve: + Ensure(ref fieldsValues.animationCurveValues); + fieldsValues.animationCurveValues = BGCurve.Insert(fieldsValues.animationCurveValues, fieldsValues.animationCurveValues.Length, (AnimationCurve) item); + break; + case BGCurvePointField.TypeEnum.GameObject: + Ensure(ref fieldsValues.gameObjectValues); + fieldsValues.gameObjectValues = BGCurve.Insert(fieldsValues.gameObjectValues, fieldsValues.gameObjectValues.Length, (GameObject) item); + break; + case BGCurvePointField.TypeEnum.Component: + Ensure(ref fieldsValues.componentValues); + fieldsValues.componentValues = BGCurve.Insert(fieldsValues.componentValues, fieldsValues.componentValues.Length, (Component) item); + break; + case BGCurvePointField.TypeEnum.BGCurve: + Ensure(ref fieldsValues.bgCurveValues); + fieldsValues.bgCurveValues = BGCurve.Insert(fieldsValues.bgCurveValues, fieldsValues.bgCurveValues.Length, (BGCurve) item); + break; + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + Ensure(ref fieldsValues.bgCurvePointComponentValues); + fieldsValues.bgCurvePointComponentValues = BGCurve.Insert(fieldsValues.bgCurvePointComponentValues, fieldsValues.bgCurvePointComponentValues.Length, (BGCurvePointComponent) item); + break; + case BGCurvePointField.TypeEnum.BGCurvePointGO: + Ensure(ref fieldsValues.bgCurvePointGOValues); + fieldsValues.bgCurvePointGOValues = BGCurve.Insert(fieldsValues.bgCurvePointGOValues, fieldsValues.bgCurvePointGOValues.Length, (BGCurvePointGO) item); + break; + default: + throw new ArgumentOutOfRangeException("field.Type", field.Type, "Unsupported type " + field.Type); + } + } + + //ensure list is not null + private static void Ensure(ref T[] array) + { + if (array == null) array = new T[0]; + } + + #endregion + + #region helper classes + + //================================================================================ + // Values for the fields + //================================================================================ + /// All values for custom fields + //the reason we store it like this- is to reduce memory and serialization cost + [Serializable] + public sealed class FieldsValues + { + // c# + [SerializeField] public bool[] boolValues; + [SerializeField] public int[] intValues; + [SerializeField] public float[] floatValues; + [SerializeField] public string[] stringValues; + + // Unity structs + [SerializeField] public Vector3[] vector3Values; + [SerializeField] public Bounds[] boundsValues; + [SerializeField] public Color[] colorValues; + [SerializeField] public Quaternion[] quaternionValues; + + // Unity objects + [SerializeField] public AnimationCurve[] animationCurveValues; + [SerializeField] public GameObject[] gameObjectValues; + [SerializeField] public Component[] componentValues; + + // BGCurve + [SerializeField] public BGCurve[] bgCurveValues; + [SerializeField] public BGCurvePointComponent[] bgCurvePointComponentValues; + [SerializeField] public BGCurvePointGO[] bgCurvePointGOValues; + } + + //================================================================================ + // Types for the fields + //================================================================================ + /// Types for custom fields + public static class FieldTypes + { + private static readonly Dictionary> type2fieldGetter = new Dictionary>(); + private static readonly Dictionary> type2fieldSetter = new Dictionary>(); + private static readonly Dictionary type2Type = new Dictionary(); + + static FieldTypes() + { + // All these getters/setters are used only for classes now. For structs and primitives there is overriden getXXX setXXX methods (to get rid of boxing/unboxing). + //primitives + Register(BGCurvePointField.TypeEnum.Bool, typeof(bool), (value, index) => value.boolValues[index], (value, index, o) => value.boolValues[index] = Convert.ToBoolean((object) o)); + Register(BGCurvePointField.TypeEnum.Int, typeof(int), (value, index) => value.intValues[index], (value, index, o) => value.intValues[index] = Convert.ToInt32((object) o)); + Register(BGCurvePointField.TypeEnum.Float, typeof(float), (value, index) => value.floatValues[index], (value, index, o) => value.floatValues[index] = Convert.ToSingle((object) o)); + + //string + Register(BGCurvePointField.TypeEnum.String, typeof(string), (value, index) => value.stringValues[index], (value, index, o) => value.stringValues[index] = (string) o); + + //unity structs and classes + Register(BGCurvePointField.TypeEnum.Vector3, typeof(Vector3), (value, index) => value.vector3Values[index], (value, index, o) => value.vector3Values[index] = (Vector3) o); + Register(BGCurvePointField.TypeEnum.Bounds, typeof(Bounds), (value, index) => + { + var r = value.boundsValues[index]; + return r; + }, (value, index, o) => value.boundsValues[index] = (Bounds) o); + Register(BGCurvePointField.TypeEnum.Quaternion, typeof(Quaternion), (value, index) => value.quaternionValues[index], + (value, index, o) => value.quaternionValues[index] = (Quaternion) o); + Register(BGCurvePointField.TypeEnum.Color, typeof(Color), (value, index) => value.colorValues[index], (value, index, o) => value.colorValues[index] = (Color) o); + Register(BGCurvePointField.TypeEnum.AnimationCurve, typeof(AnimationCurve), (value, index) => value.animationCurveValues[index], + (value, index, o) => value.animationCurveValues[index] = (AnimationCurve) o); + + //unity GO and components + Register(BGCurvePointField.TypeEnum.GameObject, typeof(GameObject), (value, index) => value.gameObjectValues[index], + (value, index, o) => value.gameObjectValues[index] = (GameObject) o); + Register(BGCurvePointField.TypeEnum.Component, typeof(Component), (value, index) => value.componentValues[index], + (value, index, o) => value.componentValues[index] = (Component) o); + + //bg curve related + Register(BGCurvePointField.TypeEnum.BGCurve, typeof(BGCurve), (value, index) => value.bgCurveValues[index], (value, index, o) => value.bgCurveValues[index] = (BGCurve) o); + Register(BGCurvePointField.TypeEnum.BGCurvePointComponent, typeof(BGCurvePointComponent), (value, index) => value.bgCurvePointComponentValues[index], + (value, index, o) => value.bgCurvePointComponentValues[index] = (BGCurvePointComponent) o); + Register(BGCurvePointField.TypeEnum.BGCurvePointGO, typeof(BGCurvePointGO), (value, index) => value.bgCurvePointGOValues[index], + (value, index, o) => value.bgCurvePointGOValues[index] = (BGCurvePointGO) o); + } + + // register data about one type + private static void Register(BGCurvePointField.TypeEnum typeEnum, Type type, Func getter, Action setter) + { + type2Type[typeEnum] = type; + type2fieldGetter[type] = getter; + type2fieldSetter[type] = setter; + } + + /// Get c# type(class), used for value of custom field with type "type" + public static Type GetType(BGCurvePointField.TypeEnum type) + { + return type2Type[type]; + } + + /// retrieve value for particular field with name "name" and type "type" + public static object GetField(BGCurve curve, Type type, string name, FieldsValues values) + { + Func getter; + if (!type2fieldGetter.TryGetValue(type, out getter)) throw new UnityException("Unsupported type for a field, type= " + type); + + return getter(values, IndexOfFieldRelative(curve, name)); + } + + /// set value for particular field with name "name" and type "type" + public static void SetField(BGCurve curve, Type type, string name, object value, FieldsValues values) + { + Action setter; + if (!type2fieldSetter.TryGetValue(type, out setter)) throw new UnityException("Unsupported type for a field, type= " + type); + + setter(values, IndexOfFieldRelative(curve, name), value); + } + + //get the index of field's value within array of values + private static int IndexOfFieldRelative(BGCurve curve, string name) + { + var result = curve.IndexOfFieldValue(name); + + if (result < 0) throw new UnityException("Can not find a field with name " + name); + + return result; + } + } + + #endregion + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs.meta new file mode 100644 index 0000000..3df06c5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21ab56f25c33efa44a87617a91ebd7eb +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs new file mode 100644 index 0000000..f9b0031 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs @@ -0,0 +1,191 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// Point, attached to a separate Component (MonoBehaviour) + // this class uses composition pattern + public class BGCurvePointComponent : MonoBehaviour, BGCurvePointI + { + [SerializeField] private BGCurvePoint point; + + public BGCurve Curve + { + get { return point.Curve; } + } + + public Vector3 PositionLocal + { + get { return point.PositionLocal; } + set { point.PositionLocal = value; } + } + + public Vector3 PositionLocalTransformed + { + get { return point.PositionLocalTransformed; } + set { point.PositionLocalTransformed = value; } + } + + public Vector3 PositionWorld + { + get { return point.PositionWorld; } + set { point.PositionWorld = value; } + } + + public Vector3 ControlFirstLocal + { + get { return point.ControlFirstLocal; } + set { point.ControlFirstLocal = value; } + } + + public Vector3 ControlFirstLocalTransformed + { + get { return point.ControlFirstLocalTransformed; } + set { point.ControlFirstLocalTransformed = value; } + } + + public Vector3 ControlFirstWorld + { + get { return point.ControlFirstWorld; } + set { point.ControlFirstWorld = value; } + } + + public Vector3 ControlSecondLocal + { + get { return point.ControlSecondLocal; } + set { point.ControlSecondLocal = value; } + } + + public Vector3 ControlSecondLocalTransformed + { + get { return point.ControlSecondLocalTransformed; } + set { point.ControlSecondLocalTransformed = value; } + } + + public Vector3 ControlSecondWorld + { + get { return point.ControlSecondWorld; } + set { point.ControlSecondWorld = value; } + } + + public BGCurvePoint.ControlTypeEnum ControlType + { + get { return point.ControlType; } + set { point.ControlType = value; } + } + + public Transform PointTransform + { + get { return point.PointTransform; } + set { point.PointTransform = value; } + } + + public float GetFloat(string name) + { + return point.GetFloat(name); + } + + public bool GetBool(string name) + { + return point.GetBool(name); + } + + public int GetInt(string name) + { + return point.GetInt(name); + } + + public Vector3 GetVector3(string name) + { + return point.GetVector3(name); + } + + public Quaternion GetQuaternion(string name) + { + return point.GetQuaternion(name); + } + + public Bounds GetBounds(string name) + { + return point.GetBounds(name); + } + + public Color GetColor(string name) + { + return point.GetColor(name); + } + + public T GetField(string name) + { + return point.GetField(name); + } + + public object GetField(string name, Type type) + { + return point.GetField(name, type); + } + + public void SetField(string name, object value, Type type) + { + point.SetField(name, value, type); + } + + public void SetField(string name, T value) + { + point.SetField(name, value); + } + + public void SetFloat(string name, float value) + { + point.SetFloat(name, value); + } + + public void SetBool(string name, bool value) + { + point.SetBool(name, value); + } + + public void SetInt(string name, int value) + { + point.SetInt(name, value); + } + + public void SetVector3(string name, Vector3 value) + { + point.SetVector3(name, value); + } + + public void SetQuaternion(string name, Quaternion value) + { + point.SetQuaternion(name, value); + } + + public void SetBounds(string name, Bounds value) + { + point.SetBounds(name, value); + } + + public void SetColor(string name, Color value) + { + point.SetColor(name, value); + } + + public BGCurvePoint Point + { + get { return point; } + } + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + // this should be called once at creating time + public void PrivateInit(BGCurvePoint point) + { + this.point = point; + hideFlags = HideFlags.HideInInspector; + } + + public override string ToString() + { + return point == null ? "no data" : (point +" as Component"); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs.meta new file mode 100644 index 0000000..c8664ec --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointComponent.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8cdc035869a65674f92b3b83794effb9 +timeCreated: 1475051178 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs new file mode 100644 index 0000000..1ae12b6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs @@ -0,0 +1,152 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// Meta data (name, type and settings) for custom point's field + [Serializable] + public class BGCurvePointField : MonoBehaviour + { + // all possible types for the field's value. + // Note, even if your desired type is not supported, + // you still can use it via Unity's standard Component type (assign any MonoBehaviour derived script to it) or via GameObject + public enum TypeEnum + { + //C# + Bool = 0, + Int = 1, + Float = 2, + String = 3, + + //Unity structs + Vector3 = 100, + Bounds = 101, + Color = 102, + Quaternion = 103, + + //Unity classes + AnimationCurve = 200, + GameObject = 201, + Component = 202, + + //BG related + BGCurve = 300, + BGCurvePointComponent = 301, + BGCurvePointGO= 302 + } + + //BGCurve + [SerializeField] private BGCurve curve; + //field's name. It should be unique, not null, English chars only, 16 chars max + [SerializeField] private string fieldName; + //field's type + [SerializeField] private TypeEnum type; + +#if UNITY_EDITOR + // ============================================== !!! This is editor ONLY fields +#pragma warning disable 0414 + + [SerializeField] private bool showHandles = true; + [SerializeField] private int handlesType; + [SerializeField] private Color handlesColor = Color.white; + [SerializeField] private bool showInPointsMenu = true; +#pragma warning restore 0414 +#endif + /// Field's name. It should be unique, not null, English chars only, 16 chars max + public string FieldName + { + get { return fieldName; } + set + { + if (string.Equals(FieldName, value)) return; + CheckName(curve, value, true); + + curve.FireBeforeChange(BGCurve.EventFieldName); + + fieldName = value; + curve.PrivateUpdateFieldsValuesIndexes(); + + curve.FireChange(BGCurveChangedArgs.GetInstance(curve, BGCurveChangedArgs.ChangeTypeEnum.Fields, BGCurve.EventFieldName), sender: this); + } + } + + /// Field's type + public TypeEnum Type + { + //type can not be changed + get { return type; } + } + + /// Owning curve + public BGCurve Curve + { + get { return curve; } + } + + + /// Init the field. It should be called once at creation + public void Init(BGCurve curve, string fieldName, TypeEnum type) + { + if (!string.IsNullOrEmpty(this.fieldName)) throw new UnityException("You can not init twice."); + + CheckName(curve, fieldName, true); + this.curve = curve; + this.fieldName = fieldName; + this.type = type; + } + + /// Check if name is ok. It should be unique, not null, English chars only, 16 chars max + public static string CheckName(BGCurve curve, string name, bool throwException = false) + { + string error = null; + if (string.IsNullOrEmpty(name)) error = "Field's name can not be null"; + else if (name.Length > 16) error = "Name should be 16 chars max. Current name has " + name.Length + " chars."; + else + { + var firstChar = name[0]; + if (!((firstChar >= 'A' && firstChar <= 'Z') || (firstChar >= 'a' && firstChar <= 'z'))) error = "Name should start with a English letter."; + else + { + for (var i = 1; i < name.Length; i++) + { + var @char = name[i]; + if ((@char >= 'A' && @char <= 'Z') || (@char >= 'a' && @char <= 'z') || (@char >= '0' && @char <= '9')) continue; + + error = "Name should contain English letters or numbers only."; + break; + } + if (error==null && curve.HasField(name)) error = "Field with name '" + name + "' already exists."; + } + } + + if (throwException && error != null) throw new UnityException(error); + + return error; + } + + //---------------------------------- Object overrides + + protected bool Equals(BGCurvePointField other) + { + return Equals(curve, other.curve) && string.Equals(fieldName, other.fieldName); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != this.GetType()) return false; + return Equals((BGCurvePointField) obj); + } + + public override int GetHashCode() + { + return (curve != null ? curve.GetHashCode() : 0) ^ (fieldName != null ? fieldName.GetHashCode() : 0); + } + + public override string ToString() + { + return fieldName; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs.meta new file mode 100644 index 0000000..e147864 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointField.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 06627f7d7396a40418f87b2a58e6ddbe +timeCreated: 1474917757 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs new file mode 100644 index 0000000..a4c399a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs @@ -0,0 +1,649 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// Point, attached to separate GameObject + [DisallowMultipleComponent] + // Note, some code was copy pasted from BGCurvePoint class + public class BGCurvePointGO : MonoBehaviour, BGCurvePointI + { + #region fields + + //control type + [SerializeField] private BGCurvePoint.ControlTypeEnum controlType; + + //relative to curve position + [SerializeField] private Vector3 positionLocal; + + //relative to point position + [SerializeField] private Vector3 controlFirstLocal; + [SerializeField] private Vector3 controlSecondLocal; + + //transform for using as point position + [SerializeField] private Transform pointTransform; + + + //point's curve + [SerializeField] private BGCurve curve; + + //custom fields values for all points. it's an array with only one element. the reason why we store it like this- is to reduce storage and serialization costs. + [SerializeField] private BGCurvePoint.FieldsValues[] fieldsValues; + + /// The curve, point's belong to + public BGCurve Curve + { + get { return curve; } + } + + /// This field is not meant for use outside of BGCurve package + //all fields values + public BGCurvePoint.FieldsValues PrivateValuesForFields + { + get + { + if (fieldsValues == null || fieldsValues.Length < 1 || fieldsValues[0] == null) fieldsValues = new[] {new BGCurvePoint.FieldsValues()}; + return fieldsValues[0]; + } + set + { + if (fieldsValues == null || fieldsValues.Length < 1 || fieldsValues[0] == null) fieldsValues = new[] {new BGCurvePoint.FieldsValues()}; + fieldsValues[0] = value; + } + } + + + // =============================================== Position + + //see interface for comments + public Vector3 PositionLocal + { + get + { + if (pointTransform != null) return curve.transform.InverseTransformPoint(pointTransform.position); + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return positionLocal; + case BGCurve.PointsModeEnum.GameObjectsTransform: + return curve.transform.InverseTransformPoint(transform.position); + default: + throw WrongMode(); + } + } + set { SetPosition(value); } + } + + //see interface for comments + public Vector3 PositionLocalTransformed + { + get + { + if(pointTransform != null) return pointTransform.position - curve.transform.position; + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return curve.transform.TransformPoint(positionLocal) - curve.transform.position; + case BGCurve.PointsModeEnum.GameObjectsTransform: + return transform.position - curve.transform.position; + default: + throw WrongMode(); + } + } + set { SetPosition(value + curve.transform.position, true); } + } + + //see interface for comments + public Vector3 PositionWorld + { + get + { + if (pointTransform != null) return pointTransform.position; + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return curve.transform.TransformPoint(positionLocal); + case BGCurve.PointsModeEnum.GameObjectsTransform: + return transform.position; + default: + throw WrongMode(); + } + } + set { SetPosition(value, true); } + } + + + // =============================================== First Handle + //see interface for comments + public Vector3 ControlFirstLocal + { + get { return controlFirstLocal; } + set { SetControlFirstLocal(value); } + } + + //see interface for comments + public Vector3 ControlFirstLocalTransformed + { + get { return TargetTransform.TransformVector(controlFirstLocal); } + set { SetControlFirstLocal(TargetTransform.InverseTransformVector(value)); } + } + + + //see interface for comments + public Vector3 ControlFirstWorld + { + get + { + if (pointTransform != null) return pointTransform.position + pointTransform.TransformVector(controlFirstLocal); + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return curve.transform.TransformPoint(new Vector3(positionLocal.x + controlFirstLocal.x, positionLocal.y + controlFirstLocal.y, positionLocal.z + controlFirstLocal.z)); + case BGCurve.PointsModeEnum.GameObjectsTransform: + return transform.position + transform.TransformVector(controlFirstLocal); + default: + throw WrongMode(); + } + } + set + { + Vector3 localPos; + if (pointTransform != null) localPos = pointTransform.InverseTransformVector(value - pointTransform.position); + else + { + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + localPos = curve.transform.InverseTransformPoint(value) - PositionLocal; + break; + case BGCurve.PointsModeEnum.GameObjectsTransform: + localPos = transform.InverseTransformVector(value - transform.position); + break; + default: + throw WrongMode(); + } + } + SetControlFirstLocal(localPos); + } + } + + + // =============================================== Second Handle + //see interface for comments + public Vector3 ControlSecondLocal + { + get { return controlSecondLocal; } + set { SetControlSecondLocal(value); } + } + + //see interface for comments + public Vector3 ControlSecondLocalTransformed + { + get { return TargetTransform.TransformVector(controlSecondLocal); } + set { SetControlSecondLocal(TargetTransform.InverseTransformVector(value)); } + } + + + //see interface for comments + public Vector3 ControlSecondWorld + { + get + { + if (pointTransform != null) return pointTransform.position + pointTransform.TransformVector(controlSecondLocal); + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return curve.transform.TransformPoint(new Vector3(positionLocal.x + controlSecondLocal.x, positionLocal.y + controlSecondLocal.y, positionLocal.z + controlSecondLocal.z)); + case BGCurve.PointsModeEnum.GameObjectsTransform: + return transform.position + transform.TransformVector(controlSecondLocal); + default: + throw WrongMode(); + } + } + set + { + Vector3 localPos; + if (pointTransform != null) localPos = pointTransform.InverseTransformVector(value - pointTransform.position); + else + { + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + localPos = curve.transform.InverseTransformPoint(value) - PositionLocal; + break; + case BGCurve.PointsModeEnum.GameObjectsTransform: + localPos = transform.InverseTransformVector(value - transform.position); + break; + default: + throw WrongMode(); + } + } + SetControlSecondLocal(localPos); + } + } + + // =============================================== Control type + //see interface for comments + public BGCurvePoint.ControlTypeEnum ControlType + { + get { return controlType; } + set + { + if (controlType == value) return; + + curve.FireBeforeChange(BGCurve.EventPointControlType); + + controlType = value; + + if (controlType == BGCurvePoint.ControlTypeEnum.BezierSymmetrical) controlSecondLocal = -controlFirstLocal; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControlType) : null, sender: this); + } + } + + // =============================================== Transform + public Transform PointTransform + { + get { return pointTransform; } + set + { + if (pointTransform == value) return; + + curve.FireBeforeChange(BGCurve.EventPointTransform); + + var oldTransformNull = pointTransform == null && value != null; + var newTransformNull = value == null && pointTransform != null; + + //we need to transfer system fields + var control1 = ControlFirstLocalTransformed; + var control2 = ControlSecondLocalTransformed; + var positionWorld = PositionWorld; + + pointTransform = value; + + // transfer system fields + if (pointTransform != null) + { + pointTransform.position = positionWorld; + controlFirstLocal = pointTransform.InverseTransformVector(control1); + controlSecondLocal = pointTransform.InverseTransformVector(control2); + } + else + { + switch (curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + positionLocal = curve.transform.InverseTransformPoint(positionWorld); + controlFirstLocal = curve.transform.InverseTransformVector(control1); + controlSecondLocal = curve.transform.InverseTransformVector(control2); + break; + case BGCurve.PointsModeEnum.GameObjectsTransform: + transform.position = positionWorld; + controlFirstLocal = transform.InverseTransformVector(control1); + controlSecondLocal = transform.InverseTransformVector(control2); + break; + default: + throw new ArgumentOutOfRangeException("curve.PointsMode"); + } + } + + + // inform curve + if (oldTransformNull) curve.PrivateTransformForPointAdded(curve.IndexOf(this)); + else if (newTransformNull) curve.PrivateTransformForPointRemoved(curve.IndexOf(this)); + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointTransform) : null, sender: this); + } + } + + + //target transform (used to calculate control positions) + private Transform TargetTransform + { + get + { + if (pointTransform != null) return pointTransform; + + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + return curve.transform; + case BGCurve.PointsModeEnum.GameObjectsTransform: + return transform; + default: + throw WrongMode(); + } + } + } + + #endregion + + #region custom fields + + //=============================================================================================== + // Custom Fields (see interface for comments) + //=============================================================================================== + //----------------------------------- Getters + public T GetField(string name) + { + var type = typeof(T); + var value = GetField(name, type); + var field = (T) value; + return field; + } + + public float GetFloat(string name) + { + return PrivateValuesForFields.floatValues[curve.IndexOfFieldValue(name)]; + } + + public bool GetBool(string name) + { + return PrivateValuesForFields.boolValues[curve.IndexOfFieldValue(name)]; + } + + public int GetInt(string name) + { + return PrivateValuesForFields.intValues[curve.IndexOfFieldValue(name)]; + } + + public Vector3 GetVector3(string name) + { + return PrivateValuesForFields.vector3Values[curve.IndexOfFieldValue(name)]; + } + + public Quaternion GetQuaternion(string name) + { + return PrivateValuesForFields.quaternionValues[curve.IndexOfFieldValue(name)]; + } + + public Bounds GetBounds(string name) + { + return PrivateValuesForFields.boundsValues[curve.IndexOfFieldValue(name)]; + } + + public Color GetColor(string name) + { + return PrivateValuesForFields.colorValues[curve.IndexOfFieldValue(name)]; + } + + public object GetField(string name, Type type) + { + return BGCurvePoint.FieldTypes.GetField(curve, type, name, PrivateValuesForFields); + } + + //----------------------------------- Setters + public void SetField(string name, T value) + { + SetField(name, value, typeof(T)); + } + + public void SetField(string name, object value, Type type) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + BGCurvePoint.FieldTypes.SetField(curve, type, name, value, PrivateValuesForFields); + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetFloat(string name, float value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.floatValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetBool(string name, bool value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.boolValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetInt(string name, int value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.intValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetVector3(string name, Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.vector3Values[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetQuaternion(string name, Quaternion value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.quaternionValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetBounds(string name, Bounds value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.boundsValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + public void SetColor(string name, Color value) + { + curve.FireBeforeChange(BGCurve.EventPointField); + + PrivateValuesForFields.colorValues[curve.IndexOfFieldValue(name)] = value; + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointField) : null, sender: this); + } + + #endregion + + #region Misc public methods + + //================================================================================ + // Misc public functions + //================================================================================ + + public override string ToString() + { + return "Point [localPosition=" + positionLocal + "]"; + } + + #endregion + + #region private methods + + //set position + private void SetPosition(Vector3 value, bool worldSpaceIsUsed = false) + { + curve.FireBeforeChange(BGCurve.EventPointPosition); + + //snapping + if (curve.SnapType != BGCurve.SnapTypeEnum.Off) + { + if (worldSpaceIsUsed) curve.ApplySnapping(ref value); + else + { + //we need to transfer space before applying snapping + var pos = curve.transform.TransformPoint(value); + if (curve.ApplySnapping(ref pos)) value = curve.transform.InverseTransformPoint(pos); + } + } + + + //assign position + if (pointTransform != null) + { + //2d mode with curve's transform changed is not working correctly + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + pointTransform.position = worldSpaceIsUsed ? value : curve.transform.TransformPoint(value); + } + else + { + switch (Curve.PointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + if (worldSpaceIsUsed) + { + var localPos = curve.transform.InverseTransformPoint(value); + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) localPos = curve.Apply2D(localPos); + positionLocal = localPos; + } + else + { + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + positionLocal = value; + } + break; + case BGCurve.PointsModeEnum.GameObjectsTransform: + if (worldSpaceIsUsed) + { + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.transform.TransformPoint(curve.Apply2D(curve.transform.InverseTransformPoint(value))); + transform.position = value; + } + else + { + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + transform.position = curve.transform.TransformPoint(value); + } + break; + default: + throw WrongMode(); + } + } + + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointPosition) : null, sender: this); + } + + + //set local control 1 + private void SetControlFirstLocal(Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointControl); + + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + + if (controlType == BGCurvePoint.ControlTypeEnum.BezierSymmetrical) controlSecondLocal = -value; + + controlFirstLocal = value; + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControl) : null, sender: this); + } + + //set local control 2 (it's basically copy/paste from SetControlFirstLocal, but we can not use delegates here because of performance) + private void SetControlSecondLocal(Vector3 value) + { + curve.FireBeforeChange(BGCurve.EventPointControl); + + if (curve.Mode2D != BGCurve.Mode2DEnum.Off) value = curve.Apply2D(value); + + if (controlType == BGCurvePoint.ControlTypeEnum.BezierSymmetrical) controlFirstLocal = -value; + + controlSecondLocal = value; + curve.FireChange(curve.UseEventsArgs ? BGCurveChangedArgs.GetInstance(Curve, this, BGCurve.EventPointControl) : null, sender: this); + } + + #endregion + + #region Not copy pasted + + //================================================================================= + // This is not copy/pasted part + //================================================================================= + + /// all methods, prefixed with Private, are not meant to be called from outside of BGCurve package + //Init with data. No events are fired. point==null for pointsMode switching. + public void PrivateInit(BGCurvePoint point, BGCurve.PointsModeEnum pointsMode) + { + if (point != null) + { + // init from new point + curve = point.Curve; + controlType = point.ControlType; + pointTransform = point.PointTransform; + + switch (pointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + positionLocal = point.PositionLocal; + controlFirstLocal = point.ControlFirstLocal; + controlSecondLocal = point.ControlSecondLocal; + break; + case BGCurve.PointsModeEnum.GameObjectsTransform: + transform.localPosition = point.PositionLocal; + + //transformed locals are always the same + var targetTransform = pointTransform != null ? pointTransform : transform; + controlFirstLocal = targetTransform.InverseTransformVector(point.ControlFirstLocalTransformed); + controlSecondLocal = targetTransform.InverseTransformVector(point.ControlSecondLocalTransformed); + break; + default: + throw new ArgumentOutOfRangeException("pointsMode", pointsMode, null); + } + } + else + { + // change pointsMode + Transform targetTransform; + switch (pointsMode) + { + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + { + if (Curve.PointsMode != BGCurve.PointsModeEnum.GameObjectsTransform) + throw new ArgumentOutOfRangeException("Curve.PointsMode", "Curve points mode should be equal to GameObjectsTransform"); + + positionLocal = transform.localPosition; + + //transformed locals are always the same + targetTransform = pointTransform != null ? pointTransform : curve.transform; + break; + } + case BGCurve.PointsModeEnum.GameObjectsTransform: + { + if (Curve.PointsMode != BGCurve.PointsModeEnum.GameObjectsNoTransform) + throw new ArgumentOutOfRangeException("Curve.PointsMode", "Curve points mode should be equal to GameObjectsNoTransform"); + + transform.position = PositionWorld; + + //transformed locals are always the same + targetTransform = pointTransform != null ? pointTransform : transform; + break; + } + default: + throw new ArgumentOutOfRangeException("pointsMode", pointsMode, null); + } + + controlFirstLocal = targetTransform.InverseTransformVector(ControlFirstLocalTransformed); + controlSecondLocal = targetTransform.InverseTransformVector(ControlSecondLocalTransformed); + + } + } + + + //creates wrong pointMode exception + private static ArgumentOutOfRangeException WrongMode() + { + return new ArgumentOutOfRangeException("Curve.PointsMode"); + } + + #endregion + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs.meta new file mode 100644 index 0000000..453bdf1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointGO.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 225ae2218b76c4f4980b49b463e9ab12 +timeCreated: 1476535139 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs new file mode 100644 index 0000000..98c4db0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs @@ -0,0 +1,103 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// This is interface for one single curve's point + public interface BGCurvePointI + { + /// The Curve, this point is attached to + BGCurve Curve { get; } + + //==================================================================== + // system fields + //==================================================================== + /// Local position. It's relative to curve's origin. All transformations are ignored + Vector3 PositionLocal { get; set; } + /// Local position. It's relative to curve's origin. All transformations are applied + Vector3 PositionLocalTransformed { get; set; } + /// World position. + Vector3 PositionWorld { get; set; } + + /// Local position for first control (inbound). It's relative to point's position, all transformations are ignored + Vector3 ControlFirstLocal { get; set; } + /// Local position for first control (inbound). It's relative to point's position with all transformations applied + Vector3 ControlFirstLocalTransformed { get; set; } + /// World position for first control (inbound) + Vector3 ControlFirstWorld { get; set; } + + /// Local position for second control (outbound). It's relative to point's position, all transformations are ignored + Vector3 ControlSecondLocal { get; set; } + /// Local position for second control (outbound). It's relative to point's position with all transformations applied + Vector3 ControlSecondLocalTransformed { get; set; } + /// World position for second control (outbound) + Vector3 ControlSecondWorld { get; set; } + + /// Point's controls type. + BGCurvePoint.ControlTypeEnum ControlType { get; set; } + + /// Use this transform as point's position. + Transform PointTransform { get; set; } + + //==================================================================== + // custom fields + //==================================================================== + + // we need overriden getters/setters for structs/primitives to avoid boxing/unboxing + + //------------------------------- Getters + /// Get custom field value. + T GetField(string name); + /// Get custom field value. + object GetField(string name, Type type); + + /// Get float custom field value. + float GetFloat(string name); + + /// Get bool custom field value. + bool GetBool(string name); + + /// Get int custom field value. + int GetInt(string name); + + /// Get Vector3 custom field value. + Vector3 GetVector3(string name); + + /// Get Quaternion custom field value. + Quaternion GetQuaternion(string name); + + /// Get Bounds custom field value. + Bounds GetBounds(string name); + + /// Get Color custom field value. + Color GetColor(string name); + + + //------------------------------- Setters + /// Set custom field value. + void SetField(string name, T value); + /// Set custom field value. + void SetField(string name, object value, Type type); + + /// Set float custom field value. + void SetFloat(string name, float value); + + /// Set bool custom field value. + void SetBool(string name, bool value); + + /// Set int custom field value. + void SetInt(string name, int value); + + /// Set Vector3 custom field value. + void SetVector3(string name, Vector3 value); + + /// Set Quaternion custom field value. + void SetQuaternion(string name, Quaternion value); + + /// Set Bounds custom field value. + void SetBounds(string name, Bounds value); + + /// Set Color custom field value. + void SetColor(string name, Color value); + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs.meta new file mode 100644 index 0000000..1facdb0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurvePointI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 38ff6611c69f3da4d8e7aa49ed3bbe53 +timeCreated: 1475050532 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs new file mode 100644 index 0000000..8ff3e0d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs @@ -0,0 +1,60 @@ +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ + /// This is an indicator class, showing that GameObject is used as transform for Curve's point. It is used by Editor only + public class BGCurveReferenceToPoint : MonoBehaviour + { + [SerializeField] private BGCurvePointComponent pointComponent; + [SerializeField] private BGCurvePointGO pointGo; + + /// referenced point + public BGCurvePointI Point + { + get { return pointGo != null ? (BGCurvePointI) pointGo : pointComponent; } + set + { + if (value == null) + { + pointGo = null; + pointComponent = null; + } + else + { + if (value is BGCurvePointGO) + { + pointGo = (BGCurvePointGO) value; + pointComponent = null; + } + else if (value is BGCurvePointComponent) + { + pointComponent = (BGCurvePointComponent) value; + pointGo = null; + } + else + { + pointGo = null; + pointComponent = null; + } + } + } + } + + /// find referenced point, attached to target gameobject + public static BGCurveReferenceToPoint GetReferenceToPoint(BGCurvePointI point) + { + if (point.PointTransform == null) return null; + var referencesToPoints = point.PointTransform.GetComponents(); + if (referencesToPoints.Length == 0) return null; + + + var length = referencesToPoints.Length; + for (var i = 0; i < length; i++) + { + var referencesToPoint = referencesToPoints[i]; + if (referencesToPoint.Point == point) return referencesToPoint; + } + return null; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs.meta new file mode 100644 index 0000000..eeef629 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveReferenceToPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7c9402229daf9f443a9b18c328178235 +timeCreated: 1477988451 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs new file mode 100644 index 0000000..f8a7a13 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs @@ -0,0 +1,366 @@ +using System; +using UnityEngine; + +namespace BansheeGz.BGSpline.Curve +{ +#if UNITY_EDITOR + // ========================== This class is supposed to work in Editor ONLY + + /// Warning!! This class is for Editor ONLY. It contains curve settings + // many tooltips and range attributes are currently not used + [Serializable] + public class BGCurveSettings + { + #region Fields & enums + + public enum HandlesTypeEnum + { + Configurable, + Standard, + FreeMove + } + + public enum ShowCurveModeEnum + { + CurveSelected, + CurveOrParentSelected, + Always + } + + + //=============================================================== Curve itself + [SerializeField] [Tooltip("Hide Game Object's handles")] private bool hideHandles; + + [SerializeField] [Tooltip("Distance from the camera, at which new points are created")] private float newPointDistance = 2; + + [SerializeField] [Tooltip("Show curve in the scene or not. If not, all handles are disabled as well")] private bool showCurve = true; + + [SerializeField] [Tooltip("Show curve mode")] private ShowCurveModeEnum showCurveMode = ShowCurveModeEnum.CurveOrParentSelected; + + [SerializeField] [Range(1, 50)] [Tooltip("Number of sections between two curves points.\r\n It's used for displaying in editor only")] private int sections = 20; + + + [SerializeField] [Tooltip("Show Points Menu buttons in the editor (for Points tab)")] private bool showPointMenu = true; + + //tangents + [SerializeField] [Tooltip("Show points tangents in the scene")] private bool showTangents; + [SerializeField] [Tooltip("Point tangent arrow size in the scene")] [Range(.3f, 2)] private float tangentsSize = .7f; + [SerializeField] [Tooltip("Point tangent color in the scene")] private Color tangentsColor = Color.white; + [SerializeField] [Range(1, 3)] [Tooltip("Number of tangents for every section")] private int tangentsPerSection = 1; + + // control type for new points + [SerializeField] [Tooltip("Control type for new points")] private BGCurvePoint.ControlTypeEnum controlType; + + [SerializeField] [Tooltip("Curve is drawn on top of objects")] private bool vRay; + + [SerializeField] [Tooltip("Curve's color in the scene")] private Color lineColor = Color.red; + + + //=============================================================== Control Type field + + [SerializeField] [Tooltip("Show points control types in the editor (for Points tab)")] private bool showPointControlType = true; + + //=============================================================== Position field + + [SerializeField] [Tooltip("Show points positions in the editor (for Points tab)")] private bool showPointPosition = true; + + [SerializeField] [Tooltip("Show points handles in the scene")] private bool showHandles = true; + + + [SerializeField] [Tooltip("Points handles type" + + "\r\n 1)FreeMove- standard Unity freemove handles" + + "\r\n 2)Standard-standard handles" + + "\r\n 3)Configurable- configurable handles")] private HandlesTypeEnum handlesType = HandlesTypeEnum.Configurable; + + + [SerializeField] private SettingsForHandles handlesSettings = new SettingsForHandles(); + + [SerializeField] [Tooltip("Show points positions labels in the scene ")] private bool showLabels = true; + + [SerializeField] [Tooltip("Point's labels color in the scene")] private Color labelColor = Color.white; + + + [SerializeField] [Tooltip("Show points positions in the scene")] private bool showPositions; + + [SerializeField] [Tooltip("Point's labels color when selected in the scene")] private Color labelColorSelected = Color.green; + + [SerializeField] [Tooltip("Show spheres at points locations in the scene")] private bool showSpheres = true; + + [SerializeField] [Range(.01f, 1)] [Tooltip("Point's sphere radius in the scene")] private float sphereRadius = .1f; + + [SerializeField] [Tooltip("Point's sphere color in the scene")] private Color sphereColor = Color.red; + + + //=============================================================== Controls fields + + [SerializeField] [Tooltip("Show points controls positions in the editor (for Points tab)")] private bool showPointControlPositions = true; + + [SerializeField] [Tooltip("Show points control handles in the scene")] private bool showControlHandles = true; + + [SerializeField] [Tooltip("Points control handles type\r\n 1)FreeMove- standard Unity freemove handles\r\n " + + "2)Standard-standard handles\r\n 3)Configurable- configurable handles")] private HandlesTypeEnum controlHandlesType = HandlesTypeEnum.Configurable; + + [SerializeField] private SettingsForHandles controlHandlesSettings = new SettingsForHandles {AxisScale = .7f, PlanesScale = .7f, Alpha = .7f}; + + [SerializeField] [Tooltip("Points control handles color")] private Color controlHandlesColor = Color.cyan; + + [SerializeField] [Tooltip("Show points control labels in the scene ")] private bool showControlLabels = true; + + [SerializeField] [Tooltip("Show points control positions in the scene")] private bool showControlPositions; + + [SerializeField] [Tooltip("Control point's labels color in the scene")] private Color labelControlColor = Color.yellow; + + //=============================================================== Transform field + + [SerializeField] [Tooltip("Show points transform field in the editor (for Points tab)")] private bool showTransformField; + + //=============================================================== Misc + + [SerializeField] private bool existing; + + #endregion + + #region Props + + public bool HideHandles + { + get { return hideHandles; } + set { hideHandles = value; } + } + + public float NewPointDistance + { + get { return newPointDistance; } + set { newPointDistance = value; } + } + + public bool ShowPointControlType + { + get { return showPointControlType; } + set { showPointControlType = value; } + } + + public bool ShowPointPosition + { + get { return showPointPosition; } + set { showPointPosition = value; } + } + + public bool ShowPointControlPositions + { + get { return showPointControlPositions; } + set { showPointControlPositions = value; } + } + + public bool ShowPointMenu + { + get { return showPointMenu; } + set { showPointMenu = value; } + } + + public bool ShowCurve + { + get { return showCurve; } + set { showCurve = value; } + } + + public ShowCurveModeEnum ShowCurveMode + { + get { return showCurveMode; } + set { showCurveMode = value; } + } + + public bool ShowHandles + { + get { return showHandles; } + set { showHandles = value; } + } + + public bool ShowTangents + { + get { return showTangents; } + set { showTangents = value; } + } + + public float TangentsSize + { + get { return tangentsSize; } + set { tangentsSize = value; } + } + + public Color TangentsColor + { + get { return tangentsColor; } + set { tangentsColor = value; } + } + + public int TangentsPerSection + { + get { return Mathf.Clamp(tangentsPerSection, 1, 3); } + set { tangentsPerSection = Mathf.Clamp(value, 1, 3); } + } + + public HandlesTypeEnum HandlesType + { + get { return handlesType; } + set { handlesType = value; } + } + + public SettingsForHandles HandlesSettings + { + get { return handlesSettings; } + set { handlesSettings = value; } + } + + public int Sections + { + get { return Mathf.Clamp(sections, 1, 50); } + set { sections = Mathf.Clamp(value, 1, 50); } + } + + public bool VRay + { + get { return vRay; } + set { vRay = value; } + } + + public Color LineColor + { + get { return lineColor; } + set { lineColor = value; } + } + + public bool ShowControlHandles + { + get { return showControlHandles; } + set { showControlHandles = value; } + } + + public HandlesTypeEnum ControlHandlesType + { + get { return controlHandlesType; } + set { controlHandlesType = value; } + } + + public SettingsForHandles ControlHandlesSettings + { + get { return controlHandlesSettings; } + set { controlHandlesSettings = value; } + } + + public Color ControlHandlesColor + { + get { return controlHandlesColor; } + set { controlHandlesColor = value; } + } + + public bool ShowLabels + { + get { return showLabels; } + set { showLabels = value; } + } + + public bool ShowPositions + { + get { return showPositions; } + set { showPositions = value; } + } + + public bool ShowControlPositions + { + get { return showControlPositions; } + set { showControlPositions = value; } + } + + public Color LabelColor + { + get { return labelColor; } + set { labelColor = value; } + } + + public Color LabelColorSelected + { + get { return labelColorSelected; } + set { labelColorSelected = value; } + } + + public bool ShowSpheres + { + get { return showSpheres; } + set { showSpheres = value; } + } + + public float SphereRadius + { + get { return sphereRadius; } + set { sphereRadius = value; } + } + + public Color SphereColor + { + get { return sphereColor; } + set { sphereColor = value; } + } + + public BGCurvePoint.ControlTypeEnum ControlType + { + get { return controlType; } + set { controlType = value; } + } + + public bool Existing + { + get { return existing; } + set { existing = value; } + } + + public bool ShowControlLabels + { + get { return showControlLabels; } + set { showControlLabels = value; } + } + + public Color LabelControlColor + { + get { return labelControlColor; } + set { labelControlColor = value; } + } + + public bool ShowTransformField + { + get { return showTransformField; } + set { showTransformField = value; } + } + + #endregion + + #region classes + + [Serializable] + public class SettingsForHandles + { + public bool RemoveX; + public bool RemoveY; + public bool RemoveZ; + + public bool RemoveXZ; + public bool RemoveXY; + public bool RemoveYZ; + + [Range(.5f, 1.5f)] public float AxisScale = 1; + + [Range(.5f, 1.5f)] public float PlanesScale = 1; + + [Range(.5f, 1f)] public float Alpha = 1; + + + public bool Disabled + { + get { return RemoveX && RemoveY && RemoveZ && RemoveXY && RemoveXZ && RemoveYZ; } + } + } + + #endregion + } +#endif +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs.meta new file mode 100644 index 0000000..8652f11 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGCurveSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5330eda6cdebde54585ac3d72c6979d4 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs new file mode 100644 index 0000000..03a6157 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs @@ -0,0 +1,71 @@ +using System; + +#if NETFX_CORE +using System.Reflection; +using System.Collections.Generic; +#endif + +namespace BansheeGz.BGSpline.Curve +{ + /// Reflection related stuff + //thanks to qwerty + public static class BGReflectionAdapter + { +#if NETFX_CORE + public static object[] GetCustomAttributes(Type type, Type attributeType, bool inherit) + { + var enumerator = type.GetTypeInfo().GetCustomAttributes(attributeType, inherit); + var result = new List(); + foreach(var item in enumerator) result.Add(item); + return result.ToArray(); + } + + public static bool IsAbstract(Type type) + { + return type.GetTypeInfo().IsAbstract; + } + + public static bool IsClass(Type type) + { + return type.GetTypeInfo().IsClass; + } + + public static bool IsSubclassOf(Type type, Type typeToCheck) + { + return type.GetTypeInfo().IsSubclassOf(typeToCheck); + } + + public static bool IsValueType(Type type) + { + return type.GetTypeInfo().IsValueType; + } +#else + + public static object[] GetCustomAttributes(Type type, Type attributeType, bool inherit) + { + return type.GetCustomAttributes(attributeType, inherit); + } + + public static bool IsAbstract(Type type) + { + return type.IsAbstract; + } + + public static bool IsClass(Type type) + { + return type.IsClass; + } + + public static bool IsSubclassOf(Type type, Type typeToCheck) + { + return type.IsSubclassOf(typeToCheck); + } + + public static bool IsValueType(Type type) + { + return type.IsValueType; + } + +#endif + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs.meta new file mode 100644 index 0000000..5559ad1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Curve/BGReflectionAdapter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f27a57cfa8411464a9eeaf545adb9782 +timeCreated: 1481951176 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor.meta new file mode 100644 index 0000000..a9eebb8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: c14afad4dd4b6ca45bb6d96cdc5a10ba +folderAsset: yes +timeCreated: 1458400581 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc.meta new file mode 100644 index 0000000..3e3aa6c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5e85ccb67b51ad4419baa0304f8171c0 +folderAsset: yes +timeCreated: 1472482935 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs new file mode 100644 index 0000000..97870a1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs @@ -0,0 +1,55 @@ +using System; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof (BGCcCursorChangeLinear))] + public class BGCcCursorChangeLinearEditor : BGCcEditor + { + private GUIContent speedFieldContent; + private GUIContent delayFieldContent; + + private BGCcCursorChangeLinear ChangeLinear + { + get { return (BGCcCursorChangeLinear) cc; } + } + + protected override void InternalOnInspectorGUI() + { + BGEditorUtility.Assign(ref speedFieldContent, () => new GUIContent("Speed Field", "Speed field to take a speed from. Each point will have it's own speed. Should be a float field.")); + BGEditorUtility.Assign(ref delayFieldContent, () => new GUIContent("Delay Field", "Delay field to take a delay from. Each point will have it's own delay. Should be a float field.")); + + //speed + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.CustomField(speedFieldContent, cc.Curve, ChangeLinear.SpeedField, BGCurvePointField.TypeEnum.Float, field => ChangeLinear.SpeedField = field); + + if (ChangeLinear.SpeedField == null) EditorGUILayout.PropertyField(serializedObject.FindProperty("speed")); + }); + + //delay + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.CustomField(delayFieldContent, cc.Curve, ChangeLinear.DelayField, BGCurvePointField.TypeEnum.Float, field => ChangeLinear.DelayField = field); + + if (ChangeLinear.DelayField == null) EditorGUILayout.PropertyField(serializedObject.FindProperty("delay")); + }); + + + EditorGUILayout.PropertyField(serializedObject.FindProperty("overflowControl")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("adjustByTotalLength")); + + try + { + //by some reason NullReferenceException exceptions are fired at certain GUI passes + EditorGUILayout.PropertyField(serializedObject.FindProperty("pointReachedEvent")); + } + catch (NullReferenceException) + { + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs.meta new file mode 100644 index 0000000..045e573 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorChangeLinearEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4692c2e962ea94945bf21a4a27e5cb01 +timeCreated: 1472632339 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs new file mode 100644 index 0000000..dbb0cc0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs @@ -0,0 +1,11 @@ +using BansheeGz.BGSpline.Components; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //we need it cause a curve can have multiple cursors and we have to be able to chose between them + [CustomPropertyDrawer(typeof (BGCcCursor), true)] + public class BGCcCursorDrawer : BGCcChoseDrawer + { + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs.meta new file mode 100644 index 0000000..6651100 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 833c28bf8ee4eef4a86a4a1923b07370 +timeCreated: 1473056718 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs new file mode 100644 index 0000000..fe64e9e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using BansheeGz.BGSpline.Components; +using UnityEditor; + +//add points filter + pager for Editor + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof (BGCcCursor))] + public class BGCcCursorEditor : BGCcEditor + { + private BGCcCursor Cursor + { + get { return (BGCcCursor) cc; } + } + + protected override void ShowHandlesSettings() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("handlesScale")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("handlesColor")); + } + + protected override void InternalOnInspectorGUI() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("distance")); + + var distanceRatio = Cursor.DistanceRatio; + var newValue = EditorGUILayout.Slider("Distance Ratio", distanceRatio, 0, 1); + if (BGEditorUtility.AnyChange(distanceRatio, newValue)) Cursor.DistanceRatio = newValue; + } + + protected override void InternalOnSceneGUI() + { + var cursor = Cursor; + + if (cursor == null) return; + + var position = cursor.CalculatePosition(); + + var handleSize = BGEditorUtility.GetHandleSize(position, BGPrivateField.Get(cursor, "handlesScale")); + BGEditorUtility.SwapHandlesColor(BGPrivateField.Get(cursor, "handlesColor"), () => + { + Handles.ArrowCap(0, position + Vector3.up*handleSize*1.2f, Quaternion.LookRotation(Vector3.down), handleSize); + Handles.SphereCap(0, position, Quaternion.LookRotation(Vector3.down), handleSize*.15f); + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs.meta new file mode 100644 index 0000000..bd278ce --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 956394c991ece5441b4221426379b206 +timeCreated: 1472497101 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs new file mode 100644 index 0000000..8e35a8d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs @@ -0,0 +1,13 @@ +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + + public class BGCcCursorObjectEditor : BGCcEditor + { + protected override void InternalOnInspectorGUI() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("objectToManipulate")); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs.meta new file mode 100644 index 0000000..bb0b5a8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: adad197ec8512394b850b4507ad76e42 +timeCreated: 1472771193 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs new file mode 100644 index 0000000..92c344f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs @@ -0,0 +1,133 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof(BGCcCursorObjectRotate))] + public class BGCcCursorObjectRotateEditor : BGCcCursorObjectEditor + { + private GUIContent rotationFieldContent; + private GUIContent revolutionsFieldContent; + private GUIContent clockwiseFieldContent; + + private BGCcCursorObjectRotate ObjectRotate + { + get { return (BGCcCursorObjectRotate) cc; } + } + + protected override void ShowHandlesSettings() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("handlesScale")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("handlesColor")); + } + + protected override void InternalOnInspectorGUI() + { + base.InternalOnInspectorGUI(); + + // reusable labels + BGEditorUtility.Assign(ref rotationFieldContent, + () => new GUIContent("Rotation Field", "Rotation field to take a rotation from. Each point will have it's own rotation. Should be a Quaternion field.")); + BGEditorUtility.Assign(ref revolutionsFieldContent, + () => new GUIContent("Revolutions Field", "Field to store additional revolutions around tangent. It should be an int field.")); + BGEditorUtility.Assign(ref clockwiseFieldContent, + () => new GUIContent("Revolutions Clockwise Field", "Field to store if the rotation around tangent should be clockwise. It should be a bool field.")); + + + //type of the rotation 1) tangent (without field) 2) by field's values + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.CustomField(rotationFieldContent, cc.Curve, ObjectRotate.RotationField, BGCurvePointField.TypeEnum.Quaternion, field => ObjectRotate.RotationField = field); + + if (ObjectRotate.RotationField != null) + { + //============================== field is used + + BGEditorUtility.VerticalBox(() => + { + // additional revolutions + BGEditorUtility.CustomField(revolutionsFieldContent, cc.Curve, ObjectRotate.RevolutionsAroundTangentField, BGCurvePointField.TypeEnum.Int, + field => ObjectRotate.RevolutionsAroundTangentField = field); + if (ObjectRotate.RevolutionsAroundTangentField == null) EditorGUILayout.PropertyField(serializedObject.FindProperty("revolutionsAroundTangent")); + + // clockwise? + BGEditorUtility.CustomField(clockwiseFieldContent, cc.Curve, ObjectRotate.RevolutionsClockwiseField, + BGCurvePointField.TypeEnum.Bool, field => ObjectRotate.RevolutionsClockwiseField = field); + + if (ObjectRotate.RevolutionsClockwiseField == null) EditorGUILayout.PropertyField(serializedObject.FindProperty("revolutionsClockwise")); + }); + } + else + { + //============================== no field- tangent is used + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("upMode")); + switch (ObjectRotate.UpMode) + { + case BGCcCursorObjectRotate.RotationUpEnum.WorldCustom: + case BGCcCursorObjectRotate.RotationUpEnum.LocalCustom: + case BGCcCursorObjectRotate.RotationUpEnum.TargetParentUpCustom: + EditorGUILayout.PropertyField(serializedObject.FindProperty("upCustom")); + break; + } + }); + } + }); + + + //interpolation + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationInterpolation")); + + switch (ObjectRotate.RotationInterpolation) + { + case BGCcCursorObjectRotate.RotationInterpolationEnum.Lerp: + EditorGUILayout.PropertyField(serializedObject.FindProperty("lerpSpeed")); + break; + case BGCcCursorObjectRotate.RotationInterpolationEnum.Slerp: + EditorGUILayout.PropertyField(serializedObject.FindProperty("slerpSpeed")); + break; + } + }); + + EditorGUILayout.PropertyField(serializedObject.FindProperty("offsetAngle")); + } + + protected override void InternalOnSceneGUI() + { + var curve = ObjectRotate.Curve; + + if (curve == null || curve.PointsCount == 0) return; + + BGCcCursor cursor; + try + { + cursor = ObjectRotate.Cursor; + } + catch (MissingReferenceException) + { + return; + } + + if (cursor == null) return; + + var math = cursor.Math; + + if (math == null || !math.IsCalculated(BGCurveBaseMath.Field.Tangent)) return; + + var position = cursor.CalculatePosition(); + + //by field + var result = Quaternion.identity; + if (!ObjectRotate.TryToCalculateRotation(ref result)) return; + + var handleSize = BGEditorUtility.GetHandleSize(position, BGPrivateField.Get(ObjectRotate, "handlesScale")); + BGEditorUtility.SwapHandlesColor(BGPrivateField.Get(ObjectRotate, "handlesColor"), () => { Handles.ArrowCap(0, position, result, handleSize); }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs.meta new file mode 100644 index 0000000..59e046b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectRotateEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 266bbca06f7204b49acadb4414d50a4e +timeCreated: 1472502623 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs new file mode 100644 index 0000000..8cfe006 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof(BGCcCursorObjectScale))] + public class BGCcCursorObjectScaleEditor : BGCcCursorObjectEditor + { + private GUIContent scaleFieldContent; + + private BGCcCursorObjectScale ObjectScale + { + get { return (BGCcCursorObjectScale)cc; } + } + + protected override void InternalOnInspectorGUI() + { + base.InternalOnInspectorGUI(); + + BGEditorUtility.Assign(ref scaleFieldContent, () => new GUIContent("Scale Field", "Scale field to take a scale from. Each point will have it's own scale. Should be Vector3 field.")); + + BGEditorUtility.CustomField(scaleFieldContent, cc.Curve, ObjectScale.ScaleField, BGCurvePointField.TypeEnum.Vector3, field => + { + ObjectScale.ScaleField = field; + }); + } + + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs.meta new file mode 100644 index 0000000..efe1d42 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectScaleEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5f25eaece0b3d1a4f8bfc3205c5201b8 +timeCreated: 1476115388 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs new file mode 100644 index 0000000..1a586ff --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs @@ -0,0 +1,10 @@ +using BansheeGz.BGSpline.Components; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof (BGCcCursorObjectTranslate))] + public class BGCcCursorObjectTranslateEditor : BGCcCursorObjectEditor + { + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs.meta new file mode 100644 index 0000000..28c2457 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcCursorObjectTranslateEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2e7270fc1194afd4f9ba2d7e8ea9c78c +timeCreated: 1472495980 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs new file mode 100644 index 0000000..728c70c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs @@ -0,0 +1,117 @@ +using System; +using BansheeGz.BGSpline.Components; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof(BGCcMath))] + public class BGCcMathEditor : BGCcEditor + { + private BGCcMath Math + { + get { return ((BGCcMath) cc); } + } + + + protected override void InternalOnEnable() + { + //ensure math is created and listeners attached + var math = Math.Math; + math.SuppressWarning = math.SuppressWarning; + } + + protected override void InternalOnInspectorGUI() + { + BGEditorUtility.Horizontal(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("fields")); +// if (GUILayout.Button("Update")) Math.Recalculate(); + }); + + + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("mathType")); + + switch (Math.MathType) + { + case BGCcMath.MathTypeEnum.Base: + EditorGUILayout.PropertyField(serializedObject.FindProperty("sectionParts")); + break; + case BGCcMath.MathTypeEnum.Adaptive: + EditorGUILayout.PropertyField(serializedObject.FindProperty("tolerance")); + break; + } + }); + + EditorGUILayout.PropertyField(serializedObject.FindProperty("optimizeStraightLines")); + + if (Math.Fields == BGCurveBaseMath.Fields.PositionAndTangent) + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("usePositionToCalculateTangents")); + } + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("updateMode")); + if (Math.UpdateMode == BGCcMath.UpdateModeEnum.RendererVisible) + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("rendererForUpdateCheck")); + } + }); + + try + { + //by some reason NullReferenceException exceptions are fired at certain GUI passes + EditorGUILayout.PropertyField(serializedObject.FindProperty("mathChangedEvent")); + } + catch (NullReferenceException) + { + } + } + + protected override void ShowHandlesSettings() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresScale")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresColor")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresCount")); + } + + protected override void InternalOnUndoRedo() + { + if (Math != null) Math.Recalculate(); + } + + + protected override void InternalOnSceneGUI() + { + var mathCc = Math; + + if (mathCc == null || mathCc.Math == null || mathCc.Math.SectionsCount == 0) return; + + if (mathCc.Curve.ForceChangedEventMode != BGCurve.ForceChangedEventModeEnum.Off) mathCc.Recalculate(); + + var math = mathCc.Math; + + var sphereScale = BGPrivateField.Get(mathCc, "spheresScale"); + + BGEditorUtility.SwapHandlesColor(BGPrivateField.Get(mathCc, "spheresColor"), () => + { + var count = BGPrivateField.Get(mathCc, "spheresCount"); + + for (var i = 0; i < math.SectionsCount; i++) + { + var section = math[i]; + var points = section.Points; + for (var j = 0; j < points.Count; j++) + { + var pos = points[j].Position; + Handles.SphereCap(0, pos, Quaternion.identity, sphereScale*BGEditorUtility.GetHandleSize(pos, .07f)); + if (count-- <= 0) return; + } + } + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs.meta new file mode 100644 index 0000000..e15b928 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcMathEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a541fa5a221b56f44b68ed52c066a05b +timeCreated: 1472499639 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs new file mode 100644 index 0000000..bc2c981 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs @@ -0,0 +1,101 @@ +using BansheeGz.BGSpline.Components; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof(BGCcSplitterPolyline))] + public class BGCcSplitterPolylineEditor : BGCcEditor + { + protected bool paramsChanged; + private bool listenersAdded; + + private BGCcSplitterPolyline Splitter + { + get { return (BGCcSplitterPolyline) cc; } + } + + protected override void InternalOnEnable() + { + if (!Splitter.enabled) return; + + if (Application.isPlaying) return; + Splitter.AddListeners(); + listenersAdded = true; + Splitter.InvalidateData(); + } + + protected override void InternalOnDestroy() + { + if (Application.isPlaying) return; + + if (Splitter != null) Splitter.RemoveListeners(); + } + + protected override void InternalOnInspectorGUI() + { + if (!listenersAdded) InternalOnEnable(); + + paramsChanged = false; + BGEditorUtility.ChangeCheck(() => + { + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("splitMode")); + + switch (Splitter.SplitMode) + { + case BGCcSplitterPolyline.SplitModeEnum.PartsTotal: + EditorGUILayout.PropertyField(serializedObject.FindProperty("partsTotal")); + break; + case BGCcSplitterPolyline.SplitModeEnum.PartsPerSection: + EditorGUILayout.PropertyField(serializedObject.FindProperty("partsPerSection")); + break; + } + }); + + EditorGUILayout.PropertyField(serializedObject.FindProperty("doNotOptimizeStraightLines")); + + AdditionalParams(); + }, () => paramsChanged = true); + } + + protected virtual void AdditionalParams() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("useLocal")); + } + + protected override void ShowHandlesSettings() + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresScale")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresColor")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("spheresCount")); + } + + protected override void InternalOnSceneGUI() + { + var splitter = Splitter; + if (splitter == null) return; + + var positions = splitter.Positions; + + if (positions == null || positions.Count == 0) return; + + var sphereScale = BGPrivateField.Get(splitter, "spheresScale"); + + BGEditorUtility.SwapHandlesColor(BGPrivateField.Get(splitter, "spheresColor"), () => + { + var count = Mathf.Min(positions.Count, BGPrivateField.Get(splitter, "spheresCount")); + + var localToWorldMatrix = splitter.transform.localToWorldMatrix; + for (var i = 0; i < count; i++) + { + var position = positions[i]; + if (splitter.UseLocal) position = localToWorldMatrix.MultiplyPoint(position); + + Handles.SphereCap(0, position, Quaternion.identity, sphereScale*BGEditorUtility.GetHandleSize(position, .07f)); + } + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs.meta new file mode 100644 index 0000000..2015976 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcSplitterPolylineEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 43309ae1504d40645bdf732681273088 +timeCreated: 1474944881 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs new file mode 100644 index 0000000..f06003d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using BansheeGz.BGSpline.Components; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + + [CustomEditor(typeof(BGCcTriangulate2D))] + public class BGCcTriangulate2DEditor : BGCcSplitterPolylineEditor + { + + private BGCcTriangulate2D Triangulate2D + { + get { return (BGCcTriangulate2D)cc; } + } + + protected override void AdditionalParams() + { + var updateEveryFrameProperty = serializedObject.FindProperty("updateEveryFrame"); + + EditorGUILayout.PropertyField(updateEveryFrameProperty); + EditorGUILayout.PropertyField(serializedObject.FindProperty("flip")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("scaleUV")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("offsetUV")); + BGEditorUtility.VerticalBox(() => + { + var doubleSidedProperty = serializedObject.FindProperty("doubleSided"); + EditorGUILayout.PropertyField(doubleSidedProperty); + if (doubleSidedProperty.boolValue) + { + EditorGUILayout.PropertyField(serializedObject.FindProperty("scaleBackUV")); + EditorGUILayout.PropertyField(serializedObject.FindProperty("offsetBackUV")); + } + }); + + //launch coroutine + if (updateEveryFrameProperty.boolValue != Triangulate2D.UpdateEveryFrame && Application.isPlaying && updateEveryFrameProperty.boolValue) Triangulate2D.UpdateEveryFrame = true; + } + + protected override void InternalOnInspectorGUIPost() + { + if (paramsChanged) Triangulate2D.UpdateUI(); + } + + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs.meta new file mode 100644 index 0000000..4ea1ae1 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcTriangulate2DEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5883d53d633a9954482d82352bb39465 +timeCreated: 1476470318 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs new file mode 100644 index 0000000..7a89aff --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs @@ -0,0 +1,33 @@ +using BansheeGz.BGSpline.Components; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof (BGCcVisualizationLineRenderer))] + public class BGCcVisualizationLineRendererEditor : BGCcSplitterPolylineEditor + { + + private BGCcVisualizationLineRenderer LineRenderer + { + get { return (BGCcVisualizationLineRenderer) cc; } + } + + protected override void InternalOnInspectorGUI() + { + base.InternalOnInspectorGUI(); + + EditorGUILayout.PropertyField(serializedObject.FindProperty("updateAtStart")); + + } + + protected override void AdditionalParams() + { + //we no need useLocal param, cause it depends on LineRenderer itself + } + + protected override void InternalOnInspectorGUIPost() + { + if (paramsChanged) LineRenderer.UpdateUI(); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs.meta new file mode 100644 index 0000000..307263e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Cc/BGCcVisualizationLineRendererEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fc136e2fcbf2c97468e0b45cf219d5e6 +timeCreated: 1472500588 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve.meta new file mode 100644 index 0000000..3dfc6b2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 6817f9bdaece0b449a012e1592389b6f +folderAsset: yes +timeCreated: 1472482776 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs new file mode 100644 index 0000000..e778871 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs @@ -0,0 +1,173 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +namespace BansheeGz.BGSpline.Editor +{ + public class BGCcEditor : UnityEditor.Editor + { + public event EventHandler ChangedParent; + + + protected BGCc cc; + private Type parentClass; + + //================================================================= Unity callbacks + protected virtual void OnEnable() + { + cc = (BGCc) target; + + if (cc == null) return; + + //get all required components + parentClass = cc.GetParentClass(); + + + InternalOnEnable(); + + cc.ChangedParams -= ChangedParams; + cc.ChangedParams += ChangedParams; + + Undo.undoRedoPerformed -= InternalOnUndoRedo; + Undo.undoRedoPerformed += InternalOnUndoRedo; + } + + + protected virtual void OnDestroy() + { + Undo.undoRedoPerformed -= InternalOnUndoRedo; + cc.ChangedParams -= ChangedParams; + InternalOnDestroy(); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + + var componentChanged = BGEditorUtility.ChangeCheck(() => + { + //custom fields + InternalOnInspectorGUI(); + + // ------------- parents + if (parentClass != null) + { + var possibleParents = cc.GetComponents(parentClass); + if (possibleParents.Length > 1) + { + BGEditorUtility.Horizontal(() => + { + GUILayout.Space(10); + BGEditorUtility.VerticalBox(() => + { + var myParent = cc.GetParent(parentClass); + var options = new string[possibleParents.Length]; + var index = 0; + for (var i = 0; i < possibleParents.Length; i++) + { + var possibleParent = possibleParents[i]; + if (possibleParent == myParent) index = i; + options[i] = ((BGCc)possibleParent).CcName; + } + + //show popup + var label = BGCc.GetDescriptor(parentClass).Name ?? parentClass.Name; + var newIndex = EditorGUILayout.Popup(label, index, options); + if (newIndex != index) + { + Undo.RecordObject(cc, "parent change"); + cc.SetParent((BGCc) possibleParents[newIndex]); + if (ChangedParent != null) ChangedParent(this, null); + } + }); + }); + } + } + }); + + + //-------------- handles + if (cc.SupportHandles && !BGCurveSettingsForEditor.CcInspectorHandlesOff) + { + BGEditorUtility.Horizontal(() => + { + GUILayout.Space(10); + BGEditorUtility.VerticalBox(() => + { + var showHandlesProperty = serializedObject.FindProperty("showHandles"); + EditorGUILayout.PropertyField(showHandlesProperty); + if (cc.SupportHandlesSettings && showHandlesProperty.boolValue) BGEditorUtility.Indent(1, ShowHandlesSettings); + }); + }); + } + + //-------------- status + var info = cc.Info; + BGEditorUtility.HelpBox(info, MessageType.Info, !string.IsNullOrEmpty(info)); + + //-------------- warning + var warning = cc.Warning; + BGEditorUtility.HelpBox(warning, MessageType.Warning, !string.IsNullOrEmpty(warning)); + + //-------------- error + var error = cc.Error; + BGEditorUtility.HelpBox(error, MessageType.Error, !string.IsNullOrEmpty(error)); + + if (!GUI.changed) return; + + Undo.RecordObject(cc, "fields change"); + + serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(cc); + + if (componentChanged) cc.FireChangedParams(); + + InternalOnInspectorGUIPost(); + } + + protected virtual void ShowHandlesSettings() + { + } + + + private void ChangedParams(object sender, EventArgs e) + { + Repaint(); + } + + + public virtual void OnSceneGUI() + { + if (!cc.SupportHandles || !BGPrivateField.GetShowHandles(cc)) return; + InternalOnSceneGUI(); + } + + + //================================================================= Internal to override + + protected virtual void InternalOnEnable() + { + } + + protected virtual void InternalOnDestroy() + { + } + + protected virtual void InternalOnInspectorGUI() + { + } + + protected virtual void InternalOnSceneGUI() + { + } + + protected virtual void InternalOnInspectorGUIPost() + { + } + + protected virtual void InternalOnUndoRedo() + { + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs.meta new file mode 100644 index 0000000..2ad57bf --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCcEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 60c2111cab2041a4890fd960ef4748ae +timeCreated: 1472495704 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs new file mode 100644 index 0000000..e581b55 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs @@ -0,0 +1,520 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //idea.. do points paging + [CustomEditor(typeof(BGCurve))] + public class BGCurveEditor : UnityEditor.Editor + { + private const int ToolBarHeight = 20; + + //static + private static readonly Color32 LockViewActiveColor = new Color32(255, 252, 58, 255); + internal static BGOverlayMessage OverlayMessage; + //for curves, which are not selected in hierarchy + private static readonly Dictionary curve2Painter = new Dictionary(); + private static BGCurvePainterGizmo CurrentGizmoPainter; + private static BGCurve CurrentCurve; + private static Texture2D headerTexture; + + // non-static + private BGCurveEditorTab[] editors; + + private Texture2D[] headers; + + private Rect toolBarRect; + private Texture2D stickerTextureOk; + private Texture2D stickerTextureActive; + private Texture2D stickerTextureWarning; + private Texture2D stickerTextureError; + private Texture2D settingsTexture; + + private GUIStyle stickerStyle; + + public BGCurve Curve { get; private set; } + public BGCurveBaseMath Math { get; private set; } + + public static bool lastPlayMode; + + private BGTransformMonitor transformMonitor; + + //selected points + private BGCurveEditorPointsSelection editorSelection; + private int undoGroup = -1; + + protected void OnEnable() + { + Curve = (BGCurve) target; + + //wth + if (Curve == null) return; + + CurrentCurve = Curve; + transformMonitor = BGTransformMonitor.GetMonitor(Curve); + + + var settings = BGPrivateField.GetSettings(Curve); + + + //painter and math + if (curve2Painter.ContainsKey(Curve)) + { + curve2Painter[Curve].Dispose(); + curve2Painter.Remove(Curve); + } + + Math = NewMath(Curve, settings); + CurrentGizmoPainter = new BGCurvePainterGizmo(Math); + + + //overlay + BGEditorUtility.Assign(ref OverlayMessage, () => new BGOverlayMessage()); + + //probably we do not need it for play mode.. probably + if (!Application.isPlaying) + { + //they are not persistent + Curve.ImmediateChangeEvents = true; + Curve.BeforeChange += BeforeCurveChange; + Curve.Changed += CurveChanged; + } + + + if (!settings.Existing) + { + //newly created + settings.Existing = true; + + var defaultSettings = BGCurveSettingsOperations.LoadDefault(); + if (defaultSettings != null) BGPrivateField.SetSettings(Curve, defaultSettings); + } + + //load textures + BGEditorUtility.Assign(ref headerTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCurveLogo123)); + stickerTextureOk = BGEditorUtility.Texture1X1(new Color32(46, 143, 168, 255)); + stickerTextureError = BGEditorUtility.Texture1X1(new Color32(255, 0, 0, 255)); + stickerTextureWarning = BGEditorUtility.Texture1X1(new Color32(255, 206, 92, 255)); + stickerTextureActive = BGEditorUtility.Texture1X1(new Color32(44, 160, 90, 255)); + + //selection + editorSelection = new BGCurveEditorPointsSelection(Curve, this); + + // editors + editors = new BGCurveEditorTab[] + { + new BGCurveEditorPoints(this, serializedObject, editorSelection), new BGCurveEditorComponents(this, serializedObject), + new BGCurveEditorFields(this, serializedObject, editorSelection), new BGCurveEditorSettings(this, serializedObject) + }; + + headers = editors.Select(editor => editor.Header2D).ToArray(); + foreach (var editor in editors) editor.OnEnable(); + + //do it every frame + EditorApplication.update -= OverlayMessage.Check; + EditorApplication.update += OverlayMessage.Check; + + Undo.undoRedoPerformed -= InternalOnUndoRedo; + Undo.undoRedoPerformed += InternalOnUndoRedo; + } + + private static BGCurveBaseMath NewMath(BGCurve curve, BGCurveSettings settings) + { + return new BGCurveBaseMath(curve, NewConfig(settings)); + } + + private static BGCurveBaseMath.Config NewConfig(BGCurveSettings settings) + { + return new BGCurveBaseMath.Config(settings.ShowTangents ? BGCurveBaseMath.Fields.PositionAndTangent : BGCurveBaseMath.Fields.Position) {Parts = settings.Sections}; + } + + private static void AdjustMath(BGCurveSettings settings, BGCurveBaseMath math) + { + if (settings.Sections != math.Configuration.Parts + || (settings.ShowTangents && !math.IsCalculated(BGCurveBaseMath.Field.Tangent)) + || (!settings.ShowTangents && math.IsCalculated(BGCurveBaseMath.Field.Tangent))) + { + math.Init(NewConfig(settings)); + } + } + + private void CurveChanged(object sender, BGCurveChangedArgs e) + { + if (Curve == null) return; + + if (undoGroup > 0) Undo.CollapseUndoOperations(undoGroup); + undoGroup = -1; + EditorUtility.SetDirty(Curve); + + if (Curve.FieldsCount > 0) foreach (var field in Curve.Fields) EditorUtility.SetDirty(field); + + var pointsMode = Curve.PointsMode; + if (Curve.PointsCount > 0 && pointsMode != BGCurve.PointsModeEnum.Inlined) + { + switch (pointsMode) + { + case BGCurve.PointsModeEnum.Components: + foreach (var point in Curve.Points) EditorUtility.SetDirty((BGCurvePointComponent) point); + break; + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + case BGCurve.PointsModeEnum.GameObjectsTransform: + foreach (var point in Curve.Points) + { + var curvePointGo = (BGCurvePointGO) point; + EditorUtility.SetDirty(curvePointGo); + EditorUtility.SetDirty(curvePointGo.gameObject); + } + break; + } + } + + foreach (var editor in editors) editor.OnCurveChanged(e); + + transformMonitor.CheckForChange(); + } + + private void BeforeCurveChange(object sender, BGCurveChangedArgs.BeforeChange e) + { +// Undo.IncrementCurrentGroup(); + undoGroup = Undo.GetCurrentGroup(); + + var operation = e != null && e.Operation != null ? e.Operation : "Curve change"; + + Undo.RecordObject(Curve, operation); + + + if (Curve.FieldsCount > 0) foreach (var field in Curve.Fields) Undo.RecordObject(field, operation); + + var pointsMode = Curve.PointsMode; + if (Curve.PointsCount > 0) + { + var points = Curve.Points; + foreach (var point in points) if (point.PointTransform != null) Undo.RecordObject(point.PointTransform, operation); + + if (pointsMode != BGCurve.PointsModeEnum.Inlined) + { + switch (pointsMode) + { + case BGCurve.PointsModeEnum.Components: + foreach (var point in points) Undo.RecordObject((BGCurvePointComponent) point, operation); + break; + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + case BGCurve.PointsModeEnum.GameObjectsTransform: + foreach (var point in points) + { + var pointGo = (BGCurvePointGO) point; + Undo.RecordObject(pointGo, operation); + if (pointsMode == BGCurve.PointsModeEnum.GameObjectsTransform) Undo.RecordObject(pointGo.transform, operation); + } + break; + } + } + } + } + + public void OnDisable() + { + try + { + EditorApplication.update -= OverlayMessage.Check; + } + catch (ArgumentException) + { + return; + } + + if (editors != null) foreach (var editor in editors) if (editor != null) editor.OnDisable(); + + if (transformMonitor != null) transformMonitor.Release(); + + Dispose(); + } + + + private void Dispose() + { + CurrentCurve = null; + CurrentGizmoPainter = null; + Undo.undoRedoPerformed -= InternalOnUndoRedo; + + if (Math != null) Math.Dispose(); + Math = null; + } + + private void InternalOnUndoRedo() + { + transformMonitor.CheckForChange(); + + Curve.PrivateUpdateFieldsValuesIndexes(); + + if (BGCurve.IsGoMode(Curve.PointsMode)) BGPrivateField.Invoke(Curve, BGCurve.MethodSetPointsNames); + + foreach (var editor in editors) editor.OnUndoRedo(); + + if (Math != null) Math.Recalculate(); + + Repaint(); + SceneView.RepaintAll(); + } + + public void OnDestroy() + { + if (editors != null) foreach (var editor in editors) if (editor != null) editor.OnDestroy(); + + Curve.BeforeChange -= BeforeCurveChange; + Curve.Changed -= CurveChanged; + + Dispose(); + + Tools.hidden = false; + } + + public override void OnInspectorGUI() + { + //adjust math if needed + AdjustMath(BGPrivateField.GetSettings(Curve), Math); + + //styles + BGEditorUtility.Assign(ref stickerStyle, () => new GUIStyle("Label") {fontSize = 18, alignment = TextAnchor.MiddleCenter, normal = new GUIStyleState {textColor = Color.white}}); + BGEditorUtility.Assign(ref settingsTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSettingsIcon123)); + + serializedObject.Update(); + + // =========== Header + DrawLogo(); + + // =========== lock view + BGEditorUtility.Horizontal(() => + { + var temp = BGCurveSettingsForEditor.LockView; + BGCurveSettingsForEditor.LockView = BGEditorUtility.ButtonOnOff(ref temp, "Lock view", "Disable selection of any object in the scene, except points", LockViewActiveColor, + new GUIContent("Turn Off", "Click to turn this mode off"), + new GUIContent("Turn On", "Click to turn this mode on")); + + if (GUILayout.Button(settingsTexture, GUILayout.MaxWidth(24), GUILayout.MaxHeight(24))) BGCurveSettingsForEditorWindow.Open(); + }); + + //warning + BGEditorUtility.HelpBox("You can not chose another objects in the scene, except points.", MessageType.Warning, + BGCurveSettingsForEditor.LockView, () => GUILayout.Space(8)); + + // =========== Tabs + if (BGCurveSettingsForEditor.CurrentTab < 0 || BGCurveSettingsForEditor.CurrentTab > headers.Length - 1) BGCurveSettingsForEditor.CurrentTab = 0; + var newTab = GUILayout.Toolbar(BGCurveSettingsForEditor.CurrentTab, headers, GUILayout.Height(ToolBarHeight)); + //do not move this method(GUILayoutUtility.GetLastRect() is used) + ShowStickers(); + if (BGCurveSettingsForEditor.CurrentTab != newTab) GUI.FocusControl(""); + BGCurveSettingsForEditor.CurrentTab = newTab; + editors[BGCurveSettingsForEditor.CurrentTab].OnInspectorGui(); + + if (!GUI.changed) return; // if no change- return + + foreach (var editor in editors) editor.OnApply(); + + transformMonitor.CheckForChange(); + } + + //shows error sticker if any component has error + private void ShowStickers() + { + if (Event.current.type == EventType.Repaint) toolBarRect = GUILayoutUtility.GetLastRect(); + + const int height = 18; + var oneTabWidth = toolBarRect.width/editors.Length; + + for (var i = 0; i < editors.Length; i++) + { + var editor = editors[i]; + var error = MessageType.None; + var message = editor.GetStickerMessage(ref error); + if (message == null) continue; + + //show sticker + var width = stickerStyle.CalcSize(new GUIContent(message)).x; + + var rect = new Rect(toolBarRect.x + oneTabWidth*(i + 1) - width, toolBarRect.y + 1, width, height); + + GUI.DrawTexture(rect, GetStickerTexture(error, i)); + GUI.Label(rect, message, stickerStyle); + } + } + + private Texture2D GetStickerTexture(MessageType error, int index) + { + return error == MessageType.Error + ? stickerTextureError + : error == MessageType.Warning + ? stickerTextureWarning + : BGCurveSettingsForEditor.CurrentTab == index + ? stickerTextureActive + : stickerTextureOk; + } + + protected virtual void DrawLogo() + { + DrawLogo(headerTexture); + } + + + protected static void DrawLogo(Texture2D logo) + { + var rect = GUILayoutUtility.GetRect(0, 0); + rect.width = logo.width*.5f; + rect.height = logo.height*.5f; + rect.y += 1; + GUILayout.Space(rect.height + 1); + GUI.DrawTexture(rect, logo); + } + + public void OnSceneGUI() + { + var settings = BGPrivateField.GetSettings(Curve); + + AdjustMath(settings, Math); + + if (Curve.ForceChangedEventMode != BGCurve.ForceChangedEventModeEnum.Off) Math.Recalculate(true); + + + if (settings.HandlesSettings != null && settings.HandlesType == BGCurveSettings.HandlesTypeEnum.Configurable + || settings.ControlHandlesSettings != null && settings.ControlHandlesType == BGCurveSettings.HandlesTypeEnum.Configurable) BGEditorUtility.ReloadSnapSettings(); + + + OverlayMessage.OnSceneGui(); + + var frustum = GeometryUtility.CalculateFrustumPlanes(SceneView.currentDrawingSceneView.camera); + + // process all editors + foreach (var editor in editors) editor.OnSceneGui(frustum); + + editorSelection.Process(Event.current); + + + transformMonitor.CheckForChange(); + } + + public static void AddPoint(BGCurve curve, BGCurvePoint point, int index) + { + BGPrivateField.Invoke(curve, BGCurve.MethodAddPoint, point, index, GetPointProvider(curve.PointsMode, curve)); + } + + public static void DeletePoint(BGCurve curve, int index) + { + BGPrivateField.Invoke(curve, BGCurve.MethodDeletePoint, new[] {typeof(int), typeof(Action)}, index, GetPointDestroyer(curve.PointsMode, curve)); + } + + public static void DeletePoints(BGCurve curve, BGCurvePointI[] points) + { + BGPrivateField.Invoke(curve, BGCurve.MethodDeletePoint, new[] {typeof(BGCurvePointI[]), typeof(Action)}, points, GetPointDestroyer(curve.PointsMode, curve)); + } + + + public static Func GetPointProvider(BGCurve.PointsModeEnum pointsMode, BGCurve curve) + { + //init provider + Func provider = null; + switch (pointsMode) + { + case BGCurve.PointsModeEnum.Components: + provider = () => Undo.AddComponent(curve.gameObject); + break; + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + case BGCurve.PointsModeEnum.GameObjectsTransform: + provider = () => + { + var pointGO = new GameObject(); + var transform = pointGO.transform; + transform.parent = curve.transform; + transform.localRotation = Quaternion.identity; + transform.localPosition = Vector3.zero; + transform.localScale = Vector3.one; + + Undo.RegisterCreatedObjectUndo(pointGO, "Create point"); + var point = Undo.AddComponent(pointGO); + return point; + }; + break; + } + return provider; + } + + public static Action GetPointDestroyer(BGCurve.PointsModeEnum pointsMode, BGCurve curve) + { + //init destroyer + Action destroyer = null; + switch (pointsMode) + { + case BGCurve.PointsModeEnum.Components: + destroyer = point => Undo.DestroyObjectImmediate((UnityEngine.Object) point); + break; + case BGCurve.PointsModeEnum.GameObjectsNoTransform: + case BGCurve.PointsModeEnum.GameObjectsTransform: + destroyer = point => Undo.DestroyObjectImmediate(((MonoBehaviour) point).gameObject); + break; + } + return destroyer; + } + + + [MenuItem("GameObject/Create Other/BansheeGz/BG Curve")] + public static void CreateCurve(MenuCommand command) + { + var curveObject = new GameObject("BGCurve"); + Undo.RegisterCreatedObjectUndo(curveObject, "Undo Create BGCurve"); + curveObject.AddComponent(); + Selection.activeGameObject = curveObject; + } + + [DrawGizmo(GizmoType.NotInSelectionHierarchy | GizmoType.Selected | GizmoType.InSelectionHierarchy)] + public static void DrawGizmos(BGCurve curve, GizmoType gizmoType) + { + var playMode = EditorApplication.isPlaying; + + if (lastPlayMode != playMode) + { + lastPlayMode = playMode; + + foreach (var painterGizmo in curve2Painter) painterGizmo.Value.Dispose(); + curve2Painter.Clear(); + } + + var settings = BGPrivateField.GetSettings(curve); + if (!ComplyForDrawGizmos(curve, gizmoType, settings)) return; + + if (CurrentCurve != null && curve.GetInstanceID() == CurrentCurve.GetInstanceID()) + { + if (CurrentGizmoPainter != null) CurrentGizmoPainter.DrawCurve(); + } + else + { + //curve is not selected in hierarchy + var painter = BGEditorUtility.Ensure(curve2Painter, curve, () => new BGCurvePainterGizmo(NewMath(curve, settings), true)); + AdjustMath(settings, painter.Math); + if (curve.ForceChangedEventMode != BGCurve.ForceChangedEventModeEnum.Off && !Application.isPlaying) painter.Math.Recalculate(); + painter.DrawCurve(); + } + } + + public static bool ComplyForDrawGizmos(BGCurve curve, GizmoType gizmoType, BGCurveSettings settings) + { + if (curve.PointsCount == 0) return false; + + if (!settings.ShowCurve) return false; + if (Selection.Contains(curve.gameObject) && settings.VRay) return false; + if (settings.ShowCurveMode == BGCurveSettings.ShowCurveModeEnum.CurveSelected && !Comply(gizmoType, GizmoType.Selected)) return false; + + if (BGCurvePointGOEditor.PointSelected) return true; + + if (settings.ShowCurveMode == BGCurveSettings.ShowCurveModeEnum.CurveOrParentSelected && !Comply(gizmoType, GizmoType.InSelectionHierarchy)) return false; + return true; + } + + public static bool Comply(GizmoType gizmoType, GizmoType toCompare) + { + return (gizmoType & toCompare) != 0; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs.meta new file mode 100644 index 0000000..80ff9aa --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 93887c59e11763c4791cc3f6063e3ff0 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs new file mode 100644 index 0000000..b66491c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs @@ -0,0 +1,661 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using Object = UnityEngine.Object; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCurveEditorComponents : BGCurveEditorTab + { + private const int ConnectorLineAlpha = 100; + private const int HeaderAlpha = 25; + private const int HeaderFoldedAlpha = 75; + + private static bool customEditorsOn = true; + + + private Texture2D collapseTexture; + private Texture2D expandTexture; + private Texture2D addTexture; + private Texture2D deleteTexture; + private Texture2D whiteTexture; + private Texture2D onTexture; + private Texture2D offTexture; + private Texture2D handlesOnTexture; + private Texture2D handlesOffTexture; + + private readonly Tree tree; + private BGCc[] components; + + public BGCurveEditorComponents(BGCurveEditor editor, SerializedObject curveObject) + : base(editor, curveObject, BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGComponents123)) + { + tree = new Tree(Curve); + } + + + private bool HasError + { + get { return AnyComponentHasError(Curve); } + } + + private bool HasWarning + { + get { return AnyComponentHasWarning(Curve); } + } + + // ================================================================================ Inspector + public override void OnInspectorGui() + { + BGEditorUtility.Assign(ref whiteTexture, () => BGEditorUtility.Texture1X1(Color.white)); + BGEditorUtility.Assign(ref collapseTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCollapseAll123)); + BGEditorUtility.Assign(ref expandTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGExpandAll123)); + BGEditorUtility.Assign(ref addTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGAdd123)); + BGEditorUtility.Assign(ref deleteTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDelete123)); + BGEditorUtility.Assign(ref onTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGOn123)); + BGEditorUtility.Assign(ref offTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGOff123)); + BGEditorUtility.Assign(ref handlesOnTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHandlesOn123)); + BGEditorUtility.Assign(ref handlesOffTexture, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHandlesOff123)); + + + components = Curve.GetComponents(); + var length = components.Length; + + tree.Refresh(components); + + if (tree.InitException != null) + { + EditorGUILayout.HelpBox("There was an error initializing editors for component's Tree View: " + tree.InitException.Message + + "\r\n\r\nYou still can use default Unity's editors for components below.", MessageType.Error); + return; + } + + + var hasError = HasError; + var hasWarning = HasWarning; + + BGEditorUtility.HorizontalBox(() => + { + EditorGUILayout.LabelField("Components: " + length + " (" + (hasError ? "Error" : "Ok") + ")"); + + GUILayout.FlexibleSpace(); + + // turn on/off handles + if (BGEditorUtility.ButtonWithIcon(BGCurveSettingsForEditor.CcInspectorHandlesOff ? handlesOffTexture : handlesOnTexture, "Turn on/off handles settings in Inspector")) + { + BGCurveSettingsForEditor.CcInspectorHandlesOff = !BGCurveSettingsForEditor.CcInspectorHandlesOff; + } + EditorGUILayout.Separator(); + + // turn on/off colored tree + if (BGEditorUtility.ButtonWithIcon(customEditorsOn ? onTexture : offTexture, "Use custom UI for components (colored tree) and hide standard unity editors for components")) + { + customEditorsOn = !customEditorsOn; + tree.Refresh(null, true); + } + EditorGUILayout.Separator(); + + if (length > 0) + { + // collapse/expand + if (BGEditorUtility.ButtonWithIcon(collapseTexture, "Collapse all components")) tree.ExpandCollapseAll(true); + EditorGUILayout.Separator(); + if (BGEditorUtility.ButtonWithIcon(expandTexture, "Expand all components")) tree.ExpandCollapseAll(false); + EditorGUILayout.Separator(); + + + // delete all Ccs + if (BGEditorUtility.ButtonWithIcon(deleteTexture, "Delete all components") + && BGEditorUtility.Confirm("Delete", "Are you sure you want to delete " + length + " component(s)?", "Delete")) tree.Delete(); + EditorGUILayout.Separator(); + } + + //add new Cc + if (BGEditorUtility.ButtonWithIcon(addTexture, "Add new component")) BGCcAddWindow.Open(Curve, type => AddComponent(Curve, type)); + }); + + + if (length > 0) + { + // warnings/errors + if (hasWarning || hasError) + { + for (var i = 0; i < components.Length; i++) + { + var component = components[i]; + + var name = (component.Descriptor != null ? component.Descriptor.Name + " " : "") + component.CcName; + + var error = component.Error; + if (!string.IsNullOrEmpty(error)) BGEditorUtility.HelpBox("Component error [" + name + "]: " + error, MessageType.Error); + + var warning = component.Warning; + if (!string.IsNullOrEmpty(warning)) BGEditorUtility.HelpBox("Component warning [" + name + "]: " + warning, MessageType.Warning); + } + } + else BGEditorUtility.HelpBox("No warnings or errors", MessageType.Info); + + // tree GUI + tree.OnInspectorGui(); + } + else + EditorGUILayout.HelpBox( + "Hit the Plus icon to add a component" + + "\r\n" + + "\r\n" + + "Components allows to add functionality without any scripting." + , MessageType.Info); + + + if (hasError ^ HasError || hasWarning ^ HasWarning) EditorApplication.RepaintHierarchyWindow(); + } + + private static BGCc AddComponent(BGCurve curve, Type type) + { + var newCc = Undo.AddComponent(curve.gameObject, type); + if (newCc == null) return null; + + var bgCc = ((BGCc) newCc); + UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(bgCc, true); + bgCc.AddedInEditor(); + EditorUtility.SetDirty(curve.gameObject); + return bgCc; + } + + public override void OnEnable() + { + tree.Refresh(); + } + + public override void OnDisable() + { + tree.OnDestroy(); + } + + public override void OnSceneGui(Plane[] frustum) + { + if (!customEditorsOn) return; + + tree.OnSceneGui(); + } + + public override string GetStickerMessage(ref MessageType type) + { + var length = Curve.GetComponents().Length; + if (length != 0) + { + bool hasError = false, hasWarning = false; + ComponentsStatus(Curve, ref hasError, ref hasWarning); + type = hasError ? MessageType.Error : hasWarning ? MessageType.Warning : MessageType.None; + } + + return type != MessageType.None ? "!!" : "" + length; + } + + + public static bool AnyComponentHasError(BGCurve curve) + { + var components = curve.GetComponents(); + if (components == null || components.Length == 0) return false; + return components.Any(t => t.HasError()); + } + + public static bool AnyComponentHasWarning(BGCurve curve) + { + var components = curve.GetComponents(); + if (components == null || components.Length == 0) return false; + return components.Any(t => t.HasWarning()); + } + + public static void ComponentsStatus(BGCurve curve, ref bool hasError, ref bool hasWarning) + { + var components = curve.GetComponents(); + if (components == null || components.Length == 0) return; + + foreach (var component in components) + { + if (component.HasError()) hasError = true; + if (component.HasWarning()) hasWarning = true; + } + } + + + // ================================================================================ Tree + //tree structure of Cc's + internal sealed class Tree : BGTreeView + { + private Dictionary level2LinkTexture = GetLevel2LinkTexture(); + + private static Dictionary GetLevel2LinkTexture() + { + return new Dictionary + { + {0, BGEditorUtility.Texture1X1(new Color32(255, 0, 0, ConnectorLineAlpha))}, + {1, BGEditorUtility.Texture1X1(new Color32(0, 255, 0, ConnectorLineAlpha))}, + {2, BGEditorUtility.Texture1X1(new Color32(0, 0, 255, ConnectorLineAlpha))}, + {3, BGEditorUtility.Texture1X1(new Color32(255, 255, 0, ConnectorLineAlpha))}, + }; + } + + private readonly Dictionary level2Color = new Dictionary + { + {0, new Color32(255, 0, 0, HeaderAlpha)}, + {1, new Color32(0, 255, 0, HeaderAlpha)}, + {2, new Color32(0, 0, 255, HeaderAlpha)}, + {3, new Color32(255, 255, 0, HeaderAlpha)}, + }; + + private readonly Dictionary level2FoldedColor = new Dictionary + { + {0, new Color32(255, 0, 0, HeaderFoldedAlpha)}, + {1, new Color32(0, 255, 0, HeaderFoldedAlpha)}, + {2, new Color32(0, 0, 255, HeaderFoldedAlpha)}, + {3, new Color32(255, 255, 0, HeaderFoldedAlpha)}, + }; + + private readonly Texture2D whiteTexture; + + + private readonly Dictionary> type2NodeList = new Dictionary>(); + + public BGCurve Curve; + public BGCc.CcException InitException; + + private int count; + + public Tree(BGCurve curve) : base(new Config(2, 8, 0, 2, 0)) + { + Curve = curve; + + whiteTexture = BGEditorUtility.Texture1X1(Color.white); + } + + public void Refresh(BGCc[] components = null, bool force = false) + { + if (components == null) components = Curve.GetComponents(); + + //it should be enough + if (count == components.Length && !force) return; + + SetHideFlag(components, customEditorsOn ? HideFlags.HideInInspector : HideFlags.None); + + //Recalc + var instanceId2Collapsed = new Dictionary(); + //try to preserve expanded/collapsed state + if (Roots.Count > 0) foreach (var root in Roots) root.FillState(instanceId2Collapsed); + + OnDestroy(); + Roots.Clear(); + type2NodeList.Clear(); + + + if (!customEditorsOn) return; + + + try + { + InitException = null; + + //try to init custom tree view for components + count = components.Length; + foreach (var cc in components) + { + var node = new CcNode(this, cc); + + if (instanceId2Collapsed.ContainsKey(cc.GetInstanceID())) node.Collapsed = true; + + var type = cc.GetType(); + + if (!type2NodeList.ContainsKey(type)) type2NodeList[type] = new List(); + + type2NodeList[type].Add(node); + } + + foreach (var list in type2NodeList.Values) foreach (var node in list) if (!node.Processed) node.ProcessStructure(); + } + catch (BGCc.CcException e) + { + InitException = e; + //fallback (show default stuff) + SetHideFlag(components, HideFlags.None); + } + } + + private static void SetHideFlag(BGCc[] components, HideFlags hideFlags) + { + foreach (var component in components) component.hideFlags = hideFlags; + } + + + public CcNode Get(BGCc cc) + { + var nodes = type2NodeList[cc.GetType()]; + + return nodes.FirstOrDefault(node => node.Cc == cc); + } + + public void Delete() + { + foreach (var root in Roots) root.Delete(); + + GUIUtility.ExitGUI(); + } + + public void OnDestroy() + { + foreach (var root in Roots) root.OnDestroy(); + } + + public override Texture2D GetLinkTexture(int level) + { + if (level2LinkTexture[0] == null) level2LinkTexture = GetLevel2LinkTexture(); + return level2LinkTexture.Count > level ? level2LinkTexture[level] : whiteTexture; + } + + private Color GetColor(int level, bool collapsed, Func defaultColor) + { + return level2Color.Count > level ? (collapsed ? level2FoldedColor[level] : level2Color[level]) : defaultColor(); + } + + public void OnSceneGui() + { + foreach (var root in Roots) root.OnSceneGui(); + } + + public override void OnInspectorGui() + { + if (!customEditorsOn) + { + EditorGUILayout.HelpBox("You disabled tree view. Use standard Unity editors below to change parameters.", MessageType.Warning); + return; + } + + + try + { + for (var i = 0; i < Roots.Count; i++) + { + var root = Roots[i]; + if (i != 0) EditorGUILayout.Separator(); + root.OnInspectorGui(); + } + } + catch (BGEditorUtility.ExitException) + { + Refresh(); + GUIUtility.ExitGUI(); + } + } + + // ================================================================================ Tree Node + // one cc + internal sealed class CcNode : BGTreeNode + { + public bool Processed; + //Cc= Curve's component + public readonly BGCc Cc; + private readonly BGCc.CcDescriptor descriptor; + + private readonly Texture2D enabledTexture; + private readonly Texture2D disabledTexture; + private readonly Texture2D helpTexture; + private readonly Texture2D deleteTexture; + private readonly Texture2D addTexture; + private readonly Texture2D changeNameTexture; + + private GUIStyle headerFoldoutStyle; + private GUIStyle headerFoldoutStyleDisabled; + private GUIStyle okStyle; + private GUIStyle errorStyle; + private GUIStyle coloredBoxStyle; + + + private readonly BGCcEditor ccEditor; + private readonly MethodInfo onSceneGuiMethod; + private readonly Type parentType; + private GUIStyle headerBoxStyle; + + + public override bool Collapsed + { + get { return !UnityEditorInternal.InternalEditorUtility.GetIsInspectorExpanded(Cc); } + set { UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(Cc, !value); } + } + + internal CcNode(Tree tree, BGCc cc) : base(tree) + { + Cc = cc; + descriptor = cc.Descriptor; + + var editor = UnityEditor.Editor.CreateEditor(cc); + + if (!(editor is BGCcEditor)) throw new BGCc.CcException("Unable to init an Editor for " + cc.GetType() + ": editor does not extend from BGCcEditor."); + + ccEditor = (BGCcEditor) editor; + ccEditor.ChangedParent += ChangedParent; +// UnityEditor.Editor.CreateCachedEditor(cc, null, ref ccEditor); + + onSceneGuiMethod = ccEditor.GetType().GetMethod("OnSceneGUI", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance); + + enabledTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGTickYes123); + disabledTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGTickNo123); + helpTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHelp123); + deleteTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDelete123); + addTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGAdd123); + changeNameTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCcEditName123); + + parentType = cc.GetParentClass(); + } + + private Tree MyTree + { + get { return (Tree) Tree; } + } + + private void ChangedParent(object sender, EventArgs e) + { + MyTree.Refresh(null, true); + } + + public override void ProcessStructure() + { + if (parentType == null) + { + MyTree.Roots.Add(this); + } + else + { + Parent = MyTree.Get(Cc.GetParent(parentType)); + } + Processed = true; + } + + //true if exit gui pass + public override void OnInspectorGuiInternal(int level) + { + BGEditorUtility.Assign(ref okStyle, () => new GUIStyle("Label") {normal = {textColor = new Color32(66, 166, 33, 255)}, fontStyle = FontStyle.Bold}); + BGEditorUtility.Assign(ref errorStyle, () => new GUIStyle("Label") {normal = {textColor = new Color32(166, 66, 33, 255)}, fontStyle = FontStyle.Bold}); + BGEditorUtility.Assign(ref headerBoxStyle, () => new GUIStyle {padding = new RectOffset(4, 4, 4, 4)}); + BGEditorUtility.Assign(ref headerFoldoutStyle, () => new GUIStyle(EditorStyles.foldout) {fontStyle = FontStyle.Bold, clipping = TextClipping.Clip}); + BGEditorUtility.Assign(ref headerFoldoutStyleDisabled, () => new GUIStyle(headerFoldoutStyle) {normal = {textColor = Color.gray}}); + + var color = MyTree.GetColor(level, Collapsed, () => Color.white); + color.a = ConnectorLineAlpha; + + //colored box + BGEditorUtility.SwapGuiColor(color, () => EditorGUILayout.BeginVertical(BGEditorUtility.Assign(ref coloredBoxStyle, () => new GUIStyle("Box") + { + padding = new RectOffset(), + margin = new RectOffset(), + border = new RectOffset(4, 4, 4, 4), + normal = {background = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWhite123)} + }))); + + //header + HeaderUi(level, !String.IsNullOrEmpty(Cc.Error)); + + + if (!Collapsed) + { + BGEditorUtility.VerticalBox(() => + { + //show inspector + ccEditor.OnInspectorGUI(); + }); + } + + //do not remove it (EditorGUILayout.BeginVertical is a little higher- colored box) + EditorGUILayout.EndVertical(); + } + + private void HeaderUi(int level, bool hasError) + { + var color = MyTree.GetColor(level, Collapsed, () => new Color(0, 0, 0, 0)); + BGEditorUtility.SwapGuiBackgroundColor(color, () => + { + BGEditorUtility.Horizontal(headerBoxStyle, () => + { + BGEditorUtility.Indent(1, () => + { + var content = new GUIContent(descriptor == null ? Cc.GetType().Name : descriptor.Name + " (" + BGEditorUtility.Trim(Cc.CcName, 10) + ")", + descriptor == null ? null : descriptor.Description); + var width = headerFoldoutStyle.CalcSize(content).x + 16; + + BGEditorUtility.SwapLabelWidth((int) width, () => + { + //foldout (we dont use layout version cause it does not support clickin on labels) + Collapsed = EditorGUI.Foldout( + GUILayoutUtility.GetRect(width, 16f), + Collapsed, + content, + true, + Cc.enabled ? headerFoldoutStyle : headerFoldoutStyleDisabled); + }); + }); + + GUILayout.FlexibleSpace(); + + // status(error or Ok) + EditorGUI.LabelField(GUILayoutUtility.GetRect(70, 16, EditorStyles.label), hasError ? "Error" : "Ok.", hasError ? errorStyle : okStyle); + + + //help url + if (!String.IsNullOrEmpty(Cc.HelpURL)) + { + if (BGEditorUtility.ButtonWithIcon(helpTexture, "Open help in the browser")) Application.OpenURL(Cc.HelpURL); + EditorGUILayout.Separator(); + } + + //change name + if (BGEditorUtility.ButtonWithIcon(changeNameTexture, "Change the name")) BGCcChangeNameWindow.Open(Cc); + EditorGUILayout.Separator(); + + //add a child + if (BGEditorUtility.ButtonWithIcon(addTexture, "Add a component, which is dependant on this component")) + BGCcAddWindow.Open(MyTree.Curve, type => + { + //cache some data + var gameObject = Cc.Curve.gameObject; + var oldComponents = gameObject.GetComponents(); + var currentCcType = Cc.GetType(); + + //add + var addedCc = AddComponent(MyTree.Curve, type); + if (addedCc == null) return; + + //we need to process all the way up to the Cc and link Ccs to right (newly created) parents + var parentClass = addedCc.GetParentClass(); + var recursionLimit = 16; + var cc = addedCc; + while (parentClass!=null && recursionLimit-- > 0) + { + if (currentCcType == parentClass) + { + //we reached the current Cc + cc.SetParent(Cc); + break; + } + + //going up + var possibleParents = gameObject.GetComponents(parentClass); + var parent = possibleParents.Where(possibleParent => !oldComponents.Contains(possibleParent)).Cast().FirstOrDefault(); + + if (parent == null) break; + + cc.SetParent(parent); + cc = parent; + parentClass = cc.GetParentClass(); + } + }, Cc.GetType()); + EditorGUILayout.Separator(); + + + //enable/disable + if (BGEditorUtility.ButtonWithIcon(Cc.enabled ? enabledTexture : disabledTexture, "Enable/disable a component")) Enable(!Cc.enabled); + EditorGUILayout.Separator(); + + //delete + if (!BGEditorUtility.ButtonWithIcon(deleteTexture, "Remove this component")) return; + + + //remove + Delete(); + + EditorUtility.SetDirty(MyTree.Curve.gameObject); + + //not sure how to make proper exit + throw new BGEditorUtility.ExitException(); + }); + }); + } + + private void Enable(bool enabled) + { + Cc.enabled = enabled; + IterateChildren(node => node.Enable(enabled)); + } + + public void Delete() + { + IterateChildren(node => node.Delete()); + + if (ccEditor != null) + { + ccEditor.ChangedParent -= ChangedParent; + Object.DestroyImmediate(ccEditor); + } + + Undo.DestroyObjectImmediate(Cc); + } + + public void OnDestroy() + { + IterateChildren(node => node.OnDestroy()); + + if (ccEditor == null) return; + + ccEditor.ChangedParent -= ChangedParent; + Object.DestroyImmediate(ccEditor); + } + + public void OnSceneGui() + { + IterateChildren(node => node.OnSceneGui()); + + if (onSceneGuiMethod != null) onSceneGuiMethod.Invoke(ccEditor, null); + } + + public void FillState(Dictionary instanceId2Collapsed) + { + if (Collapsed) instanceId2Collapsed[Cc.GetInstanceID()] = true; + + IterateChildren(node => node.FillState(instanceId2Collapsed)); + } + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs.meta new file mode 100644 index 0000000..4708210 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorComponents.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0e8f1f93e9ec8ac46a3c01f3077087df +timeCreated: 1471761097 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs new file mode 100644 index 0000000..18d9b6f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs @@ -0,0 +1,982 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCurveEditorFields : BGCurveEditorTab + { + //label width in percents + private const int LabelWidth = 30; + + // ====================================== Fields + private readonly Texture2D deleteIcon; + private readonly Texture2D addIcon; + + + private TableUi systemUi; + private TableUi customUi; + + private SystemField[] systemFields; + private PointField[] customFields; + private string newFieldName; + private BGCurvePointField.TypeEnum newFieldType; + private readonly BGCurveEditorPointsSelection editorSelection; + + public BGCurveEditorFields(BGCurveEditor editor, SerializedObject curveObject, BGCurveEditorPointsSelection editorSelection) + : base(editor, curveObject, BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGFields123)) + { + this.editorSelection = editorSelection; + + addIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGAdd123); + deleteIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDelete123); + } + + + // ================================================================================ Inspector + public override void OnInspectorGui() + { + var settings = BGPrivateField.GetSettings(Curve); + + BGEditorUtility.HelpBox("Curve UI is disabled in settings. All handles are disabled too.", MessageType.Warning, !settings.ShowCurve); + + BGEditorUtility.Assign(ref customUi, () => new TableUi("Custom fields", new[] {"#", "Name", "Type", "?", "Delete"}, new[] {5, 40, 40, 5, 10})); + BGEditorUtility.Assign(ref systemUi, () => new TableUi("System fields", new[] {"Name", "Value"}, new[] {LabelWidth, 100 - LabelWidth})); + + BGEditorUtility.Assign(ref systemFields, () => new[] + { + (SystemField) new SystemFieldPosition(settings), + new SystemFieldControls(settings), + new SystemFieldControlsType(settings), + new SystemFieldTransform(settings), + }); + + var fields = Curve.Fields; + var hasFields = fields != null && fields.Length > 0; + + if (hasFields && (customFields == null || customFields.Length != fields.Length) || !hasFields && customFields != null && customFields.Length != fields.Length) + { + customFields = new PointField[fields.Length]; + + for (var i = 0; i < fields.Length; i++) customFields[i] = new PointField(fields[i], i, deleteIcon); + } + + + //warnings + BGEditorUtility.HelpBox("All handles for positions are disabled.", MessageType.Warning, settings.HandlesSettings.Disabled); + BGEditorUtility.HelpBox("All handles for controls are disabled.", MessageType.Warning, settings.ControlHandlesSettings.Disabled); + + //====================== Custom fields + customUi.Init(); + //add row + customUi.NextColumn(rect => EditorGUI.LabelField(rect, "Name"), 12); + customUi.NextColumn(rect => newFieldName = EditorGUI.TextField(rect, newFieldName), 28); + customUi.NextColumn(rect => BGEditorUtility.PopupField(rect, newFieldType, @enum => newFieldType = (BGCurvePointField.TypeEnum) @enum), 50); + customUi.NextColumn(rect => + { + if (!GUI.Button(rect, addIcon)) return; + + if (NameHasError(Curve, newFieldName)) return; + + BGPrivateField.Invoke(Curve, BGCurve.MethodAddField, newFieldName, newFieldType, (Func) (() => Undo.AddComponent(Curve.gameObject))); + GUIUtility.hotControl = 0; + GUIUtility.ExitGUI(); + }, 10); + + customUi.NextRow(); + var warning = ""; + + if (customFields == null || customFields.Length == 0) customUi.NextRow("Name should be 16 chars max, starts with a letter and contain English chars and numbers only."); + else + { + //header + customUi.DrawHeaders(); + + //fields + var quaternionWithHandlesCount = 0; + + BGEditorUtility.ChangeCheck(() => + { + foreach (var customField in customFields) + { + if (customField.Field.Type == BGCurvePointField.TypeEnum.Quaternion && BGPrivateField.GetHandlesType(customField.Field) != 0) quaternionWithHandlesCount++; + customField.Ui(customUi); + } + }, SceneView.RepaintAll); + + if (quaternionWithHandlesCount > 1) warning = "You have more than one Quaternion field with Handles enabled. Only first field will be shown in Scene View"; + //footer + customUi.NextRow("?- Show in Points Menu/Scene View"); + } + //inform layout manager + GUILayoutUtility.GetRect(customUi.Width, customUi.Height); + + BGEditorUtility.HelpBox(warning, MessageType.Warning, warning.Length > 0); + + //====================== System fields + systemUi.Init(); + + BGEditorUtility.ChangeCheck(() => + { + foreach (var field in systemFields) field.Ui(systemUi); + }, SceneView.RepaintAll); + + //inform layout manager + GUILayoutUtility.GetRect(systemUi.Width, systemUi.Height); + GUILayout.Space(4); + } + + private static bool NameHasError(BGCurve curve, string name) + { + var error = BGCurvePointField.CheckName(curve, name); + if (error == null) return false; + + BGEditorUtility.Inform("Error", error); + return true; + } + + + public override string GetStickerMessage(ref MessageType type) + { + return "" + Curve.FieldsCount; + } + + + public override void OnSceneGui(Plane[] frustum) + { + if (Curve.PointsCount == 0) return; + + //show handles (including labels) if any + PointField.OnSceneGui(frustum, Curve, Settings, editorSelection); + } + + //=================================================== UI Builder (idea.. refactor it later) + private sealed class TableUi + { + private const float Offset = 10; + private const int TitleOffset = 10; + + private readonly string[] headers; //headers + private readonly int[] sizes; //column sizes percentages + private readonly float height; //line height + + private readonly GUIStyle headerStyle; + private readonly GUIStyle cellStyle; + private readonly GUIStyle titleStyle; + private readonly GUIStyle centeredLabelStyle; + + private readonly string title; + + public GUIStyle CenteredLabelStyle + { + get { return centeredLabelStyle; } + } + + + private Rect lastRect; //last rect from Layout manager + + public float Width { get; private set; } + + public float Height + { + get { return rows*height + Offset; } + } + + public int[] Sizes + { + get { return sizes; } + } + + private float rows; //not data, but ui lines + private Vector2 cursor; + private int currentColumn; + + public TableUi(string title, string[] headers, int[] sizes) + { + this.headers = headers; + this.sizes = sizes; + this.title = title; + + headerStyle = new GUIStyle(GetStyle(BGEditorUtility.Image.BGBoxWithBorder123)); + centeredLabelStyle = new GUIStyle("Label") {alignment = TextAnchor.MiddleCenter}; + + cellStyle = GetStyle(BGEditorUtility.Image.BGTableCell123); + titleStyle = GetStyle(BGEditorUtility.Image.BGTableTitle123); + titleStyle.border = titleStyle.padding = new RectOffset(TitleOffset, TitleOffset, 2, 2); + + height = cellStyle.CalcSize(new GUIContent("Test")).y; + + Init(); + } + + public void Init() + { + //---------------------------------- init sizes + lastRect = GUILayoutUtility.GetLastRect(); + Width = lastRect.width; + cursor = new Vector2(lastRect.xMin, lastRect.yMax + Offset); + rows = 0; + currentColumn = 0; + + //---------------------------------- title + EditorGUI.LabelField(new Rect(cursor.x, cursor.y, titleStyle.CalcSize(new GUIContent(title)).x + TitleOffset*2, height), title, titleStyle); + NextRow(); + } + + //---------------------------------- headers + public void DrawHeaders() + { + for (var i = 0; i < headers.Length; i++) NextColumn(rect => EditorGUI.LabelField(rect, headers[i]), sizes[i], true); + NextRow(); + } + + private static GUIStyle GetStyle(BGEditorUtility.Image background) + { + return new GUIStyle("Label") + { + padding = new RectOffset(2, 2, 2, 2), + border = new RectOffset(2, 2, 2, 2), + normal = new GUIStyleState + { + background = BGEditorUtility.LoadTexture2D(background) + } + }; + } + + public void NextColumn(string label, Action action, int widthInPercent = 0, GUIStyle labelStyle = null, bool header = false) + { + var columnWidth = Width*(widthInPercent > 0 ? widthInPercent : sizes[currentColumn])/100f; + + var rect = new Rect(cursor.x, cursor.y, columnWidth, height); + EditorGUI.LabelField(rect, "", header ? headerStyle : cellStyle); + + if (label != null) + { + rect.width /= 2; + EditorGUI.LabelField(rect, label, labelStyle ?? GUI.skin.label); + rect.x += rect.width; + } + + if (action != null) action(rect); + + cursor.x += columnWidth; + currentColumn++; + } + + public void NextColumn(Action action, int widthInPercent = 0, bool header = false) + { + NextColumn(null, action, widthInPercent, header: header); + } + + public void NextColumn(string label, string description, int widthInPercent = 0, bool header = false) + { + NextColumn(rect => EditorGUI.LabelField(rect, new GUIContent(label, description)), widthInPercent, header); + } + + public void NextRow() + { + cursor.x = lastRect.xMin; + cursor.y += height; + currentColumn = 0; + rows++; + } + + public void NextRow(string message) + { + EditorGUI.LabelField(new Rect(cursor.x, cursor.y, Width, height), message, cellStyle); + NextRow(); + } + } + + //=========================================================================================== Custom fields + private sealed class PointField + { + private enum HandlesType + { + None, + Label, + Direction, + DistanceFromPoint, + Bounds, + BoundsAroundPoint, + Link, + Rotation + } + + private readonly BGCurvePointField field; + private readonly int index; + private readonly Texture2D deleteIcon; + + private static readonly Dictionary Type2SupportHandles = new Dictionary(); + private static readonly Dictionary Type2Handles = new Dictionary(); + + private static readonly Func FieldWithHandlesPredicate = + field => BGPrivateField.GetShowHandles(field) && SupportHandles(field.Type) && BGPrivateField.GetHandlesType(field) != 0; + + private static readonly Func FieldWithLabelPredicate = field => BGPrivateField.GetHandlesType(field) == (int) HandlesType.Label; + + private static Color[] handlesColor; + private static GUIStyle labelStyle; + private static GUIStyle selectedlabelStyle; + + private static bool[] visiblePoints; + private static Color32 latestLabelBackColor; + + public BGCurvePointField Field + { + get { return field; } + } + + static PointField() + { + Register(BGCurvePointField.TypeEnum.Bool, new Enum[] {HandlesType.None, HandlesType.Label}); + Register(BGCurvePointField.TypeEnum.Int, new Enum[] {HandlesType.None, HandlesType.Label}); + Register(BGCurvePointField.TypeEnum.Float, new Enum[] {HandlesType.None, HandlesType.Label, HandlesType.DistanceFromPoint}); + Register(BGCurvePointField.TypeEnum.String, new Enum[] {HandlesType.None, HandlesType.Label}); + + Register(BGCurvePointField.TypeEnum.Vector3, new Enum[] {HandlesType.None, HandlesType.Label, HandlesType.Direction, HandlesType.BoundsAroundPoint}); + Register(BGCurvePointField.TypeEnum.Bounds, new Enum[] {HandlesType.None, HandlesType.Bounds}); + Register(BGCurvePointField.TypeEnum.Quaternion, new Enum[] {HandlesType.None, HandlesType.Rotation}); + Register(BGCurvePointField.TypeEnum.Color, new Enum[] {HandlesType.None, HandlesType.Label}); + + Register(BGCurvePointField.TypeEnum.GameObject, new Enum[] {HandlesType.None, HandlesType.Label, HandlesType.Link}); + Register(BGCurvePointField.TypeEnum.Component, new Enum[] {HandlesType.None, HandlesType.Label}); + + Register(BGCurvePointField.TypeEnum.BGCurve, new Enum[] {HandlesType.None, HandlesType.Link}); + Register(BGCurvePointField.TypeEnum.BGCurvePointComponent, new Enum[] {HandlesType.None, HandlesType.Label, HandlesType.Link}); + Register(BGCurvePointField.TypeEnum.BGCurvePointGO, new Enum[] {HandlesType.None, HandlesType.Label, HandlesType.Link}); + } + + private static void Register(BGCurvePointField.TypeEnum typeEnum, Enum[] handlesTypes) + { + Type2SupportHandles[typeEnum] = true; + Type2Handles[typeEnum] = handlesTypes; + } + + public PointField(BGCurvePointField field, int index, Texture2D deleteIcon) + { + this.field = field; + this.index = index; + this.deleteIcon = deleteIcon; + } + + public void Ui(TableUi ui) + { + var cursor = 0; + + // ========================== First row + //number + ui.NextColumn("" + index, "Field's index", GetWidth(ui, ref cursor)); + + //name + ui.NextColumn(rect => + { + BGEditorUtility.TextField(rect, field.FieldName, s => + { + if (NameHasError(field.Curve, s)) return; + Change(() => field.FieldName = s); + }, true); + }, GetWidth(ui, ref cursor)); + + //type + ui.NextColumn(field.Type.ToString(), "Field's Type", GetWidth(ui, ref cursor)); + + //show in Points menu + ui.NextColumn(rect => BGEditorUtility.BoolField(rect, BGPrivateField.GetShowInPointsMenu(field), b => Change(() => BGPrivateField.SetShowInPointsMenu(field, b))), + GetWidth(ui, ref cursor)); + + //delete icon + ui.NextColumn(rect => + { + if (!GUI.Button(rect, deleteIcon) || !BGEditorUtility.Confirm("Delete", "Are you sure you want to delete '" + field.FieldName + "' field?", "Delete")) return; + + BGPrivateField.Invoke(field.Curve, BGCurve.MethodDeleteField, field, (Action) Undo.DestroyObjectImmediate); + + GUIUtility.ExitGUI(); + }, GetWidth(ui, ref cursor)); + + //\r\n + ui.NextRow(); + + // ========================== Second row + //does not support + if (!SupportHandles(field.Type)) return; + + ui.NextColumn(" Handles", "Field's index", 25); + + //handles type + ui.NextColumn( + rect => BGEditorUtility.PopupField(rect, (HandlesType) BGPrivateField.GetHandlesType(field), Type2Handles[field.Type], + b => Change(() => BGPrivateField.SetHandlesType(field, (int) ((HandlesType) b)))), 30); + + //Handles color + ui.NextColumn(rect => BGEditorUtility.ColorField(rect, BGPrivateField.GetHandlesColor(field), b => Change(() => BGPrivateField.SetHandlesColor(field, b))), 30); + + //show handles in Scene View + ui.NextColumn(rect => BGEditorUtility.BoolField(rect, BGPrivateField.GetShowHandles(field), b => Change(() => BGPrivateField.SetShowHandles(field, b))), 5); + + //empty column under delete button + ui.NextColumn(rect => EditorGUI.LabelField(rect, ""), 10); + + //\r\n + ui.NextRow(); + } + + private void Change(Action action) + { + Undo.RecordObject(field, "Field change"); + action(); + EditorUtility.SetDirty(field); + } + + private static bool SupportHandles(BGCurvePointField.TypeEnum typeEnum) + { + return Type2SupportHandles.ContainsKey(typeEnum); + } + + private static int GetWidth(TableUi ui, ref int cursor) + { + var widthInPercent = ui.Sizes[cursor]; + cursor++; + return widthInPercent; + } + + public static void OnSceneGui(Plane[] frustum, BGCurve curve, BGCurveSettings settings, BGCurveEditorPointsSelection editorSelection) + { + Array.Resize(ref visiblePoints, curve.PointsCount); + curve.ForEach((point, i, count) => visiblePoints[i] = GeometryUtility.TestPlanesAABB(frustum, new Bounds(point.PositionWorld, Vector3.one))); + + + var fieldsCount = curve.FieldsCount; + var fields = curve.Fields; + var showPointsNumbers = settings.ShowLabels; + + var fieldsWithHandlesCount = 0; + var fieldsWithLabelCount = 0; + if (fieldsCount > 0) + { + fieldsWithHandlesCount = fields.Count(FieldWithHandlesPredicate); + if (fieldsWithHandlesCount > 0) + { + Array.Resize(ref handlesColor, fieldsWithHandlesCount); + var cursor = 0; + for (var i = 0; i < fieldsCount; i++) + { + var f = fields[i]; + if (!FieldWithHandlesPredicate(f)) continue; + + if (FieldWithLabelPredicate(f)) fieldsWithLabelCount++; + handlesColor[cursor++] = BGPrivateField.GetHandlesColor(f); + } + } + } + + // nothing to show + if (!showPointsNumbers && fieldsWithHandlesCount == 0) return; + + + if (fieldsWithHandlesCount > 0) + { + //not a label + curve.ForEach((point, i, length) => + { + if (!visiblePoints[i]) return; + + var pos = point.PositionWorld; + + var quanterionShown = false; + var fieldCursor = 0; + for (var j = 0; j < fields.Length; j++) + { + var field = fields[j]; + var handlesType = (HandlesType) BGPrivateField.GetHandlesType(field); + + if (handlesType == 0) continue; + + if (handlesType == HandlesType.Label) + { + fieldCursor++; + continue; + } + + var color = handlesColor[fieldCursor++]; + switch (handlesType) + { + case HandlesType.DistanceFromPoint: + BGEditorUtility.SwapHandlesColor(color, () => + Handles.CircleCap(0, pos, Quaternion.LookRotation(SceneView.currentDrawingSceneView.camera.transform.position - pos), point.GetField(field.FieldName))); + break; + case HandlesType.BoundsAroundPoint: + Bounds bounds; + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bounds: + bounds = point.GetField(field.FieldName); + bounds.center = pos; + break; + default: + //vector3 + var vector3 = point.GetField(field.FieldName); + bounds = new Bounds(pos, vector3); + break; + } + BGEditorUtility.DrawBound(bounds, new Color(color.r, color.g, color.b, 0.05f), color); + break; + case HandlesType.Bounds: + var boundsValue = point.GetField(field.FieldName); + if (boundsValue.extents != Vector3.zero) + { + BGEditorUtility.DrawBound(boundsValue, new Color(color.r, color.g, color.b, 0.05f), color); + BGEditorUtility.SwapHandlesColor(color, () => Handles.DrawDottedLine(boundsValue.center, pos, 4)); + } + break; + case HandlesType.Direction: + var vector3Value = point.GetField(field.FieldName); + if (vector3Value != Vector3.zero) + BGEditorUtility.SwapHandlesColor(color, () => Handles.ArrowCap(0, pos, Quaternion.LookRotation(vector3Value), vector3Value.magnitude)); + break; + case HandlesType.Rotation: + if (quanterionShown) break; + + quanterionShown = true; + + var quaternionValue = point.GetField(field.FieldName); + if (quaternionValue.x < BGCurve.Epsilon && quaternionValue.y < BGCurve.Epsilon && quaternionValue.z < BGCurve.Epsilon && quaternionValue.w < BGCurve.Epsilon) + quaternionValue = Quaternion.identity; + + var newValue = Handles.RotationHandle(quaternionValue, pos); + point.SetField(field.FieldName, newValue); + + + BGEditorUtility.SwapHandlesColor(color, () => + { + var rotated = newValue*Vector3.forward*BGEditorUtility.GetHandleSize(pos, 2); + var toPos = pos + rotated; + Handles.ArrowCap(0, toPos, newValue, 1); + Handles.DrawDottedLine(pos, toPos, 10); + }); + break; + case HandlesType.Link: + switch (field.Type) + { + case BGCurvePointField.TypeEnum.GameObject: + var go = point.GetField(field.FieldName); + if (go != null) BGEditorUtility.SwapHandlesColor(color, () => Handles.DrawDottedLine(go.transform.position, pos, 4)); + break; + case BGCurvePointField.TypeEnum.BGCurve: + var bgCurve = point.GetField(field.FieldName); + if (bgCurve != null) BGEditorUtility.SwapHandlesColor(color, () => Handles.DrawDottedLine(bgCurve.transform.position, pos, 4)); + break; + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + var pointComponent = point.GetField(field.FieldName); + if (pointComponent != null) BGEditorUtility.SwapHandlesColor(color, () => Handles.DrawDottedLine(pointComponent.PositionWorld, pos, 4)); + break; + case BGCurvePointField.TypeEnum.BGCurvePointGO: + var pointGO = point.GetField(field.FieldName); + if (pointGO != null) BGEditorUtility.SwapHandlesColor(color, () => Handles.DrawDottedLine(pointGO.PositionWorld, pos, 4)); + break; + } + break; + } + } + }); + } + + // nothing more to show + if (!showPointsNumbers && fieldsWithLabelCount == 0) return; + + //=============================== Labels + + //styles + var labelColor = settings.LabelColor; + var selectedColor = settings.LabelColorSelected; + var backColor = BGCurveSettingsForEditor.ColorForLabelBackground; + + if (labelStyle == null || labelStyle.normal.textColor != labelColor || labelStyle.normal.background == null + || latestLabelBackColor.r != backColor.r || latestLabelBackColor.g != backColor.g || latestLabelBackColor.b != backColor.b || latestLabelBackColor.a != backColor.a) + { + latestLabelBackColor = backColor; + labelStyle = new GUIStyle("Label") + { + richText = true, + border = new RectOffset(2, 2, 2, 2), + clipping = TextClipping.Overflow, + wordWrap = false, + normal = + { + background = BGEditorUtility.TextureWithBorder(8, 1, backColor, new Color32(backColor.r, backColor.g, backColor.b, 255)), + textColor = labelColor + } + }; + + selectedlabelStyle = new GUIStyle(labelStyle) + { + normal = + { + background = BGEditorUtility.TextureWithBorder(8, 1, new Color(selectedColor.r, selectedColor.g, selectedColor.b, .1f), selectedColor), + textColor = selectedColor + } + }; + } + + + curve.ForEach((point, i, length) => + { + if (!visiblePoints[i]) return; + + var pos = point.PositionWorld; + + var style = !editorSelection.Contains(point) ? labelStyle : selectedlabelStyle; + var text = ""; + + //point numbers and pos + if (showPointsNumbers) + { + text += "# : " + i + "\r\n"; + if (settings.ShowPositions) text += "P : " + pos + "\r\n"; + } + + //fields + if (fieldsWithLabelCount > 0) + { + for (var j = 0; j < fieldsCount; j++) + { + var field = fields[j]; + if (!FieldWithHandlesPredicate(field) || !FieldWithLabelPredicate(field)) continue; + + text += BGEditorUtility.ColorIt(curve.IndexOf(field) + " : " + point.GetField(field.FieldName, BGCurvePoint.FieldTypes.GetType(field.Type)), + BGEditorUtility.ToHex(BGPrivateField.GetHandlesColor(field))) + "\r\n"; + } + } + + var normalized = (SceneView.currentDrawingSceneView.camera.transform.position - pos).normalized; + var handleSize = BGEditorUtility.GetHandleSize(pos, .25f); + var shiftLeft = -Vector3.Cross(normalized, Vector3.up); + var shiftBottom = Vector3.Cross(normalized, Vector3.right)*.3f; + Handles.Label(pos + handleSize*shiftLeft + handleSize*shiftBottom, text.Substring(0, text.Length - 2), style); + }); + } + } + + //=========================================================================================== Abstract system field + private abstract class SystemField + { + protected readonly BGCurveSettings Settings; + + public virtual bool ShowInPointsMenu { get; set; } + + private readonly GUIContent title; + + protected SystemField(BGCurveSettings settings, GUIContent title) + { + this.title = title; + Settings = settings; + } + + public virtual void Ui(TableUi ui) + { + ui.NextColumn(rect => EditorGUI.LabelField(rect, title), 100, true); + ui.NextRow(); + + // show in point menu + NextBoolRow(ui, "Show in Points Menu", "Show in Points Menu (Points Tab)", ShowInPointsMenu, newValue => ShowInPointsMenu = newValue); + } + + protected void NextBoolRow(TableUi ui, string label, string tooltip, bool value, Action valueSetter) + { + ui.NextColumn(label, tooltip); + ui.NextColumn(rect => BGEditorUtility.ToggleField(rect, value, valueSetter)); + ui.NextRow(); + } + + protected void NextEnumRow(TableUi ui, string label, string tooltip, Enum value, Action valueSetter) + { + ui.NextColumn(label, tooltip); + ui.NextColumn(rect => BGEditorUtility.PopupField(rect, value, valueSetter)); + ui.NextRow(); + } + + protected void NextSliderRow(TableUi ui, string label, string tooltip, float value, float from, float to, Action valueSetter) + { + ui.NextColumn(label, tooltip); + ui.NextColumn(rect => BGEditorUtility.SliderField(rect, value, @from, to, valueSetter)); + ui.NextRow(); + } + + protected void NextColorRow(TableUi ui, string label, string tooltip, Color color, Action func) + { + ui.NextColumn(label, tooltip); + ui.NextColumn(rect => BGEditorUtility.ColorField(rect, color, func)); + ui.NextRow(); + } + } + + //=========================================================================================== Abstract Vector(s) Based Field + private abstract class SystemVectorField : SystemField + { + public virtual bool ShowHandles { get; set; } + + public virtual BGCurveSettings.HandlesTypeEnum HandlesType { get; set; } + + public virtual BGCurveSettings.SettingsForHandles HandlesSettings + { + get { return null; } + } + + public virtual bool ShowLabels { get; set; } + public virtual bool ShowPositions { get; set; } + public virtual Color LabelColor { get; set; } + + protected SystemVectorField(BGCurveSettings settings, GUIContent title) + : base(settings, title) + { + } + + private void Next3BoolRow(TableUi ui, string label, string tooltip, + string xLabel, string yLabel, string zLabel, + bool xValue, bool yValue, bool zValue, + Action xSetter, Action ySetter, Action zSetter) + { + ui.NextColumn(label, tooltip); + const int widthInPercent = (100 - LabelWidth)/3; + ui.NextColumn(xLabel, rect => BGEditorUtility.ToggleField(rect, xValue, xSetter), widthInPercent, ui.CenteredLabelStyle); + ui.NextColumn(yLabel, rect => BGEditorUtility.ToggleField(rect, yValue, ySetter), widthInPercent, ui.CenteredLabelStyle); + ui.NextColumn(zLabel, rect => BGEditorUtility.ToggleField(rect, zValue, zSetter), widthInPercent, ui.CenteredLabelStyle); + ui.NextRow(); + } + + public override void Ui(TableUi ui) + { + base.Ui(ui); + + NextBoolRow(ui, "Show Handles", "Show handles in Scene View", ShowHandles, newValue => ShowHandles = newValue); + if (ShowHandles) + { + NextEnumRow(ui, " Handles Types", "Type for the handle", HandlesType, newValue => HandlesType = (BGCurveSettings.HandlesTypeEnum) newValue); + + if (HandlesType == BGCurveSettings.HandlesTypeEnum.Configurable) + { + NextSliderRow(ui, " Handles Axis Size", "Size of the Axis handles in Scene View", HandlesSettings.AxisScale, .5f, 1.5f, newValue => HandlesSettings.AxisScale = newValue); + NextSliderRow(ui, " Handles Plane Size", "Size of the Plane handles in Scene View", HandlesSettings.PlanesScale, .5f, 1.5f, + newValue => HandlesSettings.PlanesScale = newValue); + NextSliderRow(ui, " Handles Alpha", "Alpha color of handles in Scene View", HandlesSettings.Alpha, .5f, 1f, newValue => HandlesSettings.Alpha = newValue); + + Next3BoolRow(ui, " Remove Axis", "Remove Axis handles", + "X", "Y", "Z", + HandlesSettings.RemoveX, HandlesSettings.RemoveY, HandlesSettings.RemoveZ, + newValue => HandlesSettings.RemoveX = newValue, newValue => HandlesSettings.RemoveY = newValue, newValue => HandlesSettings.RemoveZ = newValue + ); + + Next3BoolRow(ui, " Remove Planes", "Remove Planes handles", + "XZ", "XY", "YZ", + HandlesSettings.RemoveXZ, HandlesSettings.RemoveXY, HandlesSettings.RemoveYZ, + newValue => HandlesSettings.RemoveXZ = newValue, newValue => HandlesSettings.RemoveXY = newValue, newValue => HandlesSettings.RemoveYZ = newValue + ); + } + } + + NextBoolRow(ui, "Show Labels", "Show labels in Scene View", ShowLabels, newValue => ShowLabels = newValue); + if (ShowLabels) + { + NextBoolRow(ui, " Show Positions", "Show vector positions in Scene View", ShowPositions, newValue => ShowPositions = newValue); + NextColorRow(ui, " Labels color", "Color for labels in Scene View", LabelColor, newValue => LabelColor = newValue); + AdditionalLabelFields(ui); + } + } + + protected virtual void AdditionalLabelFields(TableUi ui) + { + } + } + + //=========================================================================================== Position + private sealed class SystemFieldPosition : SystemVectorField + { + public override bool ShowHandles + { + get { return Settings.ShowHandles; } + set { Settings.ShowHandles = value; } + } + + public override BGCurveSettings.SettingsForHandles HandlesSettings + { + get { return Settings.HandlesSettings; } + } + + public override BGCurveSettings.HandlesTypeEnum HandlesType + { + get { return Settings.HandlesType; } + set { Settings.HandlesType = value; } + } + + public override bool ShowInPointsMenu + { + get { return Settings.ShowPointPosition; } + set { Settings.ShowPointPosition = value; } + } + + public override bool ShowLabels + { + get { return Settings.ShowLabels; } + set { Settings.ShowLabels = value; } + } + + public override bool ShowPositions + { + get { return Settings.ShowPositions; } + set { Settings.ShowPositions = value; } + } + + public override Color LabelColor + { + get { return Settings.LabelColor; } + set { Settings.LabelColor = value; } + } + + private Color LabelColorSelected + { + get { return Settings.LabelColorSelected; } + set { Settings.LabelColorSelected = value; } + } + + private bool ShowSpheres + { + get { return Settings.ShowSpheres; } + set { Settings.ShowSpheres = value; } + } + + private float SpheresRadius + { + get { return Settings.SphereRadius; } + set { Settings.SphereRadius = value; } + } + + private Color SpheresColor + { + get { return Settings.SphereColor; } + set { Settings.SphereColor = value; } + } + + public SystemFieldPosition(BGCurveSettings settings) + : base(settings, new GUIContent("Positions", "Point's positions")) + { + } + + protected override void AdditionalLabelFields(TableUi ui) + { + NextColorRow(ui, "Labels color for selected", "Color for labels in Scene View, when they are selected", LabelColorSelected, newValue => LabelColorSelected = newValue); + } + + public override void Ui(TableUi ui) + { + base.Ui(ui); + + NextBoolRow(ui, "Show spheres", "Show spheres at points positions in Scene View", ShowSpheres, b => ShowSpheres = b); + if (ShowSpheres) + { + NextSliderRow(ui, " Sphere radius", "Sphere radius in Scene View", SpheresRadius, .01f, 1, f => SpheresRadius = f); + NextColorRow(ui, " Sphere color", "Sphere color in Scene View", SpheresColor, f => SpheresColor = f); + } + } + } + + //=========================================================================================== Controls + private sealed class SystemFieldControls : SystemVectorField + { + public override bool ShowHandles + { + get { return Settings.ShowControlHandles; } + set { Settings.ShowControlHandles = value; } + } + + public override BGCurveSettings.HandlesTypeEnum HandlesType + { + get { return Settings.ControlHandlesType; } + set { Settings.ControlHandlesType = value; } + } + + + public override BGCurveSettings.SettingsForHandles HandlesSettings + { + get { return Settings.ControlHandlesSettings; } + } + + public override bool ShowInPointsMenu + { + get { return Settings.ShowPointControlPositions; } + set { Settings.ShowPointControlPositions = value; } + } + + public override bool ShowLabels + { + get { return Settings.ShowControlLabels; } + set { Settings.ShowControlLabels = value; } + } + + public override bool ShowPositions + { + get { return Settings.ShowControlPositions; } + set { Settings.ShowControlPositions = value; } + } + + private Color HandlesColor + { + get { return Settings.ControlHandlesColor; } + set { Settings.ControlHandlesColor = value; } + } + + public override Color LabelColor + { + get { return Settings.LabelControlColor; } + set { Settings.LabelControlColor = value; } + } + + + public SystemFieldControls(BGCurveSettings settings) + : base(settings, new GUIContent("Controls", "Point's Bezier control positions")) + { + } + + public override void Ui(TableUi ui) + { + base.Ui(ui); + + NextColorRow(ui, "Handles Color", "Color of handles in Scene View", HandlesColor, newValue => HandlesColor = newValue); + } + } + + + //=========================================================================================== Control Type + private sealed class SystemFieldControlsType : SystemField + { + public override bool ShowInPointsMenu + { + get { return Settings.ShowPointControlType; } + set { Settings.ShowPointControlType = value; } + } + + public SystemFieldControlsType(BGCurveSettings settings) + : base(settings, new GUIContent("Control Type", "Point's control type (Absent, Bezier)")) + { + } + } + + //=========================================================================================== Transform Field + private sealed class SystemFieldTransform : SystemField + { + public override bool ShowInPointsMenu + { + get { return Settings.ShowTransformField; } + set { Settings.ShowTransformField = value; } + } + + public SystemFieldTransform(BGCurveSettings settings) + : base(settings, new GUIContent("Transform", "Transform to use as point's position")) + { + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs.meta new file mode 100644 index 0000000..6b40990 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorFields.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7939caedfb503f9489e4f0524336a58b +timeCreated: 1471761766 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs new file mode 100644 index 0000000..a5c7938 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs @@ -0,0 +1,526 @@ +using System; +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + //one single point's GUI + public class BGCurveEditorPoint + { + private readonly Texture2D deleteTexture; + private readonly Texture2D addBeforeTexture; + private readonly Texture2D moveUpTexture; + private readonly Texture2D moveDownTexture; + private readonly Texture2D copyTexture; + private readonly Texture2D pasteTexture; + + private readonly BGCurveEditorPointsSelection editorSelection; + private readonly Func mathProvider; + + private GUIStyle controlLabelStyle; + + public BGCurveEditorPoint(Func mathProvider, BGCurveEditorPointsSelection editorSelection) + { + this.mathProvider = mathProvider; + this.editorSelection = editorSelection; + + //textures + deleteTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDelete123); + addBeforeTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGAdd123); + moveUpTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGMoveUp123); + moveDownTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGMoveDown123); + copyTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCopy123); + pasteTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPaste123); + } + + internal void OnInspectorGui(BGCurvePointI point, int index, BGCurveSettings settings) + { + var mode2D = point.Curve.Mode2D; + + + //point transform + if (point.Curve.PointsMode != BGCurve.PointsModeEnum.Inlined && point.PointTransform != null) + { + var referenceToPoint = BGCurveReferenceToPoint.GetReferenceToPoint(point); + if (referenceToPoint == null) point.PointTransform.gameObject.AddComponent().Point = point; + } + + BGEditorUtility.HorizontalBox(() => + { + if (editorSelection != null) editorSelection.InspectorSelectionRect(point); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.SwapLabelWidth(60, () => + { + if (!settings.ShowPointPosition && !settings.ShowPointControlType) + { + BGEditorUtility.Horizontal(() => + { + //nothing to show- only label + EditorGUILayout.LabelField("Point " + index); + PointButtons(point, index, settings); + }); + BGEditorUtility.StartIndent(1); + } + else + { + //control type + if (settings.ShowPointControlType) + { + BGEditorUtility.Horizontal(() => + { + point.ControlType = (BGCurvePoint.ControlTypeEnum) EditorGUILayout.EnumPopup("Point " + index, point.ControlType); + PointButtons(point, index, settings); + }); + BGEditorUtility.StartIndent(1); + } + + //position + if (settings.ShowPointPosition) + { + if (!settings.ShowPointControlType) + { + BGEditorUtility.Horizontal(() => + { + PositionField("Point " + index, point, mode2D, index); + PointButtons(point, index, settings); + }); + BGEditorUtility.StartIndent(1); + } + else PositionField("Pos", point, mode2D, index); + } + } + }); + + // control positions + if (point.ControlType != BGCurvePoint.ControlTypeEnum.Absent && settings.ShowPointControlPositions) + { + // 1st + ControlField(point, mode2D, 1); + + // 2nd + ControlField(point, mode2D, 2); + } + + //transform + if (settings.ShowTransformField) + BGEditorUtility.ComponentField("Transform", point.PointTransform, transform => + { + if (transform != null) + { + Undo.RecordObject(transform, "Object moved"); + + if (point.Curve.PointsMode != BGCurve.PointsModeEnum.Inlined) Undo.AddComponent(transform.gameObject).Point = point; + } + + if (point.PointTransform != null) + { + var referenceToPoint = BGCurveReferenceToPoint.GetReferenceToPoint(point); + if (referenceToPoint != null) Undo.DestroyObjectImmediate(referenceToPoint); + } + + point.PointTransform = transform; + }); + + + //fields + if (point.Curve.FieldsCount > 0) ShowFields(point); + + BGEditorUtility.EndIndent(1); + }); + }); + } + + private void ControlField(BGCurvePointI point, BGCurve.Mode2DEnum mode2D, int index) + { + Vector3 pos; + string tooltipDetails, details; + Action newValueAction; + switch (BGCurveSettingsForEditor.InspectorControlCoordinateSpace) + { + case BGCurveSettingsForEditor.CoordinateSpaceEnum.Local: + tooltipDetails = "local"; + details = "L"; + if (index == 1) + { + pos = point.ControlFirstLocal; + newValueAction = vector3 => point.ControlFirstLocal = vector3; + } + else + { + pos = point.ControlSecondLocal; + newValueAction = vector3 => point.ControlSecondLocal = vector3; + } + break; + case BGCurveSettingsForEditor.CoordinateSpaceEnum.LocalTransformed: + tooltipDetails = "local transformed"; + details = "LT"; + + if (index == 1) + { + pos = point.ControlFirstLocalTransformed; + newValueAction = vector3 => point.ControlFirstLocalTransformed = vector3; + } + else + { + pos = point.ControlSecondLocalTransformed; + newValueAction = vector3 => point.ControlSecondLocalTransformed = vector3; + } + break; + case BGCurveSettingsForEditor.CoordinateSpaceEnum.World: + tooltipDetails = "world"; + details = "W"; + + if (index == 1) + { + pos = point.ControlFirstWorld; + newValueAction = vector3 => point.ControlFirstWorld = vector3; + } + else + { + pos = point.ControlSecondWorld; + newValueAction = vector3 => point.ControlSecondWorld = vector3; + } + break; + default: + throw new ArgumentOutOfRangeException("BGCurveSettingsForEditor.InspectorPointControlsCoordinates"); + } + + var label = "Control " + index + " (" + details + ")"; + var tooltip = "Point " + (index == 0 ? "1st" : "2nd") + " control position in " + tooltipDetails + " space. You can change points space in BGCurve Editor settings (gear icon)"; + + + + if (mode2D == BGCurve.Mode2DEnum.Off) BGEditorUtility.Vector3Field(label, tooltip, pos, newValueAction); + else Vector2Field(label, tooltip, pos, mode2D, newValueAction); + + } + + private void PositionField(string name, BGCurvePointI point, BGCurve.Mode2DEnum mode2D, int index) + { + var math = mathProvider(); + + Vector3 pos; + Action newValueAction; + string tooltipDetails; + string details; + switch (BGCurveSettingsForEditor.InspectorPointCoordinateSpace) + { + case BGCurveSettingsForEditor.CoordinateSpaceEnum.World: + pos = math == null ? point.PositionWorld : math.GetPosition(index); + newValueAction = vector3 => point.PositionWorld = vector3; + tooltipDetails = "world"; + details = "W"; + break; + case BGCurveSettingsForEditor.CoordinateSpaceEnum.LocalTransformed: + pos = point.PositionLocalTransformed; + newValueAction = vector3 => point.PositionLocalTransformed = vector3; + tooltipDetails = "local transformed"; + details = "LT"; + break; + case BGCurveSettingsForEditor.CoordinateSpaceEnum.Local: + pos = point.PositionLocal; + newValueAction = vector3 => point.PositionLocal = vector3; + tooltipDetails = "local"; + details = "L"; + break; + default: + throw new ArgumentOutOfRangeException("BGCurveSettingsForEditor.InspectorPointCoordinates"); + } + + BGEditorUtility.SwapLabelWidth(80, () => + { + var label = name + "(" + details + ")"; + var tooltip = "Point's position in " + tooltipDetails + " space. You can change points space in BGCurve Editor settings (gear icon)"; + + if (mode2D == BGCurve.Mode2DEnum.Off) BGEditorUtility.Vector3Field(label, tooltip, pos, newValueAction); + else Vector2Field(label, tooltip, pos, mode2D, newValueAction); + }); + } + + private void Vector2Field(string label, string tooltip, Vector3 value, BGCurve.Mode2DEnum mode2D, Action newValueAction) + { + Vector2 val; + switch (mode2D) + { + case BGCurve.Mode2DEnum.XY: + val = value; + break; + case BGCurve.Mode2DEnum.XZ: + val = new Vector2(value.x, value.z); + break; + case BGCurve.Mode2DEnum.YZ: + val = new Vector2(value.y, value.z); + break; + default: + throw new ArgumentOutOfRangeException("mode2D", mode2D, null); + } + + BGEditorUtility.Vector2Field(label, tooltip, val, vector2 => + { + Vector3 newValue; + switch (mode2D) + { + case BGCurve.Mode2DEnum.XY: + newValue = vector2; + break; + case BGCurve.Mode2DEnum.XZ: + newValue = new Vector3(vector2.x, 0, vector2.y); + break; + case BGCurve.Mode2DEnum.YZ: + newValue = new Vector3(0, vector2.x, vector2.y); + break; + default: + throw new ArgumentOutOfRangeException("mode2D", mode2D, null); + } + newValueAction(newValue); + }); + } + + + private static void ShowFields(BGCurvePointI point) + { + foreach (var field in point.Curve.Fields.Where(BGPrivateField.GetShowInPointsMenu)) ShowField(point, field); + } + + public static void ShowField(BGCurvePointI point, BGCurvePointField field, Action animationCurveCallback = null) + { + var name = point.Curve.IndexOf(field) + ") " + field.FieldName; + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bool: + BGEditorUtility.BoolField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Int: + BGEditorUtility.IntField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Float: + BGEditorUtility.FloatField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Vector3: + BGEditorUtility.Vector3Field(name, null, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Bounds: + BGEditorUtility.BoundsField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Color: + BGEditorUtility.ColorField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.String: + BGEditorUtility.TextField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v), false); + break; + case BGCurvePointField.TypeEnum.AnimationCurve: + BGEditorUtility.Horizontal(() => + { + BGEditorUtility.AnimationCurveField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + + if (animationCurveCallback != null && GUILayout.Button("Set", GUILayout.Width(40))) animationCurveCallback(field.FieldName, point.GetField(field.FieldName)); + }); + + break; + case BGCurvePointField.TypeEnum.Quaternion: + BGEditorUtility.QuaternionField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.GameObject: + BGEditorUtility.GameObjectField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.Component: + BGEditorUtility.ComponentChoosableField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.BGCurve: + BGEditorUtility.BGCurveField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + BGEditorUtility.Horizontal(() => + { + BGEditorUtility.BGCurvePointComponentField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + var currentPoint = point.GetField(field.FieldName); + + if (currentPoint == null || currentPoint.Curve.PointsCount < 2) return; + + var indexOfField = currentPoint.Curve.IndexOf(currentPoint); + + if (GUILayout.Button("" + indexOfField, GUILayout.Width(40))) BGCurveChosePointWindow.Open(indexOfField, currentPoint.Curve, c => point.SetField(field.FieldName, c)); + }); + break; + case BGCurvePointField.TypeEnum.BGCurvePointGO: + BGEditorUtility.BGCurvePointGOField(name, point.GetField(field.FieldName), v => point.SetField(field.FieldName, v)); + break; + } + } + + + private void PointButtons(BGCurvePointI point, int index, BGCurveSettings settings) + { + if (!settings.ShowPointMenu) return; + + var curve = point.Curve; + + //================== Copy + if (BGEditorUtility.ButtonWithIcon(copyTexture, PointCopyPaste.Instance.CopyTooltip)) PointCopyPaste.Instance.Copy(point); + GUILayout.Space(2); + + //================== Paste + if (BGEditorUtility.ButtonWithIcon(pasteTexture, PointCopyPaste.Instance.PasteTooltip)) PointCopyPaste.Instance.Paste(point); + GUILayout.Space(2); + + //================== Add before + if (BGEditorUtility.ButtonWithIcon(addBeforeTexture, "Insert a point before this point")) + BGCurveEditor.AddPoint(curve, BGNewPointPositionManager.InsertBefore(curve, index, settings.ControlType, settings.Sections), index); + GUILayout.Space(2); + + + //=========================== Move Up + if (index > 0 && BGEditorUtility.ButtonWithIcon(moveUpTexture, "Move the point up")) curve.Swap(index - 1, index); + GUILayout.Space(2); + + //=========================== Move Down + if (index < curve.PointsCount - 1 && BGEditorUtility.ButtonWithIcon(moveDownTexture, "Move the point down")) curve.Swap(index, index + 1); + GUILayout.Space(2); + + + //=========================== Delete + if (BGEditorUtility.ButtonWithIcon(deleteTexture, "Delete the point")) + { + BGCurveEditor.DeletePoint(curve, index); + if (editorSelection != null) editorSelection.Remove(point); + GUIUtility.ExitGUI(); + } + } + + + public void OnSceneGUI(BGCurvePointI point, int index, BGCurveSettings settings, Quaternion rotation, Plane[] frustum) + { + var math = mathProvider(); + var positionWorld = math == null ? point.Curve[index].PositionWorld : math.GetPosition(index); + + //adjust rotation + if (point.PointTransform != null) rotation = BGCurveEditorPoints.GetRotation(point.PointTransform); + else if (point.Curve.PointsMode == BGCurve.PointsModeEnum.GameObjectsTransform) rotation = BGCurveEditorPoints.GetRotation(((BGCurvePointGO) point).transform); + + if (settings.ShowControlHandles && settings.ShowCurve && (editorSelection == null || !editorSelection.HasSelected() || editorSelection.SingleSelected(point))) + { + // ============================================== Controls Handles + if (point.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + { + var controlFirstWorld = math == null ? point.Curve[index].ControlFirstWorld : math.GetControlFirst(index); + var controlSecondWorld = math == null ? point.Curve[index].ControlSecondWorld : math.GetControlSecond(index); + + BGEditorUtility.SwapHandlesColor(settings.ControlHandlesColor, () => + { + Handles.DrawLine(positionWorld, controlFirstWorld); + Handles.DrawLine(positionWorld, controlSecondWorld); + + if (ShowingHandles) + { + // control handles different types + var newPositionFirst = BGEditorUtility.Handle(GetUniqueNumber(index) - 1, settings.ControlHandlesType, controlFirstWorld, rotation, settings.ControlHandlesSettings); + var newPositionSecond = BGEditorUtility.Handle(GetUniqueNumber(index) - 2, settings.ControlHandlesType, controlSecondWorld, rotation, settings.ControlHandlesSettings); + + if (BGEditorUtility.AnyChange(controlFirstWorld, newPositionFirst)) point.ControlFirstWorld = newPositionFirst; + if (BGEditorUtility.AnyChange(controlSecondWorld, newPositionSecond)) point.ControlSecondWorld = newPositionSecond; + } + }); + + if (settings.ShowControlLabels) + { + ShowControlLabel(settings, frustum, controlFirstWorld, point.ControlFirstLocal, "1"); + ShowControlLabel(settings, frustum, controlSecondWorld, point.ControlSecondLocal, "2"); + } + } + } + + //if only one point is selected and this is the selected point- do not print anything further + if (editorSelection != null && editorSelection.HasSelected() && editorSelection.SingleSelected(point)) return; + + // ============================================== Move Handles + if ((editorSelection == null || !editorSelection.HasSelected()) && settings.ShowCurve && settings.ShowHandles && ShowingHandles) + { + var newPos = BGEditorUtility.Handle(GetUniqueNumber(index), settings.HandlesType, positionWorld, rotation, settings.HandlesSettings); + + if (BGEditorUtility.AnyChange(positionWorld, newPos)) point.PositionWorld = newPos; + } + } + + private static bool ShowingHandles + { + get { return Tools.current != Tool.View; } + } + + private void ShowControlLabel(BGCurveSettings settings, Plane[] frustum, Vector3 positionWorld, Vector3 positionLocal, string label) + { + BGEditorUtility.Assign(ref controlLabelStyle, () => new GUIStyle("Label") {normal = new GUIStyleState {textColor = settings.LabelControlColor}}); + + if (GeometryUtility.TestPlanesAABB(frustum, new Bounds(positionWorld, Vector3.one))) + Handles.Label(positionWorld, label + (settings.ShowControlPositions ? " " + positionLocal : ""), controlLabelStyle); + } + + + //this is to generate Unity UGUI ids (for handles). + private static int GetUniqueNumber(int index) + { + return (-index - 1)*3; + } + + private sealed class PointCopyPaste + { + public static readonly PointCopyPaste Instance = new PointCopyPaste(); + + public readonly string CopyTooltip = "Copy " + + "\r\n1) ControlType, " + + "\r\n2) Position (Local), " + + "\r\n3) Control1 (LocalTransformed), " + + "\r\n4) Control2 (LocalTransformed), " + + "\r\n5) PointTransform"; + + public string PasteTooltip; + + private BGCurvePoint.ControlTypeEnum controlType; + private Vector3 positionLocal; + private Vector3 control1LocalTransformed; + private Vector3 control2LocalTransformed; + private Transform pointTransform; + + private PointCopyPaste() + { + InitPasteTooltip(); + } + + public void Copy(BGCurvePointI point) + { + controlType = point.ControlType; + positionLocal = point.PositionLocal; + control1LocalTransformed = point.ControlFirstLocalTransformed; + control2LocalTransformed = point.ControlSecondLocalTransformed; + pointTransform = point.PointTransform; + + InitPasteTooltip(); + } + + private void InitPasteTooltip() + { + PasteTooltip = "Paste " + + "\r\n1) ControlType=" + controlType + + "\r\n2) Position (Local)=" + positionLocal + + "\r\n3) Control1 (LocalTransformed)=" + control1LocalTransformed + + "\r\n4) Control2 (LocalTransformed)=" + control2LocalTransformed + + "\r\n5) PointTransform=" + pointTransform; + } + + public void Paste(BGCurvePointI point) + { + point.Curve.Transaction(() => + { + point.ControlType = controlType; + point.PositionLocal = positionLocal; + point.ControlFirstLocalTransformed = control1LocalTransformed; + point.ControlSecondLocalTransformed = control2LocalTransformed; + point.PointTransform = pointTransform; + }); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs.meta new file mode 100644 index 0000000..780b617 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b3d23774d53900447be90cd0a79f7bed +timeCreated: 1458524671 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs new file mode 100644 index 0000000..2c37ccd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs @@ -0,0 +1,538 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //GUI for all points + public class BGCurveEditorPoints : BGCurveEditorTab + { + // ====================================== Static const + private static readonly Color32 HiddenPointMenuColor = new Color32(144, 195, 212, 255); + + private static readonly GUIContent[] XZLabels = {new GUIContent("X"), new GUIContent("Z")}; + private static readonly GUIContent[] YZLabels = {new GUIContent("Y"), new GUIContent("Z")}; + + // ====================================== Fields + private readonly Texture2D convertAll2D; + private readonly Texture2D addPointIcon; + + private readonly SerializedProperty closedProperty; + private readonly SerializedProperty pointsModeProperty; + private readonly SerializedProperty controlTypeProperty; + private readonly SerializedProperty mode2DProperty; + private readonly SerializedProperty snapTypeProperty; + private readonly SerializedProperty snapDistanceProperty; + private readonly SerializedProperty snapAxisProperty; + private readonly SerializedProperty snapTriggerInteractionProperty; + private readonly SerializedProperty snapToBackFacesProperty; + private readonly SerializedProperty eventModeProperty; + private readonly SerializedProperty forceChangedEventModeProperty; + + //point + private readonly BGCurveEditorPoint editorPoint; + //painting a curve in the scene + private BGCurvePainterGizmo painter; + + private readonly BGSceneViewOverlay overlay; + private readonly BGCurveEditorPointsSelection editorSelection; + private readonly SerializedObject serializedObject; + private readonly List pointTransformTrackers = new List(); + + private GUIContent syncContent; + + + public BGCurveEditorPoints(BGCurveEditor editor, SerializedObject serializedObject, BGCurveEditorPointsSelection editorSelection) + : base(editor, serializedObject, BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPoints123)) + { + this.serializedObject = serializedObject; + this.editorSelection = editorSelection; + + //textures + convertAll2D = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGConvertAll123); + addPointIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGAdd123); + + //point + editorPoint = new BGCurveEditorPoint(() => Editor.Math, editorSelection); + + //closed or not + closedProperty = serializedObject.FindProperty("closed"); + + //how points are stored + pointsModeProperty = serializedObject.FindProperty("pointsMode"); + + //2d mode + mode2DProperty = serializedObject.FindProperty("mode2D"); + + //snapping + snapTypeProperty = serializedObject.FindProperty("snapType"); + snapAxisProperty = serializedObject.FindProperty("snapAxis"); + snapDistanceProperty = serializedObject.FindProperty("snapDistance"); + snapTriggerInteractionProperty = serializedObject.FindProperty("snapTriggerInteraction"); + snapToBackFacesProperty = serializedObject.FindProperty("snapToBackFaces"); + + //force update + forceChangedEventModeProperty = serializedObject.FindProperty("forceChangedEventMode"); + + //event type + eventModeProperty = serializedObject.FindProperty("eventMode"); + + //settings + controlTypeProperty = serializedObject.FindProperty("settings").FindPropertyRelative("controlType"); + + //Context menu + overlay = new BGSceneViewOverlay(this, editorSelection); + + //for GameObjects points which use transforms + UpdatePointsTrackers(); + } + + + // ================================================================================ Inspector + public override void OnInspectorGui() + { + var settings = Settings; + + editorSelection.Reset(); + + // ======================================== Top section + InspectorTopSection(); + + // ======================================== Points + GUILayout.Space(5); + + if (Curve.PointsCount > 0) + { + BGEditorUtility.VerticalBox(() => + { + var temp = BGCurveSettingsForEditor.DisableInspectorPointMenu; + BGCurveSettingsForEditor.DisableInspectorPointMenu = BGEditorUtility.ButtonOnOff(ref temp, "Points menu [" + Curve.PointsCount + "]", "Show points in Editor inspector", + HiddenPointMenuColor, + new GUIContent("Show", "Click to show points menu"), + new GUIContent("Hide", "Click to hide points menu"), () => + { + const string title = "Reverse points"; + + if (!GUILayout.Button(new GUIContent(title, "Reverse all points, but keep curve intact"))) return; + + if (Curve.PointsCount < 2) + { + BGEditorUtility.Inform(title, "There should be at least 2 points. Curve has " + Curve.PointsCount); + return; + } + if (!BGEditorUtility.Confirm(title, "Are you sure you want to reverse the order of " + Curve.PointsCount + " points? Curve will remain intact.", "Reverse")) return; + + Curve.Reverse(); + }); + + //show points! + if (!BGCurveSettingsForEditor.DisableInspectorPointMenu) + SwapVector2Labels(Curve.Mode2D, () => Curve.ForEach((point, index, count) => editorPoint.OnInspectorGui(point, index, settings))); + }); + + // ======================================== Selections operations + editorSelection.InspectorSelectionOperations(); + + //warning + BGEditorUtility.HelpBox("Selection mode is on", MessageType.Warning, !editorSelection.Changed && editorSelection.HasSelected()); + } + else + { + BGEditorUtility.HorizontalBox(() => + { + EditorGUILayout.LabelField("No points!"); + + if (BGEditorUtility.ButtonWithIcon(addPointIcon, "Add new point at (0,0,0) local coordinates")) + BGCurveEditor.AddPoint(Curve, new BGCurvePoint(Curve, Vector3.zero, settings.ControlType, Vector3.right, Vector3.left), 0); + }); + } + + if (!editorSelection.Changed) return; + + Editor.Repaint(); + SceneView.RepaintAll(); + } + + + private void InspectorTopSection() + { + if (Curve.PointsCount == 0) + EditorGUILayout.HelpBox( + "1) Ctrl + LeftClick in scene view to add a point and snap it to " + + "\r\n a) 3D mode: mesh with collider" + + "\r\n b) 2D mode: curve's 2D plane." + + "\r\n" + + "\r\n2) Ctrl + Shift + LeftClick in Scene View to add a point unconditionally at some distance, specified in the settings." + + "\r\n" + + "\r\n3) Hold control over existing point or selection to access Scene View menu" + + "\r\n" + + "\r\n4) Hold shift + drag to use rectangular selection in Scene View" + , MessageType.Info); + + + try + { + // Curve's block + BGEditorUtility.VerticalBox(() => + { + //closed + EditorGUILayout.PropertyField(closedProperty); + + + //point's store mode + BGEditorUtility.Horizontal(() => + { + EditorGUILayout.PropertyField(pointsModeProperty); + + BGEditorUtility.DisableGui(() => + { + BGEditorUtility.Assign(ref syncContent, () => new GUIContent("Sync", "Sort points Game Objects and update names")); + + if (!GUILayout.Button(syncContent)) return; + + BGPrivateField.Invoke(Curve, BGCurve.MethodSetPointsNames); + }, !BGCurve.IsGoMode(Curve.PointsMode)); + }); + + + //2D mode + BGEditorUtility.Horizontal(() => + { + EditorGUILayout.PropertyField(mode2DProperty); + BGEditorUtility.DisableGui(() => + { + if (!GUILayout.Button("Apply", GUI.skin.button, GUILayout.Width(80))) return; + + Curve.FireBeforeChange(BGCurve.Event2D); + Curve.Apply2D(Curve.Mode2D); + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Points, BGCurve.Event2D)); + }, mode2DProperty.enumValueIndex == 0); + }); + + //snapping + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.Horizontal(() => + { + EditorGUILayout.PropertyField(snapTypeProperty); + + BGEditorUtility.DisableGui(() => + { + if (!GUILayout.Button("Apply", GUI.skin.button, GUILayout.Width(80))) return; + + Curve.FireBeforeChange(BGCurve.EventSnapType); + Curve.ApplySnapping(); + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Snap, BGCurve.EventSnapType)); + }, snapTypeProperty.enumValueIndex == 0); + }); + + if (snapTypeProperty.enumValueIndex == 0) return; + + EditorGUILayout.PropertyField(snapAxisProperty); + EditorGUILayout.PropertyField(snapDistanceProperty); + EditorGUILayout.PropertyField(snapTriggerInteractionProperty); + EditorGUILayout.PropertyField(snapToBackFacesProperty); + + BGEditorUtility.LayerMaskField("Snap Layer Mask", Curve.SnapLayerMask, i => + { + Curve.FireBeforeChange(BGCurve.EventSnapTrigger); + Curve.SnapLayerMask = i; + Curve.ApplySnapping(); + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Snap, BGCurve.EventSnapTrigger)); + }); + }); + + //event mode + EditorGUILayout.PropertyField(eventModeProperty); + + //force update + EditorGUILayout.PropertyField(forceChangedEventModeProperty); + + //convert control type + BGEditorUtility.Horizontal(() => + { + EditorGUILayout.PropertyField(controlTypeProperty); + + if (!BGEditorUtility.ButtonWithIcon(convertAll2D, "Convert control types for all existing points ", 44)) return; + + var settings = Settings; + + foreach (var point in Curve.Points.Where(point => point.ControlType != settings.ControlType)) point.ControlType = settings.ControlType; + }); + }); + } + catch (BGEditorUtility.ExitException) + { + GUIUtility.ExitGUI(); + } + } + + // ================================================================================ Scene + public override void OnSceneGui(Plane[] frustum) + { + var settings = Settings; + + var curveRotation = GetRotation(Curve.transform); + + if (Curve.PointsCount != 0 && settings.VRay) + { + painter = painter ?? new BGCurvePainterHandles(Editor.Math); + painter.DrawCurve(); + } + + Curve.ForEach((point, index, count) => editorPoint.OnSceneGUI(point, index, settings, curveRotation, frustum)); + + //tangents + if (settings.ShowCurve && settings.ShowTangents && Editor.Math.SectionsCount > 0 && Editor.Math.IsCalculated(BGCurveBaseMath.Field.Tangent)) + { + BGEditorUtility.SwapHandlesColor(settings.TangentsColor, () => + { + var math = Editor.Math; + var sectionsCount = math.SectionsCount; + var sections = math.SectionInfos; + + for (var i = 0; i < sectionsCount; i++) + { + var section = sections[i]; + var points = section.Points; + ShowTangent(points[0].Position, points[0].Tangent, settings.TangentsSize); + if (settings.TangentsPerSection > 1) + { + var sectionLength = section.Distance; + var part = sectionLength/settings.TangentsPerSection; + for (var j = 1; j < settings.TangentsPerSection; j++) + { + var distanceWithinSection = part*j; + Vector3 position; + Vector3 tangent; + section.CalcByDistance(distanceWithinSection, out position, out tangent, true, true); + ShowTangent(position, tangent, settings.TangentsSize); + } + } + } + }); + } + + + editorSelection.Scene(curveRotation); + + overlay.Process(Event.current); + + CheckPointsTransforms(); + } + + private void CheckPointsTransforms() + { + var skipAction = false; + foreach (var tracker in pointTransformTrackers) skipAction |= tracker.CheckForChange(skipAction); + } + + private static void ShowTangent(Vector3 position, Vector3 tangent, float size) + { + if (tangent.sqrMagnitude > 0.0001f) Handles.ArrowCap(0, position, Quaternion.LookRotation(tangent), BGEditorUtility.GetHandleSize(position, size)); + } + + public static Quaternion GetRotation(Transform transform) + { + return Tools.pivotRotation == PivotRotation.Global ? Quaternion.identity : transform.rotation; + } + + + public override void OnApply() + { + var curve = Editor.Curve; + var settings = Settings; + + // ============================================== Closed + if (curve.Closed != closedProperty.boolValue) + { + Curve.FireBeforeChange(BGCurve.EventClosed); + serializedObject.ApplyModifiedProperties(); + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Points, BGCurve.EventClosed)); + } + + if ((int) curve.ForceChangedEventMode != forceChangedEventModeProperty.enumValueIndex) + { + Curve.FireBeforeChange(BGCurve.EventForceUpdate); + serializedObject.ApplyModifiedProperties(); + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Curve, BGCurve.EventForceUpdate)); + } + + // ============================================== Points store mode + if ((int) Curve.PointsMode != pointsModeProperty.enumValueIndex) + { + var newPointsMode = (BGCurve.PointsModeEnum) pointsModeProperty.enumValueIndex; + + //ask for confirmation in case changes may affect something else + if ((Curve.PointsMode == BGCurve.PointsModeEnum.Components) && !BGEditorUtility.Confirm("Convert Points", + "Are you sure you want to convert points? All existing references to these points will be lost.", "Convert")) return; + + if ((Curve.PointsMode == BGCurve.PointsModeEnum.GameObjectsNoTransform && newPointsMode != BGCurve.PointsModeEnum.GameObjectsTransform || + Curve.PointsMode == BGCurve.PointsModeEnum.GameObjectsTransform && newPointsMode != BGCurve.PointsModeEnum.GameObjectsNoTransform) + && !BGEditorUtility.Confirm("Convert Points", "Are you sure you want to convert points? All existing GameObjects for points will be deleted.", "Convert")) return; + + editorSelection.Clear(); + + //invoke convert + BGPrivateField.Invoke(Curve, BGCurve.MethodConvertPoints, newPointsMode, + BGCurveEditor.GetPointProvider(newPointsMode, Curve), + BGCurveEditor.GetPointDestroyer(Curve.PointsMode, Curve)); + + //this call is not required + // serializedObject.ApplyModifiedProperties(); + } + + // ============================================== 2D mode + if ((int) curve.Mode2D != mode2DProperty.enumValueIndex) + { + Curve.FireBeforeChange(BGCurve.Event2D); + serializedObject.ApplyModifiedProperties(); + + var oldEventMode = Curve.EventMode; + Curve.EventMode = BGCurve.EventModeEnum.NoEvents; + + //force points recalc + Curve.Apply2D(Curve.Mode2D); + + if (BGEditorUtility.Confirm("Editor handles change", "Do you want to adjust configurable Editor handles (in Scene View) to chosen mode? This affects only current curve.", "Yes")) + { + if (Curve.Mode2D != BGCurve.Mode2DEnum.Off) + { + Apply2D(settings.HandlesSettings); + Apply2D(settings.ControlHandlesSettings); + } + else + { + Apply3D(settings.HandlesSettings); + Apply3D(settings.ControlHandlesSettings); + } + } + + Curve.EventMode = oldEventMode; + + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Points, BGCurve.Event2D)); + } + + // ============================================== Snapping + if ((int) curve.SnapType != snapTypeProperty.enumValueIndex) SnappingChanged(BGCurve.EventSnapType); + + if ((int) curve.SnapAxis != snapAxisProperty.enumValueIndex) SnappingChanged(BGCurve.EventSnapAxis); + + if (Math.Abs((int) curve.SnapDistance - snapDistanceProperty.floatValue) > BGCurve.Epsilon) SnappingChanged(BGCurve.EventSnapDistance); + + if ((int) curve.SnapTriggerInteraction != snapTriggerInteractionProperty.enumValueIndex) SnappingChanged(BGCurve.EventSnapTrigger); + + if (curve.SnapToBackFaces != snapToBackFacesProperty.boolValue) SnappingChanged(BGCurve.EventSnapBackfaces); + + // ============================================== Event mode + if ((int) curve.EventMode != eventModeProperty.enumValueIndex) serializedObject.ApplyModifiedProperties(); + + // ============================================== Control Type + if ((int) settings.ControlType != controlTypeProperty.enumValueIndex) serializedObject.ApplyModifiedProperties(); + } + + private void SnappingChanged(string eventMessage) + { + Curve.FireBeforeChange(eventMessage); + + serializedObject.ApplyModifiedProperties(); + + Curve.ApplySnapping(); + + Curve.FireChange(BGCurveChangedArgs.GetInstance(Curve, BGCurveChangedArgs.ChangeTypeEnum.Snap, eventMessage)); + } + + private void Apply3D(BGCurveSettings.SettingsForHandles handlesSettings) + { + handlesSettings.RemoveX = handlesSettings.RemoveY = handlesSettings.RemoveZ = handlesSettings.RemoveXY = handlesSettings.RemoveXZ = handlesSettings.RemoveYZ = false; + } + + private void Apply2D(BGCurveSettings.SettingsForHandles handlesSettings) + { + handlesSettings.RemoveX = Curve.Mode2D == BGCurve.Mode2DEnum.YZ; + handlesSettings.RemoveY = Curve.Mode2D == BGCurve.Mode2DEnum.XZ; + handlesSettings.RemoveZ = Curve.Mode2D == BGCurve.Mode2DEnum.XY; + + handlesSettings.RemoveXY = Curve.Mode2D == BGCurve.Mode2DEnum.XZ || Curve.Mode2D == BGCurve.Mode2DEnum.YZ; + handlesSettings.RemoveXZ = Curve.Mode2D == BGCurve.Mode2DEnum.XY || Curve.Mode2D == BGCurve.Mode2DEnum.YZ; + handlesSettings.RemoveYZ = Curve.Mode2D == BGCurve.Mode2DEnum.XZ || Curve.Mode2D == BGCurve.Mode2DEnum.XY; + } + + + public override string GetStickerMessage(ref MessageType type) + { + return "" + Curve.PointsCount; + } + + public override void OnUndoRedo() + { + editorSelection.OnUndoRedo(); + } + + public override void OnCurveChanged(BGCurveChangedArgs args) + { + if (args == null || string.IsNullOrEmpty(args.Message) || Curve.PointsMode != BGCurve.PointsModeEnum.GameObjectsTransform) return; + + if (args.ChangeType != BGCurveChangedArgs.ChangeTypeEnum.Point && args.ChangeType != BGCurveChangedArgs.ChangeTypeEnum.Points) return; + + if (!( + args.Message.Equals(BGCurve.EventAddPoint) || args.Message.Equals(BGCurve.EventAddPoints) + || args.Message.Equals(BGCurve.EventClearAllPoints) || args.Message.Equals(BGCurve.EventDeletePoints) + )) return; + + UpdatePointsTrackers(); + } + + private void UpdatePointsTrackers() + { + if (pointTransformTrackers.Count > 0) foreach (var tracker in pointTransformTrackers) tracker.Release(); + + pointTransformTrackers.Clear(); + + //for GameObjectsTransform mode + if (Curve.PointsMode == BGCurve.PointsModeEnum.GameObjectsTransform) + Curve.ForEach((point, index, count) => pointTransformTrackers.Add(BGTransformMonitor.GetMonitor(((BGCurvePointGO) point).transform, transform => Curve.FireChange(null)))); + + //for points transforms + Curve.ForEach((point, index, count) => + { + if (point.PointTransform != null) pointTransformTrackers.Add(BGTransformMonitor.GetMonitor(point.PointTransform, transform => Curve.FireChange(null))); + }); + } + + public static void SwapVector2Labels(BGCurve.Mode2DEnum mode2D, Action action) + { + var needToSwap = mode2D != BGCurve.Mode2DEnum.Off && mode2D != BGCurve.Mode2DEnum.XY; + GUIContent[] oldLabels = null; + if (needToSwap) + { + oldLabels = BGPrivateField.Get(typeof(EditorGUI), "s_XYLabels"); + GUIContent[] newLabels; + switch (mode2D) + { + case BGCurve.Mode2DEnum.XZ: + newLabels = XZLabels; + break; + case BGCurve.Mode2DEnum.YZ: + newLabels = YZLabels; + break; + default: + throw new ArgumentOutOfRangeException("mode2D", mode2D, null); + } + BGPrivateField.Set(typeof(EditorGUI), "s_XYLabels", newLabels); + } + + try + { + action(); + } + finally + { + if (needToSwap) BGPrivateField.Set(typeof(EditorGUI), "s_XYLabels", oldLabels); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs.meta new file mode 100644 index 0000000..3503252 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPoints.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5efec0dbdba6a2a4e94b0ac6db243cc6 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs new file mode 100644 index 0000000..6878da7 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs @@ -0,0 +1,617 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + //helper class for points selection inside editor + public class BGCurveEditorPointsSelection + { + private static readonly Color SelectedBackgroundColor = new Color32(157, 246, 246, 40); + + + private readonly Texture2D tickNoTexture; + private readonly Texture2D tickYesTexture; + private readonly Texture2D deleteTexture; + private readonly Texture2D selectAllTexture; + private readonly Texture2D deselectAllTexture; + private readonly Texture2D convertAllTexture; + + + private readonly List points = new List(); + + private bool groupSelectionStarted; + private bool groupSelectionIsSelecting; + + private BGCurveSettings settings; + + public bool Changed { get; private set; } + + public int CountSelected + { + get { return points.Count; } + } + + private readonly BGCurve curve; + private readonly BGRectangularSelection selectionRectangle; + + private BGCurvePoint.ControlTypeEnum controlType = BGCurvePoint.ControlTypeEnum.Absent; + + private BGEditorUtility.EventCanceller eventCanceller; + + //do not want to use events + private int lastCurveCount; + private readonly PointsContainer pointsContainer; + + public BGCurveEditorPointsSelection(BGCurve curve, BGCurveEditor editor) + { + this.curve = curve; + selectionRectangle = new BGRectangularSelection(editor, this); + + tickNoTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGTickNo123); + tickYesTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGTickYes123); + deleteTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDelete123); + selectAllTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSelectAll123); + deselectAllTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGDeSelectAll123); + convertAllTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGConvertAll123); + pointsContainer = new PointsContainer(this); + } + + public bool HasSelected() + { + return CountSelected > 0; + } + + internal void Clear() + { + Changed = Changed || HasSelected(); + points.Clear(); + } + + public bool Contains(BGCurvePointI point) + { + return points.Contains(point); + } + + //if we selecting or removing selection + public void GroupSelection(BGCurvePointI point) + { + if (groupSelectionIsSelecting) Add(point); + else Remove(point); + } + + public bool Add(BGCurvePointI point) + { + if (Contains(point)) return false; + + Changed = true; + points.Add(point); + return true; + } + + public bool Remove(BGCurvePointI point) + { + if (!Contains(point)) return false; + Changed = true; + points.Remove(point); + return true; + } + + private void SetX(float x) + { + foreach (var point in points) + { + var positionWorld = point.PositionWorld; + point.PositionWorld = new Vector3(x, positionWorld.y, positionWorld.z); + } + } + + private void SetY(float y) + { + foreach (var point in points) + { + var positionWorld = point.PositionWorld; + point.PositionWorld = new Vector3(positionWorld.x, y, positionWorld.z); + } + } + + private void SetZ(float z) + { + foreach (var point in points) + { + var positionWorld = point.PositionWorld; + point.PositionWorld = new Vector3(positionWorld.x, positionWorld.y, z); + } + } + + public void Reset() + { + Changed = false; + settings = BGPrivateField.GetSettings(curve); + } + + //draw interactible selection icon control + public void InspectorSelectionRect(BGCurvePointI point) + { + var currentEvent = Event.current; + var rect = GUILayoutUtility.GetRect(24, 24, 24, 24, new GUIStyle {fixedWidth = 24, fixedHeight = 24, stretchWidth = false, stretchHeight = false}); + if (currentEvent.isMouse) + { + if (currentEvent.type == EventType.mouseDown) + { + if (rect.Contains(currentEvent.mousePosition)) + { + groupSelectionStarted = true; + groupSelectionIsSelecting = !Contains(point); + GroupSelection(point); + } + } + else if (groupSelectionStarted) + { + switch (currentEvent.type) + { + case EventType.MouseUp: + groupSelectionStarted = false; + break; + case EventType.MouseDrag: + if (rect.Contains(currentEvent.mousePosition)) GroupSelection(point); + break; + } + } + } + + var selected = Contains(point); + var selectedTexture = selected ? tickYesTexture : tickNoTexture; + var labelStyle = selected ? new GUIStyle("Label") {normal = new GUIStyleState {textColor = settings.LabelColorSelected}} : EditorStyles.label; + EditorGUI.LabelField(rect, new GUIContent(selectedTexture, "Click to (de)select a point, or click and drag to (de)select multiple points. " + + "Hold shift to use rectangular selection"), labelStyle); + } + + //OnInspectorGui for selection + public void InspectorSelectionOperations() + { + BGEditorUtility.VerticalBox(() => + { + // ================================================ Global operations + BGEditorUtility.HorizontalBox(() => + { + BGEditorUtility.SwapLabelWidth(80, () => EditorGUILayout.LabelField("Selected (" + points.Count + ")")); + + if (BGEditorUtility.ButtonWithIcon(deleteTexture, "Delete selected points")) if (!DeleteSelected()) return; + + GUILayout.Space(4); + if (BGEditorUtility.ButtonWithIcon(selectAllTexture, "Select all points", 35)) + { + Changed = Changed || points.Count != curve.PointsCount; + + points.Clear(); + + foreach (var point1 in curve.Points) points.Add(point1); + } + + GUILayout.Space(4); + + if (BGEditorUtility.ButtonWithIcon(deselectAllTexture, "Deselect all points", 35)) Clear(); + }); + + + // ================================================ Selections operations + // skip mouse buttons events which change selection + if (Changed) return; + + GUILayout.Space(5); + if (HasSelected()) + { + BGEditorUtility.SwapGuiBackgroundColor(SelectedBackgroundColor, () => + { + BGEditorUtility.VerticalBox(() => + { + var averagePositionSelected = GetAveragePosition(); + + // ===================================================== Control handles + BGEditorUtility.Horizontal(() => + { + controlType = (BGCurvePoint.ControlTypeEnum) EditorGUILayout.EnumPopup("Controls", controlType); + if (!BGEditorUtility.ButtonWithIcon(convertAllTexture, "Set control type for all selected points", 44)) return; + + SetControlTypeForSelected(controlType); + }); + + // ===================================================== Average positions & delete + BGEditorUtility.Vector3Field("Average position", "Average points position. Change several points positions at once, keeping distance difference intact", + averagePositionSelected, + newAverage => + { + var delta = newAverage - averagePositionSelected; + curve.Transaction(() => + { + foreach (var point in points) point.PositionWorld += delta; + }); + }); + // ===================================================== Set position directly + BGEditorUtility.Vector3Field("Set position", "Set points position directly", + averagePositionSelected, + newPosition => + { + curve.Transaction(() => + { + if (BGEditorUtility.AnyChange(averagePositionSelected.x, newPosition.x)) SetX(newPosition.x); + if (BGEditorUtility.AnyChange(averagePositionSelected.y, newPosition.y)) SetY(newPosition.y); + if (BGEditorUtility.AnyChange(averagePositionSelected.z, newPosition.z)) SetZ(newPosition.z); + }); + }); + + // ===================================================== Set control positions directly + var count = 0; + var averageControl1Sum = Vector3.zero; + var averageControl2Sum = Vector3.zero; + foreach (var point in points.Where(point => point.ControlType != BGCurvePoint.ControlTypeEnum.Absent)) + { + count++; + averageControl1Sum += point.ControlFirstLocal; + averageControl2Sum += point.ControlSecondLocal; + } + + if (count != 0) + { + //has points with bezier controls + BGEditorUtility.Vector3Field("Set Control 1", "Set 1st control position directly", + averageControl1Sum/count, + newPosition => + { + curve.Transaction( + () => + { + foreach (var point in points.Where(point => point.ControlType != BGCurvePoint.ControlTypeEnum.Absent)) point.ControlFirstLocal = newPosition; + }); + }); + + BGEditorUtility.Vector3Field("Set Control 2", "Set 2nd control position directly", + averageControl2Sum/count, + newPosition => + { + curve.Transaction( + () => + { + foreach (var point in points.Where(point => point.ControlType != BGCurvePoint.ControlTypeEnum.Absent)) point.ControlSecondLocal = newPosition; + }); + }); + } + + + // ===================================================== Custom fields + if (curve.FieldsCount > 0) + { + var fields = curve.Fields; + pointsContainer.UpdateFields(); + foreach (var field in fields) BGCurveEditorPoint.ShowField(pointsContainer, field, pointsContainer.AnimationCurveChanged); + } + }); + }); + } + else BGEditorUtility.HelpBox("Hold shift to use rectangular selection\r\nClick or click+drag over tick icons to (de)select points", MessageType.Info, curve.PointsCount > 0); + }); + } + + public void SetControlTypeForSelected(BGCurvePoint.ControlTypeEnum controlType) + { + curve.Transaction(() => + { + foreach (var point in points) point.ControlType = controlType; + }); + } + + public bool DeleteSelected() + { + if (points.Count == 0) + { + BGEditorUtility.Inform("Error", "Chose at least one point to delete"); + return false; + } + + if (!BGEditorUtility.Confirm("Delete points confirmation", "Are you sure you want to remove " + points.Count + " point(s)?", "Delete")) return false; + + BGCurveEditor.DeletePoints(curve, points.ToArray()); + + Clear(); + return true; + } + + public Vector3 GetAveragePosition() + { + return points.Aggregate(Vector3.zero, (current, point) => current + point.PositionWorld)/points.Count; + } + + // OnSceneGui + public void Scene(Quaternion rotation) + { + if (lastCurveCount != curve.PointsCount) + { + lastCurveCount = curve.PointsCount; + OnUndoRedo(); + } + + if (!HasSelected()) return; + + BGEditorUtility.Assign(ref settings, () => BGPrivateField.GetSettings(curve)); + + //group operation for selected points + var text = " Selected [" + points.Count + "]"; + var average = GetAveragePosition(); + Handles.Label(average + BGEditorUtility.GetHandleSize(average)*Vector3.up*.25f, text, new GUIStyle("Label") {normal = new GUIStyleState {textColor = settings.LabelColorSelected}}); + + var newAverage = BGEditorUtility.Handle(-10, settings.HandlesType, average, rotation, settings.HandlesSettings); + + if (BGEditorUtility.AnyChange(average, newAverage)) + { + curve.Transaction(() => + { + var delta = newAverage - average; + foreach (var selectedPoint in points) selectedPoint.PositionWorld += delta; + }); + } + } + + public bool SingleSelected(BGCurvePointI point) + { + return points.Count == 1 && Contains(point); + } + + public void Process(Event currentEvent) + { + if (currentEvent.type == EventType.mouseDown) + { + if (currentEvent.button == 0) + { + if ((!currentEvent.control && currentEvent.shift) || BGCurveSettingsForEditor.LockView) + { + var cancelEvent = Tools.viewTool != ViewTool.FPS && Tools.current != Tool.View /*&& Tools.current != Tool.None*/ && !currentEvent.isKey; + if (cancelEvent) eventCanceller = new BGEditorUtility.EventCanceller(); + + if (currentEvent.shift && !BGCurveSettingsForEditor.DisableRectangularSelection) selectionRectangle.On(); + else if (cancelEvent) BGCurveEditor.OverlayMessage.Display("The Scene view is locked.\r\n Set 'Lock View' (in the BGCurve Editor) to false to unlock."); + } + } + else if (currentEvent.button == 1 && selectionRectangle.IsOn) + { + //glitch with right click + GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); + } + } + else if (currentEvent.type == EventType.mouseUp) + { + SceneView.RepaintAll(); + selectionRectangle.Off(); + BGEditorUtility.Release(ref eventCanceller); + } + + + selectionRectangle.Process(currentEvent); + } + + public void OnUndoRedo() + { + if (CountSelected == 0) return; + + for (var i = points.Count - 1; i >= 0; i--) if (curve.IndexOf(points[i]) < 0) points.RemoveAt(i); + } + + public void ForEach(Func action) + { + if (CountSelected == 0) return; + + //not sure if it can be converted to LINQ + foreach (var point in points) if (action(point)) return; + } + + private sealed class PointsContainer : BGCurvePointI + { + private readonly Dictionary name2Value = new Dictionary(); + private readonly BGCurveEditorPointsSelection selection; + //we reuse the list to reduce GC + private readonly List existingKeys = new List(); + + public BGCurve Curve { get; private set; } + public Vector3 PositionLocal { get; set; } + public Vector3 PositionLocalTransformed { get; set; } + public Vector3 PositionWorld { get; set; } + public Vector3 ControlFirstLocal { get; set; } + public Vector3 ControlFirstLocalTransformed { get; set; } + public Vector3 ControlFirstWorld { get; set; } + public Vector3 ControlSecondLocal { get; set; } + public Vector3 ControlSecondLocalTransformed { get; set; } + public Vector3 ControlSecondWorld { get; set; } + public BGCurvePoint.ControlTypeEnum ControlType { get; set; } + public Transform PointTransform { get; set; } + + public PointsContainer(BGCurveEditorPointsSelection selection) + { + this.selection = selection; + Curve = selection.curve; + +// var animationCurve = new AnimationCurve(); + } + + public T GetField(string name) + { + var type = typeof(T); + var value = GetField(name, type); + var field = (T) value; + return field; + } + + public void SetField(string name, T value) + { + SetField(name, value, typeof(T)); + } + + + public object GetField(string name, Type type) + { + return name2Value[name]; + } + + public void SetField(string name, object value, Type type) + { + name2Value[name] = value; + + selection.ForEach(p => + { + p.SetField(name, value, type); + return false; + }); + } + + public float GetFloat(string name) + { + throw new NotImplementedException(); + } + + public bool GetBool(string name) + { + throw new NotImplementedException(); + } + + public int GetInt(string name) + { + throw new NotImplementedException(); + } + + public Vector3 GetVector3(string name) + { + throw new NotImplementedException(); + } + + public Bounds GetBounds(string name) + { + throw new NotImplementedException(); + } + + public Quaternion GetQuaternion(string name) + { + throw new NotImplementedException(); + } + + public Color GetColor(string name) + { + throw new NotImplementedException(); + } + + public void SetFloat(string name, float value) + { + throw new NotImplementedException(); + } + + public void SetBool(string name, bool value) + { + throw new NotImplementedException(); + } + + public void SetInt(string name, int value) + { + throw new NotImplementedException(); + } + + public void SetVector3(string name, Vector3 value) + { + throw new NotImplementedException(); + } + + public void SetQuaternion(string name, Quaternion value) + { + throw new NotImplementedException(); + } + + public void SetBounds(string name, Bounds value) + { + throw new NotImplementedException(); + } + + public void SetColor(string name, Color value) + { + throw new NotImplementedException(); + } + + public void AnimationCurveChanged(string name, AnimationCurve animationCurve) + { + selection.ForEach(p => + { + var pointCurve = p.GetField(name); + pointCurve.keys = animationCurve.keys; + pointCurve.postWrapMode = animationCurve.postWrapMode; + pointCurve.preWrapMode = animationCurve.preWrapMode; + return false; + }); + } + + // make sure all fields are present + public void UpdateFields() + { + var fields = Curve.Fields; + + existingKeys.Clear(); + + if (name2Value.Count > 0) foreach (var key in name2Value.Keys) existingKeys.Add(key); + + if (fields.Length != 0) + { + foreach (var field in fields) + { + var fieldName = field.FieldName; + + existingKeys.Remove(fieldName); + + if (name2Value.ContainsKey(field.FieldName)) continue; + + //add new value + switch (field.Type) + { + case BGCurvePointField.TypeEnum.Bool: + name2Value[fieldName] = false; + break; + case BGCurvePointField.TypeEnum.Int: + name2Value[fieldName] = 0; + break; + case BGCurvePointField.TypeEnum.Float: + name2Value[fieldName] = 0f; + break; + case BGCurvePointField.TypeEnum.String: + name2Value[fieldName] = ""; + break; + case BGCurvePointField.TypeEnum.Vector3: + name2Value[fieldName] = new Vector3(); + break; + case BGCurvePointField.TypeEnum.Bounds: + name2Value[fieldName] = new Bounds(); + break; + case BGCurvePointField.TypeEnum.Color: + name2Value[fieldName] = new Color(); + break; + case BGCurvePointField.TypeEnum.Quaternion: + name2Value[fieldName] = Quaternion.identity; + break; + case BGCurvePointField.TypeEnum.AnimationCurve: + name2Value[fieldName] = new AnimationCurve(); + break; + case BGCurvePointField.TypeEnum.GameObject: + case BGCurvePointField.TypeEnum.Component: + case BGCurvePointField.TypeEnum.BGCurve: + case BGCurvePointField.TypeEnum.BGCurvePointComponent: + case BGCurvePointField.TypeEnum.BGCurvePointGO: + name2Value[fieldName] = null; + break; + default: + throw new ArgumentOutOfRangeException("field.Type"); + } + } + } + + //remove unused keys + if (existingKeys.Count > 0) foreach (var key in existingKeys) name2Value.Remove(key); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs.meta new file mode 100644 index 0000000..f38ba27 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorPointsSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 441a0da564bef264fb9baaada36283ea +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs new file mode 100644 index 0000000..6699a19 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs @@ -0,0 +1,166 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCurveEditorSettings : BGCurveEditorTab + { + private static bool showSaveLoad; + private string newAssetName; + private string lastOperation; + + //anim props + private readonly BGEditorUtility.BoolAnimatedProperty showCurveProp; + private SerializedProperty settings; + + + public BGCurveEditorSettings(BGCurveEditor editor, SerializedObject serializedObject) + : base(editor, serializedObject, BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSettings123)) + { + //anim props + showCurveProp = new BGEditorUtility.BoolAnimatedProperty(editor, serializedObject.FindProperty("settings"), "showCurve"); + } + + public override void OnInspectorGui() + { + settings = SerializedObject.FindProperty("settings"); + var settingsObj = Settings; + + // Save & Load + showSaveLoad = EditorGUILayout.Foldout(showSaveLoad, "Save and load settings"); + if (showSaveLoad) + { + BGEditorUtility.VerticalBox(() => + { + var path = BGCurveSettingsOperations.GetPath(); + + BGEditorUtility.HelpBox("Folder is not set", MessageType.Info, path == null, () => + { + EditorGUILayout.LabelField("Folder", path); + + BGEditorUtility.HelpBox("Folder is not found", MessageType.Warning, !BGCurveSettingsOperations.IsValid(path), () => + { + // ================================= Load settings + var all = BGCurveSettingsOperations.GetAll(); + + BGEditorUtility.HelpBox("Folder does not have any settings", MessageType.Warning, all == null || all.Length == 0, () => + { + BGEditorUtility.Horizontal(() => + { + var options = new List {new GUIContent("")}; + options.AddRange(all.Select(setting => new GUIContent(setting))); + var selected = EditorGUILayout.Popup(new GUIContent("Load", "Load a specified settings for current object"), 0, options.ToArray()); + if (selected > 0) + { + var newSettings = BGCurveSettingsOperations.Load(options[selected].text); + if (newSettings != null) + { + BGPrivateField.SetSettings(Curve, newSettings); + EditorUtility.SetDirty(Curve); + lastOperation = options[selected].text + " was loaded"; + } + else lastOperation = "Unable to load a settings " + options[selected].text; + } + + if (GUILayout.Button(new GUIContent("Reload", "Reload settings from disk. This operation does not change settings for the curent object."))) + { + BGCurveSettingsOperations.Reload(BGCurveSettingsOperations.GetPath()); + lastOperation = "Settings was reloaded from disk"; + } + }); + }); + + // ================================= Save settings + BGEditorUtility.Horizontal(() => + { + newAssetName = EditorGUILayout.TextField(new GUIContent("Save", "Save current setting on disk"), newAssetName); + if (!GUILayout.Button(new GUIContent("Save", "Save current setting on disk"))) return; + + if (newAssetName == null || newAssetName.Trim().Equals("")) BGEditorUtility.Inform("Invalid asset name", "Please, enter the name for new asset"); + else lastOperation = BGCurveSettingsOperations.Save(settingsObj, newAssetName) ? newAssetName + " was saved on disk" : "Unable to save " + newAssetName + " on disk"; + }); + + BGEditorUtility.HelpBox(lastOperation, MessageType.Info, lastOperation != null); + }); + }); + + BGEditorUtility.Horizontal(() => + { + if (GUILayout.Button(new GUIContent("Save as default", "Save current settings as default for future curves"))) + { + lastOperation = BGCurveSettingsOperations.SaveDefault(settingsObj) ? "Current settings was saved as default" : "Unable to save settings on disk as default"; + } + + if (GUILayout.Button(new GUIContent("Chose a folder", "Chose a folder where to store settings files"))) BGCurveSettingsOperations.ChoseDir(); + }); + }); + } + + EditorGUILayout.HelpBox("All fields settings are under Fields tab", MessageType.Warning); + + BGEditorUtility.ChangeCheck(() => + { + //Points + BGEditorUtility.VerticalBox(() => + { + //Hide handles + EditorGUILayout.PropertyField(Find("hideHandles")); + + EditorGUILayout.PropertyField(Find("newPointDistance")); + EditorGUILayout.PropertyField(Find("showPointMenu")); + }); + + var tangentProp = Find("showTangents"); + + //curve + BGEditorUtility.FadeGroup(showCurveProp, () => + { + EditorGUILayout.PropertyField(Find("showCurveMode")); + EditorGUILayout.PropertyField(Find("sections")); + EditorGUILayout.PropertyField(Find("vRay")); + BGEditorUtility.HelpBox("VRay will work only if object is selected.", MessageType.Warning, Find("vRay").boolValue && Find("showCurveMode").enumValueIndex != 0); + EditorGUILayout.PropertyField(Find("lineColor")); + + //tangents + BGEditorUtility.VerticalBox(() => + { + EditorGUILayout.PropertyField(tangentProp); + if (settingsObj.ShowTangents) + { + BGEditorUtility.Indent(1, () => + { + EditorGUILayout.PropertyField(Find("tangentsSize")); + EditorGUILayout.PropertyField(Find("tangentsPerSection")); + EditorGUILayout.PropertyField(Find("tangentsColor")); + }); + } + }); + }); + }, () => + { + //if any change + SerializedObject.ApplyModifiedProperties(); + SceneView.RepaintAll(); + }); + } + + private SerializedProperty Find(string name) + { + return settings.FindPropertyRelative(name); + } + + + public override void OnEnable() + { + Tools.hidden = Settings.HideHandles; + } + + + public override void OnApply() + { + Tools.hidden = Settings.HideHandles; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs.meta new file mode 100644 index 0000000..a4d2c24 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorSettings.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: e1df90c7c52e81b44be91984d29ff247 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs new file mode 100644 index 0000000..576258b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs @@ -0,0 +1,79 @@ +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + public abstract class BGCurveEditorTab + { + public readonly BGCurveEditor Editor; + public readonly SerializedObject SerializedObject; + public readonly BGCurve Curve; + + private readonly Texture2D header2D; + + public Texture2D Header2D + { + get { return header2D; } + } + + public BGCurveSettings Settings + { + get { return BGPrivateField.GetSettings(Curve); } + } + + protected BGCurveEditorTab(BGCurveEditor editor, SerializedObject serializedObject, Texture2D header2D) + { + Editor = editor; + Curve = editor.Curve; + SerializedObject = serializedObject; + this.header2D = header2D; + } + + + // standard onInspector call + public abstract void OnInspectorGui(); + + //standard onscene + public virtual void OnSceneGui(Plane[] frustum) + { + } + + + // standard onEnable + public virtual void OnEnable() + { + } + + //editor disabled callback + public virtual void OnDisable() + { + } + + //editor removed callback + public virtual void OnDestroy() + { + } + + + //after applying the changes + public virtual void OnApply() + { + } + + + //sticker message (on toolbar) + public virtual string GetStickerMessage(ref MessageType type) + { + return null; + } + + public virtual void OnUndoRedo() + { + } + + public virtual void OnCurveChanged(BGCurveChangedArgs args) + { + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs.meta new file mode 100644 index 0000000..3d03904 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveEditorTab.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0d58f9d2731617f47a5feea3ca370779 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs new file mode 100644 index 0000000..788d0f2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs @@ -0,0 +1,49 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomPropertyDrawer(typeof(BGCurvePointComponent), true)] + public class BGCurvePointComponentDrawer : BGPropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // idea.. partially copy/pasted from BGCcChoseDrawer + // this is a required startup call + SetUp(position, property, label, () => + { + if (!(property.objectReferenceValue != null)) DrawProperty(property); + else + { + var point = (BGCurvePointComponent) property.objectReferenceValue; + + var pointCount = point.Curve.PointsCount; + + if (pointCount < 2) DrawProperty(property); + else + { + var pointIndex = point.Curve.IndexOf(point); + var buttonContent = new GUIContent("" + pointIndex, "Object has multiple components attached. Click to chose."); + + var buttonWidth = GUI.skin.button.CalcSize(buttonContent).x; + + Rect.width -= buttonWidth; + EditorGUI.PropertyField(Rect, property); + + + if (GUI.Button(new Rect(Rect) {width = buttonWidth, x = Rect.xMax}, buttonContent)) + { + BGCurveChosePointWindow.Open(pointIndex, point.Curve, newPoint => + { + property.objectReferenceValue = newPoint; + property.serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(property.serializedObject.targetObject); + }); + } + } + } + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs.meta new file mode 100644 index 0000000..54d0e1b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointComponentDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 83b0dba0ac76f224da8f2bef4a936744 +timeCreated: 1475061550 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs new file mode 100644 index 0000000..010426e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs @@ -0,0 +1,80 @@ +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; +using UnityEngineInternal; + +namespace BansheeGz.BGSpline.Editor +{ + //bug in editor while curve is rotated in 2d mode (position overflow to super big values while being dragged in SceneView) + [CustomEditor(typeof(BGCurvePointGO))] + public class BGCurvePointGOEditor : UnityEditor.Editor + { + public static bool PointSelected; + + private BGCurvePointI point; + private BGCurveEditorPoint pointEditor; + + private BGCurveEditor curveEditor; + private BGTransition.SwayTransition pointIndicatorTransition; + private Texture2D pointSelectedTexture; + + protected virtual BGCurvePointI Point + { + get { return (BGCurvePointI) target; } + } + + protected virtual void OnEnable() + { + point = Point; + + pointEditor = new BGCurveEditorPoint(() => null, null); + + if (curveEditor != null) curveEditor.OnDestroy(); + + curveEditor = (BGCurveEditor) CreateEditor(point.Curve); + + pointSelectedTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPointSelected123); + + PointSelected = true; + } + + + void OnDisable() + { + PointSelected = false; + if (curveEditor != null) curveEditor.OnDisable(); + } + + void OnDestroy() + { + PointSelected = false; + if (curveEditor != null) curveEditor.OnDestroy(); + } + + public override void OnInspectorGUI() + { + var curve = point.Curve; + + BGCurveEditorPoints.SwapVector2Labels(curve.Mode2D, () => pointEditor.OnInspectorGui(point, curve.IndexOf(point), BGPrivateField.GetSettings(curve))); + } + + public virtual void OnSceneGUI() + { + BGEditorUtility.Assign(ref pointIndicatorTransition, () => new BGTransition.SwayTransition(30, 30, 1)); + + BGSceneViewOverlay.DrawHandlesGuiTexture(BGEditorUtility.GetSceneViewPosition(point.PositionWorld), pointIndicatorTransition, pointSelectedTexture); + + + curveEditor.OnSceneGUI(); + + // animation is off for now +// SceneView.RepaintAll(); + } + + [DrawGizmo(GizmoType.Selected)] + public static void DrawGizmos(BGCurve curve, GizmoType gizmoType) + { + BGCurveEditor.DrawGizmos(curve, gizmoType); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs.meta new file mode 100644 index 0000000..45e0020 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurvePointGOEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 252e4a88e6bc93a47ba0fce8ecbba329 +timeCreated: 1476925566 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs new file mode 100644 index 0000000..c6ee651 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs @@ -0,0 +1,87 @@ +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + [CustomEditor(typeof(BGCurveReferenceToPoint))] + public class BGCurveReferenceToPointEditor : BGCurvePointGOEditor + { + private BGCurveReferenceToPoint pointReference; + + private BGTransformMonitor transformMonitor; + + protected override BGCurvePointI Point + { + get { return pointReference.Point; } + } + + protected override void OnEnable() + { + pointReference = (BGCurveReferenceToPoint) target; + + var point = pointReference.Point; + if (!IsValid(point)) + { + //no need for it anymore + DestroyImmediate(pointReference); + return; + } + + var allComponents = pointReference.GetComponents(); + if (allComponents.Any(component => component != pointReference && component.Point == pointReference.Point)) + { + DestroyImmediate(pointReference); + return; + } + + transformMonitor = BGTransformMonitor.GetMonitor(pointReference.transform, transform => point.Curve.FireChange(null)); + + base.OnEnable(); + } + + public void OnDestroy() + { + if (transformMonitor != null) transformMonitor.Release(); + transformMonitor = null; + pointReference = null; + } + + + private static bool IsValid(BGCurvePointI point) + { + return point != null && point.Curve != null && point.Curve.IndexOf(point) >= 0; + } + + public override void OnInspectorGUI() + { + transformMonitor.CheckForChange(); + + var point = pointReference.Point; + + if (!IsValid(point)) return; + + BGEditorUtility.DisableGui(() => EditorGUILayout.TextField("BGCurve", point.Curve.gameObject.name)); + + base.OnInspectorGUI(); + } + + public override void OnSceneGUI() + { + var point = pointReference.Point; + + if (!IsValid(point)) return; + + transformMonitor.CheckForChange(); + + base.OnSceneGUI(); + } + + [DrawGizmo(GizmoType.Selected)] + public new static void DrawGizmos(BGCurve curve, GizmoType gizmoType) + { + BGCurvePointGOEditor.DrawGizmos(curve, gizmoType); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs.meta new file mode 100644 index 0000000..c82ad65 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGCurveReferenceToPointEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 559b4471bb9f69d42b854d355126983a +timeCreated: 1477988941 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs new file mode 100644 index 0000000..70f08e3 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs @@ -0,0 +1,189 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Editor +{ + public static class BGNewPointPositionManager + { + //multiply tangent by this constant for new points, inserted after all points. + private const float DistanceToControlMultiplier = .2f; + + //multiply tangent by this constant for points, inserted between 2 existing points. + private const float DistanceToTangentMultiplier = .05f; + + //multiply tangent by this constant for points, which positions can not be derived + private const float DistanceToTangentNoDataMultiplier = 1.5f; + + private static BGCurvePoint point; + + public static BGCurvePoint CreatePoint(Vector3 position, BGCurve curve, BGCurvePoint.ControlTypeEnum controlType, int parts, bool ensureNew) + { + float distanceToPreviousPoint; + float distanceToNextPoint; + return CreatePoint(position, curve, controlType, parts, out distanceToPreviousPoint, out distanceToNextPoint, ensureNew); + } + + public static BGCurvePoint CreatePoint(Vector3 position, BGCurve curve, BGCurvePoint.ControlTypeEnum controlType, int parts, out float distanceToPreviousPoint, out float distanceToNextPoint, + bool ensureNew) + { + distanceToPreviousPoint = -1; + distanceToNextPoint = -1; + + if (curve.PointsCount == 0) + { + //first point + Vector3 control; + switch (curve.Mode2D) + { + case BGCurve.Mode2DEnum.YZ: + control = Vector3.forward; + break; + default: + // BGCurve.Mode2DEnum.XY: + // BGCurve.Mode2DEnum.Off: + // BGCurve.Mode2DEnum.XZ: + control = Vector3.right; + break; + } + return curve.CreatePointFromLocalPosition(curve.ToLocal(position), controlType, control, -control); + } + + parts = Mathf.Clamp(parts, 1, 50); + + //we no need no events (maybe check if point was actually added to a curve for events firing?) + var oldSuppress = curve.SupressEvents; + curve.SupressEvents = true; + + //create a point with no controls first + BGCurvePoint newPoint; + if (ensureNew) + { + newPoint = curve.CreatePointFromWorldPosition(position, BGCurvePoint.ControlTypeEnum.Absent); + } + else + { + if (point == null || point.Curve != curve) point = curve.CreatePointFromWorldPosition(position, BGCurvePoint.ControlTypeEnum.Absent); + newPoint = point; + newPoint.PositionWorld = position; + newPoint.ControlFirstLocal = Vector3.zero; + newPoint.ControlSecondLocal = Vector3.zero; + } + + if(curve.Mode2DOn) curve.Apply2D(newPoint); + + //adjacent points + var previousPoint = curve[curve.PointsCount - 1]; + var nextPoint = curve.Closed ? curve[0] : null; + + //direction + var tangent = BGEditorUtility.CalculateTangent(newPoint, previousPoint, nextPoint, 1/(float) parts); + if (tangent.sqrMagnitude < 0.0001f) + { + //whatever + switch (curve.Mode2D) + { + case BGCurve.Mode2DEnum.Off: + case BGCurve.Mode2DEnum.XY: + case BGCurve.Mode2DEnum.XZ: + tangent = Vector3.right; + break; + case BGCurve.Mode2DEnum.YZ: + tangent = Vector3.up; + break; + } + } + + //length + distanceToPreviousPoint = BGEditorUtility.CalculateDistance(previousPoint, newPoint, parts); + float minDistance; + if (nextPoint != null) + { + distanceToNextPoint = BGEditorUtility.CalculateDistance(newPoint, nextPoint, parts); + minDistance = Math.Min(distanceToPreviousPoint, distanceToNextPoint); + } + else + { + minDistance = distanceToPreviousPoint; + } + var length = minDistance*DistanceToControlMultiplier; + + + //we need local tangent for controls + tangent = curve.ToLocalDirection(tangent); + + + + newPoint.ControlSecondLocal = tangent*length; + + newPoint.ControlFirstLocal = -newPoint.ControlSecondLocal; + + + newPoint.ControlType = controlType; + + curve.SupressEvents = oldSuppress; + return newPoint; + } + + public static BGCurvePoint InsertBefore(BGCurve curve, int index, BGCurvePoint.ControlTypeEnum controlType, int parts) + { + var newPoint = CreatePointByPointsCount(curve, controlType); + if (newPoint != null) return newPoint; + + if (index == 0 && !curve.Closed) + return InsertNoData(curve, controlType, BGEditorUtility.CalculateTangent(curve[0], curve[1], 0f), curve[0].ControlFirstLocal, curve[0].PositionWorld, false); + + return CreatePointBetween(curve, index == 0 ? curve[curve.PointsCount - 1] : curve[index - 1], curve[index], parts, controlType); + } + + + public static BGCurvePoint InsertAfter(BGCurve curve, int index, BGCurvePoint.ControlTypeEnum controlType, int parts) + { + var newPoint = CreatePointByPointsCount(curve, controlType); + if (newPoint != null) return newPoint; + + var pointsCount = curve.PointsCount; + if (index == pointsCount - 1 && !curve.Closed) + { + var lastPoint = curve[pointsCount - 1]; + return InsertNoData(curve, controlType, BGEditorUtility.CalculateTangent(curve[pointsCount - 2], lastPoint, 1f), lastPoint.ControlSecondLocal, lastPoint.PositionWorld, true); + } + + return CreatePointBetween(curve, curve[index], index == pointsCount - 1 ? curve[0] : curve[index + 1], parts, controlType); + } + + private static BGCurvePoint CreatePointByPointsCount(BGCurve curve, BGCurvePoint.ControlTypeEnum controlType) + { + var pointsCount = curve.PointsCount; + + switch (pointsCount) + { + case 0: + throw new UnityException("You can not use this method with no points on the curve. pointsCount==0"); + case 1: + return curve.CreatePointFromLocalPosition(Vector3.forward, controlType, Vector3.right, Vector3.left); + } + return null; + } + + private static BGCurvePoint InsertNoData(BGCurve curve, BGCurvePoint.ControlTypeEnum controlType, Vector3 tangent, Vector3 control, Vector3 positionWorld, bool inverseTangent) + { + var controlMagnitude = control.magnitude; + if (controlMagnitude < 1) controlMagnitude = 1; + + var pos = positionWorld - tangent*controlMagnitude*DistanceToTangentNoDataMultiplier*(inverseTangent ? -1 : 1); + + return curve.CreatePointFromWorldPosition(pos, controlType, pos - tangent, pos + tangent); + } + + private static BGCurvePoint CreatePointBetween(BGCurve curve, BGCurvePointI previousPoint, BGCurvePointI nextPoint, int parts, BGCurvePoint.ControlTypeEnum controlType) + { + var newPos = BGEditorUtility.CalculatePosition(previousPoint, nextPoint, .5f); + var tangent = BGEditorUtility.CalculateTangent(previousPoint, nextPoint, .5f); + + var scaledTangent = tangent*DistanceToTangentMultiplier*BGEditorUtility.CalculateDistance(previousPoint, nextPoint, parts); + + return curve.CreatePointFromLocalPosition(curve.ToLocal(newPos), controlType, curve.ToLocalDirection(-scaledTangent), curve.ToLocalDirection(scaledTangent)); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs.meta new file mode 100644 index 0000000..9a921a4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGNewPointPositionManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aec4164ed8f499945a786507eac50af5 +timeCreated: 1472342782 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs new file mode 100644 index 0000000..75e76ab --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs @@ -0,0 +1,174 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGRectangularSelection + { + private const int BorderTextureSize = 8; + private static readonly Color BorderColor = new Color32(255, 255, 255, 100); + + private Texture2D back; + private readonly Texture2D borderHorizontal; + private readonly Texture2D borderVertical; + + private readonly BGCurve curve; + private readonly BGCurveEditorPointsSelection selection; + private readonly BGCurveEditor editor; + + private Vector2 start; + private bool selectionWasMade; + public bool IsOn { get; private set; } + + private Color backColor = BGCurveSettingsForEditor.ColorForRectangularSelection; + + public BGRectangularSelection(BGCurveEditor editor, BGCurveEditorPointsSelection selection) + { + this.editor = editor; + this.selection = selection; + curve = editor.Curve; + + borderHorizontal = CreateBorder(false); + borderVertical = CreateBorder(true); + } + + private Texture2D CreateBorder(bool vertical) + { + var texture = vertical ? new Texture2D(1, BorderTextureSize) : new Texture2D(BorderTextureSize, 1); + + var noColor = new Color(); + for (var i = 0; i < BorderTextureSize; i++) + { + var color = i > 3 ? noColor : BorderColor; + + if (vertical) texture.SetPixel(0, i, color); + else texture.SetPixel(i, 0, color); + } + texture.Apply(false); + return texture; + } + + + public void On() + { + IsOn = true; + selectionWasMade = false; + start = Event.current.mousePosition; + SceneView.RepaintAll(); + + //colors and texture + if (back == null || backColor != BGCurveSettingsForEditor.ColorForRectangularSelection) + { + backColor = BGCurveSettingsForEditor.ColorForRectangularSelection; + back = BGEditorUtility.Texture1X1(backColor); + } + } + + public void Off() + { + if (!IsOn) return; + IsOn = false; + + if (selectionWasMade) return; + + if (selection.HasSelected()) + { + selection.Clear(); + SceneView.RepaintAll(); + } + } + + public void Process(Event currentEvent) + { + if (!IsOn) return; + + var end = currentEvent.mousePosition; + + //we check if mouse pointer was moved + if (!selectionWasMade && (end - start).sqrMagnitude > 1) selectionWasMade = true; + + if (!selectionWasMade) return; + + var rect = new Rect(Math.Min(start.x, end.x), Math.Min(start.y, end.y), Math.Abs(start.x - end.x), Math.Abs(start.y - end.y)); + + //========================= Model + //update points + UpdatePoints(rect); + + //========================= UI + Ui(rect); + + SceneView.RepaintAll(); + editor.Repaint(); + } + + private void UpdatePoints(Rect rect) + { + var sceneViewHeight = BGEditorUtility.GetSceneViewHeight(); + + var math = editor.Math; + + curve.ForEach((point, index, count) => + { + //add or remove from selection + if (rect.Contains(BGEditorUtility.GetSceneViewPosition(math.GetPosition(index), sceneViewHeight))) selection.Add(point); + else selection.Remove(point); + }); + + if (!selection.Changed) return; + + selection.Reset(); + } + + + private void Ui(Rect rect) + { + Handles.BeginGUI(); + + var size = rect.size; + var width = Mathf.FloorToInt(Math.Abs(size.x)); + var height = Mathf.FloorToInt(Math.Abs(size.y)); + if (width == 0 || height == 0) return; + + //------ back + GUI.DrawTexture(rect, back, ScaleMode.StretchToFill); + + //------ borders + //top + DrawBorder(new Rect(rect) {width = width, height = height == 1 ? 1 : 2}, false); + if (height <= 2) return; + + //bottom + DrawBorder(new Rect(rect) {y = rect.yMax - 2, width = width, height = 2}, false); + + if (width <= 4 || height <= 4) return; + + //left + DrawBorder(new Rect(rect) {width = 2}, true); + //right + DrawBorder(new Rect(rect) {x = rect.xMax - 2, width = 2}, true); + + Handles.EndGUI(); + } + + private void DrawBorder(Rect rect, bool vertical) + { + float widthScale = 1, heightScale = 1; + Texture2D texture; + if (vertical) + { + texture = borderVertical; + heightScale = rect.height/BorderTextureSize; + } + else + { + texture = borderHorizontal; + widthScale = rect.width/BorderTextureSize; + } + + GUI.DrawTextureWithTexCoords(rect, texture, new Rect(0, 0, widthScale, heightScale)); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs.meta new file mode 100644 index 0000000..68f8ff0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Curve/BGRectangularSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 16379b7aa6eabc740a4a2086e6c30bff +timeCreated: 1472269887 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra.meta new file mode 100644 index 0000000..e44154d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b5ef7e0d16af7b04b9ae146bb3d792c6 +folderAsset: yes +timeCreated: 1473056753 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs new file mode 100644 index 0000000..2e2bfb5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs @@ -0,0 +1,340 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCcAddWindow : EditorWindow + { + private const int IconSize = 48; + private const int HeaderHeight = 12; + + private static readonly Vector2 WindowSize = new Vector2(700, 400); + + + private static Tree tree; + + private static Texture2D headerImage; + private static Texture2D noImage; + private static Texture2D boxWithBorderImage; + private static GUIStyle nameStyle; + private static GUIStyle disabledStyle; + private static GUIStyle filterStyle; + + private static Action action; + private static BGCcAddWindow instance; + + private static int tab; + private Vector2 scrollPos; + + internal static void Open(BGCurve curve, Action action, Type dependsOnType = null) + { + BGCcAddWindow.action = action; + + noImage = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCcNoImage123); + + tree = new Tree(curve, dependsOnType); + + instance = BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + //styles + AssighSyles(); + + + //draw header + DrawHeader(); + + + if (tree.Roots.Count == 0) + { + Message("Did not find any component"); + } + else + { + BGEditorUtility.VerticalBox(() => + { + scrollPos = EditorGUILayout.BeginScrollView(scrollPos); + tree.OnInspectorGui(); + EditorGUILayout.EndScrollView(); + + }); + } + } + + private static void Message(string message) + { + EditorGUILayout.LabelField(message, new GUIStyle("Label") + { + fontSize = 22, + wordWrap = true + }, GUILayout.Height(200)); + } + + private static void DrawHeader() + { + BGEditorUtility.HorizontalBox(() => { GUILayout.Label(" "); }); + GUI.DrawTexture(GUILayoutUtility.GetLastRect(), boxWithBorderImage); + + var rect = new Rect(new Vector2(40, 10), new Vector2(headerImage.width*HeaderHeight/(float) headerImage.height, HeaderHeight)); + GUI.DrawTexture(rect, headerImage); + + if (tree.DependsOnType != null) + GUI.Label(new Rect(rect) {x = rect.xMax + 10, height = 16, width = 400, y = rect.y - 2}, "Filter: Dependent on [" + tree.DependsOnType.Name + "]", filterStyle); + } + + private static void AssighSyles() + { + BGEditorUtility.Assign(ref nameStyle, () => new GUIStyle("Label") + { + alignment = TextAnchor.MiddleCenter, + clipping = TextClipping.Clip, + wordWrap = true, + fontStyle = FontStyle.Bold, + normal = + { + textColor = Color.black, + background = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWithBorder123) + } + }); + BGEditorUtility.Assign(ref disabledStyle, () => new GUIStyle("Label") + { + alignment = TextAnchor.MiddleCenter, + normal = + { + textColor = Color.red, + background = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWithBorder123) + } + }); + BGEditorUtility.Assign(ref filterStyle, () => new GUIStyle("Label") + { + fontStyle = FontStyle.Bold, + normal = + { + textColor = Color.red + } + }); + BGEditorUtility.Assign(ref headerImage, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCurveComponents123)); + BGEditorUtility.Assign(ref boxWithBorderImage, () => BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWithBorder123)); + } + + + //thanks to Bunny83 + public static Type[] GetAllSubTypes(Type targetType) + { + var result = new List(); + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + foreach (var assembly in assemblies) result.AddRange(from type in assembly.GetTypes() where type.IsClass where !type.IsAbstract where type.IsSubclassOf(targetType) select type); + return result.ToArray(); + } + + //=================================================================== Inner classes + + //================================================= Tree + private sealed class Tree : BGTreeView + { + private readonly Dictionary type2Node = new Dictionary(); + + public BGCurve Curve { get; private set; } + + public Type DependsOnType { get; private set; } + + public Tree(BGCurve curve, Type dependsOnType) + : base(new Config(0, (int) (IconSize*.9f), (int) (IconSize*.5f), 2, 16)) + { + Curve = curve; + DependsOnType = dependsOnType; + + //------------- load all BGCc subclasses + var typesList = GetAllSubTypes(typeof (BGCc)); + foreach (var node in from type in typesList + let descriptor = BGCc.GetDescriptor(type) + let single = BGCc.IsSingle(type) + select new CcNode(this, descriptor != null ? new CcData(type, single, descriptor) : new CcData(type, single, type.Name))) + { + try + { + node.CcData.ParentType = BGCc.GetParentClass(node.CcData.Type); + } + catch (Exception e) + { + Debug.LogException(e); + continue; + } + type2Node[node.CcData.Type] = node; + } + + foreach (var node in type2Node.Values) if (!node.Processed) node.ProcessStructure(); + } + + public CcNode this[Type type] + { + get { return type2Node[type]; } + } + + public override void OnInspectorGui() + { + if (DependsOnType == null) base.OnInspectorGui(); + else + { + var node = type2Node[DependsOnType]; + if (node == null) + { + Message("Error: Can not find component " + DependsOnType); + } + else if (!node.HasChildren) + { + Message("Component [" + node.CcData.Name + "] does not have any children"); + } + else + { + node.OnInspectorGui(); + } + } + } + } + + //================================================= Tree node + private sealed class CcNode : BGTreeNode + { + private readonly CcData ccData; + private readonly bool singleAndAdded; + private Texture2D addIcon; + + + private GUIStyle nameStyle; + private GUIStyle descriptionStyle; + private GUIStyle addedStyle; + + + public CcData CcData + { + get { return ccData; } + } + + public bool Processed { get; private set; } + + private Tree MyTree + { + get { return (Tree) Tree; } + } + + public CcNode(Tree tree, CcData ccData) + : base(tree) + { + this.ccData = ccData; + singleAndAdded = ccData.Single && tree.Curve.GetComponent(ccData.Type) != null; + } + + public override void OnInspectorGuiInternal(int level) + { + const int offset = 2; + + if (singleAndAdded) GUI.enabled = false; + if (GUILayout.Button("", GUILayout.Height(IconSize + offset*2))) + { + action(ccData.Type); + instance.Close(); + } + if (singleAndAdded) GUI.enabled = true; + + // Draw on top of the button (no more Layout stuff) + var buttonRect = GUILayoutUtility.GetLastRect(); + + + var iconRect = new Rect(buttonRect.x + offset, buttonRect.y + offset, IconSize, IconSize); + GUI.DrawTexture(iconRect, ccData.Icon); + +/* + //already added + if (singleAndAdded) GUI.DrawTexture(new Rect(iconRect) {x = iconRect.xMax + offset, width = offset*8}, + BGEUtil.Assign(ref addIcon, () => BGEUtil.LoadTexture2D(BGEUtil.Image.BGCcAdded123))); +*/ + if (singleAndAdded) + { + var oldMatrix = GUI.matrix; + BGEditorUtility.Assign(ref addedStyle, () => new GUIStyle("Box") + { + fontSize = 14, + fontStyle = FontStyle.Bold, + normal = {textColor = Color.red, background = BGEditorUtility.Texture1X1(new Color(1,0,0,.2f))} + }); + var content = new GUIContent("added"); + var labelSize = addedStyle.CalcSize(content); + var pivotPoint = new Vector2(iconRect.xMax, iconRect.center.y) + new Vector2(labelSize.y*.5f, 0); + GUIUtility.RotateAroundPivot(-90, pivotPoint); + GUI.Label(new Rect(pivotPoint - labelSize*.5f, labelSize), content, addedStyle); + GUI.matrix = oldMatrix; + } + + + //name + var nameStartX = iconRect.xMax + offset*12; + var nameRect = new Rect(nameStartX, iconRect.y, buttonRect.width - nameStartX, IconSize/3f); + EditorGUI.LabelField(nameRect, ccData.Name, BGEditorUtility.Assign(ref nameStyle, () => new GUIStyle("Label") {fontStyle = FontStyle.Bold})); + + //description + var descriptionRect = new Rect(nameStartX, nameRect.yMax + offset, nameRect.width, IconSize*2/3f); + EditorGUI.LabelField(descriptionRect, ccData.Description, BGEditorUtility.Assign(ref descriptionStyle, () => new GUIStyle("Label") {wordWrap = true})); + } + + + public override void ProcessStructure() + { + if (ccData.ParentType == null) + { + MyTree.Roots.Add(this); + } + else + { + Parent = MyTree[CcData.ParentType]; + } + Processed = true; + } + } + + //================================================= CC data + private sealed class CcData + { + public Type Type { get; private set; } + + public Type ParentType { get; set; } + + public string Description { get; private set; } + + public string Name { get; private set; } + + public Texture2D Icon { get; private set; } + + public bool Single { get; private set; } + + public CcData(Type type, bool single, BGCc.CcDescriptor ccDescriptor) + : this(type, single, ccDescriptor.Name) + { + Description = ccDescriptor.Description; + if (!string.IsNullOrEmpty(ccDescriptor.Image)) Icon = BGEditorUtility.LoadCcTexture2D(ccDescriptor.Image) ?? noImage; + } + + public CcData(Type type, bool single, string name) + { + Type = type; + + Name = name; + Icon = noImage; + Single = single; + + if (string.IsNullOrEmpty(Name)) Name = Type.Name; + } + + public override string ToString() + { + return Type.Name + ": " + Name; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs.meta new file mode 100644 index 0000000..2d35f25 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcAddWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a20bb7d90ed1356459501898772114a8 +timeCreated: 1472483253 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs new file mode 100644 index 0000000..2a40676 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs @@ -0,0 +1,54 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCcChangeNameWindow : EditorWindow + { + private static readonly Vector2 WindowSize = new Vector2(400, 50); + + private static BGCc current; + private static string ccName; + private static BGCcChangeNameWindow instance; + + + private Vector2 scrollPos; + private GUIStyle boxStyle; + + + internal static void Open(BGCc current) + { + BGCcChangeNameWindow.current = current; + + ccName = current.CcName; + + instance = BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + BGEditorUtility.SwapLabelWidth(60, () => + { + BGEditorUtility.Horizontal(BGEditorUtility.Assign(ref boxStyle, () => new GUIStyle("Box") {padding = new RectOffset(8, 8, 8, 8)}), () => + { + ccName = EditorGUILayout.TextField("Name", ccName); + + GUILayout.Space(8); + + if (GUILayout.Button("Save and Close")) + { + if (!string.Equals(ccName, current.CcName)) + { + Undo.RecordObject(current, "Change name"); + current.CcName = ccName; + EditorUtility.SetDirty(current); + } + instance.Close(); + } + }); + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs.meta new file mode 100644 index 0000000..210ac3a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChangeNameWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ec708301478213148abdd926189518ae +timeCreated: 1473063970 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs new file mode 100644 index 0000000..0217c41 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public abstract class BGCcChoseDrawer : BGPropertyDrawer where T : BGCc + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // this is a required startup call + SetUp(position, property, label, () => + { + if (!(property.objectReferenceValue != null)) + { + DrawProperty(property); + } + else + { + var cc = (T) property.objectReferenceValue; + + var allPossibleCcList = cc.GetComponents(cc.GetType()); + + if (allPossibleCcList.Length < 2) + { + DrawProperty(property); + } + else + { + var buttonContent = new GUIContent(BGEditorUtility.Trim(cc.CcName, 16), "Object has multiple components attached. Click to chose."); + + var buttonWidth = GUI.skin.button.CalcSize(buttonContent).x; + + Rect.width -= buttonWidth; + EditorGUI.PropertyField(Rect, property); + + + if (GUI.Button(new Rect(Rect) {width = buttonWidth, x = Rect.xMax}, buttonContent)) + { + BGCcChoseWindow.Open(cc, allPossibleCcList, newCc => + { + Undo.RecordObject(property.serializedObject.targetObject, "Cc changed"); + property.objectReferenceValue = newCc; + property.serializedObject.ApplyModifiedProperties(); + EditorUtility.SetDirty(property.serializedObject.targetObject); + }); + } + } + } + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs.meta new file mode 100644 index 0000000..16c5a51 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 58d3f7af09907cf429f8934b2cb7eb35 +timeCreated: 1473062560 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs new file mode 100644 index 0000000..f850246 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs @@ -0,0 +1,60 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCcChoseWindow : EditorWindow + { + private static readonly Vector2 WindowSize = new Vector2(400, 200); + + private static Action action; + private static BGCcChoseWindow instance; + private static BGCc current; + private static Component[] availableList; + private static GUIStyle boxStyle; + + + private Vector2 scrollPos; + + + internal static void Open(BGCc current, Component[] availableList, Action action) + { + BGCcChoseWindow.action = action; + BGCcChoseWindow.current = current; + BGCcChoseWindow.availableList = availableList; + + instance = BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + scrollPos = EditorGUILayout.BeginScrollView(scrollPos); + + ShowButtons(); + + EditorGUILayout.EndScrollView(); + } + + private static void ShowButtons() + { + BGEditorUtility.Vertical(BGEditorUtility.Assign(ref boxStyle, () => new GUIStyle("Box") {padding = new RectOffset(8, 8, 8, 8)}), () => + { + for (var i = 0; i < availableList.Length; i++) + { + var cc = (BGCc) availableList[i]; + + BGEditorUtility.DisableGui(() => + { + if (!GUILayout.Button(cc.CcName)) return; + + + action(cc); + instance.Close(); + }, cc == current); + } + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs.meta new file mode 100644 index 0000000..d56fa59 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCcChoseWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3afdd426232a2c34f8f50115b9d5c751 +timeCreated: 1473060319 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs new file mode 100644 index 0000000..4edfc0f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs @@ -0,0 +1,54 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + // idea.. partially copy/pasted from BGCcChoseWindow + public class BGChoseComponentWindow : EditorWindow + { + private static readonly Vector2 WindowSize = new Vector2(400, 400); + + private static Action action; + private static BGChoseComponentWindow instance; + private static Component current; + private static GUIStyle boxStyle; + + + private Vector2 scrollPos; + + + internal static void Open(Component current, Action action) + { + BGChoseComponentWindow.action = action; + BGChoseComponentWindow.current = current; + + instance = BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + scrollPos = EditorGUILayout.BeginScrollView(scrollPos); + + BGEditorUtility.VerticalBox(() => + { + var allComponents = current.GetComponents(typeof (Component)); + foreach (var component in allComponents) + { + var comp = component; + BGEditorUtility.DisableGui(() => + { + if (GUILayout.Button(comp.ToString(), GUILayout.Width(380))) + { + action(comp); + instance.Close(); + } + }, current == component); + } + }); + + EditorGUILayout.EndScrollView(); + + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs.meta new file mode 100644 index 0000000..595189b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGChoseComponentWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3164790b79db83d40a1b9a2746cf9b6a +timeCreated: 1475286949 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs new file mode 100644 index 0000000..7d1d7a8 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs @@ -0,0 +1,43 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + // idea.. partially copy/pasted from BGCcChoseWindow + public class BGCurveChosePointWindow : EditorWindow + { + private static readonly Vector2 WindowSize = new Vector2(400, 40); + + private static Action action; + private static BGCurveChosePointWindow instance; + private static BGCurve curve; + private static int current; + + internal static void Open(int current, BGCurve curve, Action action) + { + BGCurveChosePointWindow.action = action; + BGCurveChosePointWindow.current = current; + BGCurveChosePointWindow.curve = curve; + + instance = BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + BGEditorUtility.HorizontalBox(() => + { + EditorGUILayout.LabelField("Point index", GUILayout.Width(100)); + var newValue = EditorGUILayout.IntSlider(current, 0, curve.PointsCount - 1, GUILayout.Width(200)); + if (current != newValue) + { + current = newValue; + action((BGCurvePointComponent) curve[newValue]); + } + + if (GUILayout.Button("Close", GUILayout.Width(50))) instance.Close(); + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs.meta new file mode 100644 index 0000000..0466a3b --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurveChosePointWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 47003328321ae5a4d8ceaf8ab44b555e +timeCreated: 1475061925 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs new file mode 100644 index 0000000..24b00ce --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs @@ -0,0 +1,82 @@ +using BansheeGz.BGSpline.Curve; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + //draws a curve in editor + public class BGCurvePainterGizmo + { + public BGCurveBaseMath Math { get; private set; } + + private readonly BGTransformMonitor transformMonitor; + + public BGCurvePainterGizmo(BGCurveBaseMath math, bool monitorTransform = false) + { + Math = math; + if (monitorTransform) transformMonitor = BGTransformMonitor.GetMonitor(math.Curve); + } + + public virtual void DrawCurve() + { + if (transformMonitor != null) transformMonitor.CheckForChange(); + + var settings = BGPrivateField.GetSettings(Math.Curve); + + BGEditorUtility.SwapGizmosColor(settings.LineColor, () => + { + //======================================== Draw section + for (var i = 0; i < Math.SectionsCount; i++) DrawSection(Math[i]); + }); + + + //======================================== Draw spheres + if (settings.ShowSpheres) + { + BGEditorUtility.SwapGizmosColor(settings.SphereColor, () => + { + BeforeDrawingSpheres(settings); + for (var i = 0; i < Math.Curve.PointsCount; i++) DrawSphere(settings, Math.GetPosition(i), settings.SphereRadius); + AfterDrawingSpheres(); + }); + } + } + + public void Dispose() + { + if (Math != null) Math.Dispose(); + if (transformMonitor != null) transformMonitor.Release(); + } + + protected virtual void BeforeDrawingSpheres(BGCurveSettings settings) + { + } + + protected virtual void AfterDrawingSpheres() + { + } + + public virtual void DrawSphere(BGCurveSettings settings, Vector3 pos, float sphereRadius) + { + Gizmos.DrawSphere(pos, sphereRadius); + } + + protected void DrawSection(BGCurveBaseMath.SectionInfo section) + { + if (section.PointsCount < 2) return; + + var points = section.Points; + var prevPoint = points[0]; + for (var i = 1; i < points.Count; i++) + { + var nexPoint = points[i]; + DrawLine(prevPoint.Position, nexPoint.Position); + prevPoint = nexPoint; + } + } + + protected virtual void DrawLine(Vector3 from, Vector3 to) + { + Gizmos.DrawLine(from, to); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs.meta new file mode 100644 index 0000000..42988a0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterGizmo.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 61f851c212ea4794cb98000e86717feb +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs new file mode 100644 index 0000000..f3d18fd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs @@ -0,0 +1,42 @@ +using BansheeGz.BGSpline.Curve; +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCurvePainterHandles : BGCurvePainterGizmo + { + private Color tempColorBeforeSpheresDraw; + + public BGCurvePainterHandles(BGCurveBaseMath math) + : base(math) + { + } + + public override void DrawCurve() + { + BGEditorUtility.SwapHandlesColor(BGPrivateField.GetSettings(Math.Curve).LineColor, () => base.DrawCurve()); + } + + protected override void BeforeDrawingSpheres(BGCurveSettings settings) + { + tempColorBeforeSpheresDraw = Handles.color; + Handles.color = settings.SphereColor; + } + + protected override void AfterDrawingSpheres() + { + Handles.color = tempColorBeforeSpheresDraw; + } + + public override void DrawSphere(BGCurveSettings settings, Vector3 pos, float sphereRadius) + { + Handles.SphereCap(0, pos, Quaternion.identity, sphereRadius*2); + } + + protected override void DrawLine(Vector3 @from, Vector3 to) + { + Handles.DrawLine(from, to); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs.meta new file mode 100644 index 0000000..1fac635 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGCurvePainterHandles.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aee191ffbacf6ee47aab2ecea5833778 +timeCreated: 1458655215 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs new file mode 100644 index 0000000..0101c04 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs @@ -0,0 +1,70 @@ +using BansheeGz.BGSpline.Curve; +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + // Currently this file is not used + // custom drawer for handles settings + // idea.. code is still messy after refactoring + [CustomPropertyDrawer(typeof (BGCurveSettings.SettingsForHandles))] + public class BGHandlesSettingsDrawer : BGPropertyDrawer + { + //do not remove. It indicates 5 lines are used + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return base.GetPropertyHeight(property, label)*5; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + // this is required startup call + SetUp(position, property, label, () => + { + //occupy 2 lines + SetHeight(Height*2); + + //this call will set controlRect=space for control itself (without label) + PrefixLabel("Remove"); + + //set cursor to the start of just allocated space for control + SetCursor(ControlRect.x, ControlRect.y); + + //this block will draw checkboxes for Remove options + Indent(0, () => + { + //------------------------------------------- first line + LineWithRemoveControls(property, Height, 15, new[] {"X", "Y", "Z"}, new[] {"RemoveX", "RemoveY", "RemoveZ"}); + + //------------------------------------------- second line + SetCursor(ControlRect.x, CursorY + Height); + LineWithRemoveControls(property, Height, 20, new[] {"XZ", "XY", "YZ"}, new[] {"RemoveXZ", "RemoveXY", "RemoveYZ"}); + }); + + //------------------------------------------- third line (Scale Axis) + //reset height to standard 1 line + SetHeight(Height); + //skip 2 lines, used for checkboxes + NextLine(2); + DrawRelativeProperty(property, "Scale Axis", "AxisScale"); + + //------------------------------------------- forth line (Scale Planes) + NextLine(); + DrawRelativeProperty(property, "Scale Planes", "PlanesScale"); + + //------------------------------------------- fifth line (Alpha) + NextLine(); + DrawRelativeProperty(property, "Alpha", "Alpha"); + }); + } + + private void LineWithRemoveControls(SerializedProperty property, float height, int labelWidth, string[] labels, string[] fields) + { + for (var i = 0; i < labels.Length; i++) + { + RelativePropertyByCursor(10, height, property, fields[i]); + LabelByCursor(labelWidth, height, labels[i]); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs.meta new file mode 100644 index 0000000..4cb9c81 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGHandlesSettingsDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 595f24c0eb8112744bbf9d8d45b91e06 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs new file mode 100644 index 0000000..ce34edd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs @@ -0,0 +1,102 @@ +using System; +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //idea.. code is very messy even after refactoring + //there are currently 2 strategies to draw- 1) by using labelRect + controlRect. 2) By using cursors. This is a total mess. + public class BGPropertyDrawer : PropertyDrawer + { + private const int Space = 5; + + //one line height + protected float Height; + + //space to use for property GUI + protected Rect Rect; + //space used for show Control calls + protected Rect ControlRect; + + //additional cursors for *ByCursor calls. + protected float CursorX; + protected float CursorY; + + // startUp (Required!) + protected void SetUp(Rect position, SerializedProperty property, GUIContent label, Action action) + { + Rect = position; + //do not remove base ref + Height = base.GetPropertyHeight(property, label); + EditorGUI.BeginProperty(position, label, property); + action(); + EditorGUI.EndProperty(); + } + + //helper with indents + protected void Indent(int indent, Action action) + { + var oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = indent; + action(); + EditorGUI.indentLevel = oldIndent; + } + + + //======================================================= By labelRect + controlRect + + protected void PrefixLabel(string message, string tooltip = null) + { + ControlRect = EditorGUI.PrefixLabel(Rect, GUIUtility.GetControlID(FocusType.Passive), new GUIContent(message, tooltip)); + } + + protected void DrawProperty(SerializedProperty property) + { +// PrefixLabel(property.displayName, property.tooltip); + EditorGUI.PropertyField(Rect, property); + } + + + protected bool RelativeProperty(SerializedProperty property, string name) + { + return EditorGUI.PropertyField(ControlRect, property.FindPropertyRelative(name), GUIContent.none); + } + + protected void DrawRelativeProperty(SerializedProperty property, string label, string propertyName, string tooltip = null) + { + PrefixLabel(label, tooltip); + Indent(0, () => RelativeProperty(property, propertyName)); + } + + + protected void SetHeight(float height) + { + Rect.height = height; + } + + protected void NextLine(int linesToSkip = 1) + { + Rect.y += Height*linesToSkip; + } + + + //======================================================= By Cursor + protected void RelativePropertyByCursor(int width, float height, SerializedProperty property, string name) + { + EditorGUI.PropertyField(new Rect(CursorX, CursorY, width, height), property.FindPropertyRelative(name), GUIContent.none); + CursorX += width + Space; + } + + protected void LabelByCursor(int width, float height, string label) + { + EditorGUI.LabelField(new Rect(CursorX, CursorY, width, height), label); + CursorX += width + Space; + } + + protected void SetCursor(float x, float y) + { + CursorX = x; + CursorY = y; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs.meta new file mode 100644 index 0000000..fc663ef --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGPropertyDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5b27947e37c1b494cbcf1ac8331c96a9 +timeCreated: 1471778173 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs new file mode 100644 index 0000000..6a652a3 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGTransformMonitor + { + private static readonly Queue Pool = new Queue(); + + private Vector3 position; + private Quaternion rotation; + private Vector3 scale; + + private Transform transform; + private Action changed; + + private BGTransformMonitor(Transform transform, Action changed) + { + Update(transform, changed); + } + + public static BGTransformMonitor GetMonitor(Transform transform, Action changed) + { + if (Pool.Count == 0) return new BGTransformMonitor(transform, changed); + + var monitor = Pool.Dequeue(); + monitor.transform = transform; + monitor.changed = changed; + + return monitor; + } + + public static BGTransformMonitor GetMonitor(BGCurve curve) + { + return GetMonitor(curve.transform, transform1 => { curve.FireChange(null); }); + } + + + public bool CheckForChange(bool skipAction = false) + { + if (Application.isPlaying || changed == null || transform == null) return false; + + if (position == transform.position && rotation == transform.rotation && scale == transform.lossyScale) return false; + + Update(); + + if (!skipAction) changed(transform); + + return true; + } + + public void Release() + { + transform = null; + changed = null; + + Pool.Enqueue(this); + } + + + private void Update(Transform transform, Action changed) + { + this.transform = transform; + this.changed = changed; + Update(); + } + + private void Update() + { + position = transform.position; + rotation = transform.rotation; + scale = transform.lossyScale; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs.meta new file mode 100644 index 0000000..0356d94 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Infra/BGTransformMonitor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 82b8689fcf20fad4dac3b2732079ad96 +timeCreated: 1474230021 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay.meta new file mode 100644 index 0000000..fd0c658 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 2e55235c43bc9794398e45f589fe1c1a +folderAsset: yes +timeCreated: 1472482844 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs new file mode 100644 index 0000000..a260e04 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs @@ -0,0 +1,52 @@ +using UnityEditor; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGOverlayMessage + { + private const float ShowTime = 1.5f; + + private string message; + private double started; + private bool showing; + + private GUIStyle style; + private readonly Rect rect = new Rect(10, 10, 400, 60); + + + //indicates the message should be shown + public void Display(string message) + { + this.message = message; + started = EditorApplication.timeSinceStartup; + showing = true; + } + + // call this every frame to find out if the message expired + public void Check() + { + if (showing && EditorApplication.timeSinceStartup - started > ShowTime) SceneView.RepaintAll(); + } + + // shows a message in the scene view + public void OnSceneGui() + { + if (!showing) return; + + if (EditorApplication.timeSinceStartup - started > ShowTime) showing = false; + + BGEditorUtility.Assign(ref style, () => new GUIStyle("Label") + { + alignment = TextAnchor.MiddleCenter, + richText = true, + normal = {textColor = Color.white, background = BGEditorUtility.Texture1X1(new Color32(0, 0, 0, 100))} + }); + + + Handles.BeginGUI(); + GUI.Label(rect, message, style); + Handles.EndGUI(); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs.meta new file mode 100644 index 0000000..8bf5800 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGOverlayMessage.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3fe7d907a5ebe0b4e8b4d4ed3a46608e +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs new file mode 100644 index 0000000..27ce19a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs @@ -0,0 +1,226 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //popup menu in SceneView + public class BGPopupMenu + { + private const int HeaderHeight = 16; + + + private readonly Texture2D menuItemBackgroundTexture; + private readonly Texture2D backTexture; + private readonly Texture2D selectedTexture; + private readonly Texture2D currentTexture; + + private readonly string title; + + + public Vector2 Point2DPosition; + public Vector3 Point3DPosition; + public bool Active; + public MenuItem ActiveItem; + + private float height; + private float width; + private Rect targetRect; + private BGTransition.SimpleTransition onTransition; + + private readonly List items = new List(); + private GUIStyle titleStyle; + + public BGPopupMenu(string title) + { + this.title = title; + menuItemBackgroundTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGMenuItemBackground123); + backTexture = BGEditorUtility.Texture1X1(new Color32(46, 144, 168, 80)); + selectedTexture = BGEditorUtility.Texture1X1(new Color32(0, 255, 0, 100)); + currentTexture = BGEditorUtility.Texture1X1(new Color32(200, 200, 200, 200)); + } + + public void Add(MenuItem item) + { + items.Add(item); + } + + public MenuItem Get(int index) + { + return items[index]; + } + + public virtual void On(Vector3 position) + { + if (Active) return; + + Active = true; + + onTransition = new BGTransition.SimpleTransition(.2, false); + Point3DPosition = position; + Point2DPosition = BGEditorUtility.GetSceneViewPosition(Point3DPosition); + + //target size (go first) + height = width = 0; + foreach (var size in items.Where(item => !item.Disabled).Select(item => item.Size)) + { + if (height < size.y*2) height = size.y*2; + width += size.x; + } + targetRect.size = new Vector2(width, height + HeaderHeight); + + + //target position (go second) + targetRect.x = Point2DPosition.x - targetRect.size.x*.5f; + targetRect.y = Point2DPosition.y - targetRect.size.y*.75f; + } + + public void OnGui(Event currentEvent) + { + if (!Active) return; + + var mousePosition = currentEvent.mousePosition; + + if (onTransition == null && !targetRect.Contains(mousePosition)) + { + Active = false; + SceneView.RepaintAll(); + return; + } + + BGEditorUtility.Assign(ref titleStyle, () => new GUIStyle("Label") + { + fontStyle = FontStyle.Bold, + alignment = TextAnchor.MiddleCenter, + normal = + { + textColor = Color.white, + background = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWithBorder123) + }, + }); + + Handles.BeginGUI(); + + if (onTransition != null && !onTransition.Tick()) + { + //animating transition + GUI.DrawTexture(new Rect(Vector2.Lerp(Point2DPosition, targetRect.position, onTransition.Ratio), targetRect.size*onTransition.Ratio), backTexture, ScaleMode.StretchToFill); + } + else + { + //ready + onTransition = null; + + GUI.DrawTexture(targetRect, backTexture, ScaleMode.StretchToFill); + GUI.Label(new Rect(targetRect) {height = HeaderHeight}, title, titleStyle); + + ActiveItem = null; + var cursor = targetRect.x; + + foreach (var item in items.Where(item => !item.Disabled)) + { + var itemRect = new Rect(cursor, targetRect.y + HeaderHeight, item.Size.x, item.Size.y); + var selected = itemRect.Contains(mousePosition); + + //if not separator + if (selected && item.Description != null) + { + ActiveItem = item; + + if (!currentEvent.control && item is MenuItemButton) ((MenuItemButton) item).Action(); + } + + //icon + if (item.Icon != null) + { + GUI.DrawTexture(itemRect, menuItemBackgroundTexture, ScaleMode.StretchToFill); + + if (selected) GUI.DrawTexture(itemRect, selectedTexture, ScaleMode.StretchToFill); + + GUI.DrawTexture(itemRect, item.Icon, ScaleMode.StretchToFill); + } + + if (item.Current) + { + GUI.DrawTexture(itemRect, currentTexture, ScaleMode.StretchToFill); + } + + cursor += itemRect.width; + } + } + + Handles.EndGUI(); + + if (!currentEvent.control) Active = false; + } + + //=================================================================================== menu items + //---------------------- abstract + public abstract class MenuItem + { + public abstract string Description { get; } + public abstract Texture2D Icon { get; } + public abstract Vector2 Size { get; } + + public bool Disabled; + + public bool Current; + } + + //---------------------- separator + public class MenuSeparator : MenuItem + { + private readonly Vector2 size = new Vector2(16, 32); + + public override string Description + { + get { return null; } + } + + public override Texture2D Icon + { + get { return null; } + } + + public override Vector2 Size + { + get { return size; } + } + } + + //---------------------- menu item + public class MenuItemButton : MenuItem + { + public readonly Action Action; + + private readonly Texture2D iconTexture; + private readonly string description; + private readonly Vector2 size = new Vector2(32, 32); + + + public override string Description + { + get { return description; } + } + + public override Texture2D Icon + { + get { return iconTexture; } + } + + public override Vector2 Size + { + get { return size; } + } + + public MenuItemButton(Texture2D iconTexture, string description, Action action) + { + this.iconTexture = iconTexture; + this.description = description; + Action = action; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs.meta new file mode 100644 index 0000000..da7e8b4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGPopupMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5da84aced639ead46b938408b8bc6a0c +timeCreated: 1472295379 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs new file mode 100644 index 0000000..e448905 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs @@ -0,0 +1,143 @@ +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //scene view context actions (Ctrl pressed) + //idea.. whole BGSceneViewOverlay thing needs to be refactored + public sealed class BGSceneViewOverlay + { + private static readonly string HeaderColor = BGEditorUtility.ToHex(new Color32(255, 255, 255, 255)); +// private static readonly string ErrorColor = ToHex(new Color32(122, 0, 0, 255)); + private static readonly string ErrorColor = BGEditorUtility.ToHex(new Color32(250, 207, 207, 255)); +// private static readonly string OkColor = ToHex(new Color32(0, 122, 0, 255)); + private static readonly string OkColor = BGEditorUtility.ToHex(new Color32(207, 250, 209, 255)); +// private static readonly string ActionColor = ToHex(new Color32(46, 143, 168, 255)); + private static readonly string ActionColor = BGEditorUtility.ToHex(Color.white); + + internal readonly BGCurveEditorPoints Editor; + private GUIStyle style; + + private readonly SceneAction[] actions; + + //some kind of standard trick + public BGEditorUtility.EventCanceller EventCanceller; + + public BGSceneViewOverlay(BGCurveEditorPoints editor, BGCurveEditorPointsSelection editorSelection) + { + Editor = editor; + + actions = new SceneAction[] + { + new BGSceneViewOverlayMenuSelection(this, editorSelection), + new BGSceneViewOverlayMenuPoint(this, editorSelection), + new BGSceneViewOverlayPointAddAtDistance(this), + new BGSceneViewOverlayPointAddSnap3D(this), + new BGSceneViewOverlayPointAddSnap2D(this) + }; + } + + private void Message(SceneAction action, Vector3 position, string message) + { + BGEditorUtility.SwapHandlesColor(new Color32(46, 143, 168, 255), () => + { + // idea.. some hacker's work that needs to be redone + var error = message.IndexOf(ErrorColor) != -1; + + Handles.Label(position, " " + + "" + + BGEditorUtility.ColorIt("Action[", HeaderColor) + + BGEditorUtility.ColorIt(action.Name, ActionColor) + + BGEditorUtility.ColorIt("] ", HeaderColor) + + (error ? ToError("Error") : ToOk("Ok")) + + "\r\n" + + message, style); + }); + } + + + public void Process(Event currentEvent) + { + if (currentEvent.type == EventType.mouseUp) BGEditorUtility.Release(ref EventCanceller); + + if (currentEvent.shift && !currentEvent.control) return; + + Vector3 mousePosition = Event.current.mousePosition; + + var pixelHeight = SceneView.currentDrawingSceneView.camera.pixelHeight; + var pixelWidth = SceneView.currentDrawingSceneView.camera.pixelWidth; + mousePosition.y = pixelHeight - mousePosition.y; + if (mousePosition.x < 0 || mousePosition.y < 0 || mousePosition.x > pixelWidth || mousePosition.y > pixelHeight) return; + + + BGEditorUtility.Assign(ref style, () => new GUIStyle("Label") + { + padding = new RectOffset(4, 4, 4, 4), + border = new RectOffset(4, 4, 4, 4), + fontStyle = FontStyle.Bold, + richText = true, + normal = new GUIStyleState + { + textColor = Color.white, + background = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGBoxWithBorder123) + } + }); + + + foreach (var action in actions) + { + var position = Vector3.zero; + string message = null; + + var seized = action.Seize(currentEvent, ref position, ref message); + if (!seized) continue; + + if (message != null) Message(action, position, message); + break; + } + + if (currentEvent.control && currentEvent.type != EventType.Repaint) SceneView.RepaintAll(); + } + + public static string ToError(string error) + { + return BGEditorUtility.ColorIt(error, ErrorColor); + } + + public static string ToOk(string okMessage) + { + return BGEditorUtility.ColorIt(okMessage, OkColor); + } + + //identify particular action + public abstract class SceneAction + { + protected readonly BGSceneViewOverlay overlay; + + public abstract string Name { get; } + + protected SceneAction(BGSceneViewOverlay overlay) + { + this.overlay = overlay; + } + + //return true if event is seized by this action. if seized, Position and message should also be set in this case + internal abstract bool Seize(Event currentEvent, ref Vector3 position, ref string message); + } + + public static void DrawHandlesGuiTexture(Vector2 screenPoint, BGTransition.SwayTransition pointIndicatorTransition, Texture2D pointSelectedTexture) + { + pointIndicatorTransition.Tick(); + + var shift = pointIndicatorTransition.Value*.5f; + + Handles.BeginGUI(); + + GUI.DrawTexture( + new Rect(screenPoint - new Vector2(shift, shift), new Vector2(pointIndicatorTransition.Value, pointIndicatorTransition.Value)), + pointSelectedTexture, ScaleMode.StretchToFill); + + Handles.EndGUI(); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs.meta new file mode 100644 index 0000000..5907bdd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlay.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 91d24c95cb2b3554fa3ab77739c350f2 +timeCreated: 1472269855 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs new file mode 100644 index 0000000..0283a1a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs @@ -0,0 +1,131 @@ +using System; +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public abstract class BGSceneViewOverlayMenu : BGSceneViewOverlay.SceneAction where T : BGSceneViewOverlayMenu.AbstractMenu + { + protected const float DistanceTolerance = 100; + + private readonly Texture2D pointSelectedTexture; + + protected T menu; + protected BGCurveEditorPointsSelection editorSelection; + + private BGTransition.SwayTransition pointIndicatorTransition; + + protected BGSceneViewOverlayMenu(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection) + : base(overlay) + { + this.editorSelection = editorSelection; + pointSelectedTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPointSelected123); + } + + internal override bool Seize(Event currentEvent, ref Vector3 position, ref string message) + { + if (menu.Active) + { + menu.OnGui(currentEvent); + + BGEditorUtility.Assign(ref pointIndicatorTransition, () => new BGTransition.SwayTransition(20, 30, .4f)); + BGSceneViewOverlay.DrawHandlesGuiTexture(menu.Point2DPosition, pointIndicatorTransition, pointSelectedTexture); + + var okMessage = menu.ActiveItem != null && menu.ActiveItem.Description != null + ? "Release Ctrl to " + menu.ActiveItem.Description + : "Hover over an option and release Ctrl."; + + //out params + position = menu.Point3DPosition; + message = BGSceneViewOverlay.ToOk(okMessage) + "\r\n" + menu.Details; + //============== Ok + return true; + } + + if (!(currentEvent.type == EventType.Repaint && currentEvent.control || currentEvent.type == EventType.MouseMove && currentEvent.control)) return false; + + if (Process(currentEvent, overlay.Editor.Editor.Math, BGEditorUtility.GetSceneViewHeight(), ref position, ref message)) return true; + + pointIndicatorTransition = null; + + //============== No luck + return false; + } + + protected abstract bool Process(Event @event, BGCurveBaseMath math, float sceneViewHeight, ref Vector3 position, ref string message); + + + + protected static string SuccessMessage(string message) + { + return BGSceneViewOverlay.ToOk("Hover over an option and release Ctrl.\r\n") + message; + } + + + //========================================================== Abstract menu + public abstract class AbstractMenu : BGPopupMenu + { + public readonly BGCurveEditorPointsSelection EditorSelection; + public readonly BGSceneViewOverlay Overlay; + + public abstract string Details { get; } + + protected AbstractMenu(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection, string title) + : base(title) + { + EditorSelection = editorSelection; + Overlay = overlay; + + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGControlAbsent123), "Convert point control to Absent", + () => { SetControl(BGCurvePoint.ControlTypeEnum.Absent); })); + + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGControlBezierSymmetrical123), "Convert point control to Bezier Symmetrical", + () => { SetControl(BGCurvePoint.ControlTypeEnum.BezierSymmetrical); })); + + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGControlBezierIndependent123), "Convert point control to Bezier Independent", + () => { SetControl(BGCurvePoint.ControlTypeEnum.BezierIndependant); })); + + + AdditionalMenuItems(); + + + Add(new LockMenuItem(() => + { + BGCurveSettingsForEditor.LockView = !BGCurveSettingsForEditor.LockView; + EditorUtility.SetDirty(overlay.Editor.Curve); + })); + + Add(new MenuSeparator()); + + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPointDelete123), "Delete a point", Delete)); + } + + protected virtual void AdditionalMenuItems() + { + } + + protected abstract void SetControl(BGCurvePoint.ControlTypeEnum controlType); + protected abstract void Delete(); + } + + //========================================================== Lock menu + private sealed class LockMenuItem : BGPopupMenu.MenuItemButton + { + public LockMenuItem(Action action) + : base(null, null, action) + { + } + + public override string Description + { + get { return BGCurveSettingsForEditor.LockView ? "Switch 'Lock View' mode off" : "Switch 'Lock View' mode on"; } + } + + public override Texture2D Icon + { + get { return BGEditorUtility.LoadTexture2D(BGCurveSettingsForEditor.LockView ? BGEditorUtility.Image.BGLockOn123 : BGEditorUtility.Image.BGLockOff123); } + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs.meta new file mode 100644 index 0000000..f6f8347 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 25d2d1299235bef4fbddaea4c0a46414 +timeCreated: 1472984624 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs new file mode 100644 index 0000000..73b1df5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //point's menu + public class BGSceneViewOverlayMenuPoint : BGSceneViewOverlayMenu + { + public override string Name + { + get { return "Point menu"; } + } + + public BGSceneViewOverlayMenuPoint(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection) : base(overlay, editorSelection) + { + menu = new PointMenu(overlay, editorSelection); + } + + + protected override bool Process(Event @event, BGCurveBaseMath math, float sceneViewHeight, ref Vector3 position, ref string message) + { + if (BGCurveSettingsForEditor.DisableSceneViewPointMenu) return false; + + var minDistanceToCamera = float.MaxValue; + var mousePosition = @event.mousePosition; + var cameraPos = SceneView.currentDrawingSceneView.camera.transform.position; + + var index = -1; + var pointsCount = math.Curve.PointsCount; + + for (var i = 0; i < pointsCount; i++) + { + var pointPos = math.GetPosition(i); + + var sqrMagnitude = (mousePosition - BGEditorUtility.GetSceneViewPosition(pointPos, sceneViewHeight)).sqrMagnitude; + if (sqrMagnitude > DistanceTolerance) continue; + + var sqrtMagnitude = Vector3.SqrMagnitude(cameraPos - pointPos); + + if (minDistanceToCamera < sqrtMagnitude) continue; + + //found a target + minDistanceToCamera = sqrMagnitude; + index = i; + } + + if (index < 0) return false; + + + //menu active + var point = math.Curve[index]; + position = math.GetPosition(index); + message = SuccessMessage("Point " + index); + menu.On(point, index); + + //============== Ok + return true; + } + + + //========================================================== Point menu + public sealed class PointMenu : AbstractMenu + { + public int PointIndex; + private BGCurvePointI point; + private MenuItemButton addToSelectionItem; + private MenuItemButton removeFromSelectionItem; + + public PointMenu(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection) + : base(overlay, editorSelection, "Point menu") + { + } + + public override string Details + { + get { return "Point " + PointIndex; } + } + + protected override void AdditionalMenuItems() + { + Add(new MenuSeparator()); + + //add before + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPointInsertBefore123), "Insert a point before this point", + () => + { + var curve = point.Curve; + var settings = BGPrivateField.GetSettings(curve); + var index = curve.IndexOf(point); + + BGCurveEditor.AddPoint(curve, BGNewPointPositionManager.InsertBefore(curve, index, settings.ControlType, settings.Sections), index); + })); + + //add after + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGPointInsertAfter123), "Insert a point after this point", + () => + { + var curve = point.Curve; + var settings = BGPrivateField.GetSettings(curve); + var index = curve.IndexOf(point); + BGCurveEditor.AddPoint(curve, BGNewPointPositionManager.InsertAfter(curve, index, settings.ControlType, settings.Sections), index + 1); + })); + + + //add remove to selection + addToSelectionItem = new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSelectionAdd123), "Add this point to selection", + () => EditorSelection.Add(point)); + + removeFromSelectionItem = new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSelectionRemove123), "Remove this point from selection", + () => EditorSelection.Remove(point)); + + Add(addToSelectionItem); + Add(removeFromSelectionItem); + } + + protected override void SetControl(BGCurvePoint.ControlTypeEnum type) + { + point.ControlType = type; + } + + public void On(BGCurvePointI point, int index) + { + PointIndex = index; + this.point = point; + On(point.PositionWorld); + + Get(0).Current = point.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + Get(1).Current = point.ControlType == BGCurvePoint.ControlTypeEnum.BezierSymmetrical; + Get(2).Current = point.ControlType == BGCurvePoint.ControlTypeEnum.BezierIndependant; + } + + protected override void Delete() + { + BGCurveEditor.DeletePoint(point.Curve, point.Curve.IndexOf(point)); + } + + public override void On(Vector3 position) + { + addToSelectionItem.Disabled = EditorSelection.Contains(point); + removeFromSelectionItem.Disabled = !addToSelectionItem.Disabled; + base.On(position); + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs.meta new file mode 100644 index 0000000..3614bd9 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuPoint.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f64ca4438c929b04e8da2bfe20525440 +timeCreated: 1472274459 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs new file mode 100644 index 0000000..0fc132a --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs @@ -0,0 +1,105 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGSceneViewOverlayMenuSelection : BGSceneViewOverlayMenu + { + public override string Name + { + get { return "Selection menu"; } + } + + public BGSceneViewOverlayMenuSelection(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection) + : base(overlay, editorSelection) + { + menu = new SelectionMenu(overlay, editorSelection); + } + + protected override bool Process(Event @event, BGCurveBaseMath math, float sceneViewHeight, ref Vector3 position, ref string message) + { + if (BGCurveSettingsForEditor.DisableSceneViewSelectionMenu || !menu.EditorSelection.HasSelected()) return false; + + + var selectedPos = menu.EditorSelection.GetAveragePosition(); + if (!(DistanceTolerance > (@event.mousePosition - BGEditorUtility.GetSceneViewPosition(selectedPos, sceneViewHeight)).sqrMagnitude)) return false; + + + //out params + position = selectedPos; + message = SuccessMessage("Selected " + menu.EditorSelection.CountSelected + " point(s)."); + + //turn on the menu + menu.On(position); + + //check if all points share the same control type + BGCurvePoint.ControlTypeEnum singleType = BGCurvePoint.ControlTypeEnum.Absent; + bool first = true, single=true; + menu.EditorSelection.ForEach(point => + { + if (first) + { + first = false; + singleType = point.ControlType; + } + else if (singleType != point.ControlType) + { + single = false; + return true; + } + + return false; + }); + + if (single) + { + menu.Get(0).Current = singleType == BGCurvePoint.ControlTypeEnum.Absent; + menu.Get(1).Current = singleType == BGCurvePoint.ControlTypeEnum.BezierSymmetrical; + menu.Get(2).Current = singleType == BGCurvePoint.ControlTypeEnum.BezierIndependant; + } + else menu.Get(0).Current = menu.Get(1).Current = menu.Get(2).Current = false; + + + return true; + } + + //========================================================== Selection menu + public sealed class SelectionMenu : AbstractMenu + { + public SelectionMenu(BGSceneViewOverlay overlay, BGCurveEditorPointsSelection editorSelection) + : base(overlay, editorSelection, "Selection menu") + { + } + + protected override void SetControl(BGCurvePoint.ControlTypeEnum type) + { + EditorSelection.SetControlTypeForSelected(type); + } + + protected override void Delete() + { + EditorSelection.DeleteSelected(); + } + + public override string Details + { + get { return "Selected " + EditorSelection.CountSelected + " point(s)."; } + } + + protected override void AdditionalMenuItems() + { + Add(new MenuSeparator()); + Add(new MenuItemButton(BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGSelectionRemove123), "Remove this point from selection", + () => + { + EditorSelection.Clear(); + EditorUtility.SetDirty(Overlay.Editor.Curve); + })); + } + + + } + + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs.meta new file mode 100644 index 0000000..8712ccd --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayMenuSelection.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a24e39d345905a74eb25e8f16f456c30 +timeCreated: 1472984950 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs new file mode 100644 index 0000000..f5260ec --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs @@ -0,0 +1,166 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public abstract class BGSceneViewOverlayPointAdd : BGSceneViewOverlay.SceneAction + { + protected const float ScalePreviewPoint = .18f; + + + private static readonly BGTransition.SwayTransition swayTransition = new BGTransition.SwayTransition(.8f, 1.2f, .6); + + + protected BGSceneViewOverlayPointAdd(BGSceneViewOverlay overlay) : base(overlay) + { + } + + protected static void PreviewControls(BGCurveSettings settings, Vector3 position, Vector3 control1World, Vector3 control2World) + { + BGEditorUtility.SwapHandlesColor(settings.ControlHandlesColor, () => + { + PreviewControl(settings, position, control1World); + PreviewControl(settings, position, control2World); + }); + } + + protected static void PreviewControl(BGCurveSettings settings, Vector3 position, Vector3 controlWorld) + { + var size = BGEditorUtility.GetHandleSize(position, ScalePreviewPoint*.8f); + + Handles.SphereCap(0, controlWorld, Quaternion.identity, size); + Handles.DrawLine(position, controlWorld); + } + + protected static void DrawSection(BGCurvePointI from, BGCurvePointI to, int parts) + { + BGEditorUtility.Split(@from, to, parts, (fromPos, toPos) => Handles.DrawDottedLine(fromPos, toPos, 2)); + } + + + // preview + protected void Preview(Vector3 position, BGCurve curve, ref float toLast, ref float toFirst) + { + var settings = overlay.Editor.Settings; + + //show point + BGEditorUtility.SwapHandlesColor(settings.SphereColor, () => Handles.SphereCap(0, position, Quaternion.identity, BGEditorUtility.GetHandleSize(position, ScalePreviewPoint))); + + //create a point + var newPoint = BGNewPointPositionManager.CreatePoint(position, curve, settings.ControlType, settings.Sections, out toLast, out toFirst, false); + + //show controls + if (newPoint.ControlType != BGCurvePoint.ControlTypeEnum.Absent) PreviewControls(settings, position, newPoint.ControlFirstWorld, newPoint.ControlSecondWorld); + + if (curve.PointsCount == 0) return; + + BGEditorUtility.SwapHandlesColor(BGCurveSettingsForEditor.ColorForNewSectionPreview, () => + { + // last To new + DrawSection(curve[curve.PointsCount - 1], newPoint, settings.Sections); + + AdditionalPreview(newPoint); + + // new To zero + if (curve.Closed) DrawSection(newPoint, curve[0], settings.Sections); + }); + } + + protected virtual void AdditionalPreview(BGCurvePoint newPoint) + { + } + + + //see base class for description + internal override bool Seize(Event currentEvent, ref Vector3 position, ref string message) + { + if (!Comply(currentEvent)) return false; + + + Vector3 intersectionPosition; + Plane plane; + + + if (currentEvent.type == EventType.mouseDown && currentEvent.control && currentEvent.button == 0) + { + //Mouse down for some action + var curve = overlay.Editor.Curve; + var settings = overlay.Editor.Settings; + + Cast(currentEvent, HandleUtility.GUIPointToWorldRay(currentEvent.mousePosition), out intersectionPosition, out message, out plane); + + if (message != null) BGCurveEditor.OverlayMessage.Display(message); + else + { + position = intersectionPosition; + BGCurveEditor.AddPoint(curve, + BGNewPointPositionManager.CreatePoint(intersectionPosition, curve, settings.ControlType, settings.Sections, true), + curve.PointsCount); + } + overlay.EventCanceller = new BGEditorUtility.EventCanceller(); + return true; + } + + + if (!(currentEvent.type == EventType.Repaint && currentEvent.control || currentEvent.type == EventType.MouseMove && currentEvent.control)) return false; + + var ray = HandleUtility.GUIPointToWorldRay(currentEvent.mousePosition); + Cast(currentEvent, ray, out intersectionPosition, out message, out plane); + + position = intersectionPosition; + + if (message != null) return true; + + Animation(plane, ray, swayTransition); + + //preview + float toLast = -1, toFirst = -1; + Preview(intersectionPosition, overlay.Editor.Curve, ref toLast, ref toFirst); + + //distance + message = BGSceneViewOverlay.ToOk("MouseClick to add a point\r\n") + + //to last + (toLast < 0 ? "First point is ready to go!" : "Distance to last=" + toLast) + + //to first + (toFirst < 0 ? "" : ", to first=" + toFirst); + return true; + } + + protected virtual void Animation(Plane plane, Ray ray, BGTransition.SwayTransition transition) + { + float enter; + if (plane.Raycast(ray, out enter)) + { + swayTransition.Tick(); + + Animate(transition, ray.GetPoint(enter), enter, plane); + } + } + + + protected virtual bool Comply(Event currentEvent) + { + return true; + } + + protected static Vector3[] GetVertsByPlaneAndDistance(Vector3 scale, Vector3 point, float distanceToCamera, Plane plane) + { + var m = Matrix4x4.TRS(point, Quaternion.LookRotation(plane.normal), scale); + var verts = new[] + {GetRectVector(-1, -1, distanceToCamera, m), GetRectVector(-1, 1, distanceToCamera, m), GetRectVector(1, 1, distanceToCamera, m), GetRectVector(1, -1, distanceToCamera, m)}; + return verts; + } + + private static Vector3 GetRectVector(float x, float y, float distance, Matrix4x4 matrix) + { + return matrix.MultiplyPoint(new Vector3(x, y)*distance/18); + } + + + //abstract + protected abstract void Animate(BGTransition.SwayTransition swayTransition, Vector3 point, float distanceToCamera, Plane plane); + + protected abstract void Cast(Event @event, Ray ray, out Vector3 position, out string error, out Plane plane); + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs.meta new file mode 100644 index 0000000..7d27621 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAdd.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4bcec5eb8d6d6af48bacbcf49bee822e +timeCreated: 1472345427 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs new file mode 100644 index 0000000..50c768f --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs @@ -0,0 +1,74 @@ +using BansheeGz.BGSpline.Curve; +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGSceneViewOverlayPointAddAtDistance : BGSceneViewOverlayPointAdd + { + private static readonly Color32 PointersColor = Color.white; + private Vector3 lastPosition; + + public BGSceneViewOverlayPointAddAtDistance(BGSceneViewOverlay overlay) : base(overlay) + { + } + + public override string Name + { + get { return "Add point at Distance"; } + } + + + protected override bool Comply(Event currentEvent) + { + return currentEvent.shift; + } + + protected override void Cast(Event @event, Ray ray, out Vector3 position, out string error, out Plane plane) + { + var settings = overlay.Editor.Settings; + + lastPosition = position = ray.GetPoint(settings.NewPointDistance); + + var curve = overlay.Editor.Curve; + if (curve.Mode2DOn) + { + BGSceneViewOverlayPointAddSnap2D.Get2DPlane(out plane, curve); + position = position - Vector3.Project(position, plane.normal.normalized); + } + else plane = new Plane(ray.direction.normalized, lastPosition); + + error = null; + } + + protected override void AdditionalPreview(BGCurvePoint newPoint) + { + var curve = overlay.Editor.Curve; + if (!curve.Mode2DOn) return; + + Handles.DrawLine(lastPosition, newPoint.PositionWorld); + } + + protected override void Animation(Plane plane, Ray ray, BGTransition.SwayTransition transition) + { + var curve = overlay.Editor.Curve; + + if (!curve.Mode2DOn) base.Animation(plane, ray, transition); + else + { + var settings = overlay.Editor.Settings; + transition.Tick(); + Animate(transition, lastPosition, settings.NewPointDistance, plane); + } + } + + protected override void Animate(BGTransition.SwayTransition swayTransition, Vector3 point, float distanceToCamera, Plane plane) + { + var verts = GetVertsByPlaneAndDistance(new Vector3(swayTransition.Value, swayTransition.Value, swayTransition.Value), point, distanceToCamera, plane); + + var size = swayTransition.Value*ScalePreviewPoint*distanceToCamera/5; + + BGEditorUtility.SwapHandlesColor(PointersColor, () => { foreach (var position in verts) Handles.ConeCap(0, position, Quaternion.LookRotation(point - position), size); }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs.meta new file mode 100644 index 0000000..c1eb169 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddAtDistance.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 13e1047830cfadc46929d3f713cdca63 +timeCreated: 1472280829 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs new file mode 100644 index 0000000..c9d1754 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs @@ -0,0 +1,75 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGSceneViewOverlayPointAddSnap2D : BGSceneViewOverlayPointAdd + { + private static readonly BGTransition.SwayTransition rectTransition = new BGTransition.SwayTransition(1.1f, 1.3f, 2); + + public BGSceneViewOverlayPointAddSnap2D(BGSceneViewOverlay overlay) : base(overlay) + { + } + + public override string Name + { + get { return "Add point and Snap to Curve's 2D Plane"; } + } + + protected override void Cast(Event @event, Ray ray, out Vector3 position, out string error, out Plane plane) + { + var curve = overlay.Editor.Curve; + + Get2DPlane(out plane, curve); + + float distance; + if (!plane.Raycast(ray, out distance)) + { + error = BGSceneViewOverlay.ToError("Curve is in 2D mode! \r\n Curve's plane does not intersect with the current point.") + + "\r\nUse Ctrl+Shift+Click to spawn a point at the distance,\r\n which is set in settings"; + + position = ray.GetPoint(10); + } + else + { + error = null; + position = ray.GetPoint(distance); + } + } + + public static void Get2DPlane(out Plane plane, BGCurve curve) + { + switch (curve.Mode2D) + { + case BGCurve.Mode2DEnum.XY: + plane = new Plane(curve.ToWorldDirection(Vector3.forward), curve.transform.position); + break; + case BGCurve.Mode2DEnum.XZ: + plane = new Plane(curve.ToWorldDirection(Vector3.up), curve.transform.position); + break; + default: +// case BGCurve.Mode2DEnum.YZ: + plane = new Plane(curve.ToWorldDirection(Vector3.right), curve.transform.position); + break; + } + } + + protected override bool Comply(Event currentEvent) + { + return overlay.Editor.Curve.Mode2D != BGCurve.Mode2DEnum.Off; + } + + protected override void Animate(BGTransition.SwayTransition swayTransition, Vector3 point, float distanceToCamera, Plane plane) + { + rectTransition.Tick(); + + var verts = GetVertsByPlaneAndDistance(new Vector3(rectTransition.Value, rectTransition.Value, rectTransition.Value), point, distanceToCamera, plane); + + + var color = BGCurveSettingsForEditor.HandleColorForAddAndSnap2D; + Handles.DrawSolidRectangleWithOutline(verts, color, new Color32(color.r, color.g, color.b, 255)); + Handles.DrawWireDisc(point, Vector3.Cross(verts[1] - verts[0], verts[2] - verts[0]), swayTransition.Value*distanceToCamera/24); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs.meta new file mode 100644 index 0000000..48c8bab --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap2D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cd91011407f1abc41ae27e638529e479 +timeCreated: 1472950363 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs new file mode 100644 index 0000000..a9cf2f2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs @@ -0,0 +1,51 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + //add point and snap to the mesh (or curve's 2D plane) + public class BGSceneViewOverlayPointAddSnap3D : BGSceneViewOverlayPointAdd + { + public BGSceneViewOverlayPointAddSnap3D(BGSceneViewOverlay overlay) + : base(overlay) + { + } + + public override string Name + { + get { return "Add point and Snap to a Mesh"; } + } + + protected override void Animate(BGTransition.SwayTransition swayTransition, Vector3 point, float distanceToCamera, Plane plane) + { + //show rect + var verts = GetVertsByPlaneAndDistance(new Vector3(swayTransition.Value, swayTransition.Value, swayTransition.Value), point, distanceToCamera, plane); + var color = BGCurveSettingsForEditor.HandleColorForAddAndSnap3D; + Handles.DrawSolidRectangleWithOutline(verts, color, new Color32(color.r, color.g, color.b, 255)); + } + + + protected override void Cast(Event @event, Ray ray, out Vector3 position, out string error, out Plane plane) + { + RaycastHit hit; + if (Physics.Raycast(ray, out hit)) + { + position = hit.point; + plane = new Plane(hit.normal, hit.point); + error = null; + } + else + { + error = BGSceneViewOverlay.ToError("No mesh (or collider) to snap a point to!") + " \r\n Use Ctrl+Shift+Click to spawn a point at the distance,\r\n which is set in settings"; + position = ray.GetPoint(10); + plane = new Plane(); + } + } + + protected override bool Comply(Event currentEvent) + { + return overlay.Editor.Curve.Mode2D == BGCurve.Mode2DEnum.Off; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs.meta new file mode 100644 index 0000000..c7e50d5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Overlay/BGSceneViewOverlayPointAddSnap3D.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ef3acc6fea76e7b449cac399c8e0f891 +timeCreated: 1472273229 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings.meta new file mode 100644 index 0000000..85c7dd4 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 1fa6dd41561b2464fbeac539fb6cbf34 +folderAsset: yes +timeCreated: 1472482812 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs new file mode 100644 index 0000000..638e6eb --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs @@ -0,0 +1,248 @@ +using System; +using UnityEngine; +using System.Linq; +using System.Reflection; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public static class BGCurveSettingsForEditor + { + public enum CoordinateSpaceEnum + { + Local = 0, + LocalTransformed = 1, + World = 2, + } + + + //Keys + private const string InspectorPointsCoordinatesKey = "BansheeGZ.BGCurve.inspectorPointsCoordinates"; + private const string InspectorControlsCoordinatesKey = "BansheeGZ.BGCurve.inspectorControlsCoordinates"; + + private const string DisableRectangularSelectionKey = "BansheeGZ.BGCurve.disableRectangularSelection"; + private const string DisableSceneViewPointMenuKey = "BansheeGZ.BGCurve.disableSceneViewPointMenu"; + private const string DisableSceneViewSelectionMenuKey = "BansheeGZ.BGCurve.disableSceneViewSelectionMenu"; + private const string DisableInspectorPointMenuKey = "BansheeGZ.BGCurve.disableInspectorPointMenu"; + private const string CcInspectorHandlesOffKey = "BansheeGZ.BGCurve.inspectorHandlesOff"; + + private const string LockViewKey = "BansheeGZ.BGCurve.lockView"; + private const string CurrentTabKey = "BansheeGZ.BGCurve.currentTab"; + + //colors + private const string HandleColorForAddAndSnap3DKey = "BansheeGZ.BGCurve.handleColorForAddAndSnap3D"; + private const string HandleColorForAddAndSnap2DKey = "BansheeGZ.BGCurve.handleColorForAddAndSnap2D"; + private const string ColorForRectangularSelectionKey = "BansheeGZ.BGCurve.colorForRectangularSelection"; + private const string ColorForLabelBackgroundKey = "BansheeGZ.BGCurve.colorForLabelBackground"; + private const string ColorForNewSectionPreviewKey = "BansheeGZ.BGCurve.colorForNewSectionPreview"; + + //Default values + private static readonly Color32 HandleColorForAddAndSnap3DDefault = new Color32(46, 143, 168, 20); + private static readonly Color32 HandleColorForAddAndSnap2DDefault = new Color32(255, 255, 255, 10); + private static readonly Color32 ColorForRectangularSelectionDefault = new Color32(46, 143, 168, 25); + private static readonly Color32 ColorForLabelBackgroundDefault = new Color32(255, 255, 255, 25); + private static readonly Color32 ColorForNewSectionPreviewDefault = new Color32(255, 0, 0, 255); + + private static CoordinateSpaceEnum inspectorPointCoordinateSpace; + private static CoordinateSpaceEnum inspectorControlCoordinateSpace; + + private static bool disableRectangularSelection; + private static bool disableSceneViewPointMenu; + private static bool disableSceneViewSelectionMenu; + private static bool disableInspectorPointMenu; + private static bool lockView; + private static bool ccInspectorHandlesOff; + + private static Color32 handleColorForAddAndSnap3D; + private static Color32 handleColorForAddAndSnap2D; + private static Color32 colorForRectangularSelection; + private static Color32 colorForLabelBackground; + private static Color32 colorForNewSectionPreview; + + private static int currentTab; + + public static int CurrentTab + { + get { return currentTab; } + set { SaveInt(ref currentTab, value, CurrentTabKey); } + } + + public static CoordinateSpaceEnum InspectorPointCoordinateSpace + { + get { return inspectorPointCoordinateSpace; } + set + { + if (value == inspectorPointCoordinateSpace) return; + + var val = (int) inspectorPointCoordinateSpace; + SaveInt(ref val, (int) value, InspectorPointsCoordinatesKey); + inspectorPointCoordinateSpace = value; + } + } + + public static CoordinateSpaceEnum InspectorControlCoordinateSpace + { + get { return inspectorControlCoordinateSpace; } + set + { + if (value == inspectorControlCoordinateSpace) return; + + var val = (int) inspectorControlCoordinateSpace; + SaveInt(ref val, (int) value, InspectorControlsCoordinatesKey); + inspectorControlCoordinateSpace = value; + } + } + + public static bool CcInspectorHandlesOff + { + get { return ccInspectorHandlesOff; } + set { SaveBool(ref ccInspectorHandlesOff, value, CcInspectorHandlesOffKey); } + } + + public static bool LockView + { + get { return lockView; } + set { SaveBool(ref lockView, value, LockViewKey); } + } + + + public static bool DisableRectangularSelection + { + get { return disableRectangularSelection; } + set { SaveBool(ref disableRectangularSelection, value, DisableRectangularSelectionKey); } + } + + public static bool DisableSceneViewPointMenu + { + get { return disableSceneViewPointMenu; } + set { SaveBool(ref disableSceneViewPointMenu, value, DisableSceneViewPointMenuKey); } + } + + public static bool DisableSceneViewSelectionMenu + { + get { return disableSceneViewSelectionMenu; } + set { SaveBool(ref disableSceneViewSelectionMenu, value, DisableSceneViewSelectionMenuKey); } + } + + public static bool DisableInspectorPointMenu + { + get { return disableInspectorPointMenu; } + set { SaveBool(ref disableInspectorPointMenu, value, DisableInspectorPointMenuKey); } + } + + + public static Color32 HandleColorForAddAndSnap3D + { + get { return handleColorForAddAndSnap3D; } + set { SaveColor(ref handleColorForAddAndSnap3D, value, HandleColorForAddAndSnap3DKey); } + } + + public static Color32 HandleColorForAddAndSnap2D + { + get { return handleColorForAddAndSnap2D; } + set { SaveColor(ref handleColorForAddAndSnap2D, value, HandleColorForAddAndSnap2DKey); } + } + + public static Color32 ColorForRectangularSelection + { + get { return colorForRectangularSelection; } + set { SaveColor(ref colorForRectangularSelection, value, ColorForRectangularSelectionKey); } + } + + public static Color32 ColorForLabelBackground + { + get { return colorForLabelBackground; } + set { SaveColor(ref colorForLabelBackground, value, ColorForLabelBackgroundKey); } + } + + public static Color32 ColorForNewSectionPreview + { + get { return colorForNewSectionPreview; } + set { SaveColor(ref colorForNewSectionPreview, value, ColorForNewSectionPreviewKey); } + } + + static BGCurveSettingsForEditor() + { + Init(); + } + + private static void SaveBool(ref bool oldValue, bool newValue, string key) + { + CheckAndSave(ref oldValue, newValue, () => EditorPrefs.SetBool(key, newValue)); + } + + private static void SaveInt(ref int oldValue, int newValue, string key) + { + CheckAndSave(ref oldValue, newValue, () => EditorPrefs.SetInt(key, newValue)); + } + + private static void SaveColor(ref Color32 oldValue, Color32 newValue, string key) + { + CheckAndSave(ref oldValue, newValue, () => EditorPrefs.SetString(key, ColorToString(newValue))); + } + + private static void CheckAndSave(ref T oldValue, T newValue, Action notEqualAction) + { + if (oldValue.Equals(newValue)) return; + oldValue = newValue; + notEqualAction(); + } + + private static void Init() + { + inspectorPointCoordinateSpace = (CoordinateSpaceEnum) EditorPrefs.GetInt(InspectorPointsCoordinatesKey, (int) CoordinateSpaceEnum.World); + inspectorControlCoordinateSpace = (CoordinateSpaceEnum) EditorPrefs.GetInt(InspectorControlsCoordinatesKey); + + disableRectangularSelection = EditorPrefs.GetBool(DisableRectangularSelectionKey); + disableSceneViewPointMenu = EditorPrefs.GetBool(DisableSceneViewPointMenuKey); + disableSceneViewSelectionMenu = EditorPrefs.GetBool(DisableSceneViewSelectionMenuKey); + disableInspectorPointMenu = EditorPrefs.GetBool(DisableInspectorPointMenuKey); + + lockView = EditorPrefs.GetBool(LockViewKey); + currentTab = EditorPrefs.GetInt(CurrentTabKey); + + + handleColorForAddAndSnap3D = StringToColor(EditorPrefs.GetString(HandleColorForAddAndSnap3DKey), HandleColorForAddAndSnap3DDefault); + handleColorForAddAndSnap2D = StringToColor(EditorPrefs.GetString(HandleColorForAddAndSnap2DKey), HandleColorForAddAndSnap2DDefault); + colorForRectangularSelection = StringToColor(EditorPrefs.GetString(ColorForRectangularSelectionKey), ColorForRectangularSelectionDefault); + colorForLabelBackground = StringToColor(EditorPrefs.GetString(ColorForLabelBackgroundKey), ColorForLabelBackgroundDefault); + colorForNewSectionPreview = StringToColor(EditorPrefs.GetString(ColorForNewSectionPreviewKey), ColorForNewSectionPreviewDefault); + } + + //resets to default + public static void Reset() + { + var constants = typeof(BGCurveSettingsForEditor).GetFields( + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.FlattenHierarchy) + .Where(c => c.IsLiteral && !c.IsInitOnly && c.Name.EndsWith("Key")).ToList(); + + foreach (var constant in constants) EditorPrefs.DeleteKey((string) constant.GetValue(null)); + + Init(); + } + + private static string ColorToString(Color32 color) + { + return color.r + "," + color.g + "," + color.b + "," + color.a; + } + + private static Color32 StringToColor(string colorString, Color32 defaultColor) + { + if (string.IsNullOrEmpty(colorString)) return defaultColor; + + var parts = colorString.Split(','); + if (parts.Length != 4) return defaultColor; + + + try + { + return new Color32(byte.Parse(parts[0]), byte.Parse(parts[1]), byte.Parse(parts[2]), byte.Parse(parts[3])); + } + catch (Exception e) + { + Debug.LogException(e); + return defaultColor; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs.meta new file mode 100644 index 0000000..e306f9c --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9d802b133f80b6349ad532e4d415d660 +timeCreated: 1472973279 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs new file mode 100644 index 0000000..b5d8831 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs @@ -0,0 +1,117 @@ +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGCurveSettingsForEditorWindow : EditorWindow + { + private const int Padding = 20; + private static readonly Vector2 WindowSize = new Vector2(600, 400); + + private Vector2 scrollPos; + + + internal static void Open() + { + BGEditorUtility.ShowPopupWindow(WindowSize); + } + + private void OnGUI() + { + scrollPos = EditorGUILayout.BeginScrollView(scrollPos); + ShowSettings(); + EditorGUILayout.EndScrollView(); + } + + private static void ShowSettings() + { + BGEditorUtility.SwapLabelWidth(300, () => + { + BGEditorUtility.Vertical(new GUIStyle("Box") {padding = new RectOffset(Padding, Padding, Padding, Padding)}, () => + { + EditorGUILayout.LabelField("BG Curve Editor Settings", new GUIStyle("Box") {fontSize = 22}); + + if (GUILayout.Button(new GUIContent("Reset to defaults", "Reset all editor settings to their defaults.")) + && BGEditorUtility.Confirm("Reset settings", "Reset All Editor settings to defaults? It does not affect curve's settings.", "Reset")) + { + BGCurveSettingsForEditor.Reset(); + } + + //coordinates for points and controls + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.PopupField(BGCurveSettingsForEditor.InspectorPointCoordinateSpace, "Point Coordinates", + b => BGCurveSettingsForEditor.InspectorPointCoordinateSpace = (BGCurveSettingsForEditor.CoordinateSpaceEnum) b); + EditorGUILayout.HelpBox("Coordinate Space for points (for Inspector's fields inder Points tab.)", MessageType.Info); + }); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.PopupField(BGCurveSettingsForEditor.InspectorControlCoordinateSpace, "Point Controls Coordinates", + b => BGCurveSettingsForEditor.InspectorControlCoordinateSpace = (BGCurveSettingsForEditor.CoordinateSpaceEnum)b); + EditorGUILayout.HelpBox("Coordinate Space for points controls (for Inspector's fields inder Points tab.)", MessageType.Info); + }); + + + // disable fields + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableSceneViewPointMenu, "Disable SV Point Menu", b => BGCurveSettingsForEditor.DisableSceneViewPointMenu = b); + EditorGUILayout.HelpBox("Disable point's menu, which is activated in Scene View by holding Ctrl over a point.", MessageType.Info); + }); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableSceneViewSelectionMenu, "Disable SV Selection Menu", b => BGCurveSettingsForEditor.DisableSceneViewSelectionMenu = b); + EditorGUILayout.HelpBox("Disable selection's menu, which is activated in Scene View by holding Ctrl over a selection handles.", MessageType.Info); + }); + +/* + BGEUtil.VerticalBox(() => + { + BGEUtil.ToggleField(BGCurveEditorSettings.DisableInspectorPointMenu, "Disable Inspector Points Menu", b => BGCurveEditorSettings.DisableInspectorPointMenu = b); + EditorGUILayout.HelpBox("Disable points menu, which is located under Points tab in Inspector.", MessageType.Info); + }); + */ + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ToggleField(BGCurveSettingsForEditor.DisableRectangularSelection, "Disable Rectangular Selection", b => BGCurveSettingsForEditor.DisableRectangularSelection = b); + EditorGUILayout.HelpBox("Disable rectangular selection in Scene View, which is activated by holding shift and mouse dragging.", MessageType.Info); + }); + + + // colors + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ColorField("Rectangular Selection Color", BGCurveSettingsForEditor.ColorForRectangularSelection, b => BGCurveSettingsForEditor.ColorForRectangularSelection = b); + EditorGUILayout.HelpBox("Color for Rectangular Selection background", MessageType.Info); + }); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ColorField("Add and Snap 3D Handles Color", BGCurveSettingsForEditor.HandleColorForAddAndSnap3D, b => BGCurveSettingsForEditor.HandleColorForAddAndSnap3D = b); + EditorGUILayout.HelpBox("Color for handles, shown for 3D curve in Scene View when new point is previewed.", MessageType.Info); + }); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ColorField("Add and Snap 2D Handles Color", BGCurveSettingsForEditor.HandleColorForAddAndSnap2D, b => BGCurveSettingsForEditor.HandleColorForAddAndSnap2D = b); + EditorGUILayout.HelpBox("Color for handles, shown for 2D curve in Scene View when new point is previewed.", MessageType.Info); + }); + + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ColorField("Points labels back color", BGCurveSettingsForEditor.ColorForLabelBackground, b => BGCurveSettingsForEditor.ColorForLabelBackground = b); + EditorGUILayout.HelpBox("Background color for points labels in Scene View.", MessageType.Info); + }); + BGEditorUtility.VerticalBox(() => + { + BGEditorUtility.ColorField("New section preview color", BGCurveSettingsForEditor.ColorForNewSectionPreview, b => BGCurveSettingsForEditor.ColorForNewSectionPreview = b); + EditorGUILayout.HelpBox("Color for new section preview in Scene View.", MessageType.Info); + }); + }); + }); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs.meta new file mode 100644 index 0000000..864abd2 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsForEditorWindow.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: cd56b8c2c4cb03b41a910f6f1281b6bc +timeCreated: 1472981091 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs new file mode 100644 index 0000000..0ae8a3e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs @@ -0,0 +1,144 @@ +using System.Collections.Generic; +using System.IO; +using BansheeGz.BGSpline.Curve; +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public static class BGCurveSettingsOperations + { + private const string DefaultFileName = "BGDefaultSettings123"; + + private const string EditorKey = "BansheeGZ.BGCurve.settingsDir"; + + private static string[] allSettings; + private static bool dirty; + + public static BGCurveSettings LoadDefault() + { + return Load(DefaultFileName); + } + + public static BGCurveSettings Load(string asset) + { + var dir = GetPath(); + if (dir == null || !IsValid(dir)) return null; + + var loaded = AssetDatabase.LoadAssetAtPath(GetFullPath(dir, asset)); + return loaded == null ? null : Object.Instantiate(loaded).Settings; + } + + + public static bool SaveDefault(BGCurveSettings settings) + { + return Save(settings, DefaultFileName); + } + + public static bool Save(BGCurveSettings settings, string name) + { + var dir = GetPath(); + if (!IsValid(dir)) dir = null; + + if (dir == null) dir = ChoseFolder(); + + if (dir == null) return false; + + var settingsSo = ScriptableObject.CreateInstance(); + settingsSo.Settings = settings; + + var fullPath = GetFullPath(dir, name); + AssetDatabase.CreateAsset(settingsSo, fullPath); + AssetDatabase.SaveAssets(); + dirty = true; + return true; + } + + private static string GetFullPath(string dir, string asset) + { + return dir + Path.DirectorySeparatorChar + asset + ".asset"; + } + + private static string ChoseFolder() + { + var dir = EditorUtility.OpenFolderPanel("Chose a folder to store default settings", Application.dataPath, ""); + + if (dir == null || dir.Equals("")) return null; + + + if (!dir.StartsWith(Application.dataPath)) + { + Debug.Log("Failed. Path should be relative to project folder"); + dir = null; + } + else + { + //this was a stupid idea to include "Assets" to the path + dir = "Assets" + dir.Substring(Application.dataPath.Length); + EditorPrefs.SetString(EditorKey, dir); + dirty = true; + } + return dir; + } + + public static void ChoseDir() + { + ChoseFolder(); + } + + public static string GetPath() + { + var path = EditorPrefs.GetString(EditorKey); + return path == null || path.Equals("") ? null : path; + } + + public static bool IsValid(string dir) + { + //this was a stupid idea to include "Assets" to the path + return dir != null && !dir.Equals("") && Directory.Exists(Application.dataPath.Substring(0, Application.dataPath.Length - "Assets".Length) + dir); + } + + public static string[] GetAll() + { + var path = GetPath(); + if (!IsValid(path)) return new string[0]; + + if (allSettings == null || dirty) + { + dirty = false; + Reload(path); + } + + return allSettings; + } + + public static void Reload(string path) + { + var guids = AssetDatabase.FindAssets("t:BGCurveSettingsSO", new[] {path}); + if (guids != null && guids.Length > 0) + { + var pathes = new List(); + foreach (var guid in guids) + { + var assetPath = AssetDatabase.GUIDToAssetPath(guid); + var separatorIndex = assetPath.LastIndexOf(Path.DirectorySeparatorChar); + + if (separatorIndex > 0) assetPath = assetPath.Substring(separatorIndex + 1); + + separatorIndex = assetPath.LastIndexOf(Path.AltDirectorySeparatorChar); + + if (separatorIndex > 0) assetPath = assetPath.Substring(separatorIndex + 1); + + if (assetPath.EndsWith(".asset")) assetPath = assetPath.Substring(0, assetPath.Length - 6); + + pathes.Add(assetPath); + } + allSettings = pathes.ToArray(); + } + else + { + allSettings = new string[0]; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs.meta new file mode 100644 index 0000000..ce2f47e --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsOperations.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3961a72ccd7952343b4cee470a7c51cb +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs new file mode 100644 index 0000000..a4e7c98 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs @@ -0,0 +1,12 @@ +using System; +using BansheeGz.BGSpline.Curve; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + [Serializable] + public class BGCurveSettingsSO : ScriptableObject + { + public BGCurveSettings Settings; + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs.meta new file mode 100644 index 0000000..53a14f5 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Settings/BGCurveSettingsSO.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 363780417ece4f1439ee477913bf05e3 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils.meta new file mode 100644 index 0000000..ef4fac6 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 5d766538e07f6b44595f6f99251584c2 +folderAsset: yes +timeCreated: 1472482870 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs new file mode 100644 index 0000000..55c2d90 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs @@ -0,0 +1,1207 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using BansheeGz.BGSpline.Curve; +using UnityEngine; +using UnityEditor; +using UnityEditor.AnimatedValues; + +namespace BansheeGz.BGSpline.Editor +{ + public static class BGEditorUtility + { + private const string DefaultIconPath = "Assets/BansheeGz/BGCurve/Icons/"; + + //exact names for icons + public enum Image + { + BGCurveLogo123, + BGDelete123, + BGAdd123, + BGMoveUp123, + BGMoveDown123, + BGPoints123, + BGConvertAll123, + BGTickNo123, + BGTickYes123, + BGSelectAll123, + BGDeSelectAll123, + BGSettings123, + BGComponents123, + BGFields123, + BGTableHeader123, + BGTableCell123, + BGTableTitle123, + BGBoxWithBorder123, + BGPointSelected123, + BGPointMenu123, + BGControlAbsent123, + BGControlBezierSymmetrical123, + BGControlBezierIndependent123, + BGPointDelete123, + BGLockOff123, + BGLockOn123, + BGCcNoImage123, + BGCurveComponents123, + BGHelp123, + BGBoxRed123, + BGBoxWhite123, + BGCollapseAll123, + BGExpandAll123, + BGHierarchyIcon123, + BGHierarchySelectedIcon123, + BGHierarchyErrorIcon123, + BGHierarchyErrorSelectedIcon123, + BGOn123, + BGOff123, + BGHierarchyWarningSelectedIcon123, + BGHierarchyWarningIcon123, + BGMenuItemBackground123, + BGPointInsertAfter123, + BGPointInsertBefore123, + BGSelectionAdd123, + BGSelectionRemove123, + BGExpanded123, + BGCollapsed123, + BGSettingsIcon123, + BGCcEditName123, + BGHandlesOn123, + BGHandlesOff123, + BGCopy123, + BGPaste123 + } + + private static readonly DragSession dragSession = new DragSession(); + private static Texture2D whiteTexture1x1; + + private static float xSnap = EditorPrefs.GetFloat("MoveSnapX", 1f); + private static float ySnap = EditorPrefs.GetFloat("MoveSnapY", 1f); + private static float zSnap = EditorPrefs.GetFloat("MoveSnapZ", 1f); + + private static string currentIconPath = DefaultIconPath; + private static string additionalCcIconPath; + + private static readonly List layers = new List(); + private static readonly List layerNumbers = new List(); + private static readonly List optionsList = new List(); + private static readonly List fieldsList = new List(); + private static bool vertexSnappingOn; + + static BGEditorUtility() + { + ReloadSnapSettings(); + } + + public static void ReloadSnapSettings() + { + xSnap = EditorPrefs.GetFloat("MoveSnapX", 1f); + ySnap = EditorPrefs.GetFloat("MoveSnapY", 1f); + zSnap = EditorPrefs.GetFloat("MoveSnapZ", 1f); + } + + // ============================================== OnSceneGui utils + + public static void SwapHandlesColor(Color color, Action action) + { + var oldColor = Handles.color; + Handles.color = color; + action(); + Handles.color = oldColor; + } + + public static void SwapGizmosColor(Color color, Action action) + { + var oldColor = Gizmos.color; + Gizmos.color = color; + action(); + Gizmos.color = oldColor; + } + + public static Vector2 GetSceneViewPosition(Vector3 position, float sceneViewHeight) + { + var screenPoint = SceneView.currentDrawingSceneView.camera.WorldToScreenPoint(position); + return new Vector2(screenPoint.x, sceneViewHeight - screenPoint.y); + } + + public static Vector2 GetSceneViewPosition(Vector3 position) + { + var screenPoint = SceneView.currentDrawingSceneView.camera.WorldToScreenPoint(position); + return new Vector2(screenPoint.x, GetSceneViewHeight() - screenPoint.y); + } + + public static float GetSceneViewHeight() + { + return SceneView.currentDrawingSceneView.camera.pixelHeight; + } + + public static float GetHandleSize(Vector3 position, float scale = 1) + { + return HandleUtility.GetHandleSize(position)*scale; + } + + // ============================================== OnInspectorGui utils + public static void SwapGuiBackgroundColor(Color color, Action action) + { + var oldColor = GUI.backgroundColor; + GUI.backgroundColor = color; + + Assign(ref whiteTexture1x1, () => Texture1X1(Color.white)); + + try + { + var temp = whiteTexture1x1.width; + temp.Equals(1); + } + catch (MissingReferenceException) + { + //have no darn idea about any other way to reload the texture + whiteTexture1x1 = Texture1X1(Color.white); + } + + Horizontal(new GUIStyle(GUIStyle.none) {normal = {background = whiteTexture1x1}}, action); + GUI.backgroundColor = oldColor; + } + + public static void FadeGroup(BoolAnimatedProperty boolProperty, Action callback) + { + VerticalBox(() => + { + boolProperty.Property.boolValue = boolProperty.AnimBool.target = EditorGUILayout.ToggleLeft(boolProperty.Property.displayName, boolProperty.Property.boolValue); + if (EditorGUILayout.BeginFadeGroup(boolProperty.AnimBool.faded)) Indent(1, callback); + EditorGUILayout.EndFadeGroup(); + }); + } + + public static void Indent(int steps, Action action) + { + StartIndent(steps); + action(); + EndIndent(steps); + } + + public static void EndIndent(int steps = 2) + { + EditorGUI.indentLevel -= steps; + } + + public static void StartIndent(int steps = 2) + { + EditorGUI.indentLevel += steps; + } + + public static bool ButtonOnOff(ref bool value, string name, string tooltip, Color onColor, GUIContent onContent, GUIContent offContent, Action additionalAction = null) + { + var myValue = value; + Action action = () => + { + EditorGUILayout.PrefixLabel(new GUIContent(name, tooltip)); + if (GUILayout.Button(myValue ? onContent : offContent)) myValue = !myValue; + + if (additionalAction != null) additionalAction(); + }; + + if (myValue) SwapGuiBackgroundColor(onColor, action); + else HorizontalBox(action); + + value = myValue; + return myValue; + } + + + // ============================================== Layout + public static void Vertical(Action callback) + { + Vertical(GUIStyle.none, callback); + } + + public static void Vertical(GUIStyle style, Action callback) + { + EditorGUILayout.BeginVertical(style); + callback(); + EditorGUILayout.EndVertical(); + } + + public static void VerticalBox(Action callback) + { + Vertical("Box", callback); + } + + public static void Horizontal(Action callback) + { + Horizontal(GUIStyle.none, callback); + } + + public static void Horizontal(GUIStyle style, Action callback) + { + EditorGUILayout.BeginHorizontal(style); + callback(); + EditorGUILayout.EndHorizontal(); + } + + public static void HorizontalBox(Action callback) + { + Horizontal("Box", callback); + } + + + // ============================================== Fields + public static void TextField(Rect rect, string value, Action action, bool isDelayed) + { + var newValue = !isDelayed ? EditorGUI.TextField(rect, value) : EditorGUI.DelayedTextField(rect, value); + if (!String.Equals(newValue, value)) action(newValue); + } + + public static void TextField(string value, Action action, bool isDelayed) + { + var newValue = !isDelayed ? EditorGUILayout.TextField(value) : EditorGUILayout.DelayedTextField(value); + if (!String.Equals(newValue, value)) action(newValue); + } + + public static void TextField(string label, string value, Action action, bool isDelayed) + { + var newValue = !isDelayed ? EditorGUILayout.TextField(label, value) : EditorGUILayout.DelayedTextField(label, value); + if (!String.Equals(newValue, value)) action(newValue); + } + + public static void BoolField(Rect rect, bool value, Action action) + { + var newValue = EditorGUI.Toggle(rect, value); + if (value != newValue) action(newValue); + } + + public static void BoolField(string label, bool value, Action action) + { + var newValue = EditorGUILayout.Toggle(label, value); + if (value != newValue) action(newValue); + } + + public static void Vector3Field(string name, string tooltip, Vector3 value, Action action) + { + var newValue = EditorGUILayout.Vector3Field(new GUIContent(name, tooltip), value); + if (AnyChange(newValue, value)) action(newValue); + } + + public static void Vector2Field(string name, string tooltip, Vector2 value, Action action) + { + var newValue = EditorGUILayout.Vector2Field(new GUIContent(name, tooltip), value); + if (AnyChange(newValue, value)) action(newValue); + } + + public static void ToggleField(bool value, string label, Action action) + { + var newValue = EditorGUILayout.Toggle(label, value); + if (value != newValue) action(newValue); + } + + public static void ToggleField(Rect rect, bool value, Action action) + { + var newValue = EditorGUI.Toggle(rect, value); + if (value ^ newValue && action != null) action(newValue); + } + + public static void IntField(string label, int value, Action action) + { + var newValue = EditorGUILayout.IntField(label, value); + if (value != newValue) action(newValue); + } + + public static void FloatField(string label, float value, Action action) + { + var newValue = EditorGUILayout.FloatField(label, value); + if (Math.Abs(value - newValue) > BGCurve.Epsilon) action(newValue); + } + + public static void BoundsField(string label, Bounds value, Action action) + { + var newValue = EditorGUILayout.BoundsField(label, value); + if (value != newValue) action(newValue); + } + + public static void AnimationCurveField(string label, AnimationCurve value, Action action) + { + if (value == null) value = new AnimationCurve(); + var newValue = EditorGUILayout.CurveField(label, value); + if (value != newValue) action(newValue); + } + + public static void QuaternionField(string label, Quaternion value, Action action) + { + var oldValue = new Vector4(value.x, value.y, value.z, value.w); + var newValue = EditorGUILayout.Vector4Field(label, oldValue); + if (oldValue != newValue) action(new Quaternion(newValue.x, newValue.y, newValue.z, newValue.w)); + } + + public static void GameObjectField(string label, GameObject value, Action action) + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(GameObject), true); + if (value != newValue) action((GameObject) newValue); + } + + public static void ComponentField(string label, T value, Action action) where T : Component + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(T), true); + if (value != newValue) action((T) newValue); + } + + + public static void ComponentChoosableField(string label, Component value, Action action) + { + Horizontal(() => + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(Component), true); + if (value != newValue) action((Component) newValue); + + if (newValue != null && GUILayout.Button("...", GUILayout.Width(40))) BGChoseComponentWindow.Open((Component) newValue, action); + }); + } + + public static void BGCurveField(string label, BGCurve value, Action action) + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(BGCurve), true); + if (value != newValue) action((BGCurve) newValue); + } + + public static void BGCurvePointComponentField(string label, BGCurvePointComponent value, Action action) + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(BGCurvePointComponent), true); + if (value != newValue) action((BGCurvePointComponent) newValue); + } + + public static void BGCurvePointGOField(string label, BGCurvePointGO value, Action action) + { + var newValue = EditorGUILayout.ObjectField(label, value, typeof(BGCurvePointGO), true); + if (value != newValue) action((BGCurvePointGO) newValue); + } + + + public static void ColorField(Rect rect, Color color, Action action) + { + var newValue = EditorGUI.ColorField(rect, color); + if (AnyChange(color, newValue)) action(newValue); + } + + public static void ColorField(string label, Color32 color, Action action) + { + var newValue = EditorGUILayout.ColorField(label, color); + if (AnyChange(color, newValue)) action(newValue); + } + + public static void SliderField(Rect rect, float value, float min, float max, Action action) + { + var newValue = GUI.HorizontalSlider(rect, value, min, max); + if (AnyChange(value, newValue)) action(newValue); + } + + public static void SliderField(int value, int min, int max, Action action) + { + var newValue = EditorGUILayout.IntSlider(value, min, max); + if (AnyChange(value, newValue)) action(newValue); + } + + public static void SliderField(float value, float min, float max, Action action) + { + var newValue = GUILayout.HorizontalSlider(value, min, max); + if (AnyChange(value, newValue)) action(newValue); + } + + + public static void PopupField(Rect rect, Enum value, Enum[] allOptions, Action action) + { + var options = new string[allOptions.Length]; + var selected = 0; + for (var i = 0; i < allOptions.Length; i++) + { + var val = allOptions.GetValue(i); + + options[i] = val.ToString(); + if (Equals(value, val)) selected = i; + } + var newIndex = EditorGUI.Popup(rect, selected, options); + + if (newIndex != selected) action((Enum) allOptions.GetValue(newIndex)); + } + + public static void PopupField(Rect rect, Enum value, Action action) + { + PopupField(rect, value, Enum.GetValues(value.GetType()).Cast().ToArray(), action); + } + + public static void PopupField(Enum value, string label, Enum[] allOptions, Action action) + { + var options = new string[allOptions.Length]; + var selected = 0; + for (var i = 0; i < allOptions.Length; i++) + { + var val = allOptions.GetValue(i); + + options[i] = val.ToString(); + if (Equals(value, val)) selected = i; + } + var newIndex = EditorGUILayout.Popup(label, selected, options); + + if (newIndex != selected) action((Enum) allOptions.GetValue(newIndex)); + } + + public static void PopupField(Enum value, string label, Action action) + { + PopupField(value, label, Enum.GetValues(value.GetType()).Cast().ToArray(), action); + } + + + public static void LayerMaskField(string label, LayerMask layer, Action action) + { +/* + var newValue = EditorGUILayout.LayerField(label, layer.value); + if (newValue != layer.value) action(newValue); + */ + //thanks to FlyingOstriche + //I have no time to figure out what's going on here + layers.Clear(); + layerNumbers.Clear(); + + for (var i = 0; i < 32; i++) + { + var layerName = LayerMask.LayerToName(i); + if (String.IsNullOrEmpty(layerName)) continue; + + layers.Add(layerName); + layerNumbers.Add(i); + } + + var mask = 0; + for (var i = 0; i < layerNumbers.Count; i++) + if (((1 << layerNumbers[i]) & layer.value) > 0) + { + mask |= (1 << i); + } + + var newValue = EditorGUILayout.MaskField(label, mask, layers.ToArray()); + + //do not convert to LINQ + var newMask = 0; + var newMaskCheck = 0; + for (var i = 0; i < layerNumbers.Count; i++) + if ((newValue & (1 << i)) > 0) + { + newMask |= (1 << layerNumbers[i]); + newMaskCheck |= (1 << i); + } + + if (newMaskCheck == mask) return; + + + action(newMask); + } + + public static void CustomField(GUIContent label, BGCurve curve, BGCurvePointField value, BGCurvePointField.TypeEnum type, Action action) + { + //idea.. this is a nasty hack to get rid of weak reference object.. not sure how to get rid of it properly + if (value == null) action(null); + + optionsList.Clear(); + fieldsList.Clear(); + + optionsList.Add(new GUIContent("None")); + + var fields = curve.Fields; + var selectedIndex = 0; + if (fields != null && fields.Length > 0) + { + var cursor = 1; + foreach (var field in fields) + { + if (field.Type != type) continue; + + var b = value != null; + var @equals = b && String.Equals(value.FieldName, field.FieldName); + if (b && @equals) selectedIndex = cursor; + + optionsList.Add(new GUIContent(field.FieldName)); + fieldsList.Add(field); + cursor++; + } + } + var newIndex = EditorGUILayout.Popup(label, selectedIndex, optionsList.ToArray()); + if (newIndex != selectedIndex) action(newIndex == 0 ? null : fieldsList[newIndex - 1]); + } + + + // ============================================== Textures + //loads a texture2d + public static Texture2D LoadTexture2D(Image image, string path = DefaultIconPath, string ext = ".png", bool critical = true) + { + if (String.Equals(path, DefaultIconPath)) path = currentIconPath; + + var icon = LoadTexture(path + image + ext); + if (icon != null) return icon; + + //try to find in assets + var newPath = FindByName(Image.BGDelete123.ToString()); + if (newPath == null) + { + if (critical) + { + // no luck + Debug.LogException(new UnityException( + "Can not find BGCurve Editors icons folder. The icons folder, located by default at '" + DefaultIconPath + + "', should be included in your assets, otherwise the package will not work correctly in Editor.")); + } + return null; + } + + currentIconPath = FolderFromFullPath(newPath); + return LoadTexture(currentIconPath + image + ext); + } + + public static Texture2D LoadCcTexture2D(string path) + { + if (String.IsNullOrEmpty(path)) return null; + + var icon = LoadTexture(path); + + if (icon == null) + { + string fileName; + string fileNameNoExtension; + try + { + fileName = FileFromFullPath(path); + fileNameNoExtension = StripExtension(fileName); + } + catch (Exception) + { + return null; + } + + if (String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(fileNameNoExtension)) return null; + + //try to find in another place + if (additionalCcIconPath != null) icon = LoadTexture(additionalCcIconPath + fileName); + + if (icon == null) + { + var newPath = FindByName(fileNameNoExtension); + if (newPath != null) + { + var newFolder = FolderFromFullPath(newPath); + if (additionalCcIconPath == null) additionalCcIconPath = newFolder; + icon = LoadTexture(newFolder + fileName); + } + } + } + return icon; + } + + public static Texture2D LoadTexture(string path) + { + //we do hope LoadAssetAtPath is optimized by Unity + return AssetDatabase.LoadAssetAtPath(path); + } + + private static string FindByName(string fileName) + { + var files = AssetDatabase.FindAssets(fileName); + return files == null || files.Length == 0 ? null : AssetDatabase.GUIDToAssetPath(files[0]); + } + + private static string FolderFromFullPath(string path) + { + try + { + var maxSlashIndex = Mathf.Max(path.LastIndexOf('/'), path.LastIndexOf('\\')); + return maxSlashIndex >= 0 ? path.Substring(0, maxSlashIndex + 1) : path; + } + catch (Exception) + { + return null; + } + } + + private static string FileFromFullPath(string path) + { + try + { + var maxSlashIndex = Mathf.Max(path.LastIndexOf('/'), path.LastIndexOf('\\')); + return maxSlashIndex >= 0 ? path.Substring(maxSlashIndex + 1, path.Length - maxSlashIndex - 1) : path; + } + catch (Exception) + { + return null; + } + } + + private static string StripExtension(string fileName) + { + try + { + var dotIndex = Mathf.Max(fileName.LastIndexOf('.')); + return dotIndex >= 0 ? fileName.Substring(0, dotIndex) : fileName; + } + catch (Exception) + { + return null; + } + } + + + // texture is not getting scaled! + public static bool ButtonWithIcon(Texture2D icon, string tooltip, int width = 16, int height = 16) + { + return GUI.Button( + GUILayoutUtility.GetRect(width, width, height, height, + new GUIStyle {fixedWidth = width, fixedHeight = height, stretchWidth = false, stretchHeight = false}), + new GUIContent(icon, tooltip), GUIStyle.none); + } + + public static Texture2D Texture1X1(Color color) + { + var texture = new Texture2D(1, 1, TextureFormat.ARGB32, false); + texture.SetPixel(0, 0, color); + texture.Apply(false); + return texture; + } + + public static Texture2D TextureWithBorder(int size, int borderSize, Color color, Color borderColor) + { + if (size < 4) size = 4; + else if (size > 1024) size = 1024; + if (!Mathf.IsPowerOfTwo(size)) size = Mathf.ClosestPowerOfTwo(size); + + if (borderSize < 1) borderSize = 1; + else if (borderSize > size/2) borderSize = Mathf.CeilToInt(size/2f); + + var texture = new Texture2D(size, size, TextureFormat.ARGB32, false); + + //idea... setPixels works faster + //left + for (var i = 0; i < borderSize; i++) for (var j = 0; j < size; j++) texture.SetPixel(i, j, borderColor); + //right + for (var i = size - borderSize; i < size; i++) for (var j = 0; j < size; j++) texture.SetPixel(i, j, borderColor); + for (var i = borderSize; i < size - borderSize; i++) + { + //top + for (var j = 0; j < borderSize; j++) texture.SetPixel(i, j, borderColor); + //bottom + for (var j = size - borderSize; j < size; j++) texture.SetPixel(i, j, borderColor); + } + + //back + for (var i = borderSize; i < size - borderSize; i++) for (var j = borderSize; j < size - borderSize; j++) texture.SetPixel(i, j, color); + + texture.Apply(false); + return texture; + } + + // ============================================== Dialogs + public static void Inform(string title, string message) + { + EditorUtility.DisplayDialog(title, message, "Ok"); + } + + public static bool Confirm(string title, string message, string ok) + { + return EditorUtility.DisplayDialog(title, message, ok, "Cancel"); + } + + public static void HelpBox(string message, MessageType messageType, bool condition = true, Action elseAction = null) + { + if (condition) EditorGUILayout.HelpBox(message, messageType); + else if (elseAction != null) elseAction(); + } + + + // ============================================== Custom handles + + public static Vector3 ControlHandleCustom(int number, Vector3 position, Quaternion rotation, BGCurveSettings.SettingsForHandles handlesSettings) + { + var handleSize = GetHandleSize(position); + + if (vertexSnappingOn) + { + Handles.color = Handles.centerColor; + GUI.SetNextControlName("FreeMoveAxis"); + return Handles.FreeMoveHandle(position, rotation, handleSize*0.15f, new Vector3(xSnap, ySnap, zSnap), Handles.RectangleCap); + } + + var axisSize = handleSize*handlesSettings.AxisScale; + + var color = Handles.color; + + if (!handlesSettings.RemoveX) position = AxisHandle(position, rotation, axisSize, Handles.xAxisColor, "xAxis", Vector3.right, xSnap, handlesSettings.Alpha); + + if (!handlesSettings.RemoveY) position = AxisHandle(position, rotation, axisSize, Handles.yAxisColor, "yAxis", Vector3.up, ySnap, handlesSettings.Alpha); + + if (!handlesSettings.RemoveZ) position = AxisHandle(position, rotation, axisSize, Handles.zAxisColor, "zAxis", Vector3.forward, zSnap, handlesSettings.Alpha); + + if (!handlesSettings.RemoveXZ) position = PlanarHandle("xz" + number, position, rotation, handleSize*.3f*handlesSettings.PlanesScale, Vector3.right, Vector3.forward, Handles.yAxisColor); + + if (!handlesSettings.RemoveYZ) position = PlanarHandle("yz" + number, position, rotation, handleSize*.3f*handlesSettings.PlanesScale, Vector3.up, Vector3.forward, Handles.xAxisColor); + + if (!handlesSettings.RemoveXY) position = PlanarHandle("xy" + number, position, rotation, handleSize*.3f*handlesSettings.PlanesScale, Vector3.up, Vector3.right, Handles.zAxisColor); + + Handles.color = color; + return position; + } + + private static Vector3 AxisHandle(Vector3 position, Quaternion rotation, float handleSize, Color color, string controlName, Vector3 direction, float snap, float alpha) + { + Handles.color = new Color(color.r, color.g, color.b, alpha); + GUI.SetNextControlName(controlName); + return Handles.Slider(position, rotation*direction, handleSize, Handles.ArrowCap, snap); + } + + // ======================================================================================= + // This is a hell lot of a hackery & bad code & probably bugs. + // idea.. to rewrite + // ======================================================================================= + private static Vector3 PlanarHandle(string name, Vector3 position, Quaternion rotation, float size, Vector3 direction1, Vector3 direction2, Color color) + { + var c = Handles.color; + Handles.color = color; + var v1 = rotation*(direction1*size); + var v2 = rotation*(direction2*size); + var verts = new[] {position + v1 + v2, position + v1 - v2, position - v1 - v2, position - v1 + v2}; + + //adjustments + var cameraPos = Camera.current.transform.position; + var min = Single.MaxValue; + + + var minIndex = -1; + var dragCheck = dragSession.Active(name); + + if (dragCheck > 0) minIndex = dragCheck; + else + { + for (var i = 0; i < verts.Length; i++) + { + var magnitude = (cameraPos - verts[i]).sqrMagnitude; + if ((min < magnitude)) continue; + + minIndex = i; + min = magnitude; + } + + dragSession.NextMin(minIndex, name); + } + + for (var i = 0; i < verts.Length; i++) if (i != minIndex) verts[i] = Vector3.Lerp(verts[i], verts[minIndex], .5f); + + var center = (verts[0] + verts[1] + verts[2] + verts[3])*.25f; + + Handles.DrawSolidRectangleWithOutline(verts, new Color(color.r, color.g, color.r, .1f), new Color(0.0f, 0.0f, 0.0f, 0.0f)); + + GUI.SetNextControlName(name); + + var newCenter = Handles.Slider2D(center, rotation*Vector3.Cross(direction1, direction2), rotation*direction1, rotation*direction2, size*.5f, Handles.RectangleCap, 0); + + if (AnyChange(center, newCenter)) position = position + (newCenter - center); + + Handles.color = c; + return position; + } + + + // ============================================= Misc functions + + public static string ToHex(Color c) + { + return String.Format("#{0:X2}{1:X2}{2:X2}", ToByte(c.r), ToByte(c.g), ToByte(c.b)); + } + + private static byte ToByte(float f) + { + f = Mathf.Clamp01(f); + return (byte) (f*255); + } + + public static string ColorIt(string message, string color) + { + return "" + message + ""; + } + + public static bool AnyChange(Vector3 vector1, Vector3 vector2) + { + return !Mathf.Approximately(vector1.x, vector2.x) || !Mathf.Approximately(vector1.y, vector2.y) || !Mathf.Approximately(vector1.z, vector2.z); + } + + public static bool AnyChange(float value1, float value2) + { + return !Mathf.Approximately(value1, value2); + } + + private static bool AnyChange(Color32 color1, Color32 color2) + { + return color1.r != color2.r || color1.g != color2.g || color1.b != color2.b || color1.a != color2.a; + } + + public static T Assign(ref T nullable, Func valueProvider) where T : class + { + return nullable ?? (nullable = valueProvider()); + } + + public static void Iterate(T[] array, Action action) + { + if (array == null || array.Length == 0) return; + for (var i = 0; i < array.Length; i++) action(i, array[i]); + } + + public static bool IterateInterruptable(T[] array, Func action) + { + if (array == null || array.Length == 0) return false; + if (array.Where((t, i) => action(i, t)).Any()) return true; + return false; + } + + public static TV Ensure(Dictionary key2Value, TK key, Func valueProvider) + { + if (key2Value.ContainsKey(key)) return key2Value[key]; + + var newValue = valueProvider(); + key2Value[key] = newValue; + return newValue; + } + + public static List Ensure(Dictionary> key2Value, TK key) + { + if (key2Value.ContainsKey(key)) return key2Value[key]; + + var newValue = new List(); + key2Value[key] = newValue; + return newValue; + } + + public static bool ChangeCheck(Action action, Action changeCallback = null) + { + EditorGUI.BeginChangeCheck(); + action(); + var changed = EditorGUI.EndChangeCheck(); + if (changed && changeCallback != null) changeCallback(); + return changed; + } + + + public static void SwapGuiColor(Color color, Action action) + { + var oldColor = GUI.color; + GUI.color = color; + action(); + GUI.color = oldColor; + } + + public static void SwapLabelWidth(int width, Action action) + { + var oldValue = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = width; + action(); + EditorGUIUtility.labelWidth = oldValue; + } + + public static void DisableGui(Action action, bool condition = true) + { + var oldValue = false; + if (condition) + { + oldValue = GUI.enabled; + GUI.enabled = false; + } + action(); + if (condition) GUI.enabled = oldValue; + } + + public static bool Empty(T[] array) + { + return array == null || array.Length == 0; + } + + public static bool Empty(List list) + { + return list == null || list.Count == 0; + } + + public static string Trim(string value, int maxWidth) + { + if (value == null) return null; + + string result; + + if (value.Length < maxWidth) + { + result = value.Substring(0, value.Length); + } + else + { + result = value.Substring(0, maxWidth - "..".Length) + ".."; + } + return result; + } + + public static T ShowPopupWindow(Vector2 size) where T : EditorWindow + { + // var window = EditorWindow.GetWindow(); + var window = ScriptableObject.CreateInstance(); + + var screenPoint = GUIUtility.GUIToScreenPoint(Event.current.mousePosition); + window.ShowAsDropDown(new Rect(screenPoint.x, screenPoint.y, 16, 16), size); + return window; + } + + public static void DrawBound(Bounds bounds, Color color, Color borderColor) + { + var min = bounds.min; + var max = bounds.max; + + var xMin = min.x; + var xMax = max.x; + var yMin = min.y; + var yMax = max.y; + var zMin = min.z; + var zMax = max.z; + + var p1 = new Vector3(xMin, yMin, zMin); + var p2 = new Vector3(xMin, yMax, zMin); + var p3 = new Vector3(xMax, yMax, zMin); + var p4 = new Vector3(xMax, yMin, zMin); + var p5 = new Vector3(xMin, yMin, zMax); + var p6 = new Vector3(xMin, yMax, zMax); + var p7 = new Vector3(xMax, yMax, zMax); + var p8 = new Vector3(xMax, yMin, zMax); + + DrawRect(p1, p2, p3, p4, color, borderColor); + DrawRect(p1, p5, p6, p2, color, borderColor); + DrawRect(p2, p6, p7, p3, color, borderColor); + DrawRect(p3, p7, p8, p4, color, borderColor); + DrawRect(p4, p8, p5, p1, color, borderColor); + DrawRect(p5, p6, p7, p8, color, borderColor); + } + + + public static void DrawRect(Vector3 v1, Vector3 v2, Vector3 v3, Vector3 v4, Color color, Color bColor) + { + var verts = new[] {v1, v2, v3, v4}; + Handles.DrawSolidRectangleWithOutline(verts, color, bColor); + } + + // ============================================= Curve related + //this is very slow + public static void Split(BGCurvePointI @from, BGCurvePointI to, int parts, Action action) + { + var noControls = @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent; + if (noControls) + { + action(@from.PositionWorld, to.PositionWorld); + } + else + { + var fromPos = @from.PositionWorld; + var toPos = to.PositionWorld; + var control1 = @from.ControlSecondWorld; + var control2 = to.ControlFirstWorld; + var bothControls = @from.ControlType != BGCurvePoint.ControlTypeEnum.Absent && to.ControlType != BGCurvePoint.ControlTypeEnum.Absent; + if (!bothControls && @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent) control1 = control2; + + + var prev = fromPos; + for (var i = 1; i < parts + 1; i++) + { + var ratio = i/(float) parts; + + var currentPosition = bothControls + ? BGCurveFormulas.BezierCubic(ratio, fromPos, control1, control2, toPos) + : BGCurveFormulas.BezierQuadratic(ratio, fromPos, control1, toPos); + action(prev, currentPosition); + prev = currentPosition; + } + } + } + + //copy paste from math, not sure how to refactor it + public static Vector3 CalculatePosition(BGCurvePointI @from, BGCurvePointI to, float t) + { + if (@from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent) + { + return Vector3.Lerp(@from.PositionWorld, to.PositionWorld, t); + } + if (@from.ControlType != BGCurvePoint.ControlTypeEnum.Absent && to.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + { + return BGCurveFormulas.BezierCubic(t, @from.PositionWorld, @from.ControlSecondWorld, to.ControlFirstWorld, to.PositionWorld); + } + + return BGCurveFormulas.BezierQuadratic(t, @from.PositionWorld, @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent ? to.ControlFirstWorld : @from.ControlSecondWorld, + to.PositionWorld); + } + + /// Tangent in World coordinates + public static Vector3 CalculateTangent(BGCurvePointI @from, BGCurvePointI to, float t) + { + if (@from.ControlType == BGCurvePoint.ControlTypeEnum.Absent && to.ControlType == BGCurvePoint.ControlTypeEnum.Absent) + { + return (to.PositionWorld - @from.PositionWorld).normalized; + } + if (@from.ControlType != BGCurvePoint.ControlTypeEnum.Absent && to.ControlType != BGCurvePoint.ControlTypeEnum.Absent) + { + return BGCurveFormulas.BezierCubicDerivative(t, @from.PositionWorld, @from.ControlSecondWorld, to.ControlFirstWorld, to.PositionWorld).normalized; + } + + return BGCurveFormulas.BezierQuadraticDerivative(t, @from.PositionWorld, @from.ControlType == BGCurvePoint.ControlTypeEnum.Absent ? to.ControlFirstWorld : @from.ControlSecondWorld, + to.PositionWorld).normalized; + } + + /// Tangent in World coordinates + public static Vector3 CalculateTangent(BGCurvePointI point, BGCurvePointI previous, BGCurvePointI next, float precision) + { + var prevTangent = previous != null ? CalculateTangent(previous, point, 1 - precision) : Vector3.zero; + var nextTangent = next != null ? CalculateTangent(point, next, precision) : Vector3.zero; + + var tangent = (previous != null && next != null) + ? Vector3.Lerp(prevTangent, nextTangent, .5f) + : next == null ? prevTangent : nextTangent; + + return tangent.normalized; + } + +/* + public static Vector3 CalculateTangent(BGCurvePoint point, float precision) + { + var curve = point.Curve; + + //not enough points + if (curve.PointsCount < 2) return Vector3.zero; + + var myIndex = curve.IndexOf(point); + + //have no idea why it can happen + if (myIndex < 0) return Vector3.zero; + + //prev point + BGCurvePoint prev = null; + if (myIndex != 0 || curve.Closed) + { + prev = myIndex == 0 ? curve[curve.PointsCount - 1] : curve[myIndex - 1]; + } + + //next point + BGCurvePoint next = null; + if (myIndex != curve.PointsCount - 1 || curve.Closed) + { + next = myIndex == curve.PointsCount - 1 ? curve[0] : curve[myIndex + 1]; + } + return CalculateTangent(point, prev, next, precision); + } + */ + + public static float CalculateDistance(BGCurvePointI from, BGCurvePointI to, int parts) + { + var distance = 0f; + Split(@from, to, parts, (fromPos, toPos) => distance += Vector3.Distance(fromPos, toPos)); + return distance; + } + + // ============================================= Helper classes + public class BoolAnimatedProperty + { + public readonly SerializedProperty Property; + public readonly AnimBool AnimBool = new AnimBool(); + + public BoolAnimatedProperty(UnityEditor.Editor editor, SerializedProperty obj, string name) + { + Property = obj.FindPropertyRelative(name); + AnimBool.target = Property.boolValue; + AnimBool.valueChanged.AddListener(editor.Repaint); + } + } + + private sealed class DragSession + { + private int minIndex; + private bool needtoRecalculate; + private string lastActiveName; + + + public int Active(string name) + { + var currentEvent = Event.current; + + if (currentEvent.type == EventType.MouseUp || currentEvent.type == EventType.MouseDown) needtoRecalculate = true; + + if (needtoRecalculate || GUIUtility.hotControl == 0 || !String.Equals(lastActiveName, name) || !String.Equals(GUI.GetNameOfFocusedControl(), name)) return -1; + + return minIndex; + } + + public void NextMin(int minIndex, string name) + { + if (GUIUtility.hotControl == 0 || !String.Equals(GUI.GetNameOfFocusedControl(), name)) return; + + lastActiveName = name; + needtoRecalculate = false; + this.minIndex = minIndex; + } + } + + public static void Release(ref EventCanceller eventCanceller) + { + if (eventCanceller != null) + { + eventCanceller.Release(); + //bye + eventCanceller = null; + } + } + + public class EventCanceller + { + public EventCanceller() + { + Event.current.Use(); + GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); + } + + internal void Release() + { + GUIUtility.hotControl = 0; + } + } + + public class ExitException : Exception + { + //get me outta of here + } + + //handles + public static Vector3 Handle(int number, BGCurveSettings.HandlesTypeEnum type, Vector3 position, Quaternion rotation, BGCurveSettings.SettingsForHandles handlesSettings) + { + switch (type) + { + case BGCurveSettings.HandlesTypeEnum.FreeMove: + position = Handles.FreeMoveHandle(position, rotation, GetHandleSize(position, .2f), Vector3.zero, Handles.CircleCap); + break; + case BGCurveSettings.HandlesTypeEnum.Standard: + position = Handles.PositionHandle(position, rotation); + break; + case BGCurveSettings.HandlesTypeEnum.Configurable: + + var dragging = GUIUtility.hotControl != 0; + var current = Event.current; + switch (current.type) + { + case EventType.KeyDown: + if (current.keyCode == KeyCode.V && !dragging) vertexSnappingOn = true; + break; + case EventType.KeyUp: + if (current.keyCode == KeyCode.V && !current.shift && !dragging) vertexSnappingOn = false; + break; + case EventType.Layout: + var vertexDragging = BGPrivateField.Get(typeof(Tools), "vertexDragging"); + if (!dragging && !vertexDragging) vertexSnappingOn = current.shift; + break; + } + + + position = ControlHandleCustom(number, position, rotation, handlesSettings); + break; + } + return position; + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs.meta new file mode 100644 index 0000000..9d9a69d --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGEditorUtility.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 2e1efa288be0969499190391b84444b4 +timeCreated: 1458400607 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs new file mode 100644 index 0000000..469c247 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs @@ -0,0 +1,113 @@ +using System; +using System.Reflection; +using BansheeGz.BGSpline.Curve; +using UnityEngine; + +namespace BansheeGz.BGSpline.Editor +{ + // access private members + public static class BGPrivateField + { + //--------------------------------------- Settings + public static void SetSettings(BGCurve curve, BGCurveSettings settings) + { + Set(curve, "settings", settings); + } + + public static BGCurveSettings GetSettings(BGCurve curve) + { + return Get(curve, "settings"); + } + + //--------------------------------------- Fields + public static bool GetShowHandles(BGCurvePointField field) + { + return Get(field, "showHandles"); + } + + public static int GetHandlesType(BGCurvePointField field) + { + return Get(field, "handlesType"); + } + + public static Color GetHandlesColor(BGCurvePointField field) + { + return Get(field, "handlesColor"); + } + + public static bool GetShowInPointsMenu(BGCurvePointField field) + { + return Get(field, "showInPointsMenu"); + } + + public static void SetShowHandles(BGCurvePointField field, bool value) + { + Set(field, "showHandles", value); + } + + public static void SetHandlesType(BGCurvePointField field, int value) + { + Set(field, "handlesType", value); + } + + public static void SetHandlesColor(BGCurvePointField field, Color value) + { + Set(field, "handlesColor", value); + } + + public static void SetShowInPointsMenu(BGCurvePointField field, bool value) + { + Set(field, "showInPointsMenu", value); + } + + //--------------------------------------- Cc + public static bool GetShowHandles(BGCc cc) + { + return Get(cc, "showHandles"); + } + + // == utility + public static T Get(object obj, string name) + { + return (T) GetField(obj, name).GetValue(obj); + } + + public static void Set(object obj, string name, T value) + { + GetField(obj, name).SetValue(obj, value); + } + + private static FieldInfo GetField(object obj, string name) + { + var isStatic = obj is Type; + var type = isStatic ? (Type) obj : obj.GetType(); + + var bindingFlags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; + + if (isStatic) bindingFlags |= BindingFlags.Static; + + var targetField = type.GetField(name, bindingFlags); + + if (targetField != null) return targetField; + + + var basetype = type.BaseType; + while (targetField == null && basetype != null && basetype != typeof(object)) + { + targetField = basetype.GetField(name, bindingFlags); + basetype = basetype.BaseType; + } + return targetField; + } + + public static object Invoke(object obj, string methodName, params object[] parameters) + { + return obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance).Invoke(obj, parameters); + } + + public static object Invoke(object obj, string methodName, Type[] types, params object[] parameters) + { + return obj.GetType().GetMethod(methodName, BindingFlags.NonPublic | BindingFlags.Instance, null, types, null).Invoke(obj, parameters); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs.meta new file mode 100644 index 0000000..dc29f49 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGPrivateField.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: ad83a743d133b9043a076f918496f4a0 +timeCreated: 1458403127 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs new file mode 100644 index 0000000..61c39a0 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs @@ -0,0 +1,69 @@ +using UnityEngine; +using BansheeGz.BGSpline.Curve; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + [InitializeOnLoad] + public static class BGStartUp + { + private const int IconSize = 20; + + // Not selected + private static readonly Texture2D CurveIcon; + private static readonly Texture2D CurveWarningIcon; + private static readonly Texture2D CurveErrorIcon; + + // Selected + private static readonly Texture2D CurveSelectedIcon; + private static readonly Texture2D CurveWarningSelectedIcon; + private static readonly Texture2D CurveErrorSelectedIcon; + + + static BGStartUp() + { + CurveIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchyIcon123, critical:false); + if (CurveIcon!=null) + { + CurveWarningIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchyWarningIcon123); + CurveErrorIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchyErrorIcon123); + + CurveSelectedIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchySelectedIcon123); + CurveWarningSelectedIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchyWarningSelectedIcon123); + CurveErrorSelectedIcon = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGHierarchyErrorSelectedIcon123); + EditorApplication.hierarchyWindowItemOnGUI += ShowIcon; + } + } + + //thanks to laurentlavigne + private static void ShowIcon(int instanceId, Rect selectionRect) + { + var go = EditorUtility.InstanceIDToObject(instanceId) as GameObject; + + if (go == null) return; + var curve = go.GetComponent(); + if (curve == null) return; + + var selected = Selection.Contains(instanceId); + bool hasError = false, hasWarning = false; + BGCurveEditorComponents.ComponentsStatus(curve, ref hasError, ref hasWarning); + + var icon = selected + //selected + ? hasError + ? CurveErrorSelectedIcon + : hasWarning + ? CurveWarningSelectedIcon + : CurveSelectedIcon + + // Not selected + : hasError + ? CurveErrorIcon + : hasWarning + ? CurveWarningIcon + : CurveIcon; + + GUI.Label(new Rect(selectionRect) {x = selectionRect.width - IconSize, width = IconSize}, icon); + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs.meta new file mode 100644 index 0000000..6db4b16 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGStartUp.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: bfc6ad0229c788e4eba29701126bfed0 +timeCreated: 1472626247 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs new file mode 100644 index 0000000..29a3972 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using UnityEditor; + +namespace BansheeGz.BGSpline.Editor +{ + public abstract class BGTransition + { + private readonly bool cycle; +// private readonly double startTime; + private readonly double period; + + private double cycleStartTime; + private float ratio; + + private bool completed; + + public float Ratio + { + get { return ratio; } + } + + + protected BGTransition(double period, bool cycle) + { + this.period = period; + this.cycle = cycle; +// startTime = cycleStartTime = EditorApplication.timeSinceStartup; + } + + public virtual bool Tick() + { + if (completed) return true; + + var elapsed = (float) (EditorApplication.timeSinceStartup - cycleStartTime); + var cycleEnded = elapsed > period; + + if (cycleEnded) + { + elapsed = 0; + cycleStartTime = EditorApplication.timeSinceStartup; + + if (!cycle) completed = true; + } + ratio = (float) (elapsed/period); + + return cycleEnded; + } + + public class SimpleTransition : BGTransition + { + public SimpleTransition(double period, bool cycle) + : base(period, cycle) + { + } + } + + public class SwayTransition : BGTransition + { + private readonly float from; + private readonly float to; + + private bool up = true; + + public float Value { get; set; } + + public SwayTransition(float @from, float to, double period) + : base(period, true) + { + this.from = from; + this.to = to; + Value = from; + } + + public override bool Tick() + { + if (base.Tick()) up = !up; + + Value = up ? Mathf.Lerp(from, to, Ratio) : Mathf.Lerp(to, from, Ratio); + + return true; + } + } + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs.meta new file mode 100644 index 0000000..46acd06 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTransition.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c5d7571d642b2ea499ebf45bd0227fc5 +timeCreated: 1472289579 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs new file mode 100644 index 0000000..6cae669 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs @@ -0,0 +1,275 @@ +using System; +using UnityEngine; +using System.Collections.Generic; +using BansheeGz.BGSpline.Curve; + +namespace BansheeGz.BGSpline.Editor +{ + public class BGTreeView where T : BGTreeNode + { + public readonly List Roots = new List(); + + public Config Configuration { get; private set; } + + private Texture2D linkTexture; + private Texture2D expandedIconTexture; + private Texture2D collapsedIconTexture; + + public Texture2D ExpandedIconTexture + { + get { return expandedIconTexture ?? (expandedIconTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGExpanded123)); } + } + + public Texture2D CollapsedIconTexture + { + get { return collapsedIconTexture ?? (collapsedIconTexture = BGEditorUtility.LoadTexture2D(BGEditorUtility.Image.BGCollapsed123)); } + } + + public BGTreeView(Config config) + { + Configuration = config; + } + + public virtual void OnInspectorGui() + { + IterateRoots((i, root) => + { + if (i != 0) GUILayout.Space(Configuration.VerticalSpace*2); + root.OnInspectorGui(); + }); + } + + public void ExpandCollapseAll(bool collapsed) + { + IterateRoots((i, root) => root.ExpandCollapsed(collapsed, true)); + } + + protected void IterateRoots(Action action) + { + for (var i = 0; i < Roots.Count; i++) action(i, Roots[i]); + } + + public virtual Texture2D GetLinkTexture(int level) + { + BGEditorUtility.Assign(ref linkTexture, () => BGEditorUtility.Texture1X1(Color.black)); + return linkTexture; + } + + //========================================================= Config + public class Config + { + public int VerticalSpace { get; private set; } + public int HorizontalLinkOffset { get; private set; } + public int HorizontalSpace { get; private set; } + public int LinkLineSize { get; private set; } + + public int ExpandCollapseIconSize { get; private set; } + + public Config(int verticalSpace, int horizontalSpace, int horizontalLinkOffset, int linkLineSize, int expandCollapseIconSize) + { + VerticalSpace = verticalSpace; + HorizontalLinkOffset = horizontalLinkOffset; + HorizontalSpace = horizontalSpace; + LinkLineSize = linkLineSize; + ExpandCollapseIconSize = expandCollapseIconSize; + } + } + } + + + //========================================================= Node + //curiously recurring template pattern (something wrong here) + public abstract class BGTreeNode where T : BGTreeNode + { + private readonly BGTreeView tree; + private T parent; + private List children; + + private GUIStyle buttonStyle; + + public virtual bool Collapsed { get; set; } + + public Rect Rect { get; set; } + + public bool HasChildren + { + get { return !BGEditorUtility.Empty(children); } + } + + private List postActions; + + public T Parent + { + get { return parent; } + set + { + if (parent == value) return; + + //remove from old parent + if (parent != null && parent.children != null) parent.children.Remove((T) this); + + parent = value; + if (parent == null) return; + + //recursion check + var currentParent = parent; + var nestingLevel = 0; + while (currentParent != null) + { + if (currentParent == this) throw new BGCc.CcException("Recursion check fail!"); + if (nestingLevel > 10) throw new BGCc.CcException("Recursion check fail! Unacceptable Nesting Level " + nestingLevel); + + currentParent = currentParent.Parent; + nestingLevel++; + } + + //add to parent + parent.children = parent.children ?? new List(); + if (!parent.children.Contains((T) this)) parent.children.Add((T) this); + } + } + + public int Level + { + get + { + if (Parent == null) return 0; + + var parentLevel = Parent.Level; + //just in case (recursion check) + if (parentLevel > 10) throw new BGCc.CcException("Recursion check fail! Unacceptable Nesting Level " + parentLevel); + return parentLevel + 1; + } + } + + public BGTreeView Tree + { + get { return tree; } + } + + + protected BGTreeNode(BGTreeView tree) + { + if (tree == null) throw new BGCc.CcException("tree can not be null!"); + this.tree = tree; + } + + public void ExpandCollapsed(bool collapsed, bool recursive) + { + Collapsed = collapsed; + if (recursive) IterateChildren(child => child.ExpandCollapsed(collapsed, true)); + } + + protected void IterateChildren(Action action) + { + if (BGEditorUtility.Empty(children)) return; + + foreach (var child in children) action(child); + } + + + public virtual Rect OnInspectorGui() + { + var level = Level; + + var myRect = new Rect(); + BGEditorUtility.Vertical(() => + { + BGEditorUtility.Horizontal(() => + { + if (level > 0 && tree.Configuration.HorizontalSpace > 0) GUILayout.Space(tree.Configuration.HorizontalSpace*level); + + BGEditorUtility.Vertical(() => { OnInspectorGuiInternal(level); }); + + myRect = GUILayoutUtility.GetLastRect(); + }); + }); + + if (Event.current.type == EventType.Repaint) Rect = myRect; + + if (children == null || children.Count == 0 || Collapsed) return myRect; + + + //Children + var texture = tree.GetLinkTexture(level); + + var linkStartX = myRect.x + tree.Configuration.HorizontalLinkOffset; + + var childRect = new Rect(); + + var linkSize = tree.Configuration.LinkLineSize; + + if (postActions != null) postActions.Clear(); + foreach (var child in children) + { + if (tree.Configuration.VerticalSpace > 0) GUILayout.Space(tree.Configuration.VerticalSpace); + + childRect = child.OnInspectorGui(); + + //horizontal link + var linkWidth = childRect.x - linkStartX; + + if (!(linkWidth > 0)) continue; + + //child Y Center + var childCenterY = childRect.y + childRect.size.y*.5f; + + //link + var horizontalLink = new Rect( + linkStartX, + childCenterY - linkSize*.5f, + linkWidth, + linkSize); + + GUI.DrawTexture(horizontalLink, texture, ScaleMode.StretchToFill); + + //icon + var iconSize = tree.Configuration.ExpandCollapseIconSize; + if (iconSize > 0 && child.HasChildren) + { + BGEditorUtility.Assign(ref buttonStyle, () => new GUIStyle("Button") + { + margin = new RectOffset(), + padding = new RectOffset(), + border = new RectOffset() + }); + + postActions = postActions ?? new List(); + var childRef = child; + postActions.Add(() => + { + var iconSizeHalf = iconSize*.5f; + if (GUI.Button(new Rect( + linkStartX - iconSizeHalf + linkSize*.5f, + childCenterY - iconSizeHalf + linkSize*.5f, + iconSize, + iconSize), + childRef.Collapsed ? tree.CollapsedIconTexture : tree.ExpandedIconTexture, buttonStyle)) + { + childRef.Collapsed = !childRef.Collapsed; + } + }); + } + } + + if (linkStartX < childRect.x) + { + //vertical link + GUI.DrawTexture(new Rect( + linkStartX, + myRect.yMax, + linkSize, + childRect.center.y - myRect.yMax + ), texture, ScaleMode.StretchToFill); + } + + + if (postActions != null && postActions.Count > 0) foreach (var postAction in postActions) postAction(); + + return myRect; + } + + public abstract void OnInspectorGuiInternal(int level); + public abstract void ProcessStructure(); + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs.meta new file mode 100644 index 0000000..19beb63 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/Scripts/Editor/Utils/BGTreeView.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4fecf1343b9858f4a8c2a2f8c22e15d2 +timeCreated: 1472892209 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt new file mode 100644 index 0000000..edd35b7 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt @@ -0,0 +1,62 @@ +BG Curve v.1.2.2 by BancheeGz (12/2016) +Bezier spline editor for Unity +License: MIT License + +www.bansheegz.com/BGCurve +support email: banshee.gzzz@gmail.com + +===================================================== + +----------------------------------------------------- +Package structure: +----------------------------------------------------- +Curve - basic curve's classes + math (distance, positions, tangents, position by closest point). +Components - components are meant to add some functions to curve without any scripting. +Examples - examples and tests for different use-cases. + +----------------------------------------------------- +Quick tips: +----------------------------------------------------- +1) To create a curve chose GameObjecty->Create Other->BG Curve or AddComponent and search "BGCurve". +2) You can learn a lot by looking at fields tooltips and contextual tips in the editor. Example scene could also be helpfull. +3) You can save & load curve settings on/from disk. +4) You can select several points and perform group operations. Hold shift to use rectangular selection. +5) Use components- they are meant to work without any additional scripting. +5) BGCurve class does not contain any Math operations- to use Math- add BGCcMath component +6) Use 2D mode if needed, it helps with 2d curves. +7) Use Lock view to disable selecting of any object except curve's points. +8) Use point's and selection menus in Scene View (hold Ctrl and hover over a point or selection's center). +9) Use standard Unity's AnimationView to animate splines +10) View demo video. + + + +===================================================== +Versions History: +----------------------------------------------------- +Version 1.2 changes: +----------------------------------------------------- +Animation support +Custom fields for points +Snapping (to terrain etc.) +New components (Scale and Triangulate) +New approximation type (Adaptive) +Base math switched to fastest algorithm available for approximation (25% faster) +Components (ChangeCursor and Rotate) are upgraded to support custom points fields +Points store options (inlined, component, gameobjects) + +----------------------------------------------------- +Version 1.1 changes: +----------------------------------------------------- +Components are added (for using without scripting) +Rectangular selection for points. +Context menu for points and selections in SceneView. +BGCurveBaseMath optimization. +New points now has preview in Scene View before adding. +Point creation now respect tangents, controls are scaled properly, in 2D mode Ctrl+Click now respects curve's 2D plane, rather than some mesh. +Show tangents option in SceneView +Examples are reworked. +Minor bugs fixing. +code cleanup and refactoring. +Unity 5.4 compatibility + diff --git a/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt.meta b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt.meta new file mode 100644 index 0000000..5860c96 --- /dev/null +++ b/IronToad_UnityProject/Assets/BansheeGz/BGCurve/readme.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 291a61797e7bab64195fb6be8d006b4d +timeCreated: 1458544744 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Fonts.meta b/IronToad_UnityProject/Assets/Fonts.meta new file mode 100644 index 0000000..79d6b53 --- /dev/null +++ b/IronToad_UnityProject/Assets/Fonts.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e993c1c70630f4e33ad8dc005f5d4acc +folderAsset: yes +timeCreated: 1484957599 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf b/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf new file mode 100755 index 0000000..23d266d Binary files /dev/null and b/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf differ diff --git a/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf.meta b/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf.meta new file mode 100644 index 0000000..e06cfdc --- /dev/null +++ b/IronToad_UnityProject/Assets/Fonts/Gang of Three.ttf.meta @@ -0,0 +1,21 @@ +fileFormatVersion: 2 +guid: ee2d72575bd6d453283d60eb13fa8d91 +timeCreated: 1484957639 +licenseType: Free +TrueTypeFontImporter: + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Gang of Three + fontNames: + - Gang of Three + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween.meta b/IronToad_UnityProject/Assets/LeanTween.meta new file mode 100644 index 0000000..0bc313d --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 5e6a0fa47acf54892bbdae89028eaec3 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation.meta new file mode 100644 index 0000000..69aee15 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6737b2aaab0f546e39693df5f551dfc8 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets.meta new file mode 100644 index 0000000..ed25ad6 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cb26df1b849af495bbce0f91bac5a3f7 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css.meta new file mode 100644 index 0000000..03b114e --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1f4f05e2c3c7b4c5eb028eb9c0c93886 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css new file mode 100644 index 0000000..621cf57 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css @@ -0,0 +1,836 @@ +/* +Font sizes for all selectors other than the body are given in percentages, +with 100% equal to 13px. To calculate a font size percentage, multiply the +desired size in pixels by 7.6923076923. + +Here's a quick lookup table: + +10px - 76.923% +11px - 84.615% +12px - 92.308% +13px - 100% +14px - 107.692% +15px - 115.385% +16px - 123.077% +17px - 130.769% +18px - 138.462% +19px - 146.154% +20px - 153.846% +*/ + + +html { + background: #fff; + color: #333; + overflow-y: scroll; +} + +body { + font: 13px/1.4 'Lucida Grande', 'Lucida Sans Unicode', 'DejaVu Sans', 'Bitstream Vera Sans', 'Helvetica', 'Arial', sans-serif; + margin: 0; + padding: 0; +} + +/* -- Links ----------------------------------------------------------------- */ +a { + color: #356de4; + text-decoration: none; +} + +.hidden { + display: none; +} + +a:hover { text-decoration: underline; } + +/* "Jump to Table of Contents" link is shown to assistive tools, but hidden from + sight until it's focused. */ +.jump { + position: absolute; + padding: 3px 6px; + left: -99999px; + top: 0; +} + +.jump:focus { left: 40%; } + +/* -- Paragraphs ------------------------------------------------------------ */ +p { margin: 1.3em 0; } +dd p, td p { margin-bottom: 0; } +dd p:first-child, td p:first-child { margin-top: 0; } + +/* -- Headings -------------------------------------------------------------- */ +h1, h2, h3, h4, h5, h6 { + color: #D98527;/*was #f80*/ + font-family: 'Trebuchet MS', sans-serif; + font-weight: bold; + line-height: 1.1; + margin: 1.1em 0 0.5em; +} + +h1 { + font-size: 184.6%; + color: #30418C; + margin: 0.75em 0 0.5em; +} + +h2 { + font-size: 153.846%; + color: #E48A2B; +} + +h3 { font-size: 138.462%; } + +h4 { + border-bottom: 1px solid #DBDFEA; + color: #E48A2B; + font-size: 115.385%; + font-weight: normal; + padding-bottom: 2px; +} + +h5, h6 { font-size: 107.692%; } + +/* -- Code and examples ----------------------------------------------------- */ +code, kbd, pre, samp { + font-family: Menlo, Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; + font-size: 92.308%; + line-height: 1.35; +} + +p code, p kbd, p samp { + background: #FCFBFA; + border: 1px solid #EFEEED; + padding: 0 3px; +} + +a code, a kbd, a samp, +pre code, pre kbd, pre samp, +table code, table kbd, table samp, +.intro code, .intro kbd, .intro samp, +.toc code, .toc kbd, .toc samp { + background: none; + border: none; + padding: 0; +} + +pre.code, pre.terminal, pre.cmd { + overflow-x: auto; + *overflow-x: scroll; + padding: 0.3em 0.6em; +} + +pre.code { + background: #FCFBFA; + border: 1px solid #EFEEED; + border-left-width: 5px; +} + +pre.terminal, pre.cmd { + background: #F0EFFC; + border: 1px solid #D0CBFB; + border-left: 5px solid #D0CBFB; +} + +/* Don't reduce the font size of // elements inside
+   blocks. */
+pre code, pre kbd, pre samp { font-size: 100%; }
+
+/* Used to denote text that shouldn't be selectable, such as line numbers or
+   shell prompts. Guess which browser this doesn't work in. */
+.noselect {
+    -moz-user-select: -moz-none;
+    -khtml-user-select: none;
+    -webkit-user-select: none;
+    -o-user-select: none;
+    user-select: none;
+}
+
+/* -- Lists ----------------------------------------------------------------- */
+dd { margin: 0.2em 0 0.7em 1em; }
+dl { margin: 1em 0; }
+dt { font-weight: bold; }
+
+/* -- Tables ---------------------------------------------------------------- */
+caption, th { text-align: left; }
+
+table {
+    border-collapse: collapse;
+    width: 100%;
+}
+
+td, th {
+    border: 1px solid #fff;
+    padding: 5px 12px;
+    vertical-align: top;
+}
+
+td { background: #E6E9F5; }
+td dl { margin: 0; }
+td dl dl { margin: 1em 0; }
+td pre:first-child { margin-top: 0; }
+
+th {
+    background: #D2D7E6;/*#97A0BF*/
+    border-bottom: none;
+    border-top: none;
+    color: #000;/*#FFF1D5*/
+    font-family: 'Trebuchet MS', sans-serif;
+    font-weight: bold;
+    line-height: 1.3;
+    white-space: nowrap;
+}
+
+
+/* -- Layout and Content ---------------------------------------------------- */
+#doc {
+    margin: auto;
+    min-width: 1024px;
+}
+
+.content { padding: 0 20px 0 25px; }
+
+.sidebar {
+    padding: 0 15px 0 10px;
+}
+#bd {
+    padding: 7px 0 130px;
+    position: relative;
+    width: 99%;
+}
+
+/* -- Table of Contents ----------------------------------------------------- */
+
+/* The #toc id refers to the single global table of contents, while the .toc
+   class refers to generic TOC lists that could be used throughout the page. */
+
+.toc code, .toc kbd, .toc samp { font-size: 100%; }
+.toc li { font-weight: bold; }
+.toc li li { font-weight: normal; }
+
+/* -- Intro and Example Boxes ----------------------------------------------- */
+
+.intro, .example { margin-bottom: 2em; }
+.example {
+    -moz-border-radius: 4px;
+    -webkit-border-radius: 4px;
+    border-radius: 4px;
+    -moz-box-shadow: 0 0 5px #bfbfbf;
+    -webkit-box-shadow: 0 0 5px #bfbfbf;
+    box-shadow: 0 0 5px #bfbfbf;
+    padding: 0.5em 0.5em 0.5em 0.5em;
+    background-color: #EFF2FA;
+}
+.intro {
+    background: none repeat scroll 0 0 #F0F1F8; border: 1px solid #D4D8EB; padding: 0 1em;
+}
+
+.example h4{
+    margin:0.0em 0 0.0em;
+}
+
+.example p {
+    margin:0.3em 0;
+}
+
+
+/* -- Other Styles ---------------------------------------------------------- */
+
+/* These are probably YUI-specific, and should be moved out of Selleck's default
+   theme. */
+
+.button {
+    border: 1px solid #dadada;
+    -moz-border-radius: 3px;
+    -webkit-border-radius: 3px;
+    border-radius: 3px;
+    color: #444;
+    display: inline-block;
+    font-family: Helvetica, Arial, sans-serif;
+    font-size: 92.308%;
+    font-weight: bold;
+    padding: 4px 13px 3px;
+    -moz-text-shadow: 1px 1px 0 #fff;
+    -webkit-text-shadow: 1px 1px 0 #fff;
+    text-shadow: 1px 1px 0 #fff;
+    white-space: nowrap;
+
+    background: #EFEFEF; /* old browsers */
+    background: -moz-linear-gradient(top, #f5f5f5 0%, #efefef 50%, #e5e5e5 51%, #dfdfdf 100%); /* firefox */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f5f5f5), color-stop(50%,#efefef), color-stop(51%,#e5e5e5), color-stop(100%,#dfdfdf)); /* webkit */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f5f5f5', endColorstr='#dfdfdf',GradientType=0 ); /* ie */
+}
+
+.button:hover {
+    border-color: #466899;
+    color: #fff;
+    text-decoration: none;
+    -moz-text-shadow: 1px 1px 0 #222;
+    -webkit-text-shadow: 1px 1px 0 #222;
+    text-shadow: 1px 1px 0 #222;
+
+    background: #6396D8; /* old browsers */
+    background: -moz-linear-gradient(top, #6396D8 0%, #5A83BC 50%, #547AB7 51%, #466899 100%); /* firefox */
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6396D8), color-stop(50%,#5A83BC), color-stop(51%,#547AB7), color-stop(100%,#466899)); /* webkit */
+    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6396D8', endColorstr='#466899',GradientType=0 ); /* ie */
+}
+
+.newwindow { text-align: center; }
+
+.header .version em {
+    display: block;
+    text-align: right;
+}
+
+.header .version form {
+    display: block;
+    text-align: right;
+}
+
+
+#classdocs .item {
+    border-bottom: 1px solid #466899;
+    margin: 1em 0;
+    padding: 1.5em;
+}
+
+.params, .returns{
+    font-size:11px;
+}
+
+.returns-description p{
+    margin:0 0 0.6em 0;
+}
+
+#classdocs .item .params p,
+    #classdocs .item .returns p,{
+    display: inline;
+}
+
+#classdocs .item em code, #classdocs .item em.comment {
+    color: green;
+}
+
+#classdocs .item em.comment a {
+    color: green;
+    text-decoration: underline;
+}
+
+#classdocs .foundat {
+    font-size: 11px;
+    font-style: normal;
+}
+
+.attrs .emits {
+    margin-left: 2em;
+    padding: .5em;
+    border-left: 1px dashed #ccc;
+}
+
+abbr {
+    border-bottom: 1px dashed #ccc;
+    font-size: 80%;
+    cursor: help;
+}
+
+.prettyprint li.L0, 
+.prettyprint li.L1, 
+.prettyprint li.L2, 
+.prettyprint li.L3, 
+.prettyprint li.L5, 
+.prettyprint li.L6, 
+.prettyprint li.L7, 
+.prettyprint li.L8 {
+    list-style: decimal;
+}
+
+ul li p {
+    margin-top: 0;
+}
+
+.method .name {
+    font-size: 110%;
+}
+
+.apidocs .methods .extends .method,
+.apidocs .properties .extends .property,
+.apidocs .attrs .extends .attr,
+.apidocs .events .extends .event {
+    font-weight: bold;
+}
+
+.apidocs .methods .extends .inherited,
+.apidocs .properties .extends .inherited,
+.apidocs .attrs .extends .inherited,
+.apidocs .events .extends .inherited {
+    font-weight: normal;
+}
+
+#hd {
+    background: whiteSmoke;
+    background: -moz-linear-gradient(top,#DCDBD9 0,#F6F5F3 100%);
+    background: -webkit-gradient(linear,left top,left bottom,color-stop(0%,#DCDBD9),color-stop(100%,#F6F5F3));
+    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#dcdbd9',endColorstr='#F6F5F3',GradientType=0);
+    border-bottom: 1px solid #DFDFDF;
+    padding: 0 15px 1px 20px;
+    margin-bottom: 15px;
+}
+
+#hd img {
+    margin-right: 10px;
+    vertical-align: middle;
+}
+
+
+/* -- API Docs CSS ---------------------------------------------------------- */
+
+/*
+This file is organized so that more generic styles are nearer the top, and more
+specific styles are nearer the bottom of the file. This allows us to take full
+advantage of the cascade to avoid redundant style rules. Please respect this
+convention when making changes.
+*/
+
+/* -- Generic TabView styles ------------------------------------------------ */
+
+/*
+These styles apply to all API doc tabviews. To change styles only for a
+specific tabview, see the other sections below.
+*/
+
+.yui3-js-enabled .apidocs .tabview {
+    visibility: visible; /* Hide until the TabView finishes rendering. */
+    _visibility: visible;
+}
+
+.apidocs .tabview.yui3-tabview-content { visibility: visible; }
+.apidocs .tabview .yui3-tabview-panel { background: #fff; }
+
+/* -- Generic Content Styles ------------------------------------------------ */
+
+/* Headings */
+h2, h3, h4, h5, h6 {
+    border: none;
+    color: #30418C;
+    font-weight: bold;
+    text-decoration: none;
+}
+
+.link-docs {
+    float: right;
+    font-size: 15px;
+    margin: 4px 4px 6px;
+    padding: 6px 30px 5px;
+}
+
+.apidocs { zoom: 1; }
+
+/* Generic box styles. */
+.apidocs .box {
+    border: 1px solid;
+    border-radius: 3px;
+    margin: 1em 0;
+    padding: 0 1em;
+}
+
+/* A flag is a compact, capsule-like indicator of some kind. It's used to
+   indicate private and protected items, item return types, etc. in an
+   attractive and unobtrusive way. */
+.apidocs .flag {
+    background: #bababa;
+    border-radius: 3px;
+    color: #fff;
+    font-size: 11px;
+    margin: 0 0.5em;
+    padding: 2px 4px 1px;
+}
+
+/* Class/module metadata such as "Uses", "Extends", "Defined in", etc. */
+.apidocs .meta {
+    background: #f9f9f9;
+    border-color: #efefef;
+    color: #555;
+    font-size: 11px;
+    padding: 3px 6px;
+}
+
+.apidocs .meta p { margin: 0; }
+
+/* Deprecation warning. */
+.apidocs .box.deprecated,
+.apidocs .flag.deprecated {
+    background: #fdac9f;
+    border: 1px solid #fd7775;
+}
+
+.apidocs .box.deprecated p { margin: 0.5em 0; }
+.apidocs .flag.deprecated { color: #333; }
+
+/* Module/Class intro description. */
+.apidocs .intro {
+    background: #f0f1f8;
+    border-color: #d4d8eb;
+}
+
+/* Loading spinners. */
+#bd.loading .apidocs,
+#api-list.loading .yui3-tabview-panel {
+    background: #fff url(../img/spinner.gif) no-repeat center 70px;
+    min-height: 150px;
+}
+
+#bd.loading .apidocs .content,
+#api-list.loading .yui3-tabview-panel .apis {
+    display: none;
+}
+
+.apidocs .no-visible-items { color: #666; }
+
+/* Generic inline list. */
+.apidocs ul.inline {
+    display: inline;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+}
+
+.apidocs ul.inline li { display: inline; }
+
+/* Comma-separated list. */
+.apidocs ul.commas li:after { content: ','; }
+.apidocs ul.commas li:last-child:after { content: ''; }
+
+/* Keyboard shortcuts. */
+kbd .cmd { font-family: Monaco, Helvetica; }
+
+/* -- Generic Access Level styles ------------------------------------------- */
+.apidocs .item.protected,
+.apidocs .item.private,
+.apidocs .index-item.protected,
+.apidocs .index-item.deprecated,
+.apidocs .index-item.private {
+    display: none;
+}
+
+.show-deprecated .item.deprecated,
+.show-deprecated .index-item.deprecated,
+.show-protected .item.protected,
+.show-protected .index-item.protected,
+.show-private .item.private,
+.show-private .index-item.private {
+    display: block;
+}
+
+.hide-inherited .item.inherited,
+.hide-inherited .index-item.inherited {
+    display: none;
+}
+
+/* -- Generic Item Index styles --------------------------------------------- */
+.apidocs .index { margin: 1.5em 0 3em; }
+
+.apidocs .index h3 {
+    border-bottom: 1px solid #efefef;
+    color: #333;
+    font-size: 13px;
+    margin: 2em 0 0.6em;
+    padding-bottom: 2px;
+}
+
+.apidocs .index .no-visible-items { margin-top: 2em; }
+
+.apidocs .index-list {
+    border-color: #efefef;
+    font-size: 12px;
+    list-style: none;
+    margin: 0;
+    padding: 0;
+    -moz-column-count: 4;
+    -moz-column-gap: 10px;
+    -moz-column-width: 170px;
+    -ms-column-count: 4;
+    -ms-column-gap: 10px;
+    -ms-column-width: 170px;
+    -o-column-count: 4;
+    -o-column-gap: 10px;
+    -o-column-width: 170px;
+    -webkit-column-count: 4;
+    -webkit-column-gap: 10px;
+    -webkit-column-width: 170px;
+    column-count: 4;
+    column-gap: 10px;
+    column-width: 170px;
+}
+
+.apidocs .no-columns .index-list {
+    -moz-column-count: 1;
+    -ms-column-count: 1;
+    -o-column-count: 1;
+    -webkit-column-count: 1;
+    column-count: 1;
+}
+
+.apidocs .index-item { white-space: nowrap; }
+
+.apidocs .index-item .flag {
+    background: none;
+    border: none;
+    color: #afafaf;
+    display: inline;
+    margin: 0 0 0 0.2em;
+    padding: 0;
+}
+
+/* -- Generic API item styles ----------------------------------------------- */
+.apidocs .args {
+    display: inline;
+    margin: 0 0.5em;
+}
+
+.apidocs .flag.chainable { background: #46ca3b; }
+.apidocs .flag.protected { background: #9b86fc; }
+.apidocs .flag.private { background: #fd6b1b; }
+.apidocs .flag.async { background: #356de4; }
+.apidocs .flag.required { background: #e60923; }
+
+.apidocs .item {
+    border-bottom: 1px solid #efefef;
+    margin: 1.5em 0 2em;
+    padding-bottom: 2em;
+}
+
+.apidocs .item h4,
+.apidocs .item h5,
+.apidocs .item h6 {
+    color: #333;
+    font-family: inherit;
+    font-size: 100%;
+}
+
+.apidocs .item .description p,
+.apidocs .item pre.code {
+    margin: 1em 0 0;
+}
+
+.apidocs .item .meta {
+    background: none;
+    border: none;
+    padding: 0;
+}
+
+.apidocs .item .name {
+    display: inline;
+    font-size: 14px;
+}
+
+.apidocs .item .type,
+.apidocs .item .type a,
+.apidocs .returns-inline {
+    color: #555;
+}
+
+.apidocs .item .type,
+.apidocs .returns-inline {
+    font-size: 11px;
+    margin: 0 0 0 0;
+}
+
+.apidocs .item .type a { border-bottom: 1px dotted #afafaf; }
+.apidocs .item .type a:hover { border: none; }
+
+/* -- Item Parameter List --------------------------------------------------- */
+.apidocs .params-list {
+    list-style: square;
+    margin: 0 0 0 2em;
+    padding: 0;
+}
+
+.apidocs .param { margin-bottom: 0em; }
+
+.apidocs .param .type,
+.apidocs .param .type a {
+    color: #666;
+}
+
+.apidocs .param .type {
+    margin: 0 0 0 0.5em;
+    *margin-left: 0.5em;
+}
+
+.apidocs .param-name { font-weight: bold; }
+
+/* -- Item "Emits" block ---------------------------------------------------- */
+.apidocs .item .emits {
+    background: #f9f9f9;
+    border-color: #eaeaea;
+}
+
+/* -- Item "Returns" block -------------------------------------------------- */
+.apidocs .item .returns .type,
+.apidocs .item .returns .type a {
+    font-size: 100%;
+    margin: 0;
+}
+
+/* -- Class Constructor block ----------------------------------------------- */
+.apidocs .constructor .item {
+    border: none;
+    padding-bottom: 0;
+}
+
+/* -- File Source View ------------------------------------------------------ */
+.apidocs .file pre.code,
+#doc .apidocs .file pre.prettyprint {
+    background: inherit;
+    border: none;
+    overflow: visible;
+    padding: 0;
+}
+
+.apidocs .L0,
+.apidocs .L1,
+.apidocs .L2,
+.apidocs .L3,
+.apidocs .L4,
+.apidocs .L5,
+.apidocs .L6,
+.apidocs .L7,
+.apidocs .L8,
+.apidocs .L9 {
+    background: inherit;
+}
+
+/* -- Submodule List -------------------------------------------------------- */
+.apidocs .module-submodule-description {
+    font-size: 12px;
+    margin: 0.3em 0 1em;
+}
+
+.apidocs .module-submodule-description p:first-child { margin-top: 0; }
+
+/* -- Sidebar TabView ------------------------------------------------------- */
+#api-tabview { margin-top: 0.6em; }
+
+#api-tabview-filter,
+#api-tabview-panel {
+    border: 1px solid #dfdfdf;
+}
+
+#api-tabview-filter {
+    border-bottom: none;
+    border-top: none;
+    padding: 0.6em 10px 0 10px;
+}
+
+#api-tabview-panel { border-top: none; }
+#api-filter { width: 97%; }
+
+.yui3-u-1-4{
+    width:21%;
+}
+
+/* -- Content TabView ------------------------------------------------------- */
+#classdocs .yui3-tabview-panel { border: none; }
+
+/* -- Source File Contents -------------------------------------------------- */
+.prettyprint li.L0,
+.prettyprint li.L1,
+.prettyprint li.L2,
+.prettyprint li.L3,
+.prettyprint li.L5,
+.prettyprint li.L6,
+.prettyprint li.L7,
+.prettyprint li.L8 {
+    list-style: decimal;
+}
+
+/* -- API options ----------------------------------------------------------- */
+#api-options {
+    font-size: 11px;
+    margin-top: 2.2em;
+    position: absolute;
+    right: 1.5em;
+}
+
+/*#api-options label { margin-right: 0.6em; }*/
+
+/* -- API list -------------------------------------------------------------- */
+#api-list {
+    margin-top: 1.5em;
+    *zoom: 1;
+}
+
+.apis {
+    font-size: 12px;
+    line-height: 1.4;
+    list-style: none;
+    margin: 0;
+    padding: 0.5em 0 0.5em 0.4em;
+}
+
+.apis a {
+    border: 1px solid transparent;
+    display: block;
+    margin: 0 0 0 -4px;
+    padding: 1px 4px 0;
+    text-decoration: none;
+    _border: none;
+    _display: inline;
+}
+
+.apis a:hover,
+.apis a:focus {
+    background: #E8EDFC;
+    background: -moz-linear-gradient(top, #e8edfc 0%, #becef7 100%);
+    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#E8EDFC), color-stop(100%,#BECEF7));
+    border-color: #AAC0FA;
+    border-radius: 3px;
+    color: #333;
+    outline: none;
+}
+
+.api-list-item a:hover,
+.api-list-item a:focus {
+    font-weight: bold;
+    text-shadow: 1px 1px 1px #fff;
+}
+
+.apis .message { color: #888; }
+.apis .result a { padding: 3px 5px 2px; }
+
+.apis .result .type {
+    right: 4px;
+    top: 7px;
+}
+
+.api-list-item .yui3-highlight {
+    font-weight: bold;
+}
+
+#advertising{
+    text-align: center;
+    background-color: #e4e9f6;
+    padding: 5px 0 5px 0;
+}
+
+#advertising img{
+    border:1px solid black;
+}
+
+#advertising *{
+    line-height:1.0;
+    display: block;
+    margin: 5px auto 5px auto;
+    margin-right: auto;
+}
+
+#support{
+    margin-top:8px;
+}
+
+#support td{
+    background:none;
+    border:none;
+    padding:0px;
+}
+
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css.meta
new file mode 100644
index 0000000..850eeeb
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/css/main.css.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: f2e6f2786cebb4eb8945b46000f02d18
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico
new file mode 100644
index 0000000..414ac4f
Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico differ
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico.meta
new file mode 100644
index 0000000..c1be27b
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/favicon.ico.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 751c9ec47ccc246ae9845f7503545585
+timeCreated: 1479470953
+licenseType: Store
+DefaultImporter:
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html
new file mode 100644
index 0000000..487fe15
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html
@@ -0,0 +1,10 @@
+
+
+    
+        Redirector
+        
+    
+    
+        Click here to redirect
+    
+
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html.meta
new file mode 100644
index 0000000..b08ed0a
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/assets/index.html.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: 395ceea41819e494b8fe14c2e7b05a00
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes.meta
new file mode 100644
index 0000000..c3e4637
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes.meta
@@ -0,0 +1,2 @@
+fileFormatVersion: 2
+guid: d4bb1e3d3bec8431a82cb033f38b4ceb
diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html
new file mode 100644
index 0000000..fb6446a
--- /dev/null
+++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html
@@ -0,0 +1,720 @@
+
+
+
+    
+    LTBezierPath
+    
+    
+    
+    
+    
+    
+    
+    
+
+
+
+
+
+
+

- Developed by Dented Pixel
+
+
+ API Docs for: LeanTween 2.42
+ + + + + +
+

Support LeanTween!

+ +
+
+ + + + + + + +
+
+
+ +

Maintaining and adding new features takes time, your support is appreciated.

+
+
+ + +
+
+ Show: + + + + + + + +
+ +
+
+
+

LTBezierPath Class

+
+ + +
+ Defined in: LeanTween.cs:2462 +
+ + +
+ + +
+

Manually animate along a bezier path with this class

+ +
+ +
+

Constructor

+
+

LTBezierPath

+ +
+ (
    +
  • + pts +
  • +
) +
+ + + + + + + + +
+

+ Defined in + LeanTween.cs:2462 +

+ + + +
+ +
+ +
+ +
+

Parameters:

+ +
    +
  • + pts + Vector3 Array + + +
    +

    A set of points that define one or many bezier paths (the paths should be passed in multiples of 4, which correspond to each individual bezier curve)
    + It goes in the order: startPoint,endControl,startControl,endPoint - Note: the control for the end and start are reversed! This is just a quirk of the API.
    +

    + +
    + +
  • +
+
+ + +
+

Example:

+ +
+

LTBezierPath ltPath = new LTBezierPath( new Vector3[] { new Vector3(0f,0f,0f),new Vector3(1f,0f,0f), new Vector3(1f,0f,0f), new Vector3(1f,1f,0f)} );

+ LeanTween.move(lt, ltPath.vec3, 4.0f).setOrientToPath(true).setDelay(1f).setEase(LeanTweenType.easeInOutQuad); // animate
+ Vector3 pt = ltPath.point( 0.6f ); // retrieve a point along the path

+ +
+
+
+
+ +
+ + +
+
+

Item Index

+ +
+

Methods

+ + +
+ +
+

Properties

+ + +
+ + +
+ +
+

Methods

+ +
+

place

+ +
+ (
    +
  • + transform:Transform +
  • +
  • + ratio:float +
  • +
) +
+ + + + + + + + +
+

+ Defined in + LeanTween.cs:2561 +

+ + + +
+ +
+

Place an object along a certain point on the path (facing the direction perpendicular to the path)

+ +
+ +
+

Parameters:

+ +
    +
  • + transform:Transform + Transform + + +
    +

    the transform of the object you wish to place along the path

    + +
    + +
  • +
  • + ratio:float + Float + + +
    +

    ratio of the point along the path you wish to receive (0-1)

    + +
    + +
  • +
+
+ + +
+

Example:

+ +
+

ltPath.place( transform, 0.6f );

+ +
+
+
+
+

place

+ +
+ (
    +
  • + transform:Transform +
  • +
  • + ratio:float +
  • +
  • + rotation:Vector3 +
  • +
) +
+ + + + + + + + +
+

+ Defined in + LeanTween.cs:2575 +

+ + + +
+ +
+

Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path

+ +
+ +
+

Parameters:

+ +
    +
  • + transform:Transform + Transform + + +
    +

    the transform of the object you wish to place along the path

    + +
    + +
  • +
  • + ratio:float + Float + + +
    +

    ratio of the point along the path you wish to receive (0-1)

    + +
    + +
  • +
  • + rotation:Vector3 + Vector3 + + +
    +

    the direction in which to place the transform ex: Vector3.up

    + +
    + +
  • +
+
+ + +
+

Example:

+ +
+

ltPath.place( transform, 0.6f, Vector3.left );

+ +
+
+
+
+

placeLocal

+ +
+ (
    +
  • + transform:Transform +
  • +
  • + ratio:float +
  • +
) +
+ + + + + + + + +
+

+ Defined in + LeanTween.cs:2593 +

+ + + +
+ +
+

Place an object along a certain point on the path (facing the direction perpendicular to the path) - Local Space, not world-space

+ +
+ +
+

Parameters:

+ +
    +
  • + transform:Transform + Transform + + +
    +

    the transform of the object you wish to place along the path

    + +
    + +
  • +
  • + ratio:float + Float + + +
    +

    ratio of the point along the path you wish to receive (0-1)

    + +
    + +
  • +
+
+ + +
+

Example:

+ +
+

ltPath.placeLocal( transform, 0.6f );

+ +
+
+
+
+

placeLocal

+ +
+ (
    +
  • + transform:Transform +
  • +
  • + ratio:float +
  • +
  • + rotation:Vector3 +
  • +
) +
+ + + + + + + + +
+

+ Defined in + LeanTween.cs:2606 +

+ + + +
+ +
+

Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path - Local Space, not world-space

+ +
+ +
+

Parameters:

+ +
    +
  • + transform:Transform + Transform + + +
    +

    the transform of the object you wish to place along the path

    + +
    + +
  • +
  • + ratio:float + Float + + +
    +

    ratio of the point along the path you wish to receive (0-1)

    + +
    + +
  • +
  • + rotation:Vector3 + Vector3 + + +
    +

    the direction in which to place the transform ex: Vector3.up

    + +
    + +
  • +
+
+ + +
+

Example:

+ +
+

ltPath.placeLocal( transform, 0.6f, Vector3.left );

+ +
+
+
+
+

point

+ +
+ (
    +
  • + ratio:float +
  • +
) +
+ + + Vector3 + + + + + + + + +
+

+ Defined in + LeanTween.cs:2522 +

+ + + +
+ +
+

Retrieve a point along a path

+ +
+ +
+

Parameters:

+ +
    +
  • + ratio:float + Float + + +
    +

    ratio of the point along the path you wish to receive (0-1)

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ Vector3: +

Vector3 position of the point along the path

+ +
+
+ +
+

Example:

+ +
+

transform.position = ltPath.point( 0.6f );

+ +
+
+
+
+ +
+

Properties

+ +
+

distance distance of the path (in unity units)

+ Float + + + + + +
+

+ Defined in + LeanTween.cs:2513 +

+ + +
+ +
+ +
+ + + +
+
+ + +
+
+
+
+
+
+
+
+ + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html.meta new file mode 100644 index 0000000..98d07aa --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTBezierPath.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f7b721e4275c14b53a73241b9d0b256f diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html new file mode 100644 index 0000000..9dc07be --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html @@ -0,0 +1,2705 @@ + + + + + LTDescr + + + + + + + + + + + +
+
+
+

- Developed by Dented Pixel
+
+
+ API Docs for: LeanTween 2.42
+ + + + + +
+

Support LeanTween!

+ +
+
+ + + + + + + +
+
+
+ +

Maintaining and adding new features takes time, your support is appreciated.

+
+
+ + +
+
+ Show: + + + + + + + +
+ +
+
+
+

LTDescr Class

+
+ + +
+ Defined in: LTDescr.cs:4 +
+ + +
+ + +
+

Internal Representation of a Tween
+
+ This class represents all of the optional parameters you can pass to a method (it also represents the internal representation of the tween).

+ Optional Parameters are passed at the end of every method:
+
+   Example:
+   LeanTween.moveX( gameObject, 1f, 1f).setEase( LeanTweenType.easeInQuad ).setDelay(1f);
+
+ You can pass the optional parameters in any order, and chain on as many as you wish.
+ You can also pass parameters at a later time by saving a reference to what is returned.
+
+ Retrieve a unique id for the tween by using the "id" property. You can pass this to LeanTween.pause, LeanTween.resume, LeanTween.cancel, LeanTween.isTweening methods
+
+   

Example:

+   int id = LeanTween.moveX(gameObject, 1f, 3f).id;

+
  // pause a specific tween
+   LeanTween.pause(id);
+
  // resume later
+   LeanTween.resume(id);
+
  // check if it is tweening before kicking of a new tween
+   if( LeanTween.isTweening( id ) ){
+       LeanTween.cancel( id );
+       LeanTween.moveZ(gameObject, 10f, 3f);
+   }
+
+ +
+

Constructor

+
+

LTDescr

+ + () + + + + + + + + +
+

+ Defined in + LTDescr.cs:4 +

+ + + +
+ +
+ +
+ + + +
+
+ +
+ + +
+
+

Item Index

+ +
+

Methods

+ + +
+ + + +
+ +
+

Methods

+ +
+

pause

+ + () + + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1113 +

+ + + +
+ +
+

Pause a tween

+ +
+ + +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+
+

resume

+ + () + + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1128 +

+ + + +
+ +
+

Resume a paused tween

+ +
+ + +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+
+

setDelay

+ +
+ (
    +
  • + float +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1145 +

+ + + +
+ +
+

Delay the start of a tween

+ +
+ +
+

Parameters:

+ +
    +
  • + float + Float + + +
    +

    time The time to complete the tween in

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setDelay( 1.5f );

+ +
+
+
+
+

setDirection

+ +
+ (
    +
  • + direction:float +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:2157 +

+ + + +
+ +
+

Set the direction of a tween -1f for backwards 1f for forwards (currently only bezier and spline paths are supported)

+ +
+ +
+

Parameters:

+ +
    +
  • + direction:float + Float + + +
    +

    the direction that the tween should run, -1f for backwards 1f for forwards

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setDirection(-1f);

+ +
+
+
+
+

setEase

+ +
+ (
    +
  • + easeType:LeanTweenType +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1164 +

+ + + +
+ +
+

Set the type of easing used for the tween.

+ +
+ +
+

Parameters:

+ +
    +
  • + easeType:LeanTweenType + LeanTweenType + + +
    +

    the easing type to use

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeInBounce );

+ +
+
+
+
+

setEase (AnimationCurve)

+ +
+ (
    +
  • + easeDefinition:AnimationCurve +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1616 +

+ + + +
+ +
+

Set the type of easing used for the tween with a custom curve.

+ +
+ +
+

Parameters:

+ +
    +
  • + easeDefinition:AnimationCurve + AnimationCurve + + +
    +

    an AnimationCure that describes the type of easing you want, this is great for when you want a unique type of movement

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeInBounce );

+ +
+
+
+
+

setIgnoreTimeScale

+ +
+ (
    +
  • + useUnScaledTime:bool +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1750 +

+ + + +
+ +
+

Set ignore time scale when tweening an object when you want the animation to be time-scale independent (ignores the Time.timeScale value). Great for pause screens, when you want all other action to be stopped (or slowed down)

+ +
+ +
+

Parameters:

+ +
    +
  • + useUnScaledTime:bool + Bool + + +
    +

    whether to use the unscaled time or not

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 2 ).setIgnoreTimeScale( true );

+ +
+
+
+
+

setLoopClamp

+ +
+ (
    +
  • + loops:int +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1796 +

+ + + +
+ +
+

When the animation gets to the end it starts back at where it began

+ +
+ +
+

Parameters:

+ +
    +
  • + loops:int + Int + + +
    +

    (defaults to -1) how many times you want the loop to happen (-1 for an infinite number of times)

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopClamp( 2 );

+ +
+
+
+
+

setLoopOnce

+ + () + + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1787 +

+ + + +
+ +
+

No looping involved, just run once (the default)

+ +
+ + +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopOnce();

+ +
+
+
+
+

setLoopPingPong

+ +
+ (
    +
  • + loops:int +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1815 +

+ + + +
+ +
+

When the animation gets to the end it then tweens back to where it started (and on, and on)

+ +
+ +
+

Parameters:

+ +
    +
  • + loops:int + Int + + +
    +

    (defaults to -1) how many times you want the loop to happen in both directions (-1 for an infinite number of times). Passing a value of 1 will cause the object to go towards and back from it's destination once.

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopPingPong( 2 );

+ +
+
+
+
+

setOnComplete

+ +
+ (
    +
  • + onComplete:Action +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1835 +

+ + + +
+ +
+

Have a method called when the tween finishes

+ +
+ +
+

Parameters:

+ +
    +
  • + onComplete:Action + Action + + +
    +

    the method that should be called when the tween is finished ex: tweenFinished(){ }

    + +
    + +
  • +
+
+ +
+

Returns:

+ +
+ LTDescr: +

LTDescr an object that distinguishes the tween

+ +
+
+ +
+

Example:

+ +
+

LeanTween.moveX(gameObject, 5f, 2.0f ).setOnComplete( tweenFinished );

+ +
+
+
+
+

setOnComplete (object)

+ +
+ (
    +
  • + onComplete:Action<object> +
  • +
) +
+ + + LTDescr + + + + + + + + +
+

+ Defined in + LTDescr.cs:1849 +

+ + + +
+ +
+

Have a method called when the tween finishes

+ +
+ +
+

Parameters:

+ +
    +
  • + onComplete:Action<object> + Action + + +
    +

    the method that should be called when the tween is finished ex: tweenFinished( object myObj ){ }

    + +
    + + + + + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setOnComplete( tweenFinished );

    + +
    +
    + +
    +

    setOnCompleteOnRepeat

    + +
    + (
      +
    • + isOn:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2095 +

    + + + +
    + +
    +

    Set the onComplete method to be called at the end of every loop cycle (also applies to the delayedCall method)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + isOn:bool + Bool + + +
      +

      does call onComplete on every loop cycle

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.delayedCall(gameObject,0.3f, delayedMethod).setRepeat(4).setOnCompleteOnRepeat(true);

    + +
    +
    +
    +
    +

    setOnCompleteOnStart

    + +
    + (
      +
    • + isOn:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2108 +

    + + + +
    + +
    +

    Set the onComplete method to be called at the beginning of the tween (it will still be called when it is completed as well)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + isOn:bool + Bool + + +
      +

      does call onComplete at the start of the tween

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.delayedCall(gameObject, 2f, ()=>{
    // Flash an object 5 times +  LeanTween.alpha(gameObject, 0f, 1f);
    +  LeanTween.alpha(gameObject, 1f, 0f).setDelay(1f);
    + }).setOnCompleteOnStart(true).setRepeat(5);

    + +
    +
    +
    +
    +

    setOnCompleteParam

    + +
    + (
      +
    • + onComplete:object +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1870 +

    + + + +
    + +
    +

    Pass an object to along with the onComplete Function

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onComplete:object + Object + + +
      +

      an object that

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.delayedCall(1.5f, enterMiniGameStart).setOnCompleteParam( new object[]{""+5} );

    + void enterMiniGameStart( object val ){
    +  object[] arr = (object [])val;
    +  int lvl = int.Parse((string)arr[0]);
    + }

    + +
    +
    +
    +
    +

    setOnStart

    + +
    + (
      +
    • + onStart:Action<> +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2141 +

    + + + +
    + +
    +

    Have a method called when the tween starts

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onStart:Action<> + Action<> + + +
      +

      the method that should be called when the tween is starting ex: tweenStarted( ){ }

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    C#:
    + LeanTween.moveX(gameObject, 5f, 2.0f ).setOnStart( ()=>{ Debug.Log("I started!"); }); + Javascript:
    + LeanTween.moveX(gameObject, 5f, 2.0f ).setOnStart( function(){ Debug.Log("I started!"); } );

    + +
    +
    +
    +
    +

    setOnUpdate

    + +
    + (
      +
    • + onUpdate:Action<float> +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1889 +

    + + + +
    + +
    +

    Have a method called on each frame that the tween is being animated (passes a float value)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onUpdate:Action<float> + Action + + +
      +

      a method that will be called on every frame with the float value of the tweened object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved );
    +
    + void tweenMoved( float val ){ }

    + +
    +
    +
    +
    +

    setOnUpdate (object)

    + +
    + (
      +
    • + onUpdate:Action<float,object> +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1951 +

    + + + +
    + +
    +

    Have a method called on each frame that the tween is being animated (passes a float value and a object)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onUpdate:Action<float,object> + Action + + +
      +

      a method that will be called on every frame with the float value of the tweened object, and an object of the person's choosing

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved ).setOnUpdateParam( myObject );
    +
    + void tweenMoved( float val, object obj ){ }

    + +
    +
    +
    +
    +

    setOnUpdate (Vector3)

    + +
    + (
      +
    • + onUpdate:Action<Vector3> +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1985 +

    + + + +
    + +
    +

    Have a method called on each frame that the tween is being animated (passes a float value)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onUpdate:Action<Vector3> + Action + + +
      +

      a method that will be called on every frame with the float value of the tweened object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved );
    +
    + void tweenMoved( Vector3 val ){ }

    + +
    +
    +
    +
    +

    setOnUpdateParam

    + +
    + (
      +
    • + onUpdateParam:object +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2005 +

    + + + +
    + +
    +

    Have an object passed along with the onUpdate method

    + +
    + +
    +

    Parameters:

    + +
      +
    • + onUpdateParam:object + Object + + +
      +

      an object that will be passed along with the onUpdate method

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved ).setOnUpdateParam( myObject );
    +
    + void tweenMoved( float val, object obj ){ }

    + +
    +
    +
    +
    +

    setOrientToPath

    + +
    + (
      +
    • + doesOrient:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2020 +

    + + + +
    + +
    +

    While tweening along a curve, set this property to true, to be perpendicalur to the path it is moving upon

    + +
    + +
    +

    Parameters:

    + +
      +
    • + doesOrient:bool + Bool + + +
      +

      whether the gameobject will orient to the path it is animating along

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.move( ltLogo, path, 1.0f ).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true).setAxis(Vector3.forward);

    + +
    +
    +
    +
    +

    setOrientToPath2d

    + +
    + (
      +
    • + doesOrient:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2039 +

    + + + +
    + +
    +

    While tweening along a curve, set this property to true, to be perpendicalur to the path it is moving upon

    + +
    + +
    +

    Parameters:

    + +
      +
    • + doesOrient:bool + Bool + + +
      +

      whether the gameobject will orient to the path it is animating along

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.move( ltLogo, path, 1.0f ).setEase(LeanTweenType.easeOutQuad).setOrientToPath2d(true).setAxis(Vector3.forward);

    + +
    +
    +
    +
    +

    setOvershoot

    + +
    + (
      +
    • + overshoot:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1577 +

    + + + +
    + +
    +

    Set how far past a tween will overshoot for certain ease types (compatible: easeInBack, easeInOutBack, easeOutBack, easeOutElastic, easeInElastic, easeInOutElastic).

    + +
    + +
    +

    Parameters:

    + +
      +
    • + overshoot:float + Float + + +
      +

      how far past the destination it will go before settling in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeOutBack ).setOvershoot(2f);

    + +
    +
    +
    +
    +

    setPeriod

    + +
    + (
      +
    • + period:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1590 +

    + + + +
    + +
    +

    Set how short the iterations are for certain ease types (compatible: easeOutElastic, easeInElastic, easeInOutElastic).

    + +
    + +
    +

    Parameters:

    + +
      +
    • + period:float + Float + + +
      +

      how short the iterations are that the tween will animate at (default 0.3f)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeOutElastic ).setPeriod(0.3f);

    + +
    +
    +
    +
    +

    setPoint

    + +
    + (
      +
    • + point:Vector3 +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2072 +

    + + + +
    + +
    +

    Set the point at which the GameObject will be rotated around

    + +
    + +
    +

    Parameters:

    + +
      +
    • + point:Vector3 + Vector3 + + +
      +

      point at which you want the object to rotate around (local space)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.rotateAround( cube, Vector3.up, 360.0f, 1.0f ) .setPoint( new Vector3(1f,0f,0f) ) .setEase( LeanTweenType.easeInOutBounce );

    + +
    +
    +
    +
    +

    setRecursive

    + +
    + (
      +
    • + useRecursion:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:2189 +

    + + + +
    + +
    +

    Set whether or not the tween will recursively effect an objects children in the hierarchy

    + +
    + +
    +

    Parameters:

    + +
      +
    • + useRecursion:bool + Bool + + +
      +

      whether the tween will recursively effect an objects children in the hierarchy

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alpha(gameObject, 0f, 1f).setRecursive(true);

    + +
    +
    +
    +
    +

    setRepeat

    + +
    + (
      +
    • + repeatNum:int +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1721 +

    + + + +
    + +
    +

    Set the tween to repeat a number of times.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + repeatNum:int + Int + + +
      +

      the number of times to repeat the tween. -1 to repeat infinite times

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 10 ).setLoopPingPong();

    + +
    +
    +
    +
    +

    setScale

    + +
    + (
      +
    • + scale:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1603 +

    + + + +
    + +
    +

    Set how large the effect is for certain ease types (compatible: punch, shake, animation curves).

    + +
    + +
    +

    Parameters:

    + +
      +
    • + scale:float + Float + + +
      +

      how much the ease will be multiplied by (default 1f)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.punch ).setScale(2f);

    + +
    +
    +
    +
    +

    setSpeed

    + +
    + (
      +
    • + speed:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1706 +

    + + + +
    + +
    +

    Set the finish time of the tween

    + +
    + +
    +

    Parameters:

    + +
      +
    • + speed:float + Float + + +
      +

      the speed in unity units per second you wish the object to travel (overrides the given time)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveLocalZ( gameObject, 10f, 1f).setSpeed(0.2f) // the given time is ignored when speed is set

    + +
    +
    +
    +
    +

    setTime

    + +
    + (
      +
    • + finishTime:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1688 +

    + + + +
    + +
    +

    Set the finish time of the tween

    + +
    + +
    +

    Parameters:

    + +
      +
    • + finishTime:float + Float + + +
      +

      the length of time in seconds you wish the tween to complete in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    int tweenId = LeanTween.moveX(gameObject, 5f, 2.0f ).id;
    + // Later
    + LTDescr descr = description( tweenId );
    + descr.setTime( 1f );

    + +
    +
    +
    +
    +

    setTo

    + +
    + (
      +
    • + to:Vector3 +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1631 +

    + + + +
    + +
    +

    Set the end that the GameObject is tweening towards

    + +
    + +
    +

    Parameters:

    + +
      +
    • + to:Vector3 + Vector3 + + +
      +

      point at which you want the tween to reach

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LTDescr descr = LeanTween.move( cube, Vector3.up, new Vector3(1f,3f,0f), 1.0f ).setEase( LeanTweenType.easeInOutBounce );
    + // Later your want to change your destination or your destiation is constantly moving
    + descr.setTo( new Vector3(5f,10f,3f); );

    + +
    +
    +
    +
    +

    setUseFrames

    + +
    + (
      +
    • + useFrames:bool +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:1763 +

    + + + +
    + +
    +

    Use frames when tweening an object, when you don't want the animation to be time-frame independent...

    + +
    + +
    +

    Parameters:

    + +
      +
    • + useFrames:bool + Bool + + +
      +

      whether to use estimated time or not

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 2 ).setUseFrames( true );

    + +
    +
    +
    +
    +

    updateNow

    + + () + + + LTDescr + + + + + + + + +
    +

    + Defined in + LTDescr.cs:904 +

    + + + +
    + +
    +

    If you need a tween to happen immediately instead of waiting for the next Update call, you can force it with this method

    + +
    + + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject, 5f, 0f ).updateNow();

    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html.meta new file mode 100644 index 0000000..bbd5916 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTDescr.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 728d9c45462a9409f8b8be1447f59e94 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html new file mode 100644 index 0000000..c22a64f --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html @@ -0,0 +1,237 @@ + + + + + LTEvent + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LTEvent Class

    +
    + + +
    + Defined in: LeanTween.cs:3325 +
    + + +
    + + +
    +

    Object that describes the event to an event listener

    + +
    + +
    +

    Constructor

    +
    +

    LTEvent

    + +
    + (
      +
    • + data:object +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:3325 +

    + + + +
    + +
    + +
    + +
    +

    Parameters:

    + +
      +
    • + data:object + Object + + +
      +

      Data that has been passed from the dispatchEvent method

      + +
      + +
    • +
    +
    + + +
    +
    + +
    + + +
    +
    +

    Item Index

    + + + + +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html.meta new file mode 100644 index 0000000..7dd3032 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTEvent.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2b8203605b4454b009a6fc1e269a8d50 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html new file mode 100644 index 0000000..1145d5c --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html @@ -0,0 +1,359 @@ + + + + + LTRect + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LTRect Class

    +
    + + +
    + Defined in: LeanTween.cs:3083 +
    + + +
    + + +
    +

    Animate GUI Elements by creating this object and passing the *.rect variable to the GUI method

    + Example Javascript:
    var bRect:LTRect = new LTRect( 0, 0, 100, 50 );
    + LeanTween.scale( bRect, Vector2(bRect.rect.width, bRect.rect.height) * 1.3, 0.25 );
    + function OnGUI(){
    +   if(GUI.Button(bRect.rect, "Scale")){ }
    + }
    +
    + Example C#:
    + LTRect bRect = new LTRect( 0f, 0f, 100f, 50f );
    + LeanTween.scale( bRect, new Vector2(150f,75f), 0.25f );
    + void OnGUI(){
    +   if(GUI.Button(bRect.rect, "Scale")){ }
    + }

    + +
    + +
    +

    Constructor

    +
    +

    LTRect

    + +
    + (
      +
    • + x:float +
    • +
    • + y:float +
    • +
    • + width:float +
    • +
    • + height:float +
    • +
    • + alpha:float +
    • +
    • + rotation:float +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:3083 +

    + + + +
    + +
    + +
    + +
    +

    Parameters:

    + +
      +
    • + x:float + Float + + +
      +

      X location

      + +
      + +
    • +
    • + y:float + Float + + +
      +

      Y location

      + +
      + +
    • +
    • + width:float + Float + + +
      +

      Width

      + +
      + +
    • +
    • + height:float + Float + + +
      +

      Height

      + +
      + +
    • +
    • + alpha:float + Float + + +
      +

      (Optional) initial alpha amount (0-1)

      + +
      + +
    • +
    • + rotation:float + Float + + +
      +

      (Optional) initial rotation in degrees (0-360)

      + +
      + +
    • +
    +
    + + +
    +
    + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Properties

    + + +
    + + +
    + + +
    +

    Properties

    + +
    +

    rect

    + Rect rect:Rect Rect object that controls the positioning and size + + + + + +
    +

    + Defined in + LeanTween.cs:3110 +

    + + +
    + +
    +

    Pass this value to the GUI Methods

    + +
    + + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html.meta new file mode 100644 index 0000000..feec8d2 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTRect.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b7ee5979c5f5f428d9c8735d84e09421 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html new file mode 100644 index 0000000..e150251 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html @@ -0,0 +1,796 @@ + + + + + LTSpline + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LTSpline Class

    +
    + + +
    + Defined in: LeanTween.cs:2651 +
    + + +
    + + +
    +

    Animate along a set of points that need to be in the format: controlPoint, point1, point2.... pointLast, endControlPoint

    + +
    + +
    +

    Constructor

    +
    +

    LTSpline

    + +
    + (
      +
    • + pts +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2651 +

    + + + +
    + +
    + +
    + +
    +

    Parameters:

    + +
      +
    • + pts + Vector3 Array + + +
      +

      A set of points that define the points the path will pass through (starting with starting control point, and ending with a control point)
      + Note: The first and last item just define the angle of the end points, they are not actually used in the spline path itself. If you do not care about the angle you can jus set the first two items and last two items as the same value.

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LTSpline ltSpline = new LTSpline( new Vector3[] { new Vector3(0f,0f,0f),new Vector3(0f,0f,0f), new Vector3(0f,0.5f,0f), new Vector3(1f,1f,0f), new Vector3(1f,1f,0f)} );

    + LeanTween.moveSpline(lt, ltSpline.vec3, 4.0f).setOrientToPath(true).setDelay(1f).setEase(LeanTweenType.easeInOutQuad); // animate
    + Vector3 pt = ltSpline.point( 0.6f ); // retrieve a point along the path

    + +
    +
    +
    +
    + +
    + + +
    +
    +

    Item Index

    + +
    +

    Methods

    + + +
    + + + + +
    + +
    +

    Methods

    + +
    +

    place

    + +
    + (
      +
    • + transform:Transform +
    • +
    • + ratio:float +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2863 +

    + + + +
    + +
    +

    Place an object along a certain point on the path (facing the direction perpendicular to the path)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + transform:Transform + Transform + + +
      +

      the transform of the object you wish to place along the path

      + +
      + +
    • +
    • + ratio:float + Float + + +
      +

      ratio of the point along the path you wish to receive (0-1)

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    ltPath.place( transform, 0.6f );

    + +
    +
    +
    +
    +

    place

    + +
    + (
      +
    • + transform:Transform +
    • +
    • + ratio:float +
    • +
    • + rotation:Vector3 +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2876 +

    + + + +
    + +
    +

    Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path

    + +
    + +
    +

    Parameters:

    + +
      +
    • + transform:Transform + Transform + + +
      +

      the transform of the object you wish to place along the path

      + +
      + +
    • +
    • + ratio:float + Float + + +
      +

      ratio of the point along the path you wish to receive (0-1)

      + +
      + +
    • +
    • + rotation:Vector3 + Vector3 + + +
      +

      the direction in which to place the transform ex: Vector3.up

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    ltPath.place( transform, 0.6f, Vector3.left );

    + +
    +
    +
    +
    +

    placeLocal

    + +
    + (
      +
    • + transform:Transform +
    • +
    • + ratio:float +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2895 +

    + + + +
    + +
    +

    Place an object along a certain point on the path (facing the direction perpendicular to the path) - Local Space, not world-space

    + +
    + +
    +

    Parameters:

    + +
      +
    • + transform:Transform + Transform + + +
      +

      the transform of the object you wish to place along the path

      + +
      + +
    • +
    • + ratio:float + Float + + +
      +

      ratio of the point along the path you wish to receive (0-1)

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    ltPath.placeLocal( transform, 0.6f );

    + +
    +
    +
    +
    +

    placeLocal

    + +
    + (
      +
    • + transform:Transform +
    • +
    • + ratio:float +
    • +
    • + rotation:Vector3 +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2908 +

    + + + +
    + +
    +

    Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path - Local Space, not world-space

    + +
    + +
    +

    Parameters:

    + +
      +
    • + transform:Transform + Transform + + +
      +

      the transform of the object you wish to place along the path

      + +
      + +
    • +
    • + ratio:float + Float + + +
      +

      ratio of the point along the path you wish to receive (0-1)

      + +
      + +
    • +
    • + rotation:Vector3 + Vector3 + + +
      +

      the direction in which to place the transform ex: Vector3.up

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    ltPath.placeLocal( transform, 0.6f, Vector3.left );

    + +
    +
    +
    +
    +

    point

    + +
    + (
      +
    • + ratio:float +
    • +
    ) +
    + + + Vector3 + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2828 +

    + + + +
    + +
    +

    Retrieve a point along a path

    + +
    + +
    +

    Parameters:

    + +
      +
    • + ratio:float + Float + + +
      +

      ratio of the point along the path you wish to receive (0-1)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + Vector3: +

    Vector3 position of the point along the path

    + +
    +
    + +
    +

    Example:

    + +
    +

    transform.position = ltSpline.point( 0.6f );

    + +
    +
    +
    +
    +

    ratioAtPoint

    + +
    + (
      +
    • + point:Vector3 +
    • +
    ) +
    + + + Float + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2804 +

    + + + +
    + +
    +

    Retrieve a point along a path

    + +
    + +
    +

    Parameters:

    + +
      +
    • + point:Vector3 + Vector3 + + +
      +

      given a current location it makes the best approximiation of where it is along the path ratio-wise (0-1)

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + Float: +

    float of ratio along the path

    + +
    +
    + +
    +

    Example:

    + +
    +

    ratioIter = ltSpline.ratioAtPoint( transform.position );

    + +
    +
    +
    +
    + +
    +

    Properties

    + +
    +

    distance distance of the spline (in unity units)

    + Float + + + + + +
    +

    + Defined in + LeanTween.cs:2667 +

    + + +
    + +
    + +
    + + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html.meta new file mode 100644 index 0000000..49235af --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LTSpline.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1adcbb4b77b884a4fb75bde98799d037 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html new file mode 100644 index 0000000..af6fb60 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html @@ -0,0 +1,332 @@ + + + + + LeanAudio + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LeanAudio Class

    +
    + + +
    + Defined in: LeanAudio.cs:30 +
    + + +
    + + +
    +

    Create Audio dynamically and easily playback

    + +
    + +
    +

    Constructor

    +
    +

    LeanAudio

    + + () + + + + + + + + +
    +

    + Defined in + LeanAudio.cs:30 +

    + + + +
    + +
    + +
    + + + +
    +
    + +
    + + +
    +
    +

    Item Index

    + +
    +

    Methods

    + + +
    + + + +
    + +
    +

    Methods

    + +
    +

    createAudio

    + +
    + (
      +
    • + volumeCurve:AnimationCurve +
    • +
    • + frequencyCurve:AnimationCurve +
    • +
    • + options:LeanAudioOptions +
    • +
    ) +
    + + + AudioClip + + + + + + + + +
    +

    + Defined in + LeanAudio.cs:65 +

    + + + +
    + +
    +

    Create dynamic audio from a set of Animation Curves and other options.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + volumeCurve:AnimationCurve + AnimationCurve + + +
      +

      describing the shape of the audios volume (from 0-1). The length of the audio is dicated by the end value here.

      + +
      + +
    • +
    • + frequencyCurve:AnimationCurve + AnimationCurve + + +
      +

      describing the width of the oscillations between the sound waves in seconds. Large numbers mean a lower note, while higher numbers mean a tighter frequency and therefor a higher note. Values are usually between 0.01 and 0.000001 (or smaller)

      + +
      + +
    • +
    • + options:LeanAudioOptions + LeanAudioOptions + + +
      +

      You can pass any other values in here like vibrato or the frequency you would like the sound to be encoded at. See LeanAudioOptions for more details.

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + AudioClip: +

    AudioClip of the procedurally generated audio

    + +
    +
    + +
    +

    Example:

    + +
    +

    AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0f,0f)} ));

    + +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html.meta new file mode 100644 index 0000000..c466510 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudio.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ddb683830b7524ebb8b302202c645c65 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html new file mode 100644 index 0000000..3e4a5b0 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html @@ -0,0 +1,383 @@ + + + + + LeanAudioOptions + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LeanAudioOptions Class

    +
    + + +
    + Defined in: LeanAudio.cs:316 +
    + + +
    + + +
    +

    Pass in options to LeanAudio

    + +
    + +
    +

    Constructor

    +
    +

    LeanAudioOptions

    + + () + + + + + + + + +
    +

    + Defined in + LeanAudio.cs:316 +

    + + + +
    + +
    + +
    + + + +
    +
    + +
    + + +
    +
    +

    Item Index

    + +
    +

    Methods

    + + +
    + + + +
    + +
    +

    Methods

    + +
    +

    setFrequency

    + +
    + (
      +
    • + frequencyRate:int +
    • +
    ) +
    + + + LeanAudioOptions + + + + + + + + +
    +

    + Defined in + LeanAudio.cs:343 +

    + + + +
    + +
    +

    Set the frequency for the audio is encoded. 44100 is CD quality, but you can usually get away with much lower (or use a lower amount to get a more 8-bit sound).

    + +
    + +
    +

    Parameters:

    + +
      +
    • + frequencyRate:int + Int + + +
      +

      of the frequency you wish to encode the AudioClip at

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LeanAudioOptions: +

    LeanAudioOptions describing optional values

    + +
    +
    + +
    +

    Example:

    + +
    +

    AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0f,0f)} ).setFrequency(12100) );

    + +
    +
    +
    +
    +

    setVibrato

    + +
    + (
      +
    • + vibratoArray:Vector3[] +
    • +
    ) +
    + + + LeanAudioOptions + + + + + + + + +
    +

    + Defined in + LeanAudio.cs:359 +

    + + + +
    + +
    +

    Set details about the shape of the curve by adding vibrato modulations through it (alters the peak values giving it a wah-wah effect). You can add as many as you want to sculpt out more detail in the sound wave.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + vibratoArray:Vector3[] + Vector3 + + +
      +

      The first value is the period in seconds that you wish to have the vibrato wave fluctuate at. The second value is the minimum height you wish the vibrato wave to dip down to (default is zero). The third is reserved for future effects.

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LeanAudioOptions: +

    LeanAudioOptions describing optional values

    + +
    +
    + +
    +

    Example:

    + +
    +

    AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0.3f,0f)} ).setFrequency(12100) );

    + +
    +
    +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html.meta new file mode 100644 index 0000000..fcb8d15 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanAudioOptions.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ff952359765254c20b97874f5949c0d7 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html new file mode 100644 index 0000000..8115c36 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html @@ -0,0 +1,7474 @@ + + + + + LeanTween + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LeanTween Class

    +
    + + +
    + Defined in: LeanTween.cs:204 +
    + + +
    + + +
    +

    LeanTween is an efficient tweening engine for Unity3d

    + Index of All Methods | Optional Paramaters that can be passed

    + Optional Parameters are passed at the end of every method
    +
    + Example:
    + LeanTween.moveX( gameObject, 1f, 1f).setEase( LeanTweenType.easeInQuad ).setDelay(1f);
    +
    + You can pass the optional parameters in any order, and chain on as many as you wish!

    + You can also modify this tween later, just save the unique id of the tween.
    +

    Example:

    + int id = LeanTween.moveX(gameObject, 1f, 1f).id;
    + LTDescr d = LeanTween.descr( id );

    + if(d!=null){ // if the tween has already finished it will return null
    +    // change some parameters
    +    d.setOnComplete( onCompleteFunc ).setEase( LeanTweenType.easeInOutBack );
    + }

    + +
    + + +
    + + +
    +
    +

    Item Index

    + +
    +

    Methods

    + + +
    + + + +
    + +
    +

    Methods

    + +
    +

    LeanTween.addListener

    + +
    + (
      +
    • + caller:GameObject +
    • +
    • + eventId:int +
    • +
    • + callback:System.Action<LTEvent> +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2269 +

    + + + +
    + +
    +

    Add a listener method to be called when the appropriate LeanTween.dispatchEvent is called

    + +
    + +
    +

    Parameters:

    + +
      +
    • + caller:GameObject + GameObject + + +
      +

      the gameObject the listener is attached to

      + +
      + +
    • +
    • + eventId:int + Int + + +
      +

      a unique int that describes the event (best to use an enum)

      + +
      + +
    • +
    • + callback:System.Action<LTEvent> + System.Action + + +
      +

      the method to call when the event has been dispatched

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.addListener(gameObject, (int)MyEvents.JUMP, jumpUp);
    +
    + void jumpUp( LTEvent e ){ Debug.Log("jump!"); }

    + +
    +
    +
    +
    +

    LeanTween.alpha

    + +
    + (
      +
    • + ltRect:LTRect +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:908 +

    + + + +
    + +
    +

    Fade a GUI Object

    + +
    + +
    +

    Parameters:

    + +
      +
    • + ltRect:LTRect + LTRect + + +
      +

      LTRect that you wish to fade

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      the final alpha value (0-1)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alpha(ltRect, 1f, 1f) .setEase(LeanTweenType.easeInCirc);

    + +
    +
    +
    +
    +

    LeanTween.alpha

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:887 +

    + + + +
    + +
    +

    Fade a gameobject's material to a certain alpha value. The material's shader needs to support alpha. Owl labs has some excellent efficient shaders.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to fade

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      the final alpha value (0-1)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alpha(gameObject, 1f, 1f) .setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.alpha (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1886 +

    + + + +
    + +
    +

    Alpha an Image Component attached to a RectTransform (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final Vector3 with which to tween to (localScale)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alpha(gameObject.GetComponent<RectTransform>(), 0.5f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.alpha (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1900 +

    + + + +
    + +
    +

    Change the Color of an Image Component attached to a RectTransform (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final Vector3 with which to tween to (localScale)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.color(gameObject.GetComponent<RectTransform>(), 0.5f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.alphaCanvas

    + +
    + (
      +
    • + rectTransform:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:944 +

    + + + +
    + +
    +

    Fade a Unity UI Canvas Group

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTransform:RectTransform + RectTransform + + +
      +

      RectTransform that the CanvasGroup is attached to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      the final alpha value (0-1)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alphaCanvas(gameObject.GetComponent<RectTransform>(), 0f, 1f) .setLoopPingPong();

    + +
    +
    +
    +
    +

    LeanTween.alphaText

    + +
    + (
      +
    • + rectTransform:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:926 +

    + + + +
    + +
    +

    Fade a Unity UI Object

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTransform:RectTransform + RectTransform + + +
      +

      RectTransform associated with the Text Component you wish to fade

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      the final alpha value (0-1)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.alphaText(gameObject.GetComponent<RectTransform>(), 1f, 1f) .setEase(LeanTweenType.easeInCirc);

    + +
    +
    +
    +
    +

    LeanTween.alphaVertex

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:960 +

    + + + +
    + +
    +

    This works by tweening the vertex colors directly.
    +
    + Vertex-based coloring is useful because you avoid making a copy of your + object's material for each instance that needs a different color.
    +
    + A shader that supports vertex colors is required for it to work + (for example the shaders in Mobile/Particles/)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to alpha

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The alpha value you wish to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to delay before calling the function

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.cancel

    + +
    + (
      +
    • + id:int +
    • +
    • + callOnComplete:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:524 +

    + + + +
    + +
    +

    Cancel a specific tween with the provided id

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:int + Int + + +
      +

      unique id that represents that tween

      + +
      + +
    • +
    • + callOnComplete:int + Bool + + +
      +

      (optional) whether to call the onComplete method before canceling

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    int id = LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).id;
    + LeanTween.cancel( id );

    + +
    +
    +
    +
    +

    LeanTween.cancel

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + callOnComplete:bool +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:478 +

    + + + +
    + +
    +

    Cancel all tweens that are currently targeting the gameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      gameObject whose tweens you wish to cancel

      + +
      + +
    • +
    • + callOnComplete:bool + Bool + + +
      +

      (optional) whether to call the onComplete method before canceling

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f);
    + LeanTween.cancel( gameObject );

    + +
    +
    +
    +
    +

    LeanTween.cancelAll

    + +
    + (
      +
    • + callComplete:bool +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:456 +

    + + + +
    + +
    +

    Cancels all tweens

    + +
    + +
    +

    Parameters:

    + +
      +
    • + callComplete:bool + Bool + + +
      +

      (optional) if true, then the all onCompletes will run before canceling

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.cancelAll(true);

    + +
    +
    +
    +
    +

    LeanTween.color

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + to:Color +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:979 +

    + + + +
    + +
    +

    Change a gameobject's material to a certain color value. The material's shader needs to support color tinting. Owl labs has some excellent efficient shaders.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to change the color

      + +
      + +
    • +
    • + to:Color + Color + + +
      +

      the final color value ex: Color.Red, new Color(1.0f,1.0f,0.0f,0.8f)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.color(gameObject, Color.yellow, 1f) .setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.colorText

    + +
    + (
      +
    • + rectTransform:RectTransform +
    • +
    • + to:Color +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1000 +

    + + + +
    + +
    +

    Change the color a Unity UI Object

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTransform:RectTransform + RectTransform + + +
      +

      RectTransform attached to the Text Component whose color you want to change

      + +
      + +
    • +
    • + to:Color + Color + + +
      +

      the final alpha value ex: Color.Red, new Color(1.0f,1.0f,0.0f,0.8f)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time with which to fade the object

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.colorText(gameObject.GetComponent<RectTransform>(), Color.yellow, 1f) .setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.delayedCall

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1019 +

    + + + +
    + +
    +

    Call a method after a specified amount of time

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to associate with this delayed call

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      delay The time you wish to pass before the method is called

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.delayedCall(gameObject, 1f, ()=>{
    Debug.Log("I am called one second later!");
    }));

    + +
    +
    +
    +
    +

    LeanTween.descr

    + +
    + (
      +
    • + id:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:550 +

    + + + +
    + +
    +

    Retrieve a tweens LTDescr object to modify

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:int + Int + + +
      +

      unique id that represents that tween

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    int id = LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).setOnComplete( oldMethod ).id;

    +
    // later I want decide I want to change onComplete method
    + LTDescr descr = LeanTween.descr( id );
    + if(descr!=null) // if the tween has already finished it will come back null
    +   descr.setOnComplete( newMethod );
    +
    +
    +
    +
    +

    LeanTween.descriptions

    + +
    + (
      +
    • + id:GameObject +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:578 +

    + + + +
    + +
    +

    Retrieve a tweens LTDescr object(s) to modify

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:GameObject + GameObject + + +
      +

      object whose tween descriptions you want to retrieve

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).setOnComplete( oldMethod );

    +
    // later I want decide I want to change onComplete method
    + LTDescr[] descr = LeanTween.descriptions( gameObject );
    + if(descr.Length>0) // make sure there is a valid description for this target
    +   descr[0].setOnComplete( newMethod );// in this case we only ever expect there to be one tween on this object
    +
    +
    +
    +
    +

    LeanTween.dispatchEvent

    + +
    + (
      +
    • + eventId:int +
    • +
    • + data:object +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2356 +

    + + + +
    + +
    +

    Tell the added listeners that you are dispatching the event

    + +
    + +
    +

    Parameters:

    + +
      +
    • + eventId:int + Int + + +
      +

      a unique int that describes the event (best to use an enum)

      + +
      + +
    • +
    • + data:object + Object + + +
      +

      Pass data to the listener, access it from the listener with *.data on the LTEvent object

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.dispatchEvent( (int)MyEvents.JUMP, transform );
    +
    + void jumpUp( LTEvent e ){
    +   Transform tran = (Transform)e.data;
    + }

    + +
    +
    +
    +
    +

    LeanTween.dispatchEvent

    + +
    + (
      +
    • + eventId:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2345 +

    + + + +
    + +
    +

    Tell the added listeners that you are dispatching the event

    + +
    + +
    +

    Parameters:

    + +
      +
    • + eventId:int + Int + + +
      +

      a unique int that describes the event (best to use an enum)

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.dispatchEvent( (int)MyEvents.JUMP );

    + +
    +
    +
    +
    +

    LeanTween.init

    + +
    + (
      +
    • + maxSimultaneousTweens:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:285 +

    + + + +
    + +
    +

    This line is optional. Here you can specify the maximum number of tweens you will use (the default is 400). This must be called before any use of LeanTween is made for it to be effective.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + maxSimultaneousTweens:int + Integer + + +
      +

      The maximum number of tweens you will use, make sure you don't go over this limit, otherwise the code will throw an error

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.init( 800 );

    + +
    +
    +
    +
    +

    LeanTween.isTweening

    + +
    + (
      +
    • + id:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:724 +

    + + + +
    + +
    +

    Test whether or not a tween is active or not

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:int + GameObject + + +
      +

      id of the tween that you want to test if it is tweening

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    int id = LeanTween.moveX(gameObject, 1f, 3f).id;
    + if(LeanTween.isTweening( id ))
    +      Debug.Log("I am tweening!");

    + +
    +
    +
    +
    +

    LeanTween.isTweening

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:702 +

    + + + +
    + +
    +

    Test whether or not a tween is active on a GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      GameObject that you want to test if it is tweening

      + +
      + +
    • +
    +
    + + +
    +
    +

    LeanTween.move

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + destination:Transform +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1290 +

    + + + +
    + +
    +

    Move a GameObject to another transform

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + destination:Transform + Transform + + +
      +

      Transform whose position the tween will finally end on

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.move(gameObject, anotherTransform, 2.0f) .setEase( LeanTweenType.easeOutQuad );

    + +
    +
    +
    +
    +

    LeanTween.move

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + vec:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1052 +

    + + + +
    + +
    +

    Move a GameObject to a certain location

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + vec:Vector3 + Vector3 + + +
      +

      to The final positin with which to move to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.move(gameObject, new Vector3(0f,-3f,5f), 2.0f) .setEase( LeanTweenType.easeOutQuad );

    + +
    +
    +
    +
    +

    LeanTween.move

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + path:Vector3[] +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1070 +

    + + + +
    + +
    +

    Move a GameObject along a set of bezier curves

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + path:Vector3[] + Vector3 + + +
      +

      A set of points that define the curve(s) ex: Point1,Handle2,Handle1,Point2,...

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Javascript:
    + LeanTween.move(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + C#:
    + LeanTween.move(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);;

    + +
    +
    +
    +
    +

    LeanTween.move (GUI)

    + +
    + (
      +
    • + ltRect:LTRect +
    • +
    • + vec:Vector2 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1171 +

    + + + +
    + +
    +

    Move a GUI Element to a certain location

    + +
    + +
    +

    Parameters:

    + +
      +
    • + ltRect:LTRect + LTRect + + +
      +

      ltRect LTRect object that you wish to move

      + +
      + +
    • +
    • + vec:Vector2 + Vector2 + + +
      +

      to The final position with which to move to (pixel coordinates)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.move (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1754 +

    + + + +
    + +
    +

    Move a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:Vector3 + Vector3 + + +
      +

      The final Vector3 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.move(gameObject.GetComponent<RectTransform>(), new Vector3(200f,-100f,0f), 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.moveLocal

    + +
    + (
      +
    • + GameObject +
    • +
    • + Vector3 +
    • +
    • + float +
    • +
    • + Hashtable +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1227 +

    + + + +
    + +
    +

    Move a GameObject to a certain location relative to the parent transform.

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to rotate

      + +
      + +
    • +
    • + Vector3 + Vector3 + + +
      +

      to The final positin with which to move to

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    • + Hashtable + Hashtable + + +
      +

      optional Hashtable where you can pass optional items.

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.moveLocal

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + path:Vector3[] +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1241 +

    + + + +
    + +
    +

    Move a GameObject along a set of bezier curves, in local space

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + path:Vector3[] + Vector3 + + +
      +

      A set of points that define the curve(s) ex: Point1,Handle1,Handle2,Point2,...

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Javascript:
    + LeanTween.move(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + C#:
    + LeanTween.move(gameObject, new Vector3[]{Vector3(0f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,1f)}).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + +
    +
    +
    +
    +

    LeanTween.moveSpline

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + spline:LTSpline +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1129 +

    + + + +
    + +
    +

    Move a GameObject through a set of points

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + spline:LTSpline + LTSpline + + +
      +

      pass a pre-existing LTSpline for the object to move along

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Javascript:
    + LeanTween.moveSpline(gameObject, ltSpline, 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + C#:
    + LeanTween.moveSpline(gameObject, ltSpline, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + +
    +
    +
    +
    +

    LeanTween.moveSpline

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + path:Vector3[] +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1108 +

    + + + +
    + +
    +

    Move a GameObject through a set of points

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + path:Vector3[] + Vector3 + + +
      +

      A set of points that define the curve(s) ex: ControlStart,Pt1,Pt2,Pt3,.. ..ControlEnd
      Note: The first and last item just define the angle of the end points, they are not actually used in the spline path itself. If you do not care about the angle you can jus set the first two items and last two items as the same value.

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Javascript:
    + LeanTween.moveSpline(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + C#:
    + LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + +
    +
    +
    +
    +

    LeanTween.moveSplineLocal

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + path:Vector3[] +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1150 +

    + + + +
    + +
    +

    Move a GameObject through a set of points, in local space

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to move

      + +
      + +
    • +
    • + path:Vector3[] + Vector3 + + +
      +

      A set of points that define the curve(s) ex: ControlStart,Pt1,Pt2,Pt3,.. ..ControlEnd

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Javascript:
    + LeanTween.moveSpline(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + C#:
    + LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + +
    +
    +
    +
    +

    LeanTween.moveX

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1188 +

    + + + +
    + +
    +

    Move a GameObject along the x-axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to move

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      to The final position with which to move to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the move in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.moveX (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1768 +

    + + + +
    + +
    +

    Move a RectTransform object affecting x-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final x location with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveX(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.moveY

    + +
    + (
      +
    • + GameObject +
    • +
    • + float +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1201 +

    + + + +
    + +
    +

    Move a GameObject along the y-axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to move

      + +
      + +
    • +
    • + float + Float + + +
      +

      to The final position with which to move to

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the move in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.moveY (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1782 +

    + + + +
    + +
    +

    Move a RectTransform object affecting y-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final y location with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveY(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.moveZ

    + +
    + (
      +
    • + GameObject +
    • +
    • + float +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1214 +

    + + + +
    + +
    +

    Move a GameObject along the z-axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to move

      + +
      + +
    • +
    • + float + Float + + +
      +

      to The final position with which to move to

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the move in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.moveZ (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1796 +

    + + + +
    + +
    +

    Move a RectTransform object affecting z-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final x location with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.moveZ(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.pause

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:625 +

    + + + +
    + +
    +

    Pause all tweens for a GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      GameObject whose tweens you want to pause

      + +
      + +
    • +
    +
    + + +
    +
    +

    LeanTween.pause

    + +
    + (
      +
    • + id:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:606 +

    + + + +
    + +
    +

    Pause all tweens for a GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:int + Int + + +
      +

      Id of the tween you want to pause

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    int id = LeanTween.moveX(gameObject, 5, 1.0).id
    + LeanTween.pause( id );
    + // Later....
    + LeanTween.resume( id );

    + +
    +
    +
    +
    +

    LeanTween.pauseAll

    + + () + + + + + + + + +
    +

    + Defined in + LeanTween.cs:640 +

    + + + +
    + +
    +

    Pause all active tweens

    + +
    + + + +
    +
    +

    LeanTween.play

    + +
    + (
      +
    • + rectTransform:RectTransform +
    • +
    • + sprites:Sprite[] +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:870 +

    + + + +
    + +
    +

    Play a sequence of images on a Unity UI Object

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTransform:RectTransform + RectTransform + + +
      +

      RectTransform that you want to play the sequence of sprites on

      + +
      + +
    • +
    • + sprites:Sprite[] + Sprite + + +
      +

      Sequence of sprites to be played

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.play(gameObject.GetComponent(), sprites).setLoopPingPong();

    + +
    +
    +
    +
    +

    LeanTween.removeListener

    + +
    + (
      +
    • + caller:GameObject +
    • +
    • + eventId:int +
    • +
    • + callback:System.Action<LTEvent> +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:2318 +

    + + + +
    + +
    +

    Remove an event listener you have added

    + +
    + +
    +

    Parameters:

    + +
      +
    • + caller:GameObject + GameObject + + +
      +

      the gameObject the listener is attached to

      + +
      + +
    • +
    • + eventId:int + Int + + +
      +

      a unique int that describes the event (best to use an enum)

      + +
      + +
    • +
    • + callback:System.Action<LTEvent> + System.Action + + +
      +

      the method that was specified to call when the event has been dispatched

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    LeanTween.removeListener(gameObject, (int)MyEvents.JUMP, jumpUp);
    +
    + void jumpUp( LTEvent e ){ }

    + +
    +
    +
    +
    +

    LeanTween.resume

    + +
    + (
      +
    • + id:int +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:669 +

    + + + +
    + +
    +

    Resume a specific tween

    + +
    + +
    +

    Parameters:

    + +
      +
    • + id:int + Int + + +
      +

      Id of the tween you want to resume

      + +
      + +
    • +
    +
    + + +
    +

    Example:

    + +
    +

    int id = LeanTween.moveX(gameObject, 5, 1.0).id
    + LeanTween.pause( id );
    + // Later....
    + LeanTween.resume( id );

    + +
    +
    +
    +
    +

    LeanTween.resume

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    ) +
    + + + + + + + + +
    +

    + Defined in + LeanTween.cs:688 +

    + + + +
    + +
    +

    Resume all the tweens on a GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      GameObject whose tweens you want to resume

      + +
      + +
    • +
    +
    + + +
    +
    +

    LeanTween.resumeAll

    + + () + + + + + + + + +
    +

    + Defined in + LeanTween.cs:652 +

    + + + +
    + +
    +

    Resume all active tweens

    + +
    + + + +
    +
    +

    LeanTween.rotate

    + +
    + (
      +
    • + ltRect:LTRect +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    • + optional:Array +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1319 +

    + + + +
    + +
    +

    Rotate a GUI element (using an LTRect object), to a value that is in degrees

    + +
    + +
    +

    Parameters:

    + +
      +
    • + ltRect:LTRect + LTRect + + +
      +

      LTRect that you wish to rotate

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final rotation with which to rotate to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    • + optional:Array + Array + + +
      +

      Object Array where you can pass optional items.

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    if(GUI.Button(buttonRect.rect, "Rotate"))
    + LeanTween.rotate( buttonRect4, 150.0f, 1.0f).setEase(LeanTweenType.easeOutElastic);
    + GUI.matrix = Matrix4x4.identity;

    + +
    +
    +
    +
    +

    LeanTween.rotate

    + +
    + (
      +
    • + GameObject +
    • +
    • + Vector3 +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1304 +

    + + + +
    + +
    +

    Rotate a GameObject, to values are in passed in degrees

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to rotate

      + +
      + +
    • +
    • + Vector3 + Vector3 + + +
      +

      to The final rotation with which to rotate to

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.rotate(cube, new Vector3(180f,30f,0f), 1.5f);

    + +
    +
    +
    +
    +

    LeanTween.rotate (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1810 +

    + + + +
    + +
    +

    Rotate a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The degree with which to rotate the RectTransform

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.rotate(gameObject.GetComponent<RectTransform>(), 90f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.rotateAround

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + vec:Vector3 +
    • +
    • + degrees:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1389 +

    + + + +
    + +
    +

    Rotate a GameObject around a certain Axis (the best method to use when you want to rotate beyond 180 degrees)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + vec:Vector3 + Vector3 + + +
      +

      axis in which to rotate around ex: Vector3.up

      + +
      + +
    • +
    • + degrees:float + Float + + +
      +

      the degrees in which to rotate

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example:
    + LeanTween.rotateAround ( gameObject, Vector3.left, 90f, 1f );

    + +
    +
    +
    +
    +

    LeanTween.rotateAround (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + axis:Vector3 +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1828 +

    + + + +
    + +
    +

    Rotate a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + axis:Vector3 + Vector3 + + +
      +

      The axis in which to rotate the RectTransform (Vector3.forward is most commonly used)

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The degree with which to rotate the RectTransform

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.rotateAround(gameObject.GetComponent<RectTransform>(), Vector3.forward, 90f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.rotateAroundLocal

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + vec:Vector3 +
    • +
    • + degrees:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1406 +

    + + + +
    + +
    +

    Rotate a GameObject around a certain Axis in Local Space (the best method to use when you want to rotate beyond 180 degrees)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + vec:Vector3 + Vector3 + + +
      +

      axis in which to rotate around ex: Vector3.up

      + +
      + +
    • +
    • + degrees:float + Float + + +
      +

      the degrees in which to rotate

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example:
    + LeanTween.rotateAround ( gameObject, Vector3.left, 90f, 1f );

    + +
    +
    +
    +
    +

    LeanTween.rotateAroundLocal (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + axis:Vector3 +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1843 +

    + + + +
    + +
    +

    Rotate a RectTransform object around it's local axis (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + axis:Vector3 + Vector3 + + +
      +

      The local axis in which to rotate the RectTransform (Vector3.forward is most commonly used)

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The degree with which to rotate the RectTransform

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.rotateAroundLocal(gameObject.GetComponent<RectTransform>(), Vector3.forward, 90f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.rotateLocal

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + to:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1337 +

    + + + +
    + +
    +

    Rotate a GameObject in the objects local space (on the transforms localEulerAngles object)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + to:Vector3 + Vector3 + + +
      +

      The final rotation with which to rotate to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.rotateX

    + +
    + (
      +
    • + GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1350 +

    + + + +
    + +
    +

    Rotate a GameObject only on the X axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final x-axis rotation with which to rotate

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.rotateY

    + +
    + (
      +
    • + GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1363 +

    + + + +
    + +
    +

    Rotate a GameObject only on the Y axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final y-axis rotation with which to rotate

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.rotateZ

    + +
    + (
      +
    • + GameObject +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1376 +

    + + + +
    + +
    +

    Rotate a GameObject only on the Z axis

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      Gameobject that you wish to rotate

      + +
      + +
    • +
    • + to:float + Float + + +
      +

      The final z-axis rotation with which to rotate

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the rotation in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.scale

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + vec:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1423 +

    + + + +
    + +
    +

    Scale a GameObject to a certain size

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      gameObject Gameobject that you wish to scale

      + +
      + +
    • +
    • + vec:Vector3 + Vector3 + + +
      +

      to The size with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.scale (GUI)

    + +
    + (
      +
    • + LTRect +
    • +
    • + Vector2 +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1436 +

    + + + +
    + +
    +

    Scale a GUI Element to a certain width and height

    + +
    + +
    +

    Parameters:

    + +
      +
    • + LTRect + LTRect + + +
      +

      ltRect LTRect object that you wish to move

      + +
      + +
    • +
    • + Vector2 + Vector2 + + +
      +

      to The final width and height to scale to (pixel based)

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + var bRect:LTRect = new LTRect( 0, 0, 100, 50 );
    + LeanTween.scale( bRect, Vector2(bRect.rect.width, bRect.rect.height) * 1.3, 0.25 ).setEase(LeanTweenType.easeOutBounce);
    + function OnGUI(){
    +   if(GUI.Button(bRect.rect, "Scale")){ }
    + }
    +
    + Example C#:
    + LTRect bRect = new LTRect( 0f, 0f, 100f, 50f );
    + LeanTween.scale( bRect, new Vector2(150f,75f), 0.25f ).setEase(LeanTweenType.easeOutBounce);
    + void OnGUI(){
    +   if(GUI.Button(bRect.rect, "Scale")){ }
    + }

    + +
    +
    +
    +
    +

    LeanTween.scale (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1858 +

    + + + +
    + +
    +

    Scale a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:Vector3 + Vector3 + + +
      +

      The final Vector3 with which to tween to (localScale)

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.scale(gameObject.GetComponent<RectTransform>(), gameObject.GetComponent<RectTransform>().localScale*2f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.scaleX

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + scaleTo:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1463 +

    + + + +
    + +
    +

    Scale a GameObject to a certain size along the x-axis only

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to scale

      + +
      + +
    • +
    • + scaleTo:float + Float + + +
      +

      the size with which to scale to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      the time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.scaleY

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + scaleTo:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1476 +

    + + + +
    + +
    +

    Scale a GameObject to a certain size along the y-axis only

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to scale

      + +
      + +
    • +
    • + scaleTo:float + Float + + +
      +

      the size with which to scale to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      the time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.scaleZ

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + scaleTo:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1489 +

    + + + +
    + +
    +

    Scale a GameObject to a certain size along the z-axis only

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to scale

      + +
      + +
    • +
    • + scaleTo:float + Float + + +
      +

      the size with which to scale to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      the time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.size (RectTransform)

    + +
    + (
      +
    • + rectTrans:RectTransform +
    • +
    • + to:Vector2 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1872 +

    + + + +
    + +
    +

    Change the sizeDelta of a RectTransform object (used in Unity Canvas, for Buttons, Panel, Scrollbar, etc...)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + rectTrans:RectTransform + RectTransform + + +
      +

      RectTransform that you wish to attach the tween to

      + +
      + +
    • +
    • + to:Vector2 + Vector2 + + +
      +

      The final Vector2 the tween will end at for sizeDelta property

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    LeanTween.size(gameObject.GetComponent<RectTransform>(), gameObject.GetComponent<RectTransform>().sizeDelta*2f, 1f).setDelay(1f);

    + +
    +
    +
    +
    +

    LeanTween.tweensRunning

    + + () + + + + + + + + +
    +

    + Defined in + LeanTween.cs:266 +

    + + + +
    + +
    +

    Find out how many tweens you have animating at a given time

    + +
    + + + +
    +

    Example:

    + +
    +

    Debug.Log("I have "+LeanTween.tweensRunning+" animating!");

    + +
    +
    +
    +
    +

    LeanTween.value (Color)

    + +
    + (
      +
    • + GameObject +
    • +
    • + callOnUpdate:Action<Color> +
    • +
    • + Color +
    • +
    • + Color +
    • +
    • + Color +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1664 +

    + + + +
    + +
    +

    Tween from one color to another

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject

      + +
      + +
    • +
    • + callOnUpdate:Action<Color> + Action + + +
      +

      The function that is called on every Update frame, this function needs to accept a color value ex: function updateValue( Color val ){ }

      + +
      + +
    • +
    • + Color + Color + + +
      +

      from The original value to start the tween from

      + +
      + +
    • +
    • + Color + Color + + +
      +

      to The value to end the tween on

      + +
      + +
    • +
    • + Color + Color + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, updateValueExampleCallback, Color.red, Color.green, 1f).setEase(LeanTweenType.easeOutElastic);
    + function updateValueExampleCallback( val:Color ){
    +   Debug.Log("tweened color:"+val+" set this to whatever variable you are tweening...");
    + }
    +
    + Example C#:
    + LeanTween.value( gameObject, updateValueExampleCallback, Color.red, Color.green, 1f).setEase(LeanTweenType.easeOutElastic);
    + void updateValueExampleCallback( Color val ){
    +   Debug.Log("tweened color:"+val+" set this to whatever variable you are tweening...");
    + }

    + +
    +
    +
    +
    +

    LeanTween.value (Color)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + from:Color +
    • +
    • + to:Color +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1577 +

    + + + +
    + +
    +

    Tween any particular value (Color)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + from:Color + Color + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:Color + Color + + +
      +

      The final Color with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, Color.red, Color.yellow, 5f).setOnUpdate( function( val:Color ){
    +  Debug.Log("tweened val:"+val);
    + } );
    +
    + Example C#:
    + LeanTween.value( gameObject, Color.red, Color.yellow, 5f).setOnUpdate( (Color val)=>{
    +  Debug.Log("tweened val:"+val);
    + } );

    + +
    +
    +
    +
    +

    LeanTween.value (float)

    + +
    + (
      +
    • + GameObject +
    • +
    • + callOnUpdateRatio:Action<float,float> +
    • +
    • + float +
    • +
    • + float +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1636 +

    + + + +
    + +
    +

    Tweens any float value, it does not need to be tied to any particular type or GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject

      + +
      + +
    • +
    • + callOnUpdateRatio:Action<float,float> + Action + + +
      +

      Function that's called every Update frame. It must accept two float values ex: function updateValue( float val, float ratio){ }

      + +
      + +
    • +
    • + float + Float + + +
      +

      from The original value to start the tween from

      + +
      + +
    • +
    • + float + Float + + +
      +

      to The value to end the tween on

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + function updateValueExampleCallback( val:float, ratio:float ){
    +   Debug.Log("tweened value:"+val+" percent complete:"+ratio100);
    + }
    +
    + Example C#:
    + LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + void updateValueExampleCallback( float val, float ratio ){
    +   Debug.Log("tweened value:"+val+" percent complete:"+ratio
    100);
    + }

    + +
    +
    +
    +
    +

    LeanTween.value (float)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + from:float +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1502 +

    + + + +
    + +
    +

    Tween any particular value (float)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + from:float + Float + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:float + Vector3 + + +
      +

      The final float with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, 1f, 5f, 5f).setOnUpdate( function( val:float ){
    +  Debug.Log("tweened val:"+val);
    + } );
    +
    + Example C#:
    + LeanTween.value( gameObject, 1f, 5f, 5f).setOnUpdate( (float val)=>{
    +  Debug.Log("tweened val:"+val);
    + } );

    + +
    +
    +
    +
    +

    LeanTween.value (float)

    + +
    + (
      +
    • + GameObject +
    • +
    • + callOnUpdate:Action<float> +
    • +
    • + float +
    • +
    • + float +
    • +
    • + float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1608 +

    + + + +
    + +
    +

    Tween any particular value, it does not need to be tied to any particular type or GameObject

    + +
    + +
    +

    Parameters:

    + +
      +
    • + GameObject + GameObject + + +
      +

      gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject

      + +
      + +
    • +
    • + callOnUpdate:Action<float> + Action + + +
      +

      The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( float val ){ }

      + +
      + +
    • +
    • + float + Float + + +
      +

      from The original value to start the tween from

      + +
      + +
    • +
    • + float + Float + + +
      +

      to The value to end the tween on

      + +
      + +
    • +
    • + float + Float + + +
      +

      time The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + function updateValueExampleCallback( val:float ){
    +   Debug.Log("tweened value:"+val+" set this to whatever variable you are tweening...");
    + }
    +
    + Example C#:
    + LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + void updateValueExampleCallback( float val ){
    +   Debug.Log("tweened value:"+val+" set this to whatever variable you are tweening...");
    + }

    + +
    +
    +
    +
    +

    LeanTween.value (float,object)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + callOnUpdate:Action<float,object> +
    • +
    • + from:float +
    • +
    • + to:float +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1727 +

    + + + +
    + +
    +

    Tween any particular value (float)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + callOnUpdate:Action<float,object> + Action + + +
      +

      The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val, object obj ){ }

      + +
      + +
    • +
    • + from:float + Float + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:float + Vector3 + + +
      +

      The final Vector3 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.value (Vector2)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + callOnUpdate:Action<Vector2> +
    • +
    • + from:Vector2 +
    • +
    • + to:Vector2 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1697 +

    + + + +
    + +
    +

    Tween any particular value (Vector2), this could be used to tween an arbitrary value like offset property

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + callOnUpdate:Action<Vector2> + Action + + +
      +

      The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val ){ }

      + +
      + +
    • +
    • + from:Vector2 + Float + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:Vector2 + Vector2 + + +
      +

      The final Vector3 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    +

    LeanTween.value (Vector2)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + from:Vector2 +
    • +
    • + to:Vector2 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1529 +

    + + + +
    + +
    +

    Tween any particular value (Vector2)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + from:Vector2 + Vector2 + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:Vector2 + Vector3 + + +
      +

      The final Vector2 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, new Vector2(1f,0f), new Vector3(5f,0f), 5f).setOnUpdate( function( val:Vector2 ){
    +  Debug.Log("tweened val:"+val);
    + } );
    +
    + Example C#:
    + LeanTween.value( gameObject, new Vector3(1f,0f), new Vector3(5f,0f), 5f).setOnUpdate( (Vector2 val)=>{
    +  Debug.Log("tweened val:"+val);
    + } );

    + +
    +
    +
    +
    +

    LeanTween.value (Vector3)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + from:Vector3 +
    • +
    • + to:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1553 +

    + + + +
    + +
    +

    Tween any particular value (Vector3)

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + from:Vector3 + Vector3 + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:Vector3 + Vector3 + + +
      +

      The final Vector3 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +

    Example:

    + +
    +

    Example Javascript:
    + LeanTween.value( gameObject, new Vector3(1f,0f,0f), new Vector3(5f,0f,0f), 5f).setOnUpdate( function( val:Vector3 ){
    +  Debug.Log("tweened val:"+val);
    + } );
    +
    + Example C#:
    + LeanTween.value( gameObject, new Vector3(1f,0f,0f), new Vector3(5f,0f,0f), 5f).setOnUpdate( (Vector3 val)=>{
    +  Debug.Log("tweened val:"+val);
    + } );

    + +
    +
    +
    +
    +

    LeanTween.value (Vector3)

    + +
    + (
      +
    • + gameObject:GameObject +
    • +
    • + callOnUpdate:Action<Vector3> +
    • +
    • + from:Vector3 +
    • +
    • + to:Vector3 +
    • +
    • + time:float +
    • +
    ) +
    + + + LTDescr + + + + + + + + +
    +

    + Defined in + LeanTween.cs:1712 +

    + + + +
    + +
    +

    Tween any particular value (Vector3), this could be used to tween an arbitrary property that uses a Vector

    + +
    + +
    +

    Parameters:

    + +
      +
    • + gameObject:GameObject + GameObject + + +
      +

      Gameobject that you wish to attach the tween to

      + +
      + +
    • +
    • + callOnUpdate:Action<Vector3> + Action + + +
      +

      The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val ){ }

      + +
      + +
    • +
    • + from:Vector3 + Float + + +
      +

      The original value to start the tween from

      + +
      + +
    • +
    • + to:Vector3 + Vector3 + + +
      +

      The final Vector3 with which to tween to

      + +
      + +
    • +
    • + time:float + Float + + +
      +

      The time to complete the tween in

      + +
      + +
    • +
    +
    + +
    +

    Returns:

    + +
    + LTDescr: +

    LTDescr an object that distinguishes the tween

    + +
    +
    + +
    +
    + + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html.meta new file mode 100644 index 0000000..7a17654 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTween.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: beea01b16f84c4f18a168afa5800b612 diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html new file mode 100644 index 0000000..a1de3f3 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html @@ -0,0 +1,1090 @@ + + + + + LeanTweenType + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +

    LeanTweenType Class

    +
    + + +
    + Defined in: LeanTween.cs:38 +
    + + +
    + + +
    +

    Pass this to the "ease" parameter, to get a different easing behavior

    + Example:
    LeanTween.rotateX(gameObject, 270.0f, 1.5f).setEase(LeanTweenType.easeInBack);

    + +
    + + +
    + + +
    +
    +

    Item Index

    + + +
    +

    Properties

    + + +
    + + +
    + + +
    +

    Properties

    + +
    +

    easeInBack

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:120 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInBounce

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:111 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInCirc

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:102 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInCubic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:57 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInElastic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:129 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInExpo

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:93 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutBack

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:126 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutBounce

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:117 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutCirc

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:108 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutCubic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:63 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutElastic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:135 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutExpo

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:99 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutQuad

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:54 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutQuart

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:72 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutQuint

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:81 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInOutSine

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:90 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInQuad

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:51 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInQuart

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:66 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInQuint

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:75 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeInSine

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:84 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutBack

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:123 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutBounce

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:114 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutCirc

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:105 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutCubic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:60 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutElastic

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:132 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutExpo

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:96 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutQuad

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:48 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutQuart

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:69 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutQuint

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:78 +

    + + +
    + +
    + +
    + + + +
    +
    +

    easeOutSine

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:87 +

    + + +
    + +
    + +
    + + + +
    +
    +

    linear

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:45 +

    + + +
    + +
    + +
    + + + +
    +
    +

    punch

    + Integer + + + + + +
    +

    + Defined in + LeanTween.cs:138 +

    + + +
    + +
    + +
    + + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html.meta new file mode 100644 index 0000000..57a6283 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/LeanTweenType.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 85c97d3850f59444cb0751b3bc40b06d diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html new file mode 100644 index 0000000..487fe15 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html @@ -0,0 +1,10 @@ + + + + Redirector + + + + Click here to redirect + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html.meta new file mode 100644 index 0000000..891c717 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/classes/index.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a23cc63a765c44c9c82fb33b1ecb455f diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/elements.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements.meta new file mode 100644 index 0000000..6c785fc --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 932507f3c60bb4fcea847cba753363b8 +folderAsset: yes +timeCreated: 1479470944 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html new file mode 100644 index 0000000..487fe15 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html @@ -0,0 +1,10 @@ + + + + Redirector + + + + Click here to redirect + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html.meta new file mode 100644 index 0000000..b9d37f7 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/elements/index.html.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6a53cd107c1f4d5498ea9c736e3a650 +timeCreated: 1479471015 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html b/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html new file mode 100644 index 0000000..6fbeeb7 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html @@ -0,0 +1,165 @@ + + + + + + + + + + + + + + + + +
    +
    +
    +

    - Developed by Dented Pixel
    +
    +
    + API Docs for: LeanTween 2.42
    + + + + + +
    +

    Support LeanTween!

    + +
    +
    + + + + + + + +
    +
    +
    + +

    Maintaining and adding new features takes time, your support is appreciated.

    +
    +
    + + +
    +
    + Show: + + + + + + + +
    + +
    +
    +
    +
    +
    +

    + Browse to a module or class using the sidebar to view its API documentation. +

    + +

    Keyboard Shortcuts

    + +
      +
    • Press s to focus the API search box.

    • + +
    • Use Up and Down to select classes, modules, and search results.

    • + +
    • With the API search box or sidebar focused, use -Left or -Right to switch sidebar tabs.

    • + +
    • With the API search box or sidebar focused, use Ctrl+Left and Ctrl+Right to switch sidebar tabs.

    • +
    +
    +
    + + +
    +
    +
    +
    +
    +
    + + + + + + + + + + diff --git a/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html.meta b/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html.meta new file mode 100644 index 0000000..7a0b59d --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Documentation/index.html.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 78eeb9616e21d4178b574871040d7fa0 diff --git a/IronToad_UnityProject/Assets/LeanTween/Editor.meta b/IronToad_UnityProject/Assets/LeanTween/Editor.meta new file mode 100644 index 0000000..0d4266c --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Editor.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 19bfca9f9a913415ea58580f6667f922 +folderAsset: yes +timeCreated: 1454272449 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs b/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs new file mode 100644 index 0000000..a854d7c --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs @@ -0,0 +1,59 @@ +using UnityEngine; +using System.Collections; +#if UNITY_EDITOR +using UnityEditor; + +public class LeanTweenDocumentationEditor : Editor { + + [MenuItem ("Help/LeanTween Documentation")] + static void openDocumentation() + { + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 + // Loops through all items in case the user has moved the default installation directory + string[] guids = AssetDatabase.FindAssets ("LeanTween", null); + string documentationPath = ""; + foreach (string guid in guids){ + string path = AssetDatabase.GUIDToAssetPath(guid); + if(path.IndexOf("classes/LeanTween.html")>=0){ + documentationPath = path; + break; + } + } + documentationPath = documentationPath.Substring(documentationPath.IndexOf("/")); + string browserPath = "file://" + Application.dataPath + documentationPath + "#index"; + Application.OpenURL(browserPath); + + #else + // assumes the default installation directory + string documentationPath = "file://"+Application.dataPath + "/LeanTween/Documentation/classes/LeanTween.html#index"; + Application.OpenURL(documentationPath); + + #endif + } + + [MenuItem ("Help/LeanTween Forum (ask questions)")] + static void openForum() + { + Application.OpenURL("http://forum.unity3d.com/threads/leantween-a-tweening-engine-that-is-up-to-5x-faster-than-competing-engines.161113/"); + } + + [MenuItem ("Help/LeanTween GitHub (contribute code)")] + static void openGit() + { + Application.OpenURL("https://github.com/dentedpixel/LeanTween"); + } + + [MenuItem ("Help/LeanTween Support (donate)")] + static void openLTDonate() + { + Application.OpenURL("https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=YJPUT3RAK5VL8"); + } + + [MenuItem ("Help/Dented Pixel News")] + static void openDPNews() + { + Application.OpenURL("http://dentedpixel.com/category/developer-diary/"); + } +} + +#endif \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs.meta new file mode 100644 index 0000000..1bcb938 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Editor/LeanTweenDocumentationEditor.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 52fea17a2d56d46afa0d6cb52e2a4335 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples.meta b/IronToad_UnityProject/Assets/LeanTween/Examples.meta new file mode 100644 index 0000000..b6b1d02 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 486852d399aed440aa95693d95263c16 diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived.meta new file mode 100644 index 0000000..312cf73 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 8d71b219a4562400b9fabb60eb51396d +folderAsset: yes +timeCreated: 1460027769 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader new file mode 100644 index 0000000..0115e68 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader @@ -0,0 +1,30 @@ +Shader "Custom/2dUnlitWithFade" { + Properties + { + _Color ("Color Tint", Color) = (1,1,1,1) + _MainTex ("Base (RGB) Alpha (A)", 2D) = "white" + } + + Category + { + Lighting Off + ZWrite Off + //ZWrite On // uncomment if you have problems like the sprite disappear in some rotations. + Cull back + Blend SrcAlpha OneMinusSrcAlpha + //AlphaTest Greater 0.001 // uncomment if you have problems like the sprites or 3d text have white quads instead of alpha pixels. + Tags {Queue=Transparent} + + SubShader + { + Pass + { + SetTexture [_MainTex] + { + ConstantColor [_Color] + Combine Texture * constant + } + } + } + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader.meta new file mode 100644 index 0000000..83969be --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/2dUnlitWithFade.shader.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8bce9282b1bfd475284fd2e72b37403c diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg new file mode 100644 index 0000000..c725862 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg.meta new file mode 100644 index 0000000..c7e10a0 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/GrumpyCat.jpeg.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 6a9d1d221a3c94d83b614d921df0402e +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + textureType: 5 + buildTargetSettings: [] diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs new file mode 100644 index 0000000..64d4a0e --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs @@ -0,0 +1,84 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class OldGUIExamplesCS : MonoBehaviour { + public Texture2D grumpy; + public Texture2D beauty; + + private float w; + private float h; + + private LTRect buttonRect1; + private LTRect buttonRect2; + private LTRect buttonRect3; + private LTRect buttonRect4; + private LTRect grumpyRect; + private LTRect beautyTileRect; + + + // Use this for initialization + void Start () { + w = Screen.width; + h = Screen.height; + buttonRect1 = new LTRect(0.10f*w, 0.8f*h, 0.2f*w, 0.14f*h ); + buttonRect2 = new LTRect(1.2f*w, 0.8f*h, 0.2f*w, 0.14f*h ); + buttonRect3 = new LTRect(0.35f*w, 0.0f*h, 0.3f*w, 0.2f*h, 0f ); + buttonRect4 = new LTRect(0.0f*w, 0.4f*h, 0.3f*w, 0.2f*h, 1.0f, 15.0f ); + + grumpyRect = new LTRect(0.5f*w - grumpy.width*0.5f, 0.5f*h - grumpy.height*0.5f, grumpy.width, grumpy.height ); + beautyTileRect = new LTRect(0.0f,0.0f,1.0f,1.0f ); + + LeanTween.move( buttonRect2, new Vector2(0.55f*w, buttonRect2.rect.y), 0.7f ).setEase(LeanTweenType.easeOutQuad); + } + + public void catMoved(){ + Debug.Log("cat moved..."); + } + + // Update is called once per frame + void OnGUI () { + GUI.DrawTexture( grumpyRect.rect, grumpy); + + Rect staticRect = new Rect(0.0f*w, 0.0f*h, 0.2f*w, 0.14f*h); + if(GUI.Button( staticRect, "Move Cat")){ + if(LeanTween.isTweening(grumpyRect)==false){ // Check to see if the cat is already tweening, so it doesn't freak out + Vector2 orig = new Vector2( grumpyRect.rect.x, grumpyRect.rect.y ); + LeanTween.move( grumpyRect, new Vector2( 1.0f*Screen.width - grumpy.width, 0.0f*Screen.height ), 1.0f).setEase(LeanTweenType.easeOutBounce).setOnComplete(catMoved); + LeanTween.move( grumpyRect, orig, 1.0f ).setDelay(1.0f).setEase( LeanTweenType.easeOutBounce); + } + } + + if(GUI.Button(buttonRect1.rect, "Scale Centered")){ + LeanTween.scale( buttonRect1, new Vector2(buttonRect1.rect.width, buttonRect1.rect.height) * 1.2f, 0.25f ).setEase( LeanTweenType.easeOutQuad ); + LeanTween.move( buttonRect1, new Vector2(buttonRect1.rect.x-buttonRect1.rect.width*0.1f, buttonRect1.rect.y-buttonRect1.rect.height*0.1f), 0.25f ).setEase(LeanTweenType.easeOutQuad); + } + + if(GUI.Button(buttonRect2.rect, "Scale")){ + LeanTween.scale( buttonRect2, new Vector2(buttonRect2.rect.width, buttonRect2.rect.height) * 1.2f, 0.25f ).setEase(LeanTweenType.easeOutBounce); + } + + staticRect = new Rect(0.76f*w, 0.53f*h, 0.2f*w, 0.14f*h); + if(GUI.Button( staticRect, "Flip Tile")){ + LeanTween.move( beautyTileRect, new Vector2( 0f, beautyTileRect.rect.y + 1.0f ), 1.0f ).setEase(LeanTweenType.easeOutBounce); + } + + GUI.DrawTextureWithTexCoords( new Rect(0.8f*w, 0.5f*h - beauty.height*0.5f, beauty.width*0.5f, beauty.height*0.5f), beauty, beautyTileRect.rect); + + + if(GUI.Button(buttonRect3.rect, "Alpha")){ + LeanTween.alpha( buttonRect3, 0.0f, 1.0f).setEase(LeanTweenType.easeOutQuad); + LeanTween.alpha( buttonRect3, 1.0f, 1.0f).setDelay(1.0f).setEase( LeanTweenType.easeInQuad); + + LeanTween.alpha( grumpyRect, 0.0f, 1.0f).setEase(LeanTweenType.easeOutQuad); + LeanTween.alpha( grumpyRect, 1.0f, 1.0f).setDelay(1.0f).setEase(LeanTweenType.easeInQuad); + } + GUI.color = new Color(1.0f,1.0f,1.0f,1.0f); // Reset to normal alpha, otherwise other gui elements will be effected + + if(GUI.Button(buttonRect4.rect, "Rotate")){ + LeanTween.rotate( buttonRect4, 150.0f, 1.0f ).setEase(LeanTweenType.easeOutElastic); + LeanTween.rotate( buttonRect4, 0.0f, 1.0f ).setDelay(1.0f).setEase(LeanTweenType.easeOutElastic); + } + GUI.matrix = Matrix4x4.identity; + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs.meta new file mode 100644 index 0000000..353172a --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 876bfcaf53a664f29a628faa9fa332fc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity new file mode 100644 index 0000000..b714b14 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity.meta new file mode 100644 index 0000000..65e6186 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesCS.unity.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ec27881ee9cf54018ac9bd5706c2fdab diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js new file mode 100644 index 0000000..ed13ce6 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js @@ -0,0 +1,71 @@ +import DentedPixel; + +public var grumpy:Texture2D; +public var beauty:Texture2D; + +private var w:float = Screen.width; +private var h:float = Screen.height; + +private var buttonRect1:LTRect; +private var buttonRect2:LTRect; +private var buttonRect3:LTRect; +private var buttonRect4:LTRect; +private var grumpyRect:LTRect; +private var beautyTileRect:LTRect; + +function Start () { + w = Screen.width; + h = Screen.height; + buttonRect1 = new LTRect(0.10*w, 0.8*h, 0.25*w, 0.14*h ); + buttonRect2 = new LTRect(1.2*w, 0.8*h, 0.2*w, 0.14*h ); + buttonRect3 = new LTRect(0.35*w, 0.0*h, 0.3*w, 0.2*h ); + buttonRect4 = new LTRect(0.0*w, 0.4*h, 0.3*w, 0.2*h, 1.0, 15.0 ); + + grumpyRect = new LTRect(0.5*w - grumpy.width/2.0, 0.5*h - grumpy.height/2.0, grumpy.width, grumpy.height ); + beautyTileRect = new LTRect(0,0,1,1 ); + + LeanTween.move( buttonRect2, Vector2(0.55*w, buttonRect2.rect.y), 0.7f ).setEase(LeanTweenType.easeOutQuad); +} + +function OnGUI(){ + var staticRect:Rect = Rect(0.0*w, 0.0*h, 0.2*w, 0.14*h); + if(GUI.Button( staticRect, "Move Cat")){ + if(LeanTween.isTweening(grumpyRect)==false){ // Check to see if the cat is already tweening, so it doesn't freak out + var orig:Vector2 = Vector2( grumpyRect.rect.x, grumpyRect.rect.y ); + LeanTween.move( grumpyRect, Vector2( 1.0*w - grumpy.width, 0.0*h ), 1.0).setEase(LeanTweenType.easeOutBounce) ; + LeanTween.move( grumpyRect, orig, 1.0 ).setEase(LeanTweenType.easeOutBounce).setDelay(1.0); + } + } + GUI.DrawTexture( grumpyRect.rect, grumpy); + + if(GUI.Button(buttonRect1.rect, "Scale Centered")){ + LeanTween.scale( buttonRect1, Vector2(buttonRect1.rect.width, buttonRect1.rect.height) * 1.2, 0.25 ).setEase(LeanTweenType.easeOutQuad); + LeanTween.move( buttonRect1, Vector2(buttonRect1.rect.x-buttonRect1.rect.width*0.1, buttonRect1.rect.y-buttonRect1.rect.height*0.1), 0.25).setEase(LeanTweenType.easeOutQuad) ; + } + + if(GUI.Button(buttonRect2.rect, "Scale")){ + LeanTween.scale( buttonRect2, Vector2(buttonRect2.rect.width, buttonRect2.rect.height) * 1.2, 0.25 ).setEase(LeanTweenType.easeOutBounce); + } + + staticRect = Rect(0.76*w, 0.53*h, 0.2*w, 0.14*h); + if(GUI.Button( staticRect, "Flip Tile")){ + LeanTween.move( beautyTileRect, Vector2( 0, beautyTileRect.rect.y + 1 ), 1.0 ).setEase(LeanTweenType.easeOutBounce); + } + + GUI.DrawTextureWithTexCoords( Rect(0.8*w, 0.5*h - beauty.height/2.0, beauty.width*0.5, beauty.height*0.5 ), beauty, beautyTileRect.rect); + + + if(GUI.Button(buttonRect3.rect, "Alpha")){ + LeanTween.alpha( buttonRect3, 0.0, 1.0 ).setEase(LeanTweenType.easeOutQuad); + LeanTween.alpha( buttonRect3, 1.0, 1.0 ).setEase(LeanTweenType.easeOutQuad).setDelay(1.0); + } + GUI.color.a = 1.0; // Reset to normal alpha, otherwise other gui elements will be effected + + + if(GUI.Button(buttonRect4.rect, "Rotate")){ + LeanTween.rotate( buttonRect4, 150.0, 1.0 ).setEase(LeanTweenType.easeOutElastic); + LeanTween.rotate( buttonRect4, 0.0, 1.0 ).setEase(LeanTweenType.easeOutElastic).setDelay(1.0); + } + GUI.matrix = Matrix4x4.identity; // Reset to normal rotation, otherwise other gui elements will be effected + +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js.meta new file mode 100644 index 0000000..3d293ab --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d0e7350ec07764a7aa1352edb0fb9134 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity new file mode 100644 index 0000000..d06c04b Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity.meta new file mode 100644 index 0000000..615e1a9 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUIExamplesJS.unity.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 808c431ee916c4aa39e00cd736e24fca diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js new file mode 100644 index 0000000..14086d9 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js @@ -0,0 +1,16 @@ +#pragma strict + +public var grumpy:Texture2D; + +private var grumpyRect:LTRect; + +function Start () { + grumpyRect = new LTRect( -grumpy.width, 0.5*Screen.height - grumpy.height/2.0, grumpy.width, grumpy.height ); + + // Slide in + LeanTween.move(grumpyRect, new Vector2(0.5*Screen.width - grumpy.width/2.0, grumpyRect.rect.y ), 1.0).setEase(LeanTweenType.easeOutQuad); +} + +function OnGUI(){ + GUI.DrawTexture( grumpyRect.rect, grumpy); +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js.meta new file mode 100644 index 0000000..fc388c6 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c62e83ce84a23432498632ff043c1aa4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity new file mode 100644 index 0000000..39423b7 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity.meta new file mode 100644 index 0000000..cb72165 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/OldGUISlideImageIn.unity.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9dfd2f0f7af014addb94a1e09a3e81dd diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif new file mode 100644 index 0000000..64170b1 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif.meta new file mode 100644 index 0000000..ebf9780 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/SoBeautiful.gif.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 78e9e608c3c9d47a3b312c2908d10f46 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + textureType: -1 + buildTargetSettings: [] diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/TestingPunch.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/TestingPunch.cs new file mode 100644 index 0000000..683d44a --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Archived/TestingPunch.cs @@ -0,0 +1,182 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class TestingPunch : MonoBehaviour { + + public AnimationCurve exportCurve; + public float overShootValue = 1f; + + private LTDescr descr; + + void Start () { + //LeanTween.rotateAround(gameObject, gameObject.transform.rotation.eulerAngles, 360f, 5f).setDelay(1f).setEase(LeanTweenType.easeOutBounce); + Debug.Log( "exported curve:" + curveToString(exportCurve) ); + } + + void Update () + { + LeanTween.dtManual = Time.deltaTime; + if (Input.GetKeyDown(KeyCode.Q)) + { + //LeanTween.scale(this.gameObject, Vector3.one*3f, 1.0f).setEase(LeanTweenType.easeSpring).setUseManualTime(true); + //print("scale punch time independent!"); + + LeanTween.moveLocalX(gameObject, 5, 1).setOnComplete( () => { + Debug.Log("on complete move local X"); + }).setOnCompleteOnStart(true); + + GameObject light = GameObject.Find("DirectionalLight"); + Light lt = light.GetComponent(); + + LeanTween.value(lt.gameObject, lt.intensity, 0.0f, 1.5f) + .setEase(LeanTweenType.linear) + .setLoopPingPong() + .setRepeat(-1) + .setOnUpdate((float val)=>{ + + lt.intensity = val; + }); + } + if (Input.GetKeyDown(KeyCode.S)) + { + print("scale punch!"); + + tweenStatically( this.gameObject ); + + LeanTween.scale(this.gameObject, new Vector3(1.15f, 1.15f, 1.15f), 0.6f); + + LeanTween.rotateAround(this.gameObject, Vector3.forward, -360f, 0.3f).setOnComplete(() => + { + LeanTween.rotateAround(this.gameObject, Vector3.forward, -360f, 0.4f).setOnComplete(() => + { + LeanTween.scale(this.gameObject, new Vector3(1f, 1f, 1f), 0.1f); + + LeanTween.value(this.gameObject, (v) => + { + + }, 0, 1, 0.3f).setDelay(1); + + }); + + }); + + + } + + if (Input.GetKeyDown(KeyCode.T)) + { + Vector3[] pts = new Vector3[] {new Vector3(-1f,0f,0f), new Vector3(0f,0f,0f), new Vector3(4f,0f,0f), new Vector3(20f,0f,0f)}; + descr = LeanTween.move(gameObject, pts, 15f).setOrientToPath(true).setDirection(1f).setOnComplete( ()=>{ + Debug.Log("move path finished"); + }); + } + + if (Input.GetKeyDown(KeyCode.Y)) // Reverse the move path + { + descr.setDirection(-descr.direction); + } + + if (Input.GetKeyDown(KeyCode.R)) + { + // LeanTween.rotate(this.gameObject, Vector3.one, 1.0f).setEase(LeanTweenType.punch); + LeanTween.rotateAroundLocal(this.gameObject, this.transform.forward, -80f, 5.0f).setPoint(new Vector3(1.25f, 0f, 0f)); + print("rotate punch!"); + } + + if (Input.GetKeyDown(KeyCode.M)) + { + // LeanTween.move(this.gameObject, new Vector3(0f,0f,1f), 1.0f).setEase(LeanTweenType.punch); + print("move punch!"); + Time.timeScale = 0.25f; + float start = Time.realtimeSinceStartup; + LeanTween.moveX( this.gameObject, 1f, 1f).setOnComplete( destroyOnComp ).setOnCompleteParam( this.gameObject ).setOnComplete( ()=>{ + float end = Time.realtimeSinceStartup; + float diff = end - start; + Debug.Log("start:"+start+" end:"+end+" diff:"+diff+" x:"+this.gameObject.transform.position.x); + }).setEase(LeanTweenType.easeInBack).setOvershoot( overShootValue ).setPeriod(0.3f); + } + + if (Input.GetKeyDown(KeyCode.C)) + { + LeanTween.color( this.gameObject, new Color(1f, 0f, 0f, 0.5f), 1f); + + Color to = new Color(Random.Range(0f,1f),0f,Random.Range(0f,1f),0.0f); + GameObject l = GameObject.Find("LCharacter"); + LeanTween.color( l, to, 4.0f ).setLoopPingPong(1).setEase(LeanTweenType.easeOutBounce); + } + + if (Input.GetKeyDown(KeyCode.E)) + { + LeanTween.delayedCall(gameObject,0.3f, delayedMethod).setRepeat(4).setOnCompleteOnRepeat(true).setOnCompleteParam( "hi" ); + } + + if (Input.GetKeyDown(KeyCode.V)) + { + LeanTween.value( gameObject, updateColor, new Color(1.0f,0.0f,0.0f,1.0f), Color.blue, 4.0f );//.setRepeat(2).setLoopPingPong().setEase(LeanTweenType.easeOutBounce); + } + + if (Input.GetKeyDown(KeyCode.P)) + { + LeanTween.delayedCall(0.05f, enterMiniGameStart).setOnCompleteParam( new object[]{""+5} ); + } + + if(Input.GetKeyDown(KeyCode.U)){ + #if !UNITY_FLASH + LeanTween.value(gameObject, (Vector2 val)=>{ + // Debug.Log("tweening vec2 val:"+val); + transform.position = new Vector3(val.x, transform.position.y, transform.position.z); + }, new Vector2(0f,0f), new Vector2(5f,100f), 1f ).setEase(LeanTweenType.easeOutBounce); + + GameObject l = GameObject.Find("LCharacter"); + Debug.Log("x:"+l.transform.position.x+" y:"+l.transform.position.y); + LeanTween.value(l, new Vector2( l.transform.position.x, l.transform.position.y), new Vector2( l.transform.position.x, l.transform.position.y+5), 1f ).setOnUpdate( + (Vector2 val)=>{ + Debug.Log("tweening vec2 val:"+val); + l.transform.position = new Vector3(val.x, val.y, transform.position.z); + } + + ); + #endif + } + } + + static void tweenStatically( GameObject gameObject ){ + Debug.Log("Starting to tween..."); + LeanTween.value(gameObject, (val)=>{ + Debug.Log("tweening val:"+val); + }, 0f, 1f, 1f); + } + + void enterMiniGameStart( object val ){ + object[] arr = (object [])val; + int lvl = int.Parse((string)arr[0]); + Debug.Log("level:"+lvl); + } + + void updateColor( Color c ){ + GameObject l = GameObject.Find("LCharacter"); + // Debug.Log("new col:"+c); + l.GetComponent().material.color = c; + } + + void delayedMethod( object myVal ){ + string castBack = myVal as string; + Debug.Log("delayed call:"+Time.time +" myVal:"+castBack); + } + + void destroyOnComp( object p ){ + GameObject g = (GameObject)p; + Destroy( g ); + } + + string curveToString( AnimationCurve curve) { + string str = ""; + for(int i = 0; i < curve.length; i++){ + str += "new Keyframe("+curve[i].time+"f, "+curve[i].value+"f)"; + if(i{ + int first = (int)Mathf.Floor(val); + int next = first < movePts.Length-1 ? first + 1 : first; + float diff = val - (float)first; + // Debug.Log("val:"+val+" first:"+first+" next:"+next); + Vector3 diffPos = (movePts[next].position-movePts[first].position); + avatarMove.transform.position = movePts[first].position + diffPos*diff; + }).setEase(LeanTweenType.easeInOutExpo).setLoopPingPong(); + + // move the pts + for(int i = 0; i < movePts.Length; i++) + LeanTween.moveY( movePts[i].gameObject, movePts[i].position.y + 1.5f, 1f).setDelay(((float)i)*0.2f).setLoopPingPong(); + + + // move objects at a constant speed + for(int i = 0; i < avatarSpeed.Length; i++) + LeanTween.moveLocalZ( avatarSpeed[i], (i+1)*5f, 1f).setSpeed(6f).setEase(LeanTweenType.easeInOutExpo).setLoopPingPong(); // any time you set the speed it overrides the time value + + // move around a circle at a constant speed + for(int i = 0; i < avatarSpeed2.Length; i++){ + LeanTween.moveLocal( avatarSpeed2[i], i == 0 ? circleSm : circleLrg, 1f).setSpeed(20f).setRepeat(-1); + } + + } + +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralAdvancedTechniques.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralAdvancedTechniques.cs.meta new file mode 100644 index 0000000..73041c0 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralAdvancedTechniques.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: a4fce1b486cc240c4825b3bfd794e9e0 +timeCreated: 1461150844 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs new file mode 100644 index 0000000..6fae245 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs @@ -0,0 +1,82 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralBasicCS : MonoBehaviour { + + public GameObject prefabAvatar; + + void Start () { + // Setup + GameObject avatarRotate = GameObject.Find("AvatarRotate"); + GameObject avatarScale = GameObject.Find("AvatarScale"); + GameObject avatarMove = GameObject.Find("AvatarMove"); + + // Rotate Example + LeanTween.rotateAround( avatarRotate, Vector3.forward, 360f, 5f); + + // Scale Example + LeanTween.scale( avatarScale, new Vector3(1.7f, 1.7f, 1.7f), 5f).setEase(LeanTweenType.easeOutBounce); + LeanTween.moveX( avatarScale, avatarScale.transform.position.x + 5f, 5f).setEase(LeanTweenType.easeOutBounce); // Simultaneously target many different tweens on the same object + + // Move Example + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-9f, 0f, 1f), 2f).setEase(LeanTweenType.easeInQuad); + + // Delay + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-6f, 0f, 1f), 2f).setDelay(3f); + + // Chain properties (delay, easing with a set repeating of type ping pong) + LeanTween.scale( avatarScale, new Vector3(0.2f, 0.2f, 0.2f), 1f).setDelay(7f).setEase(LeanTweenType.easeInOutCirc).setLoopPingPong( 3 ); + + // Call methods after a certain time period + LeanTween.delayedCall(gameObject, 0.2f, advancedExamples); + } + + // Advanced Examples + // It might be best to master the basics first, but this is included to tease the many possibilies LeanTween provides. + + void advancedExamples(){ + LeanTween.delayedCall(gameObject, 14f, ()=>{ + for(int i=0; i < 10; i++){ + // Instantiate Container + GameObject rotator = new GameObject("rotator"+i); + rotator.transform.position = new Vector3(10.2f,2.85f,0f); + + // Instantiate Avatar + GameObject dude = (GameObject)GameObject.Instantiate(prefabAvatar, Vector3.zero, prefabAvatar.transform.rotation ); + dude.transform.parent = rotator.transform; + dude.transform.localPosition = new Vector3(0f,1.5f,2.5f*i); + + // Scale, pop-in + dude.transform.localScale = new Vector3(0f,0f,0f); + LeanTween.scale(dude, new Vector3(0.65f,0.65f,0.65f), 1f).setDelay(i*0.2f).setEase(LeanTweenType.easeOutBack); + + // Color like the rainbow + float period = LeanTween.tau/10*i; + float red = Mathf.Sin(period + LeanTween.tau*0f/3f) * 0.5f + 0.5f; + float green = Mathf.Sin(period + LeanTween.tau*1f/3f) * 0.5f + 0.5f; + float blue = Mathf.Sin(period + LeanTween.tau*2f/3f) * 0.5f + 0.5f; + Color rainbowColor = new Color(red, green, blue); + LeanTween.color(dude, rainbowColor, 0.3f).setDelay(1.2f + i*0.4f); + + // Push into the wheel + LeanTween.moveZ(dude, 0f, 0.3f).setDelay(1.2f + i*0.4f).setEase(LeanTweenType.easeSpring).setOnComplete( + ()=>{ + LeanTween.rotateAround(rotator, Vector3.forward, -1080f, 12f); + } + ); + + // Jump Up and back down + LeanTween.moveLocalY(dude,4f,1.2f).setDelay(5f + i*0.2f).setLoopPingPong(1).setEase(LeanTweenType.easeInOutQuad); + + // Alpha Out, and destroy + LeanTween.alpha(dude, 0f, 0.6f).setDelay(9.2f + i*0.4f).setDestroyOnComplete(true).setOnComplete( + ()=>{ + Destroy( rotator ); // destroying parent as well + } + ); + } + + }).setOnCompleteOnStart(true).setRepeat(-1); // Have the OnComplete play in the beginning and have the whole group repeat endlessly + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs.meta new file mode 100644 index 0000000..87e42bb --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicCS.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a2605544ab2e14c93a780ca20c108cfe +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js new file mode 100644 index 0000000..287f3c6 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js @@ -0,0 +1,78 @@ +#pragma strict +import DentedPixel; + +public var prefabAvatar:GameObject; + +function Start () { + // Setup + var avatarRotate:GameObject = GameObject.Find("AvatarRotate"); + var avatarScale:GameObject = GameObject.Find("AvatarScale"); + var avatarMove:GameObject = GameObject.Find("AvatarMove"); + + // Rotate Example + LeanTween.rotateAround( avatarRotate, Vector3.forward, 360f, 5f); + + // Scale Example + LeanTween.scale( avatarScale, new Vector3(1.7f, 1.7f, 1.7f), 5f).setEase(LeanTweenType.easeOutBounce); + LeanTween.moveX( avatarScale, avatarScale.transform.position.x + 5f, 5f).setEase(LeanTweenType.easeOutBounce); // Simultaneously target many different tweens on the same object + + // Move Example + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-9f, 0f, 1f), 2f).setEase(LeanTweenType.easeInQuad); + + // Delay + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-6f, 0f, 1f), 2f).setDelay(3f); + + // Chain properties (delay, easing with a set repeating of type ping pong) + LeanTween.scale( avatarScale, new Vector3(0.2f, 0.2f, 0.2f), 1f).setDelay(7f).setEase(LeanTweenType.easeInOutCirc).setRepeat(5).setLoopPingPong(); + + // Call methods after a certain time period + LeanTween.delayedCall(gameObject, 0.2f, advancedExamples); +} + +// Advanced Examples +// It might be best to master the basics first, but this is included to tease the many possibilies LeanTween provides. + +function advancedExamples(){ + LeanTween.delayedCall(gameObject, 14f, function(){ + for(var i:int=0; i < 10; i++){ + // Instantiate Container + var rotator:GameObject = new GameObject("rotator"+i); + rotator.transform.position = new Vector3(10.2f,2.85f,0f); + + // Instantiate Avatar + var dude:GameObject = GameObject.Instantiate(prefabAvatar, Vector3.zero, prefabAvatar.transform.rotation ) as GameObject; + dude.transform.parent = rotator.transform; + dude.transform.localPosition = new Vector3(0f,1.5f,2.5f*i); + + // Scale, pop-in + dude.transform.localScale = new Vector3(0f,0f,0f); + LeanTween.scale(dude, new Vector3(0.65f,0.65f,0.65f), 1f).setDelay(i*0.2f).setEase(LeanTweenType.easeOutBack); + + // Color like the rainbow + var period:float = LeanTween.tau/10*i; + var red:float = Mathf.Sin(period + LeanTween.tau*0f/3f) * 0.5f + 0.5f; + var green:float = Mathf.Sin(period + LeanTween.tau*1f/3f) * 0.5f + 0.5f; + var blue:float = Mathf.Sin(period + LeanTween.tau*2f/3f) * 0.5f + 0.5f; + var rainbowColor:Color = new Color(red, green, blue); + LeanTween.color(dude, rainbowColor, 0.3f).setDelay(1.2f + i*0.4f); + + // Push into the wheel + LeanTween.moveZ(dude, 0f, 0.3f).setDelay(1.2f + i*0.4f).setEase(LeanTweenType.easeSpring).setOnComplete( + function( rot:GameObject ){ + LeanTween.rotateAround(rot, Vector3.forward, -1080f, 12f); + } + ).setOnCompleteParam( rotator ); + + // Jump Up and back down + LeanTween.moveLocalY(dude,4f,1.2f).setDelay(5f + i*0.2f).setLoopPingPong().setRepeat(2).setEase(LeanTweenType.easeInOutQuad); + + // Alpha Out, and destroy + LeanTween.alpha(dude, 0f, 0.6f).setDelay(9.2f + i*0.4f).setDestroyOnComplete(true).setOnComplete( + function(rot:GameObject){ + Destroy( rot ); // destroying parent as well + } + ).setOnCompleteParam( rotator ); + } + + }).setOnCompleteOnStart(true).setRepeat(-1); // Have the OnComplete play in the beginning and have the whole group repeat endlessly +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js.meta new file mode 100644 index 0000000..625ec88 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 344fd7cd6efc54e5c80a30429269c2de +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs new file mode 100644 index 0000000..2ea1c05 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs @@ -0,0 +1,102 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralBasics2dCS : MonoBehaviour { + + public Texture2D dudeTexture; + public GameObject prefabParticles; + + #if !(UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2) + + void Start () { + // Setup + GameObject avatarRotate = createSpriteDude( "avatarRotate", new Vector3(-2.51208f,10.7119f,-14.37754f)); + GameObject avatarScale = createSpriteDude( "avatarScale", new Vector3(2.51208f,10.2119f,-14.37754f)); + GameObject avatarMove = createSpriteDude( "avatarMove", new Vector3(-3.1208f,7.100643f,-14.37754f)); + + // Rotate Example + LeanTween.rotateAround( avatarRotate, Vector3.forward, -360f, 5f); + + // Scale Example + LeanTween.scale( avatarScale, new Vector3(1.7f, 1.7f, 1.7f), 5f).setEase(LeanTweenType.easeOutBounce); + LeanTween.moveX( avatarScale, avatarScale.transform.position.x + 1f, 5f).setEase(LeanTweenType.easeOutBounce); // Simultaneously target many different tweens on the same object + + // Move Example + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(1.7f, 0f, 0f), 2f).setEase(LeanTweenType.easeInQuad); + + // Delay + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(2f, -1f, 0f), 2f).setDelay(3f); + + // Chain properties (delay, easing with a set repeating of type ping pong) + LeanTween.scale( avatarScale, new Vector3(0.2f, 0.2f, 0.2f), 1f).setDelay(7f).setEase(LeanTweenType.easeInOutCirc).setLoopPingPong(3); + + // Call methods after a certain time period + LeanTween.delayedCall(gameObject, 0.2f, advancedExamples); + } + + GameObject createSpriteDude( string name, Vector3 pos, bool hasParticles = true ){ + GameObject go = new GameObject(name); + SpriteRenderer ren = go.AddComponent(); + go.GetComponent().color = new Color(0f,181f/255f,1f); + ren.sprite = Sprite.Create( dudeTexture, new Rect(0.0f,0.0f,256.0f,256.0f), new Vector2(0.5f,0f), 256f); + go.transform.position = pos; + + if(hasParticles){ + GameObject particles = (GameObject)GameObject.Instantiate(prefabParticles, Vector3.zero, prefabParticles.transform.rotation ); + particles.transform.parent = go.transform; + particles.transform.localPosition = prefabParticles.transform.position; + } + return go; + } + + // Advanced Examples + // It might be best to master the basics first, but this is included to tease the many possibilies LeanTween provides. + + void advancedExamples(){ + LeanTween.delayedCall(gameObject, 14f, ()=>{ + for(int i=0; i < 10; i++){ + // Instantiate Container + GameObject rotator = new GameObject("rotator"+i); + rotator.transform.position = new Vector3(2.71208f,7.100643f,-12.37754f); + + // Instantiate Avatar + GameObject dude = createSpriteDude( "dude"+i, new Vector3(-2.51208f,7.100643f,-14.37754f), false);//(GameObject)GameObject.Instantiate(prefabAvatar, Vector3.zero, prefabAvatar.transform.rotation ); + dude.transform.parent = rotator.transform; + dude.transform.localPosition = new Vector3(0f,0.5f,0.5f*i); + + // Scale, pop-in + dude.transform.localScale = new Vector3(0f,0f,0f); + LeanTween.scale(dude, new Vector3(0.65f,0.65f,0.65f), 1f).setDelay(i*0.2f).setEase(LeanTweenType.easeOutBack); + + // Color like the rainbow + float period = LeanTween.tau/10*i; + float red = Mathf.Sin(period + LeanTween.tau*0f/3f) * 0.5f + 0.5f; + float green = Mathf.Sin(period + LeanTween.tau*1f/3f) * 0.5f + 0.5f; + float blue = Mathf.Sin(period + LeanTween.tau*2f/3f) * 0.5f + 0.5f; + Color rainbowColor = new Color(red, green, blue); + LeanTween.color(dude, rainbowColor, 0.3f).setDelay(1.2f + i*0.4f); + + // Push into the wheel + LeanTween.moveLocalZ(dude, -2f, 0.3f).setDelay(1.2f + i*0.4f).setEase(LeanTweenType.easeSpring).setOnComplete( + ()=>{ + LeanTween.rotateAround(rotator, Vector3.forward, -1080f, 12f); + } + ); + + // Jump Up and back down + LeanTween.moveLocalY(dude,1.17f,1.2f).setDelay(5f + i*0.2f).setLoopPingPong(1).setEase(LeanTweenType.easeInOutQuad); + + // Alpha Out, and destroy + LeanTween.alpha(dude, 0f, 0.6f).setDelay(9.2f + i*0.4f).setDestroyOnComplete(true).setOnComplete( + ()=>{ + Destroy( rotator ); // destroying parent as well + } + ); + } + + }).setOnCompleteOnStart(true).setRepeat(-1); // Have the OnComplete play in the beginning and have the whole group repeat endlessly + } + + #endif +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs.meta new file mode 100644 index 0000000..d8c9463 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dCS.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9b39dd70d168b4cbea9a7b8561d9accc +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js new file mode 100644 index 0000000..7f62fde --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js @@ -0,0 +1,98 @@ +#pragma strict +import DentedPixel; + +public var dudeTexture:Texture2D; +public var prefabParticles:GameObject; + +#if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + +function Start () { + // Setup + var avatarRotate:GameObject = createSpriteDude( "avatarRotate", new Vector3(-2.51208f,10.7119f,-14.37754f), true); + var avatarScale:GameObject = createSpriteDude( "avatarScale", new Vector3(2.51208f,10.2119f,-14.37754f), true); + var avatarMove:GameObject = createSpriteDude( "avatarMove", new Vector3(-3.1208f,7.100643f,-14.37754f), true); + + // Rotate Example + LeanTween.rotateAround( avatarRotate, Vector3.forward, -360f, 5f); + + // Scale Example + LeanTween.scale( avatarScale, new Vector3(1.7f, 1.7f, 1.7f), 5f).setEase(LeanTweenType.easeOutBounce); + LeanTween.moveX( avatarScale, avatarScale.transform.position.x + 1f, 5f).setEase(LeanTweenType.easeOutBounce); // Simultaneously target many different tweens on the same object + + // Move Example + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(1.7f, 0f, 0f), 2f).setEase(LeanTweenType.easeInQuad); + + // Delay + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(2f, -1f, 0f), 2f).setDelay(3f); + + // Chain properties (delay, easing with a set repeating of type ping pong) + LeanTween.scale( avatarScale, new Vector3(0.2f, 0.2f, 0.2f), 1f).setDelay(7f).setEase(LeanTweenType.easeInOutCirc).setRepeat(5).setLoopPingPong(); + + // Call methods after a certain time period + LeanTween.delayedCall(gameObject, 0.2f, advancedExamples); +} + +function createSpriteDude( name:String, pos:Vector3, hasParticles:boolean ):GameObject{ + var go:GameObject = new GameObject(name); + var ren:SpriteRenderer = go.AddComponent(SpriteRenderer); + go.GetComponent.().material.color = new Color(0f,181f/255f,1f); + ren.sprite = Sprite.Create( dudeTexture, new Rect(0.0f,0.0f,256.0f,256.0f), new Vector2(0.5f,0f), 256f); + go.transform.position = pos; + + if(hasParticles){ + var particles:GameObject = GameObject.Instantiate(prefabParticles, Vector3.zero, prefabParticles.transform.rotation ) as GameObject; + particles.transform.parent = go.transform; + particles.transform.localPosition = prefabParticles.transform.position; + } + return go; +} + +// Advanced Examples +// It might be best to master the basics first, but this is included to tease the many possibilies LeanTween provides. + +function advancedExamples(){ + LeanTween.delayedCall(gameObject, 14f, function(){ + for(var i:int=0; i < 10; i++){ + // Instantiate Container + var rotator:GameObject = new GameObject("rotator"+i); + rotator.transform.position = new Vector3(2.71208f,7.100643f,-12.37754f); + + // Instantiate Avatar + var dude:GameObject = createSpriteDude( "dude"+i, new Vector3(-2.51208f,7.100643f,-14.37754f), false);//(GameObject)GameObject.Instantiate(prefabAvatar, Vector3.zero, prefabAvatar.transform.rotation ); + dude.transform.parent = rotator.transform; + dude.transform.localPosition = new Vector3(0f,0.5f,0.5f*i); + + // Scale, pop-in + dude.transform.localScale = new Vector3(0f,0f,0f); + LeanTween.scale(dude, new Vector3(0.65f,0.65f,0.65f), 1f).setDelay(i*0.2f).setEase(LeanTweenType.easeOutBack); + + // Color like the rainbow + var period:float = LeanTween.tau/10*i; + var red:float = Mathf.Sin(period + LeanTween.tau*0f/3f) * 0.5f + 0.5f; + var green:float = Mathf.Sin(period + LeanTween.tau*1f/3f) * 0.5f + 0.5f; + var blue:float = Mathf.Sin(period + LeanTween.tau*2f/3f) * 0.5f + 0.5f; + var rainbowColor:Color = new Color(red, green, blue); + LeanTween.color(dude, rainbowColor, 0.3f).setDelay(1.2f + i*0.4f); + + // Push into the wheel + LeanTween.moveLocalZ(dude, -2f, 0.3f).setDelay(1.2f + i*0.4f).setEase(LeanTweenType.easeSpring).setOnComplete( + function( rot:GameObject ){ + LeanTween.rotateAround(rot, Vector3.forward, -1080f, 12f); + } + ).setOnCompleteParam( rotator ); + + // Jump Up and back down + LeanTween.moveLocalY(dude,1.17f,1.2f).setDelay(5f + i*0.2f).setLoopPingPong(1).setEase(LeanTweenType.easeInOutQuad); + + // Alpha Out, and destroy + LeanTween.alpha(dude, 0f, 0.6f).setDelay(9.2f + i*0.4f).setDestroyOnComplete(true).setOnComplete( + function(rot:GameObject){ + Destroy( rot ); // destroying parent as well + } + ).setOnCompleteParam( rotator );; + } + + }).setOnCompleteOnStart(true).setRepeat(-1); // Have the OnComplete play in the beginning and have the whole group repeat endlessly +} + +#endif \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js.meta new file mode 100644 index 0000000..7a1152b --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasics2dJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 282a362514d90477796b0badacbebf8a +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js new file mode 100644 index 0000000..287f3c6 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js @@ -0,0 +1,78 @@ +#pragma strict +import DentedPixel; + +public var prefabAvatar:GameObject; + +function Start () { + // Setup + var avatarRotate:GameObject = GameObject.Find("AvatarRotate"); + var avatarScale:GameObject = GameObject.Find("AvatarScale"); + var avatarMove:GameObject = GameObject.Find("AvatarMove"); + + // Rotate Example + LeanTween.rotateAround( avatarRotate, Vector3.forward, 360f, 5f); + + // Scale Example + LeanTween.scale( avatarScale, new Vector3(1.7f, 1.7f, 1.7f), 5f).setEase(LeanTweenType.easeOutBounce); + LeanTween.moveX( avatarScale, avatarScale.transform.position.x + 5f, 5f).setEase(LeanTweenType.easeOutBounce); // Simultaneously target many different tweens on the same object + + // Move Example + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-9f, 0f, 1f), 2f).setEase(LeanTweenType.easeInQuad); + + // Delay + LeanTween.move( avatarMove, avatarMove.transform.position + new Vector3(-6f, 0f, 1f), 2f).setDelay(3f); + + // Chain properties (delay, easing with a set repeating of type ping pong) + LeanTween.scale( avatarScale, new Vector3(0.2f, 0.2f, 0.2f), 1f).setDelay(7f).setEase(LeanTweenType.easeInOutCirc).setRepeat(5).setLoopPingPong(); + + // Call methods after a certain time period + LeanTween.delayedCall(gameObject, 0.2f, advancedExamples); +} + +// Advanced Examples +// It might be best to master the basics first, but this is included to tease the many possibilies LeanTween provides. + +function advancedExamples(){ + LeanTween.delayedCall(gameObject, 14f, function(){ + for(var i:int=0; i < 10; i++){ + // Instantiate Container + var rotator:GameObject = new GameObject("rotator"+i); + rotator.transform.position = new Vector3(10.2f,2.85f,0f); + + // Instantiate Avatar + var dude:GameObject = GameObject.Instantiate(prefabAvatar, Vector3.zero, prefabAvatar.transform.rotation ) as GameObject; + dude.transform.parent = rotator.transform; + dude.transform.localPosition = new Vector3(0f,1.5f,2.5f*i); + + // Scale, pop-in + dude.transform.localScale = new Vector3(0f,0f,0f); + LeanTween.scale(dude, new Vector3(0.65f,0.65f,0.65f), 1f).setDelay(i*0.2f).setEase(LeanTweenType.easeOutBack); + + // Color like the rainbow + var period:float = LeanTween.tau/10*i; + var red:float = Mathf.Sin(period + LeanTween.tau*0f/3f) * 0.5f + 0.5f; + var green:float = Mathf.Sin(period + LeanTween.tau*1f/3f) * 0.5f + 0.5f; + var blue:float = Mathf.Sin(period + LeanTween.tau*2f/3f) * 0.5f + 0.5f; + var rainbowColor:Color = new Color(red, green, blue); + LeanTween.color(dude, rainbowColor, 0.3f).setDelay(1.2f + i*0.4f); + + // Push into the wheel + LeanTween.moveZ(dude, 0f, 0.3f).setDelay(1.2f + i*0.4f).setEase(LeanTweenType.easeSpring).setOnComplete( + function( rot:GameObject ){ + LeanTween.rotateAround(rot, Vector3.forward, -1080f, 12f); + } + ).setOnCompleteParam( rotator ); + + // Jump Up and back down + LeanTween.moveLocalY(dude,4f,1.2f).setDelay(5f + i*0.2f).setLoopPingPong().setRepeat(2).setEase(LeanTweenType.easeInOutQuad); + + // Alpha Out, and destroy + LeanTween.alpha(dude, 0f, 0.6f).setDelay(9.2f + i*0.4f).setDestroyOnComplete(true).setOnComplete( + function(rot:GameObject){ + Destroy( rot ); // destroying parent as well + } + ).setOnCompleteParam( rotator ); + } + + }).setOnCompleteOnStart(true).setRepeat(-1); // Have the OnComplete play in the beginning and have the whole group repeat endlessly +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js.meta new file mode 100644 index 0000000..e5c11b5 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralBasicsJS.js.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5834eb1aca810405cb0a0a6585d407bf +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs new file mode 100644 index 0000000..36c19d2 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs @@ -0,0 +1,82 @@ +#if !UNITY_FLASH +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralCameraShake : MonoBehaviour { + + private GameObject avatarBig; + private float jumpIter = 9.5f; + private AudioClip boomAudioClip; + + // Use this for initialization + void Start () { + avatarBig = GameObject.Find("AvatarBig"); + + AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(8.130963E-06f, 0.06526042f, 0f, -1f), new Keyframe(0.0007692695f, 2.449077f, 9.078861f, 9.078861f), new Keyframe(0.01541314f, 0.9343268f, -40f, -40f), new Keyframe(0.05169491f, 0.03835937f, -0.08621139f, -0.08621139f)); + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003005181f, 0f, 0f), new Keyframe(0.01507768f, 0.002227979f, 0f, 0f)); + boomAudioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.1f,0f,0f)} )); + + + bigGuyJump(); + } + + void bigGuyJump(){ + float height = Mathf.PerlinNoise(jumpIter, 0f)*10f; + height = height*height * 0.3f; + // Debug.Log("height:"+height+" jumpIter:"+jumpIter); + + LeanTween.moveY(avatarBig, height, 1f).setEase(LeanTweenType.easeInOutQuad).setOnComplete( ()=>{ + LeanTween.moveY(avatarBig, 0f, 0.27f).setEase(LeanTweenType.easeInQuad).setOnComplete( ()=>{ + LeanTween.cancel(gameObject); + + /************** + * Camera Shake + **************/ + + float shakeAmt = height*0.2f; // the degrees to shake the camera + float shakePeriodTime = 0.42f; // The period of each shake + float dropOffTime = 1.6f; // How long it takes the shaking to settle down to nothing + LTDescr shakeTween = LeanTween.rotateAroundLocal( gameObject, Vector3.right, shakeAmt, shakePeriodTime) + .setEase( LeanTweenType.easeShake ) // this is a special ease that is good for shaking + .setLoopClamp() + .setRepeat(-1); + + // Slow the camera shake down to zero + LeanTween.value(gameObject, shakeAmt, 0f, dropOffTime).setOnUpdate( + (float val)=>{ + shakeTween.setTo(Vector3.right*val); + } + ).setEase(LeanTweenType.easeOutQuad); + + + /******************** + * Shake scene objects + ********************/ + + // Make the boxes jump from the big stomping + GameObject[] boxes = GameObject.FindGameObjectsWithTag("Respawn"); // I just arbitrarily tagged the boxes with this since it was available in the scene + foreach (GameObject box in boxes) { + box.GetComponent().AddForce(Vector3.up * 100 * height); + } + + // Make the lamps spin from the big stomping + GameObject[] lamps = GameObject.FindGameObjectsWithTag("GameController"); // I just arbitrarily tagged the lamps with this since it was available in the scene + foreach (GameObject lamp in lamps) { + float z = lamp.transform.eulerAngles.z; + z = z > 0.0f && z < 180f ? 1 : -1; // push the lamps in whatever direction they are currently swinging + lamp.GetComponent().AddForce(new Vector3(z, 0f, 0f ) * 15 * height); + } + + // Play BOOM! + LeanAudio.play(boomAudioClip, transform.position, height*0.2f); // Like this sound? : http://leanaudioplay.dentedpixel.com/?d=a:fvb:8,0,0.003005181,0,0,0.01507768,0.002227979,0,0,8~8,8.130963E-06,0.06526042,0,-1,0.0007692695,2.449077,9.078861,9.078861,0.01541314,0.9343268,-40,-40,0.05169491,0.03835937,-0.08621139,-0.08621139,8~0.1,0,0,~44100 + + // Have the jump happen again 2 seconds from now + LeanTween.delayedCall(2f, bigGuyJump); + }); + }); + jumpIter += 5.2f; + } + +} +#endif \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs.meta new file mode 100644 index 0000000..3fb02ea --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralCameraShake.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8a650682fa3d54a57a2521dbf9f6eac2 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs new file mode 100644 index 0000000..24c2b64 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using System.Collections; +using System.Reflection; +using DentedPixel; + +public class GeneralEasingTypes : MonoBehaviour { + + public float lineDrawScale = 10f; + public AnimationCurve animationCurve; + + private string[] easeTypes = new string[]{ + "EaseLinear","EaseAnimationCurve","EaseSpring", + "EaseInQuad","EaseOutQuad","EaseInOutQuad", + "EaseInCubic","EaseOutCubic","EaseInOutCubic", + "EaseInQuart","EaseOutQuart","EaseInOutQuart", + "EaseInQuint","EaseOutQuint","EaseInOutQuint", + "EaseInSine","EaseOutSine","EaseInOutSine", + "EaseInExpo","EaseOutExpo","EaseInOutExpo", + "EaseInCirc","EaseOutCirc","EaseInOutCirc", + "EaseInBounce","EaseOutBounce","EaseInOutBounce", + "EaseInBack","EaseOutBack","EaseInOutBack", + "EaseInElastic","EaseOutElastic","EaseInOutElastic", + "EasePunch","EaseShake", + }; + + void Start () { + + demoEaseTypes(); + } + + private void demoEaseTypes(){ + for(int i = 0; i < easeTypes.Length; i++){ + string easeName = easeTypes[i]; + Transform obj1 = GameObject.Find(easeName).transform.FindChild("Line"); + float obj1val = 0f; + LTDescr lt = LeanTween.value( obj1.gameObject, 0f, 1f, 5f).setOnUpdate( (float val)=>{ + Vector3 vec = obj1.localPosition; + vec.x = obj1val*lineDrawScale; + vec.y = val*lineDrawScale; + + obj1.localPosition = vec; + + obj1val += Time.deltaTime/5f; + if(obj1val>1f) + obj1val = 0f; + }); + if(easeName.IndexOf("AnimationCurve")>=0){ + lt.setEase(animationCurve); + }else{ + MethodInfo theMethod = lt.GetType().GetMethod("set"+easeName); + theMethod.Invoke(lt, null); + } + + if(easeName.IndexOf("EasePunch")>=0){ + lt.setScale(1f); + } + } + + LeanTween.delayedCall(gameObject, 10f, resetLines); + LeanTween.delayedCall(gameObject, 10.1f, demoEaseTypes); + } + + private void resetLines(){ + for(int i = 0; i < easeTypes.Length; i++){ + Transform obj1 = GameObject.Find(easeTypes[i]).transform.FindChild("Line"); + obj1.localPosition = new Vector3(0f,0f,0f); + } + } + +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs.meta new file mode 100644 index 0000000..c16432f --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEasingTypes.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 94e9a883a33cd40b9be1a63f002c4db2 +timeCreated: 1471950328 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs new file mode 100644 index 0000000..3e04305 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs @@ -0,0 +1,83 @@ +#if !UNITY_FLASH +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralEventsListenersCS : MonoBehaviour { + + Vector3 towardsRotation; + float turnForLength = 0.5f; + float turnForIter = 0f; + Color fromColor; + + // It's best to make this a public enum that you use throughout your project, so every class can have access to it + public enum MyEvents{ + CHANGE_COLOR, + JUMP, + LENGTH + } + + void Awake(){ + LeanTween.LISTENERS_MAX = 100; // This is the maximum of event listeners you will have added as listeners + LeanTween.EVENTS_MAX = (int)MyEvents.LENGTH; // The maximum amount of events you will be dispatching + + fromColor = GetComponent().material.color; + } + + void Start () { + // Adding Listeners, it's best to use an enum so your listeners are more descriptive but you could use an int like 0,1,2,... + LeanTween.addListener(gameObject, (int)MyEvents.CHANGE_COLOR, changeColor); + LeanTween.addListener(gameObject, (int)MyEvents.JUMP, jumpUp); + } + + // ****** Event Listening Methods + + void jumpUp( LTEvent e ){ + GetComponent().AddRelativeForce(Vector3.forward * 300f); + } + + void changeColor( LTEvent e ){ + Transform tran = (Transform)e.data; + float distance = Vector3.Distance( tran.position, transform.position); + Color to = new Color(Random.Range(0f,1f),0f,Random.Range(0f,1f)); + LeanTween.value( gameObject, fromColor, to, 0.8f ).setLoopPingPong(1).setDelay(distance*0.05f).setOnUpdate( + (Color col)=>{ + GetComponent().material.color = col; + } + ); + } + + // ****** Physics / AI Stuff + + void OnCollisionEnter(Collision collision) { + if(collision.gameObject.layer!=2) + towardsRotation = new Vector3(0f, Random.Range(-180, 180), 0f); + } + + void OnCollisionStay(Collision collision) { + if(collision.gameObject.layer!=2){ + turnForIter = 0f; + turnForLength = Random.Range(0.5f, 1.5f); + } + } + + void FixedUpdate(){ + if(turnForIter < turnForLength){ + GetComponent().MoveRotation( GetComponent().rotation * Quaternion.Euler(towardsRotation * Time.deltaTime ) ); + turnForIter += Time.deltaTime; + } + + GetComponent().AddRelativeForce(Vector3.forward * 4.5f); + } + + // ****** Key and clicking detection + + void OnMouseDown(){ + if(Input.GetKey( KeyCode.J )){ // Are you also pressing the "j" key while clicking + LeanTween.dispatchEvent((int)MyEvents.JUMP); + }else{ + LeanTween.dispatchEvent((int)MyEvents.CHANGE_COLOR, transform); // with every dispatched event, you can include an object (retrieve this object with the *.data var in LTEvent) + } + } +} +#endif diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs.meta new file mode 100644 index 0000000..82d5acb --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersCS.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cd679d4fbbd8d475ba7187561370c3aa +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js new file mode 100644 index 0000000..71c19d0 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js @@ -0,0 +1,77 @@ +#pragma strict +import DentedPixel; + +private var towardsRotation:Vector3; +private var turnForLength:float = 0.5f; +private var turnForIter:float = 0f; +private var fromColor:Vector3; + +// It's best to make this a public enum that you use throughout your project, so every class can have access to it +public enum MyEvents{ + CHANGE_COLOR, + JUMP, + LENGTH +} + +function Awake(){ + LeanTween.LISTENERS_MAX = 100; // This is the maximum of event listeners you will have added as listeners + LeanTween.EVENTS_MAX = MyEvents.LENGTH; // The maximum amount of events you will be dispatching + + fromColor = new Vector3(GetComponent.().material.color.r, GetComponent.().material.color.g, GetComponent.().material.color.b); +} + +function Start () { + // Adding Listeners, it's best to use an enum so your listeners are more descriptive but you could use an int like 0,1,2,... + LeanTween.addListener(gameObject, MyEvents.CHANGE_COLOR, changeColor); + LeanTween.addListener(gameObject, MyEvents.JUMP, jumpUp); +} + +// ****** Event Listening Methods + +function jumpUp( e:LTEvent ){ + GetComponent.().AddRelativeForce(Vector3.forward * 300f); +} + +function changeColor( e:LTEvent ){ + var tran:Transform = e.data as Transform; + var distance:float = Vector3.Distance( tran.position, transform.position); + var to:Vector3 = new Vector3(Random.Range(0f,1f),0f,Random.Range(0f,1f)); + LeanTween.value( gameObject, updateColor, fromColor, to, 0.8f ).setLoopPingPong(1).setDelay(distance*0.05f); +} + +function updateColor( v:Vector3 ){ + GetComponent.().material.color = new Color( v.x, v.y, v.z ); +} + +// ****** Physics / AI Stuff + +function OnCollisionEnter(collision:Collision) { + if(collision.gameObject.layer!=2) + towardsRotation = new Vector3(0f, Random.Range(-180, 180), 0f); +} + + function OnCollisionStay( collision:Collision ) { + if(collision.gameObject.layer!=2){ + turnForIter = 0f; + turnForLength = Random.Range(0.5f, 1.5f); + } + } + +function FixedUpdate(){ + if(turnForIter < turnForLength){ + GetComponent.().MoveRotation( GetComponent.().rotation * Quaternion.Euler(towardsRotation * Time.deltaTime ) ); + turnForIter += Time.deltaTime; + } + + GetComponent.().AddRelativeForce(Vector3.forward * 4.5f); +} + +// ****** Key and clicking detection + +function OnMouseDown(){ + if(Input.GetKey( KeyCode.J )){ // Are you also pressing the "j" key while clicking + LeanTween.dispatchEvent(MyEvents.JUMP); + }else{ + LeanTween.dispatchEvent(MyEvents.CHANGE_COLOR, transform); // with every dispatched event, you can include an object (retrieve this object with the *.data var in LTEvent) + } +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js.meta new file mode 100644 index 0000000..eee5811 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralEventsListenersJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8c4802b493d38443e9ac0c4d122334c9 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs new file mode 100644 index 0000000..4af3a39 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralSimpleUiCS : MonoBehaviour { + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + + public RectTransform button; + + void Start () { + Debug.Log("For better examples see the 4.6_Examples folder!"); + if(button==null){ + Debug.LogError("Button not assigned! Create a new button via Hierarchy->Create->UI->Button. Then assign it to the button variable"); + return; + } + + // Tweening various values in a block callback style + LeanTween.value(button.gameObject, button.anchoredPosition, new Vector2(200f,100f), 1f ).setOnUpdate( + (Vector2 val)=>{ + button.anchoredPosition = val; + } + ); + + LeanTween.value(gameObject, 1f, 0.5f, 1f ).setOnUpdate( + (float volume)=>{ + Debug.Log("volume:"+volume); + } + ); + + LeanTween.value(gameObject, gameObject.transform.position, gameObject.transform.position + new Vector3(0,1f,0), 1f ).setOnUpdate( + (Vector3 val)=>{ + gameObject.transform.position = val; + } + ); + + LeanTween.value(gameObject, Color.red, Color.green, 1f ).setOnUpdate( + (Color val)=>{ + UnityEngine.UI.Image image = (UnityEngine.UI.Image)button.gameObject.GetComponent( typeof(UnityEngine.UI.Image) ); + image.color = val; + } + ); + + // Tweening Using Unity's new Canvas GUI System + LeanTween.move(button, new Vector3(200f,-100f,0f), 1f).setDelay(1f); + LeanTween.rotateAround(button, Vector3.forward, 90f, 1f).setDelay(2f); + LeanTween.scale(button, button.localScale*2f, 1f).setDelay(3f); + LeanTween.rotateAround(button, Vector3.forward, -90f, 1f).setDelay(4f).setEase(LeanTweenType.easeInOutElastic); + } + + #else + void Start(){ + Debug.LogError("Unity 4.6+ is required to use the new UI"); + } + + #endif +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs.meta new file mode 100644 index 0000000..f9b578b --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiCS.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 19c352f230e8b46f08abbbd7cc11edb8 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js new file mode 100644 index 0000000..0d39a10 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js @@ -0,0 +1,48 @@ +#pragma strict +import DentedPixel; + +#if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + + public var button:RectTransform; + + function Start () { + Debug.Log("For better examples see the 4.6_Examples folder!"); + if(button==null){ + Debug.LogError("Button not assigned! Create a new button via Hierarchy->Create->UI->Button. Then assign it to the button variable"); + return; + } + + // Tweening various values in a block callback style + LeanTween.value(button.gameObject, button.anchoredPosition, new Vector2(200f,100f), 1f ).setOnUpdateVector3( + function(val:Vector3){ + button.anchoredPosition = new Vector2(val.x, val.y); + } + ); + + LeanTween.value(gameObject, 1f, 0.5f, 1f ).setOnUpdate( + function(volume:float){ + Debug.Log("volume:"+volume); + } + ); + + LeanTween.value(gameObject, gameObject.transform.position, gameObject.transform.position + new Vector3(0,1f,0), 1f ).setOnUpdateVector3( + function(val:Vector3){ + gameObject.transform.position = val; + } + ); + + LeanTween.value(gameObject, Color.red, Color.green, 1f ).setOnUpdateColor( + function(val:Color){ + var image:UnityEngine.UI.Image = button.gameObject.GetComponent( UnityEngine.UI.Image ); + image.color = val; + } + ); + + // Tweening Using Unity's new Canvas GUI System + LeanTween.move(button, new Vector3(200f,-100f,0f), 1f).setDelay(1f); + LeanTween.rotateAround(button, Vector3.forward, 90f, 1f).setDelay(2f); + LeanTween.scale(button, button.localScale*2f, 1f).setDelay(3f); + LeanTween.rotateAround(button, Vector3.forward, -90f, 1f).setDelay(4f).setEase(LeanTweenType.easeInOutElastic); + } + + #endif \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js.meta new file mode 100644 index 0000000..4beac02 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralSimpleUiJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8011e3187b0a148ee865b364c5cc4173 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs new file mode 100644 index 0000000..d964428 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs @@ -0,0 +1,89 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class GeneralUISpaceCS : MonoBehaviour { + + public RectTransform mainWindow; + public RectTransform mainParagraphText; + public RectTransform mainTitleText; + public RectTransform mainButton1; + public RectTransform mainButton2; + + public RectTransform pauseRing1; + public RectTransform pauseRing2; + public RectTransform pauseWindow; + + public RectTransform chatWindow; + public RectTransform chatRect; + public Sprite[] chatSprites; + public RectTransform chatBar1; + public RectTransform chatBar2; + public UnityEngine.UI.Text chatText; + + public RectTransform rawImageRect; + + void Start () { + // Time.timeScale = 1f/4f; + + // *********** Main Window ********** + // Scale the whole window in + mainWindow.localScale = Vector3.zero; + LeanTween.scale( mainWindow, new Vector3(1f,1f,1f), 0.6f).setEase(LeanTweenType.easeOutBack); + LeanTween.alphaCanvas( mainWindow.GetComponent(), 0f, 1f).setDelay(2f).setLoopPingPong().setRepeat(2); + + // Fade the main paragraph in while moving upwards + mainParagraphText.anchoredPosition3D += new Vector3(0f,-10f,0f); + LeanTween.textAlpha( mainParagraphText, 0f, 0.6f).setFrom(0f).setDelay(0f); + LeanTween.textAlpha( mainParagraphText, 1f, 0.6f).setEase(LeanTweenType.easeOutQuad).setDelay(0.6f); + LeanTween.move( mainParagraphText, mainParagraphText.anchoredPosition3D + new Vector3(0f,10f,0f), 0.6f).setEase(LeanTweenType.easeOutQuad).setDelay(0.6f); + + // Flash text to purple and back + LeanTween.textColor( mainTitleText, new Color(133f/255f,145f/255f,223f/255f), 0.6f).setEase(LeanTweenType.easeOutQuad).setDelay(0.6f).setLoopPingPong().setRepeat(-1); + + // Fade button in + LeanTween.textAlpha(mainButton2, 1f, 2f ).setFrom(0f).setDelay(0f).setEase(LeanTweenType.easeOutQuad); + LeanTween.alpha(mainButton2, 1f, 2f ).setFrom(0f).setDelay(0f).setEase(LeanTweenType.easeOutQuad); + + // Pop size of button + LeanTween.size(mainButton1, mainButton1.sizeDelta * 1.1f, 0.5f).setDelay(3f).setEaseInOutCirc().setRepeat(6).setLoopPingPong(); + + + // *********** Pause Button ********** + // Drop pause button in + pauseWindow.anchoredPosition3D += new Vector3(0f,200f,0f); + LeanTween.moveY( pauseWindow, pauseWindow.anchoredPosition3D.y + -200f, 0.6f).setEase(LeanTweenType.easeOutSine).setDelay(0.6f); + + // Punch Pause Symbol + RectTransform pauseText = pauseWindow.Find("PauseText").GetComponent(); + LeanTween.moveZ( pauseText, pauseText.anchoredPosition3D.z - 80f, 1.5f).setEase(LeanTweenType.punch).setDelay(2.0f); + + // Rotate rings around in opposite directions + LeanTween.rotateAroundLocal(pauseRing1, Vector3.forward, 360f, 12f).setRepeat(-1); + LeanTween.rotateAroundLocal(pauseRing2, Vector3.forward, -360f, 22f).setRepeat(-1); + + + // *********** Chat Window ********** + // Flip the chat window in + chatWindow.RotateAround(chatWindow.position, Vector3.up, -180f); + LeanTween.rotateAround(chatWindow, Vector3.up, 180f, 2f).setEase(LeanTweenType.easeOutElastic).setDelay(1.2f); + + // Play a series of sprites on the window on repeat endlessly + LeanTween.play(chatRect, chatSprites).setLoopPingPong(); + + // Animate the bar up and down while changing the color to red-ish + LeanTween.color( chatBar2, new Color(248f/255f,67f/255f,108f/255f, 0.5f), 1.2f).setEase(LeanTweenType.easeInQuad).setLoopPingPong().setDelay(1.2f); + LeanTween.scale( chatBar2, new Vector2(1f,0.7f), 1.2f).setEase(LeanTweenType.easeInQuad).setLoopPingPong(); + + // Write in paragraph text + string origText = chatText.text; + chatText.text = ""; + LeanTween.value(gameObject, 0, (float)origText.Length, 6f).setEase(LeanTweenType.easeOutQuad).setOnUpdate( (float val)=>{ + chatText.text = origText.Substring( 0, Mathf.RoundToInt( val ) ); + }).setLoopClamp().setDelay(2.0f); + + // Raw Image + LeanTween.alpha(rawImageRect,0f,1f).setLoopPingPong(); + } + +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs.meta new file mode 100644 index 0000000..5f46eea --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/GeneralUISpaceCS.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cc2ddccee016148b189d987f564ee08e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs new file mode 100644 index 0000000..4692af8 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using DentedPixel; + +public class LogoCinematic : MonoBehaviour { + + public GameObject lean; + + public GameObject tween; + + void Awake(){ + + } + + + void Start () { + //Time.timeScale = 0.2f; + + // Slide in + tween.transform.localPosition += -Vector3.right * 15f; + LeanTween.moveLocalX(tween, tween.transform.localPosition.x+15f, 0.4f).setEase(LeanTweenType.linear).setDelay(0f).setOnComplete( playBoom ); + + // Drop Down tween down + tween.transform.RotateAround(tween.transform.position, Vector3.forward, -30f); + LeanTween.rotateAround(tween, Vector3.forward, 30f, 0.4f).setEase(LeanTweenType.easeInQuad).setDelay(0.4f).setOnComplete( playBoom ); + + // Drop Lean In + lean.transform.position += Vector3.up * 5.1f; + LeanTween.moveY(lean, lean.transform.position.y-5.1f, 0.6f).setEase(LeanTweenType.easeInQuad).setDelay(0.6f).setOnComplete( playBoom ); + } + + void playBoom(){ + // Make your own Dynamic Audio at http://leanaudioplay.dentedpixel.com + + AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1.163155f, 0f, -1f), new Keyframe(0.3098361f, 0f, 0f, 0f), new Keyframe(0.5f, 0.003524712f, 0f, 0f)); + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0.000819672f, 0.007666667f, 0f, 0f), new Keyframe(0.01065573f, 0.002424242f, 0f, 0f), new Keyframe(0.02704918f, 0.007454545f, 0f, 0f), new Keyframe(0.03770492f, 0.002575758f, 0f, 0f), new Keyframe(0.052459f, 0.007090909f, 0f, 0f), new Keyframe(0.06885245f, 0.002939394f, 0f, 0f), new Keyframe(0.0819672f, 0.006727273f, 0f, 0f), new Keyframe(0.1040983f, 0.003181818f, 0f, 0f), new Keyframe(0.1188525f, 0.006212121f, 0f, 0f), new Keyframe(0.145082f, 0.004151515f, 0f, 0f), new Keyframe(0.1893443f, 0.005636364f, 0f, 0f)); + + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.1f,0f,0f)} ).setFrequency(11025)); + + LeanAudio.play( audioClip ); //a:fvb:8,.000819672,.007666667,,,.01065573,.002424242,,,.02704918,.007454545,,,.03770492,.002575758,,,.052459,.007090909,,,.06885245,.002939394,,,.0819672,.006727273,,,.1040983,.003181818,,,.1188525,.006212121,,,.145082,.004151515,,,.1893443,.005636364,,,8~8,,1.163155,,-,.3098361,,,,.5,.003524712,,,8~.1,,,~11025~0~~ + } + +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs.meta new file mode 100644 index 0000000..3bc70a2 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/LogoCinematic.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 674f3c10d8880408e875a9e6c3ee83bb +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs new file mode 100644 index 0000000..2b8317d --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs @@ -0,0 +1,48 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +namespace DentedPixel.LTExamples{ + +public class PathBezier : MonoBehaviour { + + public Transform[] trans; + + LTBezierPath cr; + private GameObject avatar1; + + void OnEnable(){ + // create the path + cr = new LTBezierPath( new Vector3[] {trans[0].position, trans[2].position, trans[1].position, trans[3].position, trans[3].position, trans[5].position, trans[4].position, trans[6].position} ); + } + + void Start () { + avatar1 = GameObject.Find("Avatar1"); + + // Tween automatically + LTDescr descr = LeanTween.move(avatar1, cr.pts, 6.5f).setOrientToPath(true).setRepeat(-1); + Debug.Log("length of path 1:"+cr.length); + Debug.Log("length of path 2:"+descr.optional.path.length); + } + + private float iter; + void Update () { + // Or Update Manually + //cr.place2d( sprite1.transform, iter ); + + iter += Time.deltaTime*0.07f; + if(iter>1.0f) + iter = 0.0f; + } + + void OnDrawGizmos(){ + // Debug.Log("drwaing"); + if(cr!=null) + OnEnable(); + Gizmos.color = Color.red; + if(cr!=null) + cr.gizmoDraw(); // To Visualize the path, use this method + } +} + +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs.meta new file mode 100644 index 0000000..56435b7 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathBezier.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac2038ba3961049ed889ae71039982cd +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js new file mode 100644 index 0000000..0e9c834 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js @@ -0,0 +1,32 @@ +#pragma strict +import DentedPixel; + +public var customAnimationCurve:AnimationCurve; + +public var pt1:Transform; +public var pt2:Transform; +public var pt3:Transform; +public var pt4:Transform; + +private var containingSphere:Transform; +private var spline:LTSpline; +private var ltLogo:GameObject; + +function Start () { + ltLogo = GameObject.Find("LeanTweenLogo"); + containingSphere = GameObject.Find("ContaingCube").transform; + + var path:Vector3[] = [pt1.position,pt1.position,pt2.position,pt3.position,pt4.position,pt4.position]; + spline = new LTSpline( path ); + LeanTween.moveSplineLocal( ltLogo, path, 3.0 ).setEase(LeanTweenType.easeInQuad).setOrientToPath(true).setRepeat(-1); +} + +function Update(){ + containingSphere.transform.eulerAngles.y += Time.deltaTime*3.0; +} + +function OnDrawGizmos(){ + if(spline!=null) + spline.gizmoDraw(1.0f); // debug aid to be able to see the path in the scene inspector +} + diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js.meta new file mode 100644 index 0000000..80088da --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathLocalCurveJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 89833bacbefcb4e899edf31253b2e23f +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs new file mode 100644 index 0000000..a928a58 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs @@ -0,0 +1,38 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class ExampleSpline : MonoBehaviour { + + public Transform[] trans; + + LTSpline spline; + private GameObject ltLogo; + private GameObject ltLogo2; + + void Start () { + spline = new LTSpline( new Vector3[] {trans[0].position, trans[1].position, trans[2].position, trans[3].position, trans[4].position} ); + ltLogo = GameObject.Find("LeanTweenLogo1"); + ltLogo2 = GameObject.Find("LeanTweenLogo2"); + + LeanTween.moveSpline( ltLogo2, spline.pts, 1f).setEase(LeanTweenType.easeInOutQuad).setLoopPingPong().setOrientToPath(true); + + LTDescr zoomInPath_LT = LeanTween.moveSpline(ltLogo2, new Vector3[]{Vector3.zero, Vector3.zero, new Vector3(1,1,1), new Vector3(2,1,1), new Vector3(2,1,1)}, 1.5f); + zoomInPath_LT.setUseEstimatedTime(true); + } + + private float iter; + void Update () { + // Iterating over path + ltLogo.transform.position = spline.point( iter /*(Time.time*1000)%1000 * 1.0 / 1000.0 */); + + iter += Time.deltaTime*0.1f; + if(iter>1.0f) + iter = 0.0f; + } + + void OnDrawGizmos(){ + if(spline!=null) + spline.gizmoDraw(); // debug aid to be able to see the path in the scene inspector + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs.meta new file mode 100644 index 0000000..fd4e012 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ef4235237d8d8413c9d5807cf0a1f77b +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs new file mode 100644 index 0000000..58718fb --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class PathSpline2d : MonoBehaviour { + + public Transform[] trans; + public Texture2D spriteTexture; + + LTSpline cr; + private GameObject sprite1; + private GameObject sprite2; + + void Start () { + cr = new LTSpline( new Vector3[] {trans[0].position, trans[1].position, trans[2].position, trans[3].position, trans[4].position} ); + sprite1 = GameObject.Find("sprite1"); + sprite2 = GameObject.Find("sprite2"); + #if !(UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2) + sprite1.AddComponent(); + sprite1.GetComponent().sprite = Sprite.Create( spriteTexture, new Rect(0.0f,0.0f,100.0f,100.0f), new Vector2(50.0f,50.0f), 10.0f); + sprite2.AddComponent(); + sprite2.GetComponent().sprite = Sprite.Create( spriteTexture, new Rect(0.0f,0.0f,100.0f,100.0f), new Vector2(0.0f,0.0f), 10.0f); + #endif + // LeanTween.moveSpline( ltLogo2, new Vector3[] {trans[0].position, trans[1].position, trans[2].position, trans[3].position, trans[4].position}, 1f).setEase(LeanTweenType.easeInOutQuad).setLoopPingPong().setOrientToPath(true); + + LTDescr zoomInPath_LT = LeanTween.moveSpline(sprite2, new Vector3[]{Vector3.zero, Vector3.zero, new Vector3(1,1,1), new Vector3(2,1,1), new Vector3(2,1,1)}, 1.5f).setOrientToPath2d(true); + zoomInPath_LT.setUseEstimatedTime(true); + } + + private float iter; + void Update () { + cr.place2d( sprite1.transform, iter ); + + iter += Time.deltaTime*0.1f; + if(iter>1.0f) + iter = 0.0f; + } + + void OnDrawGizmos(){ + if(cr!=null) + cr.gizmoDraw(); + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs.meta new file mode 100644 index 0000000..e23a2f0 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSpline2d.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 15c036b11e3ff486ea685da06fa305f6 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs new file mode 100644 index 0000000..f8336b9 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs @@ -0,0 +1,125 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using DentedPixel; + +public class PathSplineEndlessCS : MonoBehaviour { + public GameObject trackTrailRenderers; + public GameObject car; + public GameObject carInternal; + + public GameObject[] cubes; + private int cubesIter; + public GameObject[] trees; + private int treesIter; + + public float randomIterWidth = 0.1f; + + private LTSpline track; + private List trackPts = new List(); + private int zIter = 0; + private float carIter = 0f; + private float carAdd; + private int trackMaxItems = 15; + private int trackIter = 1; + private float pushTrackAhead = 0f; + private float randomIter = 0f; + + void Start () { + + // Setup initial track points + for(int i = 0; i < 4; i++){ + addRandomTrackPoint(); + } + refreshSpline(); + + // Animate in track ahead of the car + LeanTween.value(gameObject, 0, 0.3f, 2f).setOnUpdate( ( float val )=>{ + pushTrackAhead = val; + }); + } + + void Update () { + + float zLastDist = (trackPts[ trackPts.Count - 1].z - transform.position.z); + if(zLastDist < 200f){ // if the last node is too close we'll add in a new point and refresh the spline + addRandomTrackPoint(); + refreshSpline(); + } + + // Update avatar's position on correct track + track.place( car.transform, carIter ); + carIter += carAdd * Time.deltaTime; + + // we'll place the trail renders always a bit in front of the car + track.place( trackTrailRenderers.transform, carIter + pushTrackAhead ); + + + // Switch tracks on keyboard input + float turn = Input.GetAxis("Horizontal"); + if(Input.anyKeyDown){ + if(turn<0f && trackIter>0){ + trackIter--; + playSwish(); + }else if(turn>0f && trackIter < 2){ // We have three track "rails" so stopping it from going above 3 + trackIter++; + playSwish(); + } + // Move the internal local x of the car to simulate changing tracks + LeanTween.moveLocalX(carInternal, (trackIter-1)*6f, 0.3f).setEase(LeanTweenType.easeOutBack); + } + } + + // Simple object queuing system + GameObject objectQueue( GameObject[] arr, ref int lastIter ){ + lastIter = lastIter>=arr.Length-1 ? 0 : lastIter+1; + + // Reset scale and rotation for a new animation + arr[ lastIter ].transform.localScale = Vector3.one; + arr[ lastIter ].transform.rotation = Quaternion.identity; + return arr[ lastIter ]; + } + + void addRandomTrackPoint(){ + float randX = Mathf.PerlinNoise(0f, randomIter); + randomIter += randomIterWidth; + + Vector3 randomInFrontPosition = new Vector3( (randX-0.5f)*20f, 0f, zIter*40f); + + // placing the box is just to visualize how the paths get created + GameObject box = objectQueue( cubes, ref cubesIter ); + box.transform.position = randomInFrontPosition; + + // Line the roads with trees + GameObject tree = objectQueue( trees, ref treesIter ); + float treeX = zIter%2==0 ? -15f : 15f; + tree.transform.position = new Vector3( randomInFrontPosition.x + treeX, 0f, zIter*40f); + + // Animate in new tree (just for fun) + LeanTween.rotateAround( tree, Vector3.forward, 0f, 1f).setFrom( zIter%2==0 ? 180f : -180f).setEase(LeanTweenType.easeOutBack); + + trackPts.Add( randomInFrontPosition ); // Add a future spline node + if(trackPts.Count > trackMaxItems) + trackPts.RemoveAt(0); // Remove the trailing spline node + + zIter++; + } + + void refreshSpline(){ + track = new LTSpline( trackPts.ToArray() ); + carIter = track.ratioAtPoint( car.transform.position ); // we created a new spline so we need to update the cars iteration point on this new spline + // Debug.Log("distance:"+track.distance+" carIter:"+carIter); + carAdd = 40f / track.distance; // we want to make sure the speed is based on the distance of the spline for a more constant speed + } + + // Make your own LeanAudio sounds at http://leanaudioplay.dentedpixel.com + void playSwish(){ + AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 0.005464481f, 1.83897f, 0f), new Keyframe(0.1114856f, 2.281785f, 0f, 0f), new Keyframe(0.2482903f, 2.271654f, 0f, 0f), new Keyframe(0.3f, 0.01670286f, 0f, 0f)); + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.00136725f, 0f, 0f), new Keyframe(0.1482391f, 0.005405405f, 0f, 0f), new Keyframe(0.2650336f, 0.002480127f, 0f, 0f)); + + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.2f,0.5f,0f)} ).setWaveNoise().setWaveNoiseScale(1000)); + + LeanAudio.play( audioClip ); //a:fvb:8,,.00136725,,,.1482391,.005405405,,,.2650336,.002480127,,,8~8,,.005464481,1.83897,,.1114856,2.281785,,,.2482903,2.271654,,,.3,.01670286,,,8~.2,.5,,~~0~~3,1000,1 + } + +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs.meta new file mode 100644 index 0000000..15fe013 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineEndlessCS.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 784f0e347ee4d4c3b83ca56d6f33f01a +timeCreated: 1460315101 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs new file mode 100644 index 0000000..cad5453 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using DentedPixel; +// This class is to test the upper limits of a complex spline + +public class PathSplinePerformanceCS : MonoBehaviour { + + public GameObject trackTrailRenderers; + public GameObject car; + public GameObject carInternal; + + + public float circleLength = 10f; + public float randomRange = 1f; + public int trackNodes = 30; + public float carSpeed = 30f; + public float tracerSpeed = 2f; + + private LTSpline track; + private int trackIter = 1; + private float carAdd; + private float trackPosition; // ratio 0,1 of the avatars position on the track + + void Start () { + Application.targetFrameRate = 240; + + // Make the track from the provided transforms + List randList = new List(); + float degree = 0f; + int nodeLength = trackNodes + 1;// We need to add some extra because the first and last nodes just act as *guides* to the first and last curvature + for(int i = 0; i < nodeLength; i++){ + float x = Mathf.Cos( degree * Mathf.Deg2Rad ) * circleLength + Random.Range(0f, randomRange); + float z = Mathf.Sin( degree * Mathf.Deg2Rad ) * circleLength + Random.Range(0f, randomRange); + randList.Add( new Vector3(x,1f,z ) ); + + degree += 360f/(float)trackNodes; + } + randList[0] = randList[ randList.Count-1 ]; // set the zero-ith one as the last position so it will flow smoothly into the first curve + randList.Add( randList[1] ); // Add the first and second one in, so the circle connects to itself + randList.Add( randList[2] ); + + track = new LTSpline( randList.ToArray() ); + + carAdd = carSpeed / track.distance; + + tracerSpeed = track.distance / (carSpeed*1.2f); + + // Optional technique to show the trails in game + LeanTween.moveSpline( trackTrailRenderers, track, tracerSpeed ).setOrientToPath(true).setRepeat(-1); + } + + void Update () { + // Switch tracks on keyboard input + float turn = Input.GetAxis("Horizontal"); + if(Input.anyKeyDown){ + if(turn<0f && trackIter>0){ + trackIter--; + playSwish(); + }else if(turn>0f && trackIter < 2){ // We have three track "rails" so stopping it from going above 3 + trackIter++; + playSwish(); + } + // Move the internal local x of the car to simulate changing tracks + LeanTween.moveLocalX(carInternal, (trackIter-1)*6f, 0.3f).setEase(LeanTweenType.easeOutBack); + + } + + // Update avatar's position on correct track + track.place( car.transform, trackPosition ); + + trackPosition += Time.deltaTime * carAdd; + + if(trackPosition>1f) + trackPosition = 0f; // We need to keep the ratio between 0-1 so after one we will loop back to the beginning of the track + } + + // Use this for visualizing what the track looks like in the editor (for a full suite of spline tools check out the LeanTween Editor) + void OnDrawGizmos(){ + if(track!=null) + track.drawGizmo( Color.red ); + } + + // Make your own LeanAudio sounds at http://leanaudioplay.dentedpixel.com + void playSwish(){ + AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 0.005464481f, 1.83897f, 0f), new Keyframe(0.1114856f, 2.281785f, 0f, 0f), new Keyframe(0.2482903f, 2.271654f, 0f, 0f), new Keyframe(0.3f, 0.01670286f, 0f, 0f)); + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.00136725f, 0f, 0f), new Keyframe(0.1482391f, 0.005405405f, 0f, 0f), new Keyframe(0.2650336f, 0.002480127f, 0f, 0f)); + + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.2f,0.5f,0f)} ).setWaveNoise().setWaveNoiseScale(1000)); + + LeanAudio.play( audioClip ); //a:fvb:8,,.00136725,,,.1482391,.005405405,,,.2650336,.002480127,,,8~8,,.005464481,1.83897,,.1114856,2.281785,,,.2482903,2.271654,,,.3,.01670286,,,8~.2,.5,,~~0~~3,1000,1 + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs.meta new file mode 100644 index 0000000..bbef093 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplinePerformanceCS.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 5de62495c8a5d49e6b3ca111f8c7e944 +timeCreated: 1460894008 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs new file mode 100644 index 0000000..357431b --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +// This project demonstrates how you can use the spline behaviour for a multi-track game (like an endless runner style) + +public class PathSplineTrackCS : MonoBehaviour { + + public GameObject car; + public GameObject carInternal; + public GameObject trackTrailRenderers; + + public Transform[] trackOnePoints; + + private LTSpline track; + private int trackIter = 1; + private float trackPosition; // ratio 0,1 of the avatars position on the track + + void Start () { + // Make the track from the provided transforms + track = new LTSpline( new Vector3[] {trackOnePoints[0].position, trackOnePoints[1].position, trackOnePoints[2].position, trackOnePoints[3].position, trackOnePoints[4].position, trackOnePoints[5].position, trackOnePoints[6].position} ); + + // Optional technique to show the trails in game + LeanTween.moveSpline( trackTrailRenderers, track, 2f ).setOrientToPath(true).setRepeat(-1); + } + + void Update () { + // Switch tracks on keyboard input + float turn = Input.GetAxis("Horizontal"); + if(Input.anyKeyDown){ + if(turn<0f && trackIter>0){ + trackIter--; + playSwish(); + }else if(turn>0f && trackIter < 2){ // We have three track "rails" so stopping it from going above 3 + trackIter++; + playSwish(); + } + // Move the internal local x of the car to simulate changing tracks + LeanTween.moveLocalX(carInternal, (trackIter-1)*6f, 0.3f).setEase(LeanTweenType.easeOutBack); + + } + + // Update avatar's position on correct track + track.place( car.transform, trackPosition ); + + trackPosition += Time.deltaTime * 0.03f;// * Input.GetAxis("Vertical"); // Uncomment to have the forward and backwards controlled by the directional arrows + + if (trackPosition < 0f) // We need to keep the ratio between 0-1 so after one we will loop back to the beginning of the track + trackPosition = 1f; + else if(trackPosition>1f) + trackPosition = 0f; + } + + // Use this for visualizing what the track looks like in the editor (for a full suite of spline tools check out the LeanTween Editor) + void OnDrawGizmos(){ + LTSpline.drawGizmo( trackOnePoints, Color.red); + } + + // Make your own LeanAudio sounds at http://leanaudioplay.dentedpixel.com + void playSwish(){ + AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 0.005464481f, 1.83897f, 0f), new Keyframe(0.1114856f, 2.281785f, 0f, 0f), new Keyframe(0.2482903f, 2.271654f, 0f, 0f), new Keyframe(0.3f, 0.01670286f, 0f, 0f)); + AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.00136725f, 0f, 0f), new Keyframe(0.1482391f, 0.005405405f, 0f, 0f), new Keyframe(0.2650336f, 0.002480127f, 0f, 0f)); + + AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.2f,0.5f,0f)} ).setWaveNoise().setWaveNoiseScale(1000)); + + LeanAudio.play( audioClip ); //a:fvb:8,,.00136725,,,.1482391,.005405405,,,.2650336,.002480127,,,8~8,,.005464481,1.83897,,.1114856,2.281785,,,.2482903,2.271654,,,.3,.01670286,,,8~.2,.5,,~~0~~3,1000,1 + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs.meta new file mode 100644 index 0000000..d41a6dd --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplineTrackCS.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 31af73f8be2864eda9a3fbb6d0d2a9c7 +timeCreated: 1460209336 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs new file mode 100644 index 0000000..8df95b9 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using System.Collections; +using DentedPixel; + +public class PathSplines : MonoBehaviour { + + public Transform[] trans; + + LTSpline cr; + private GameObject avatar1; + + void OnEnable(){ + // create the path + cr = new LTSpline( new Vector3[] {trans[0].position, trans[1].position, trans[2].position, trans[3].position, trans[4].position} ); + // cr = new LTSpline( new Vector3[] {new Vector3(-1f,0f,0f), new Vector3(0f,0f,0f), new Vector3(4f,0f,0f), new Vector3(20f,0f,0f), new Vector3(30f,0f,0f)} ); + } + + void Start () { + avatar1 = GameObject.Find("Avatar1"); + + // Tween automatically + LeanTween.move(avatar1, cr, 6.5f).setOrientToPath(true).setRepeat(1).setOnComplete( ()=>{ + Vector3[] next = new Vector3[] {trans[4].position, trans[3].position, trans[2].position, trans[1].position, trans[0].position}; + LeanTween.moveSpline( avatar1, next, 6.5f); // move it back to the start without an LTSpline + }).setEase(LeanTweenType.easeOutQuad); + } + + private float iter; + void Update () { + // Or Update Manually + // cr.place( avatar1.transform, iter ); + + iter += Time.deltaTime*0.07f; + if(iter>1.0f) + iter = 0.0f; + } + + void OnDrawGizmos(){ + // Debug.Log("drwaing"); + if(cr==null) + OnEnable(); + Gizmos.color = Color.red; + if(cr!=null) + cr.gizmoDraw(); // To Visualize the path, use this method + } +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs.meta new file mode 100644 index 0000000..0ccb4fe --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/PathSplines.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: de0396ae3eef541c190f0e6962090454 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js new file mode 100644 index 0000000..05f2de1 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js @@ -0,0 +1,186 @@ + #pragma strict + import DentedPixel; + +public var customAnimationCurve:AnimationCurve; +public var shakeCurve:AnimationCurve; + +public var pt1:Transform; +public var pt2:Transform; +public var pt3:Transform; +public var pt4:Transform; +public var pt5:Transform; + +function Awake(){ + LeanTween.init(400); // This line is optional. Here you can specify the maximum number of tweens you will use (the default is 400). This must be called before any use of LeanTween is made for it to be effective. +} + +function Start () { + ltLogo = GameObject.Find("LeanTweenLogo"); + cycleThroughExamples(); + //LeanTween.delayedCall(1.0f, cycleThroughExamples); + // loopTestClamp(); + // loopTestPingPong(); + // LeanTween.delayedCall(2.6, loopPause); + // LeanTween.delayedCall(4.5, loopResume); + // LeanTween.delayedCall(1.5, loopCancel); +} + +function OnGUI(){ + GUI.Label(Rect(0.03*Screen.width,0.03*Screen.height,0.5*Screen.width,0.3*Screen.height), "useEstimatedTime:"+useEstimatedTime); +} + +private var exampleIter:int = 0; +private var exampleFunctions = [updateValue3Example,loopTestPingPong,loopTestClamp,moveOnACurveExample,punchTest, customTweenExample, moveExample, rotateExample, scaleExample, updateValueExample, alphaExample, moveLocalExample, delayedCallExample, rotateAroundExample]; +private var useEstimatedTime:boolean = true; +private var ltLogo:GameObject; +private var cube1:GameObject; +private var cube2:GameObject; + +function cycleThroughExamples(){ + + if(exampleIter==0){ + useEstimatedTime = !useEstimatedTime; + Time.timeScale = useEstimatedTime ? 0 : 1; // pause the Time Scale to show the effectiveness of the useEstimatedTime feature (this is very usefull with Pause Screens) + } + exampleFunctions[ exampleIter ](); + exampleIter = exampleIter+1>=exampleFunctions.length ? 0 : exampleIter + 1; + + LeanTween.delayedCall( 1.05, cycleThroughExamples).setUseEstimatedTime(useEstimatedTime); +} + +function updateValue3Example(){ + Debug.Log("updateValue3Example"); + LeanTween.value( ltLogo, updateValue3ExampleCallback, new Vector3(0.0, 270.0, 0.0), new Vector3(30.0, 270.0, 180), 0.5).setEase(LeanTweenType.easeInBounce).setLoopPingPong().setRepeat(2).setOnUpdateVector3(updateValue3ExampleUpdate).setUseEstimatedTime(useEstimatedTime); +} + +function updateValue3ExampleUpdate( val:Vector3 ){ + Debug.Log("val:"+val); +} + +function updateValue3ExampleCallback( val:Vector3 ){ + ltLogo.transform.eulerAngles = val; +} + +function loopTestClamp(){ + Debug.Log("loopTestClamp"); + cube1 = GameObject.Find("Cube1"); + cube1.transform.localScale.z = 1.0; + moveId = LeanTween.scaleZ( cube1, 4.0, 1.0).setEase(LeanTweenType.easeOutElastic).setLoopClamp().setRepeat(7).setUseEstimatedTime(useEstimatedTime); +} + +function loopTestPingPong(){ + Debug.Log("loopTestPingPong"); + cube2 = GameObject.Find("Cube2"); + cube2.transform.localScale.y = 1.0; + pingPongDescrId = LeanTween.scaleY( cube2, 4.0, 1.0).setEase(LeanTweenType.easeOutQuad).setLoopPingPong(4).setUseEstimatedTime(useEstimatedTime).id; +} + +function moveOnACurveExample(){ + Debug.Log("moveOnACurveExample"); + var path:Vector3[] = [ltLogo.transform.position,pt1.position,pt2.position,pt3.position,pt3.position,pt4.position,pt5.position,ltLogo.transform.position]; + LeanTween.move( ltLogo, path, 1.0).setEase(LeanTweenType.easeInQuad).setOrientToPath(true).setUseEstimatedTime(useEstimatedTime); +} + +function punchTest(){ + LeanTween.moveX( ltLogo, 7, 1.0).setEase(LeanTweenType.punch).setUseEstimatedTime(useEstimatedTime); +} + +function customTweenExample(){ + Debug.Log("customTweenExample"); + + LeanTween.moveX( ltLogo, -10, 0.5).setEase(customAnimationCurve).setUseEstimatedTime(useEstimatedTime); + LeanTween.moveX( ltLogo, 0, 0.5).setDelay(0.5).setEase(customAnimationCurve).setUseEstimatedTime(useEstimatedTime); +} + +function moveExample(){ + Debug.Log("moveExample"); + + LeanTween.move( ltLogo, new Vector3(-2f,-1f,0f), 0.5f).setUseEstimatedTime(useEstimatedTime); + LeanTween.move( ltLogo, ltLogo.transform.position, 0.5f).setDelay(0.5).setUseEstimatedTime(useEstimatedTime); +} + +function rotateExample(){ + Debug.Log("rotateExample"); + + LeanTween.rotate( ltLogo, Vector3(0,360,0), 1.0).setEase(LeanTweenType.easeOutQuad).setUseEstimatedTime(useEstimatedTime); +} + +function scaleExample(){ + Debug.Log("scaleExample"); + + var currentScale:Vector3 = ltLogo.transform.localScale; + LeanTween.scale( ltLogo, new Vector3(currentScale.x+0.2,currentScale.y+0.2,currentScale.z+0.2), 1).setEase(LeanTweenType.easeOutBounce).setUseEstimatedTime(useEstimatedTime); +} + +function updateValueExample(){ + Debug.Log("updateValueExample"); + LeanTween.value( ltLogo, updateValueExampleCallback, ltLogo.transform.eulerAngles.y, 270.0, 1).setEase(LeanTweenType.easeOutElastic).setUseEstimatedTime(useEstimatedTime); +} + +function updateValueExampleCallback( val:float ){ + ltLogo.transform.eulerAngles.y = val; +} + +function delayedCallExample(){ + Debug.Log("delayedCallExample"); + + LeanTween.delayedCall(0.5, delayedCallExampleCallback).setUseEstimatedTime(useEstimatedTime); + // LeanTween.delayedCall(gameObject, 1, delayedCallCallback); // pass an object of type GameObject value in case you want the tween to quit if this gameObject is ever destroyed (this is useful with tweens the might be interrupted when a new level is loaded). +} + +function delayedCallExampleCallback(){ + Debug.Log("Delayed function was called"); + var currentScale:Vector3 = gameObject.transform.localScale; + LeanTween.scale( ltLogo, new Vector3(currentScale.x-0.2,currentScale.y-0.2,currentScale.z-0.2), 0.5).setEase(LeanTweenType.easeInOutCirc).setUseEstimatedTime(useEstimatedTime); +} + +function alphaExample(){ + Debug.Log("alphaExample"); + + var cube:GameObject = GameObject.Find ("LCharacter"); + LeanTween.alpha( cube, 0.0f, 0.5f).setUseEstimatedTime(useEstimatedTime); + LeanTween.alpha( cube, 1.0f, 0.5f).setDelay(0.5f).setUseEstimatedTime(useEstimatedTime); +} + +function moveLocalExample(){ + Debug.Log("moveLocalExample"); + + var cube:GameObject = GameObject.Find ("LCharacter"); + var origPos:Vector3 = cube.transform.localPosition; + LeanTween.moveLocal( cube, new Vector3(0.0f,2.0f,0.0f), 0.5f).setUseEstimatedTime(useEstimatedTime); + LeanTween.moveLocal( cube, origPos, 0.5f).setDelay(0.5f).setUseEstimatedTime(useEstimatedTime); +} + +function rotateAroundExample(){ + Debug.Log("rotateAroundExample"); + + var cube:GameObject = GameObject.Find ("LCharacter"); + LeanTween.rotateAround( cube, Vector3.up, 360.0f, 1.0f ).setUseEstimatedTime(useEstimatedTime); +} + +function moveXExample(){ + LeanTween.moveX( ltLogo, 5, 0.5); +} + +function rotateXExample(){ + +} + +function scaleXExample(){ + +} + +private var moveId:LTDescr; +private var pingPongDescrId:int; + +function loopPause(){ + moveId.pause(); +} + +function loopResume(){ + moveId.resume(); +} + +function loopCancel(){ + LeanTween.cancel( pingPongDescrId ); +} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js.meta new file mode 100644 index 0000000..8ced56f --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingAllJS.js.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 99269cf0e003f4484a404bac166139ae +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs new file mode 100644 index 0000000..70bfa92 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs @@ -0,0 +1,521 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using DentedPixel; + +namespace DentedPixel.LTExamples{ + + public class TestingUnitTests : MonoBehaviour { + + public GameObject cube1; + public GameObject cube2; + public GameObject cube3; + public GameObject cube4; + public GameObject cubeAlpha1; + public GameObject cubeAlpha2; + + + private bool eventGameObjectWasCalled = false, eventGeneralWasCalled = false; + private int lt1Id; + private LTDescr lt2; + private LTDescr lt3; + private LTDescr lt4; + private LTDescr[] groupTweens; + private GameObject[] groupGOs; + private int groupTweensCnt; + private int rotateRepeat; + private int rotateRepeatAngle; + private GameObject boxNoCollider; + private float timeElapsedNormalTimeScale; + private float timeElapsedIgnoreTimeScale; + + void Awake(){ + boxNoCollider = GameObject.CreatePrimitive(PrimitiveType.Cube); + Destroy( boxNoCollider.GetComponent( typeof(BoxCollider) ) as Component ); + } + + void Start () { +// Time.timeScale = 0.25f; + + LeanTest.timeout = 46f; + LeanTest.expected = 56; + + LeanTween.init(15 + 1200); + + // add a listener + LeanTween.addListener(cube1, 0, eventGameObjectCalled); + + LeanTest.expect(LeanTween.isTweening() == false, "NOTHING TWEEENING AT BEGINNING" ); + + LeanTest.expect(LeanTween.isTweening(cube1) == false, "OBJECT NOT TWEEENING AT BEGINNING" ); + + LeanTween.scaleX( cube4, 2f, 0f).setOnComplete( ()=>{ + LeanTest.expect( cube4.transform.localScale.x == 2f, "TWEENED WITH ZERO TIME" ); + }); + + // dispatch event that is received + LeanTween.dispatchEvent(0); + LeanTest.expect( eventGameObjectWasCalled, "EVENT GAMEOBJECT RECEIVED" ); + + // do not remove listener + LeanTest.expect(LeanTween.removeListener(cube2, 0, eventGameObjectCalled)==false, "EVENT GAMEOBJECT NOT REMOVED" ); + // remove listener + LeanTest.expect(LeanTween.removeListener(cube1, 0, eventGameObjectCalled), "EVENT GAMEOBJECT REMOVED" ); + + // add a listener + LeanTween.addListener(1, eventGeneralCalled); + + // dispatch event that is received + LeanTween.dispatchEvent(1); + LeanTest.expect( eventGeneralWasCalled, "EVENT ALL RECEIVED" ); + + // remove listener + LeanTest.expect( LeanTween.removeListener( 1, eventGeneralCalled), "EVENT ALL REMOVED" ); + + lt1Id = LeanTween.move( cube1, new Vector3(3f,2f,0.5f), 1.1f ).id; + LeanTween.move( cube2, new Vector3(-3f,-2f,-0.5f), 1.1f ); + + LeanTween.reset(); + + // Queue up a bunch of tweens, cancel some of them but expect the remainder to finish + GameObject[] cubes = new GameObject[99]; + int[] tweenIds = new int[cubes.Length]; + for (int i = 0; i < cubes.Length; i++) { + GameObject c = cubeNamed("cancel"+i); + tweenIds[i] = LeanTween.moveX (c, 100f, 1f).id; + cubes [i] = c; + } + int onCompleteCount = 0; + LeanTween.delayedCall (cubes[0], 0.2f, () => { + for (int i = 0; i < cubes.Length; i++) { + if(i%3==0){ + LeanTween.cancel( cubes [i] ); + }else if(i%3==1){ + LeanTween.cancel( tweenIds[i] ); + }else if(i%3==2){ + LTDescr descr = LeanTween.descr(tweenIds[i]); +// Debug.Log("descr:"+descr); + descr.setOnComplete( ()=>{ + onCompleteCount++; +// Debug.Log("onCompleteCount:"+onCompleteCount); + if(onCompleteCount>=33){ + LeanTest.expect(true, "CANCELS DO NOT EFFECT FINISHING" ); + } + }); + } + } + }); + + Vector3[] splineArr = new Vector3[] {new Vector3(-1f,0f,0f), new Vector3(0f,0f,0f), new Vector3(4f,0f,0f), new Vector3(20f,0f,0f), new Vector3(30f,0f,0f)}; + LTSpline cr = new LTSpline( splineArr ); + cr.place( cube4.transform, 0.5f ); + LeanTest.expect( (Vector3.Distance( cube4.transform.position, new Vector3(10f,0f,0f) ) <= 0.7f), "SPLINE POSITIONING AT HALFWAY", "position is:"+cube4.transform.position+" but should be:(10f,0f,0f)"); + LeanTween.color(cube4, Color.green, 0.01f); + +// Debug.Log("Point 2:"+cr.ratioAtPoint(splineArr[2])); + + // OnStart Speed Test for ignoreTimeScale vs normal timeScale + + GameObject cubeDest = cubeNamed("cubeDest"); + Vector3 cubeDestEnd = new Vector3(100f,20f,0f); + LeanTween.move( cubeDest, cubeDestEnd, 0.7f); + + GameObject cubeToTrans = cubeNamed("cubeToTrans"); + LeanTween.move( cubeToTrans, cubeDest.transform, 1.2f).setEase( LeanTweenType.easeOutQuad ).setOnComplete( ()=>{ + LeanTest.expect( cubeToTrans.transform.position == cubeDestEnd, "MOVE TO TRANSFORM WORKS"); + }); + + GameObject cubeDestroy = cubeNamed("cubeDestroy"); + LeanTween.moveX( cubeDestroy, 200f, 0.05f).setDelay(0.02f).setDestroyOnComplete(true); + LeanTween.moveX( cubeDestroy, 200f, 0.1f).setDestroyOnComplete(true).setOnComplete( ()=>{ + LeanTest.expect(true, "TWO DESTROY ON COMPLETE'S SUCCEED"); + }); + + GameObject cubeSpline = cubeNamed("cubeSpline"); + LeanTween.moveSpline(cubeSpline, new Vector3[]{new Vector3(0.5f,0f,0.5f),new Vector3(0.75f,0f,0.75f),new Vector3(1f,0f,1f),new Vector3(1f,0f,1f)}, 0.1f).setOnComplete( ()=>{ + LeanTest.expect(Vector3.Distance(new Vector3(1f,0f,1f), cubeSpline.transform.position) < 0.01f, "SPLINE WITH TWO POINTS SUCCEEDS"); + }); + + // This test works when it is positioned last in the test queue (probably worth fixing when you have time) + GameObject jumpCube = cubeNamed("jumpTime"); + jumpCube.transform.position = new Vector3(100f,0f,0f); + jumpCube.transform.localScale *= 100f; + int jumpTimeId = LeanTween.moveX( jumpCube, 200f, 1f).id; + + LeanTween.delayedCall(gameObject, 0.2f, ()=>{ + LTDescr d = LeanTween.descr( jumpTimeId ); + float beforeX = jumpCube.transform.position.x; + d.setTime( 0.5f ); + LeanTween.delayedCall( 0.0f, ()=>{ }).setOnStart( ()=>{ + float diffAmt = 1f;// This variable is dependent on a good frame-rate because it evalutes at the next Update + beforeX += Time.deltaTime * 100f * 2f; + LeanTest.expect( Mathf.Abs( jumpCube.transform.position.x - beforeX ) < diffAmt , "CHANGING TIME DOESN'T JUMP AHEAD", "Difference:"+Mathf.Abs( jumpCube.transform.position.x - beforeX ) +" beforeX:"+beforeX+" now:"+jumpCube.transform.position.x+" dt:"+Time.deltaTime); + }); + }); + + // Tween with time of zero is needs to be set to it's final value + GameObject zeroCube = cubeNamed("zeroCube"); + LeanTween.moveX( zeroCube, 10f, 0f).setOnComplete( ()=>{ + LeanTest.expect( zeroCube.transform.position.x == 10f, "ZERO TIME FINSHES CORRECTLY", "final x:"+ zeroCube.transform.position.x); + }); + + // Scale, and OnStart + GameObject cubeScale = cubeNamed("cubeScale"); + LeanTween.scale(cubeScale, new Vector3(5f,5f,5f),0.01f).setOnStart(()=>{ + LeanTest.expect( true, "ON START WAS CALLED"); + }).setOnComplete(()=>{ + LeanTest.expect( cubeScale.transform.localScale.z == 5f, "SCALE","expected scale z:"+5f+" returned:"+cubeScale.transform.localScale.z); + }); + + // Rotate + GameObject cubeRotate = cubeNamed("cubeRotate"); + LeanTween.rotate(cubeRotate, new Vector3(0f,180f,0f),0.02f).setOnComplete(()=>{ + LeanTest.expect( cubeRotate.transform.eulerAngles.y == 180f, "ROTATE","expected rotate y:"+180f+" returned:"+cubeRotate.transform.eulerAngles.y); + }); + + // RotateAround + GameObject cubeRotateA = cubeNamed("cubeRotateA"); + LeanTween.rotateAround(cubeRotateA,Vector3.forward,90f,0.3f).setOnComplete(()=>{ + LeanTest.expect( cubeRotateA.transform.eulerAngles.z==90f, "ROTATE AROUND","expected rotate z:"+90f+" returned:"+cubeRotateA.transform.eulerAngles.z); + }); + + // RotateAround 360 + GameObject cubeRotateB = cubeNamed("cubeRotateB"); + cubeRotateB.transform.position = new Vector3(200f,10f,8f); + LeanTween.rotateAround(cubeRotateB,Vector3.forward,360f,0.3f).setPoint(new Vector3(5f,3f,2f)).setOnComplete(()=>{ + LeanTest.expect( cubeRotateB.transform.position.ToString()==(new Vector3(200f,10f,8f)).ToString(), "ROTATE AROUND 360","expected rotate pos:"+(new Vector3(200f,10f,8f))+" returned:"+cubeRotateB.transform.position); + }); + + // Alpha, onUpdate with passing value, onComplete value + LeanTween.alpha(cubeAlpha1,0.5f,0.1f).setOnUpdate( (float val)=>{ + LeanTest.expect(val!=0f ,"ON UPDATE VAL"); + }).setOnCompleteParam( "Hi!" ).setOnComplete( (object completeObj)=>{ + LeanTest.expect(((string)completeObj)=="Hi!","ONCOMPLETE OBJECT"); + LeanTest.expect(cubeAlpha1.GetComponent().material.color.a == 0.5f,"ALPHA"); + }); + // Color + float onStartTime = -1f; + LeanTween.color(cubeAlpha2, Color.cyan, 0.3f).setOnComplete( ()=>{ + LeanTest.expect(cubeAlpha2.GetComponent().material.color==Color.cyan, "COLOR"); + LeanTest.expect(onStartTime>=0f && onStartTime{ + onStartTime = Time.time; + }); + // moveLocalY (make sure uses y values) + Vector3 beforePos = cubeAlpha1.transform.position; + LeanTween.moveY(cubeAlpha1, 3f, 0.2f).setOnComplete( ()=>{ + LeanTest.expect(cubeAlpha1.transform.position.x==beforePos.x && cubeAlpha1.transform.position.z==beforePos.z,"MOVE Y"); + }); + + Vector3 beforePos2 = cubeAlpha2.transform.localPosition; + LeanTween.moveLocalZ(cubeAlpha2, 12f, 0.2f).setOnComplete( ()=>{ + LeanTest.expect(cubeAlpha2.transform.localPosition.x==beforePos2.x && cubeAlpha2.transform.localPosition.y==beforePos2.y,"MOVE LOCAL Z","ax:"+cubeAlpha2.transform.localPosition.x+" bx:"+beforePos.x+" ay:"+cubeAlpha2.transform.localPosition.y+" by:"+beforePos2.y); + }); + + AudioClip audioClip = LeanAudio.createAudio(new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f)), new AnimationCurve( new Keyframe(0f, 0.001f, 0f, 0f), new Keyframe(1f, 0.001f, 0f, 0f)), LeanAudio.options()); + LeanTween.delayedSound(gameObject, audioClip, new Vector3(0f,0f,0f), 0.1f).setDelay(0.2f).setOnComplete( ()=>{ + LeanTest.expect(Time.time>0,"DELAYED SOUND"); + }); + + // value2 + bool value2UpdateCalled = false; + LeanTween.value(gameObject, new Vector2(0, 0), new Vector2(256, 96), 0.1f).setOnUpdate((Vector2 value) => { + value2UpdateCalled = true; + }); + LeanTween.delayedCall(0.2f, ()=>{ + LeanTest.expect( value2UpdateCalled, "VALUE2 UPDATE"); + } ); + + StartCoroutine( timeBasedTesting() ); + } + + private GameObject cubeNamed( string name ){ + GameObject cube = Instantiate( boxNoCollider ) as GameObject; + cube.name = name; + return cube; + } + + IEnumerator timeBasedTesting(){ + yield return new WaitForEndOfFrame(); + + GameObject cubeNormal = cubeNamed("normalTimeScale"); + // float timeElapsedNormal = Time.time; + LeanTween.moveX(cubeNormal, 12f, 1.5f).setIgnoreTimeScale( false ).setOnComplete( ()=>{ + timeElapsedNormalTimeScale = Time.time; + }); + + LTDescr[] descr = LeanTween.descriptions( cubeNormal ); + LeanTest.expect( descr.Length >= 0 && descr[0].to.x == 12f, "WE CAN RETRIEVE A DESCRIPTION"); + + GameObject cubeIgnore = cubeNamed("ignoreTimeScale"); + LeanTween.moveX(cubeIgnore, 5f, 1.5f).setIgnoreTimeScale( true ).setOnComplete( ()=>{ + timeElapsedIgnoreTimeScale = Time.time; + }); + + yield return new WaitForSeconds(1.5f); + LeanTest.expect( Mathf.Abs( timeElapsedNormalTimeScale - timeElapsedIgnoreTimeScale ) < 0.7f, "START IGNORE TIMING", "timeElapsedIgnoreTimeScale:"+timeElapsedIgnoreTimeScale+" timeElapsedNormalTimeScale:"+timeElapsedNormalTimeScale ); + +// yield return new WaitForSeconds(100f); + Time.timeScale = 4f; + + int pauseCount = 0; + LeanTween.value( gameObject, 0f, 1f, 1f).setOnUpdate( ( float val )=>{ + pauseCount++; + }).pause(); + + // Bezier should end at exact end position not just 99% close to it + Vector3[] roundCirc = new Vector3[]{ new Vector3(0f,0f,0f), new Vector3(-9.1f,25.1f,0f), new Vector3(-1.2f,15.9f,0f), new Vector3(-25f,25f,0f), new Vector3(-25f,25f,0f), new Vector3(-50.1f,15.9f,0f), new Vector3(-40.9f,25.1f,0f), new Vector3(-50f,0f,0f), new Vector3(-50f,0f,0f), new Vector3(-40.9f,-25.1f,0f), new Vector3(-50.1f,-15.9f,0f), new Vector3(-25f,-25f,0f), new Vector3(-25f,-25f,0f), new Vector3(0f,-15.9f,0f), new Vector3(-9.1f,-25.1f,0f), new Vector3(0f,0f,0f) }; + GameObject cubeRound = cubeNamed("bRound"); + Vector3 onStartPos = cubeRound.transform.position; + LeanTween.moveLocal(cubeRound, roundCirc, 0.5f).setOnComplete( ()=>{ + LeanTest.expect(cubeRound.transform.position==onStartPos, "BEZIER CLOSED LOOP SHOULD END AT START","onStartPos:"+onStartPos+" onEnd:"+cubeRound.transform.position); + }); + + // Spline should end at exact end position not just 99% close to it + Vector3[] roundSpline = new Vector3[]{ new Vector3(0f,0f,0f), new Vector3(0f,0f,0f), new Vector3(2f,0f,0f), new Vector3(0.9f,2f,0f), new Vector3(0f,0f,0f), new Vector3(0f,0f,0f) }; + GameObject cubeSpline = cubeNamed("bSpline"); + Vector3 onStartPosSpline = cubeSpline.transform.position; + LeanTween.moveSplineLocal(cubeSpline, roundSpline, 0.5f).setOnComplete( ()=>{ + LeanTest.expect(Vector3.Distance(onStartPosSpline, cubeSpline.transform.position) <= 0.01f, "SPLINE CLOSED LOOP SHOULD END AT START","onStartPos:"+onStartPosSpline+" onEnd:"+cubeSpline.transform.position+" dist:"+Vector3.Distance(onStartPosSpline, cubeSpline.transform.position)); + }); + + // Groups of tweens testing + groupTweens = new LTDescr[ 1200 ]; + groupGOs = new GameObject[ groupTweens.Length ]; + groupTweensCnt = 0; + int descriptionMatchCount = 0; + for(int i = 0; i < groupTweens.Length; i++){ + GameObject cube = cubeNamed("c"+i); + cube.transform.position = new Vector3(0,0,i*3); + + groupGOs[i] = cube; + } + + yield return new WaitForEndOfFrame(); + + bool hasGroupTweensCheckStarted = false; + int setOnStartNum = 0; + int setPosNum = 0; + bool setPosOnUpdate = true; + for(int i = 0; i < groupTweens.Length; i++){ + Vector3 finalPos = transform.position + Vector3.one*3f; + Dictionary finalDict = new Dictionary{ {"final",finalPos}, {"go",groupGOs[i]} }; + groupTweens[i] = LeanTween.move(groupGOs[i], finalPos, 3f ).setOnStart( ()=>{ + setOnStartNum++; + }).setOnUpdate( (Vector3 newPosition) => { + if(transform.position.z > newPosition.z){ + setPosOnUpdate = false; + } +// Debug.LogWarning("New Position: " + newPosition.ToString()); + }). + setOnCompleteParam( finalDict ). + setOnComplete( (object param)=>{ + Dictionary finalDictRetr = param as Dictionary; + Vector3 neededPos = (Vector3)finalDictRetr["final"]; + GameObject tweenedGo = finalDictRetr["go"] as GameObject; + if(neededPos.ToString() == tweenedGo.transform.position.ToString()) + setPosNum++; + else{ +// Debug.Log("neededPos:"+neededPos+" tweenedGo.transform.position:"+tweenedGo.transform.position); + } + if(hasGroupTweensCheckStarted==false){ + hasGroupTweensCheckStarted = true; + LeanTween.delayedCall(gameObject, 0.1f, ()=>{ + LeanTest.expect( setOnStartNum == groupTweens.Length, "SETONSTART CALLS", "expected:"+groupTweens.Length+" was:"+setOnStartNum); + LeanTest.expect( groupTweensCnt==groupTweens.Length, "GROUP FINISH", "expected "+groupTweens.Length+" tweens but got "+groupTweensCnt); + LeanTest.expect( setPosNum==groupTweens.Length, "GROUP POSITION FINISH", "expected "+groupTweens.Length+" tweens but got "+setPosNum); + LeanTest.expect( setPosOnUpdate, "GROUP POSITION ON UPDATE"); + }); + } + groupTweensCnt++; + }); + + if(LeanTween.description(groupTweens[i].id).trans==groupTweens[i].trans) + descriptionMatchCount++; + } + + while (LeanTween.tweensRunning{ + LeanTest.expect( cube4!=null && previousXlt4!=cube4.transform.position.x, "RESUME OUT OF ORDER", "cube4:"+cube4+" previousXlt4:"+previousXlt4+" cube4.transform.position.x:"+(cube4!=null ? cube4.transform.position.x : 0)); + }).setDestroyOnComplete( true ); + lt4.resume(); + + rotateRepeat = rotateRepeatAngle = 0; + LeanTween.rotateAround(cube3, Vector3.forward, 360f, 0.1f).setRepeat(3).setOnComplete(rotateRepeatFinished).setOnCompleteOnRepeat(true).setDestroyOnComplete(true); + yield return new WaitForEndOfFrame(); + LeanTween.delayedCall(0.1f*8f+1f, rotateRepeatAllFinished); + + int countBeforeCancel = LeanTween.tweensRunning; + LeanTween.cancel( lt1Id ); + LeanTest.expect( countBeforeCancel==LeanTween.tweensRunning, "CANCEL AFTER RESET SHOULD FAIL", "expected "+countBeforeCancel+" but got "+LeanTween.tweensRunning); + LeanTween.cancel(cube2); + + int tweenCount = 0; + for(int i = 0; i < groupTweens.Length; i++){ + if(LeanTween.isTweening( groupGOs[i] )) + tweenCount++; + if(i%3==0) + LeanTween.pause( groupGOs[i] ); + else if(i%3==1) + groupTweens[i].pause(); + else + LeanTween.pause( groupTweens[i].id ); + } + LeanTest.expect( tweenCount==groupTweens.Length, "GROUP ISTWEENING", "expected "+groupTweens.Length+" tweens but got "+tweenCount ); + + yield return new WaitForEndOfFrame(); + + tweenCount = 0; + for(int i = 0; i < groupTweens.Length; i++){ + if(i%3==0) + LeanTween.resume( groupGOs[i] ); + else if(i%3==1) + groupTweens[i].resume(); + else + LeanTween.resume( groupTweens[i].id ); + + if(i%2==0 ? LeanTween.isTweening( groupTweens[i].id ) : LeanTween.isTweening( groupGOs[i] ) ) + tweenCount++; + } + LeanTest.expect( tweenCount==groupTweens.Length, "GROUP RESUME" ); + + LeanTest.expect( LeanTween.isTweening(cube1)==false, "CANCEL TWEEN LTDESCR" ); + LeanTest.expect( LeanTween.isTweening(cube2)==false, "CANCEL TWEEN LEANTWEEN" ); + + LeanTest.expect( pauseCount==0, "ON UPDATE NOT CALLED DURING PAUSE", "expect pause count of 0, but got "+pauseCount); + + yield return new WaitForEndOfFrame(); + Time.timeScale = 0.25f; + float tweenTime = 0.2f; + float expectedTime = tweenTime * (1f/Time.timeScale); + float start = Time.realtimeSinceStartup; + bool onUpdateWasCalled = false; + LeanTween.moveX(cube1, -5f, tweenTime).setOnUpdate( (float val)=>{ + onUpdateWasCalled = true; + }).setOnComplete( ()=>{ + float end = Time.realtimeSinceStartup; + float diff = end - start; + + LeanTest.expect( Mathf.Abs( expectedTime - diff) < 0.05f, "SCALED TIMING DIFFERENCE", "expected to complete in roughly "+expectedTime+" but completed in "+diff ); + LeanTest.expect( Mathf.Approximately(cube1.transform.position.x, -5f), "SCALED ENDING POSITION", "expected to end at -5f, but it ended at "+cube1.transform.position.x); + LeanTest.expect( onUpdateWasCalled, "ON UPDATE FIRED" ); + }); + + bool didGetCorrectOnUpdate = false; + LeanTween.value(gameObject, new Vector3(1f,1f,1f), new Vector3(10f,10f,10f), 1f).setOnUpdate( ( Vector3 val )=>{ + didGetCorrectOnUpdate = val.x >= 1f && val.y >= 1f && val.z >= 1f; + }).setOnComplete( ()=>{ + LeanTest.expect( didGetCorrectOnUpdate, "VECTOR3 CALLBACK CALLED"); + }); + + yield return new WaitForSeconds( expectedTime ); + Time.timeScale = 1f; + + int ltCount = 0; + GameObject[] allGos = FindObjectsOfType(typeof(GameObject)) as GameObject[]; + foreach (GameObject go in allGos) { + if(go.name == "~LeanTween") + ltCount++; + } + LeanTest.expect( ltCount==1, "RESET CORRECTLY CLEANS UP" ); + + lotsOfCancels(); + } + + IEnumerator lotsOfCancels(){ + yield return new WaitForEndOfFrame(); + + Time.timeScale = 4f; + int cubeCount = 10; + + int[] tweensA = new int[ cubeCount ]; + GameObject[] aGOs = new GameObject[ cubeCount ]; + for(int i = 0; i < aGOs.Length; i++){ + GameObject cube = Instantiate( boxNoCollider ) as GameObject; + cube.transform.position = new Vector3(0,0,i*2f); + cube.name = "a"+i; + aGOs[i] = cube; + tweensA[i] = LeanTween.move(cube, cube.transform.position + new Vector3(10f,0,0), 0.5f + 1f * (1.0f/(float)aGOs.Length) ).id; + LeanTween.color(cube, Color.red, 0.01f); + } + + yield return new WaitForSeconds(1.0f); + + int[] tweensB = new int[ cubeCount ]; + GameObject[] bGOs = new GameObject[ cubeCount ]; + for(int i = 0; i < bGOs.Length; i++){ + GameObject cube = Instantiate( boxNoCollider ) as GameObject; + cube.transform.position = new Vector3(0,0,i*2f); + cube.name = "b"+i; + bGOs[i] = cube; + tweensB[i] = LeanTween.move(cube, cube.transform.position + new Vector3(10f,0,0), 2f).id; + } + + for(int i = 0; i < aGOs.Length; i++){ + LeanTween.cancel( aGOs[i] ); + GameObject cube = aGOs[i]; + tweensA[i] = LeanTween.move(cube, new Vector3(0,0,i*2f), 2f).id; + } + + yield return new WaitForSeconds(0.5f); + + for(int i = 0; i < aGOs.Length; i++){ + LeanTween.cancel( aGOs[i] ); + GameObject cube = aGOs[i]; + tweensA[i] = LeanTween.move(cube, new Vector3(0,0,i*2f) + new Vector3(10f,0,0), 2f ).id; + } + + for(int i = 0; i < bGOs.Length; i++){ + LeanTween.cancel( bGOs[i] ); + GameObject cube = bGOs[i]; + tweensB[i] = LeanTween.move(cube, new Vector3(0,0,i*2f), 2f ).id; + } + + yield return new WaitForSeconds(2.1f); + + bool inFinalPlace = true; + for(int i = 0; i < aGOs.Length; i++){ + if(Vector3.Distance( aGOs[i].transform.position, new Vector3(0,0,i*2f) + new Vector3(10f,0,0) ) > 0.1f) + inFinalPlace = false; + } + + for(int i = 0; i < bGOs.Length; i++){ + if(Vector3.Distance( bGOs[i].transform.position, new Vector3(0,0,i*2f) ) > 0.1f) + inFinalPlace = false; + } + + LeanTest.expect(inFinalPlace,"AFTER LOTS OF CANCELS"); + } + + void rotateRepeatFinished(){ + if( Mathf.Abs(cube3.transform.eulerAngles.z)<0.0001f ) + rotateRepeatAngle++; + rotateRepeat++; + } + + void rotateRepeatAllFinished(){ + LeanTest.expect( rotateRepeatAngle==3, "ROTATE AROUND MULTIPLE", "expected 3 times received "+rotateRepeatAngle+" times" ); + LeanTest.expect( rotateRepeat==3, "ROTATE REPEAT", "expected 3 times received "+rotateRepeat+" times" ); + LeanTest.expect( cube3==null, "DESTROY ON COMPLETE", "cube3:"+cube3 ); + } + + void eventGameObjectCalled( LTEvent e ){ + eventGameObjectWasCalled = true; + } + + void eventGeneralCalled( LTEvent e ){ + eventGeneralWasCalled = true; + } + + } + +} \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs.meta new file mode 100644 index 0000000..d2fc149 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Scripts/TestingUnitTests.cs.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fef58bd01146344429d022b95c6af872 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures.meta new file mode 100644 index 0000000..64ca521 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 9e39f8f3dc0404757be9a05da7cc9802 diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg new file mode 100644 index 0000000..6687944 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg.meta new file mode 100644 index 0000000..c8e6b57 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/DefaultParticleReplacement.jpg.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: eabba395643bb4e388d633c8d9a4f1e8 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + textureType: -1 + buildTargetSettings: [] diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png new file mode 100644 index 0000000..d790b85 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png.meta new file mode 100644 index 0000000..a42c891 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/Dude2d.png.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 5f7fa9a7940a64e79b5a42d9f661d42c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg new file mode 100644 index 0000000..566e2d2 Binary files /dev/null and b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg differ diff --git a/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg.meta b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg.meta new file mode 100644 index 0000000..860e495 --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/Examples/Textures/HorizontalGradient.jpg.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: 547f51a8eea214bd7a5863356fd25619 +TextureImporter: + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + textureFormat: -1 + maxTextureSize: 1024 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + textureType: -1 + buildTargetSettings: [] diff --git a/IronToad_UnityProject/Assets/LeanTween/License.txt b/IronToad_UnityProject/Assets/LeanTween/License.txt new file mode 100644 index 0000000..4f43b9a --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/License.txt @@ -0,0 +1,31 @@ +The MIT License (MIT) + +Copyright (c) 2017 Russell Savage - Dented Pixel + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +TERMS OF USE - EASING EQUATIONS +Open source under the BSD License. +Copyright (c)2001 Robert Penner +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/IronToad_UnityProject/Assets/LeanTween/License.txt.meta b/IronToad_UnityProject/Assets/LeanTween/License.txt.meta new file mode 100644 index 0000000..1d0d8ca --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/License.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e389e9bcd4f944c338327697bd209cad +timeCreated: 1469016738 +licenseType: Store +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt b/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt new file mode 100644 index 0000000..49687de --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt @@ -0,0 +1,9 @@ +LeanTween is an efficient tweening engine for Unity3d + +Full Documentation: + http://dentedpixel.com/LeanTweenDocumentation/classes/LeanTween.html + This can also be accessed offline! From the Unity menu Help->LeanTween Documentation + +Getting Started + + There are many examples included! Look in the “LeanTween/LeanTweenExamples" folder to see many of the methods outlined. diff --git a/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt.meta b/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt.meta new file mode 100644 index 0000000..c08c74a --- /dev/null +++ b/IronToad_UnityProject/Assets/LeanTween/ReadMe.txt.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f1e0da947b69648fdb1884d602088d92 diff --git a/IronToad_UnityProject/Assets/M_Lighthouse.FBX b/IronToad_UnityProject/Assets/M_Lighthouse.FBX new file mode 100644 index 0000000..5eac5fd Binary files /dev/null and b/IronToad_UnityProject/Assets/M_Lighthouse.FBX differ diff --git a/IronToad_UnityProject/Assets/M_Lighthouse.FBX.meta b/IronToad_UnityProject/Assets/M_Lighthouse.FBX.meta new file mode 100644 index 0000000..0b763ac --- /dev/null +++ b/IronToad_UnityProject/Assets/M_Lighthouse.FBX.meta @@ -0,0 +1,81 @@ +fileFormatVersion: 2 +guid: 03cd9f33716bc4591b4392a874ba8e30 +timeCreated: 1484952271 +licenseType: Free +ModelImporter: + serializedVersion: 19 + fileIDToRecycleName: + 100000: //RootNode + 400000: //RootNode + 2300000: //RootNode + 3300000: //RootNode + 4300000: lightHouse + 9500000: //RootNode + materials: + importMaterials: 1 + materialName: 0 + materialSearch: 1 + animations: + legacyGenerateAnimations: 4 + bakeSimulation: 0 + resampleCurves: 1 + optimizeGameObjects: 0 + motionNodeName: + animationImportErrors: + animationImportWarnings: + animationRetargetingWarnings: + animationDoRetargetingWarnings: 0 + animationCompression: 1 + animationRotationError: 0.5 + animationPositionError: 0.5 + animationScaleError: 0.5 + animationWrapMode: 0 + extraExposedTransformPaths: [] + clipAnimations: [] + isReadable: 1 + meshes: + lODScreenPercentages: [] + globalScale: 1 + meshCompression: 0 + addColliders: 0 + importBlendShapes: 1 + swapUVChannels: 0 + generateSecondaryUV: 0 + useFileUnits: 1 + optimizeMeshForGPU: 1 + keepQuads: 0 + weldVertices: 1 + secondaryUVAngleDistortion: 8 + secondaryUVAreaDistortion: 15.000001 + secondaryUVHardAngle: 88 + secondaryUVPackMargin: 4 + useFileScale: 1 + tangentSpace: + normalSmoothAngle: 60 + normalImportMode: 0 + tangentImportMode: 3 + importAnimation: 1 + copyAvatar: 0 + humanDescription: + serializedVersion: 2 + human: [] + skeleton: [] + armTwist: 0.5 + foreArmTwist: 0.5 + upperLegTwist: 0.5 + legTwist: 0.5 + armStretch: 0.05 + legStretch: 0.05 + feetSpacing: 0 + rootMotionBoneName: + rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} + hasTranslationDoF: 0 + hasExtraRoot: 0 + skeletonHasParents: 1 + lastHumanDescriptionAvatarSource: {instanceID: 0} + animationType: 2 + humanoidOversampling: 1 + additionalBone: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat b/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat new file mode 100644 index 0000000..27214dc Binary files /dev/null and b/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat differ diff --git a/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat.meta b/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat.meta new file mode 100644 index 0000000..31f1ce2 --- /dev/null +++ b/IronToad_UnityProject/Assets/Materials/GreyBox_LightHouse.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 60567db7a4e43db418a4af6c646323fa +timeCreated: 1484953302 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat b/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat new file mode 100644 index 0000000..365d370 Binary files /dev/null and b/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat differ diff --git a/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat.meta b/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat.meta new file mode 100644 index 0000000..0056d72 --- /dev/null +++ b/IronToad_UnityProject/Assets/Materials/GreyBox_Plauer.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59cc0b265da76754591856c27385920d +timeCreated: 1484953331 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Materials/No Name.mat b/IronToad_UnityProject/Assets/Materials/No Name.mat new file mode 100644 index 0000000..e15f536 Binary files /dev/null and b/IronToad_UnityProject/Assets/Materials/No Name.mat differ diff --git a/IronToad_UnityProject/Assets/Materials/No Name.mat.meta b/IronToad_UnityProject/Assets/Materials/No Name.mat.meta new file mode 100644 index 0000000..20a1699 --- /dev/null +++ b/IronToad_UnityProject/Assets/Materials/No Name.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e4f1435577f444874a5c76f472e3872b +timeCreated: 1484952271 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Materials/Test_BoatMat.mat b/IronToad_UnityProject/Assets/Materials/Test_BoatMat.mat index ed09d5a..9346fa7 100644 Binary files a/IronToad_UnityProject/Assets/Materials/Test_BoatMat.mat and b/IronToad_UnityProject/Assets/Materials/Test_BoatMat.mat differ diff --git a/IronToad_UnityProject/Assets/New Terrain 1.asset b/IronToad_UnityProject/Assets/New Terrain 1.asset new file mode 100644 index 0000000..b81cab5 Binary files /dev/null and b/IronToad_UnityProject/Assets/New Terrain 1.asset differ diff --git a/IronToad_UnityProject/Assets/New Terrain 1.asset.meta b/IronToad_UnityProject/Assets/New Terrain 1.asset.meta new file mode 100644 index 0000000..a534538 --- /dev/null +++ b/IronToad_UnityProject/Assets/New Terrain 1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 011f8ff62549fe0458dd51589fc8e655 +timeCreated: 1484954621 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/New Terrain 2.asset b/IronToad_UnityProject/Assets/New Terrain 2.asset new file mode 100644 index 0000000..bfed8c4 Binary files /dev/null and b/IronToad_UnityProject/Assets/New Terrain 2.asset differ diff --git a/IronToad_UnityProject/Assets/New Terrain 2.asset.meta b/IronToad_UnityProject/Assets/New Terrain 2.asset.meta new file mode 100644 index 0000000..a970133 --- /dev/null +++ b/IronToad_UnityProject/Assets/New Terrain 2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf9e4482ee14d9c4486fa63b1a9b5ccf +timeCreated: 1484960215 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/New Terrain 3.asset b/IronToad_UnityProject/Assets/New Terrain 3.asset new file mode 100644 index 0000000..8d4ea60 Binary files /dev/null and b/IronToad_UnityProject/Assets/New Terrain 3.asset differ diff --git a/IronToad_UnityProject/Assets/New Terrain 3.asset.meta b/IronToad_UnityProject/Assets/New Terrain 3.asset.meta new file mode 100644 index 0000000..a160108 --- /dev/null +++ b/IronToad_UnityProject/Assets/New Terrain 3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf3801b4e55c9494e8fa912611a0ad53 +timeCreated: 1484961994 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/New Terrain.asset b/IronToad_UnityProject/Assets/New Terrain.asset new file mode 100644 index 0000000..3b0ed47 Binary files /dev/null and b/IronToad_UnityProject/Assets/New Terrain.asset differ diff --git a/IronToad_UnityProject/Assets/New Terrain.asset.meta b/IronToad_UnityProject/Assets/New Terrain.asset.meta new file mode 100644 index 0000000..4f69bfc --- /dev/null +++ b/IronToad_UnityProject/Assets/New Terrain.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 371e48b8e2e860f419275d6e75fb035d +timeCreated: 1484952988 +licenseType: Pro +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins.meta b/IronToad_UnityProject/Assets/Plugins.meta new file mode 100644 index 0000000..d67927c --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 1839327a1a81c4d979f53b07027ab4b9 diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween.meta new file mode 100644 index 0000000..e69c1be --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: a3f23ec8eb7c24f0bbb1d41bf96c154f +folderAsset: yes +timeCreated: 1469292088 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs new file mode 100644 index 0000000..6cbb74a --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs @@ -0,0 +1,2246 @@ +//namespace DentedPixel{ +using System; +using UnityEngine; + +/** +* Internal Representation of a Tween
    +*
    +* This class represents all of the optional parameters you can pass to a method (it also represents the internal representation of the tween).

    +* Optional Parameters are passed at the end of every method:
    +*
    +*   Example:
    +*   LeanTween.moveX( gameObject, 1f, 1f).setEase( LeanTweenType.easeInQuad ).setDelay(1f);
    +*
    +* You can pass the optional parameters in any order, and chain on as many as you wish.
    +* You can also pass parameters at a later time by saving a reference to what is returned.
    +*
    +* Retrieve a unique id for the tween by using the "id" property. You can pass this to LeanTween.pause, LeanTween.resume, LeanTween.cancel, LeanTween.isTweening methods
    +*
    +*   

    Example:

    +*   int id = LeanTween.moveX(gameObject, 1f, 3f).id;
    +*
      // pause a specific tween
    +*   LeanTween.pause(id);
    +*
      // resume later
    +*   LeanTween.resume(id);
    +*
      // check if it is tweening before kicking of a new tween
    +*   if( LeanTween.isTweening( id ) ){
    +*       LeanTween.cancel( id );
    +*       LeanTween.moveZ(gameObject, 10f, 3f);
    +*   }
    +* @class LTDescr +* @constructor +*/ +public class LTDescr +{ + public bool toggle; + public bool useEstimatedTime; + public bool useFrames; + public bool useManualTime; + public bool usesNormalDt; + public bool hasInitiliazed; + public bool hasExtraOnCompletes; + public bool hasPhysics; + public bool onCompleteOnRepeat; + public bool onCompleteOnStart; + public bool useRecursion; + public float ratioPassed; + public float passed; + public float delay; + public float time; + public float speed; + public float lastVal; + private uint _id; + public int loopCount; + public uint counter; + public float direction; + public float directionLast; + public float overshoot; + public float period; + public float scale; + public bool destroyOnComplete; + public Transform trans; + public LTRect ltRect; + internal Vector3 fromInternal; + public Vector3 from { get { return this.fromInternal; } set { this.fromInternal = value; } } + internal Vector3 toInternal; + public Vector3 to { get { return this.toInternal; } set { this.toInternal = value; } } + internal Vector3 diff; + internal Vector3 diffDiv2; + public TweenAction type; + public LeanTweenType tweenType; + public LeanTweenType loopType; + + public bool hasUpdateCallback; + + public EaseTypeDelegate easeMethod; + public ActionMethodDelegate easeInternal {get; set; } + public ActionMethodDelegate initInternal {get; set; } + public delegate Vector3 EaseTypeDelegate(); + public delegate void ActionMethodDelegate(); + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + public SpriteRenderer spriteRen; + #endif + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + public RectTransform rectTransform; + public UnityEngine.UI.Text uiText; + public UnityEngine.UI.Image uiImage; + public UnityEngine.UI.RawImage rawImage; + public UnityEngine.Sprite[] sprites; + #endif + + public LTDescrOptional _optional = new LTDescrOptional(); + + private static uint global_counter = 0; + + public override string ToString(){ + return (trans!=null ? "name:"+trans.gameObject.name : "gameObject:null")+" toggle:"+toggle+" passed:"+passed+" time:"+time+" delay:"+delay+" direction:"+direction+" from:"+from+" to:"+to+" diff:"+diff+" type:"+type+" ease:"+tweenType+" useEstimatedTime:"+useEstimatedTime+" id:"+id+" hasInitiliazed:"+hasInitiliazed; + } + + public LTDescr(){ + + } + + [System.Obsolete("Use 'LeanTween.cancel( id )' instead")] + public LTDescr cancel( GameObject gameObject ){ + // Debug.Log("canceling id:"+this._id+" this.uniqueId:"+this.uniqueId+" go:"+this.trans.gameObject); + if(gameObject==this.trans.gameObject) + LeanTween.removeTween((int)this._id, this.uniqueId); + return this; + } + + public int uniqueId{ + get{ + uint toId = _id | counter << 16; + + /*uint backId = toId & 0xFFFF; + uint backCounter = toId >> 16; + if(_id!=backId || backCounter!=counter){ + Debug.LogError("BAD CONVERSION toId:"+_id); + }*/ + + return (int)toId; + } + } + + public int id{ + get{ + return uniqueId; + } + } + + public LTDescrOptional optional{ + get{ + return _optional; + } + set{ + this._optional = optional; + } + } + + public void reset(){ + this.toggle = this.useRecursion = this.usesNormalDt = true; + this.trans = null; + this.passed = this.delay = this.lastVal = 0.0f; + this.hasUpdateCallback = this.useEstimatedTime = this.useFrames = this.hasInitiliazed = this.onCompleteOnRepeat = this.destroyOnComplete = this.onCompleteOnStart = this.useManualTime = this.hasExtraOnCompletes = false; + this.tweenType = LeanTweenType.linear; + this.loopType = LeanTweenType.once; + this.loopCount = 0; + this.direction = this.directionLast = this.overshoot = this.scale = 1.0f; + this.period = 0.3f; + this.speed = -1f; + this.easeMethod = this.easeLinear; + this.from = this.to = Vector3.zero; + this._optional.reset(); + + global_counter++; + if(global_counter>0x8000) + global_counter = 0; + } + + // Initialize and Internal Methods + + public LTDescr setMoveX(){ + this.type = TweenAction.MOVE_X; + this.initInternal = ()=>{ this.fromInternal.x = trans.position.x; }; + this.easeInternal = ()=>{ trans.position=new Vector3( easeMethod().x,trans.position.y,trans.position.z); }; + return this; + } + + public LTDescr setMoveY(){ + this.type = TweenAction.MOVE_Y; + this.initInternal = ()=>{ this.fromInternal.x = trans.position.y; }; + this.easeInternal = ()=>{ trans.position=new Vector3( trans.position.x,easeMethod().x,trans.position.z); }; + return this; + } + + public LTDescr setMoveZ(){ + this.type = TweenAction.MOVE_Z; + this.initInternal = ()=>{ this.fromInternal.x = trans.position.z; };; + this.easeInternal = ()=>{ trans.position=new Vector3( trans.position.x,trans.position.y,easeMethod().x); }; + return this; + } + + public LTDescr setMoveLocalX(){ + this.type = TweenAction.MOVE_LOCAL_X; + this.initInternal = ()=>{ this.fromInternal.x = trans.localPosition.x; }; + this.easeInternal = ()=>{ trans.localPosition=new Vector3( easeMethod().x,trans.localPosition.y,trans.localPosition.z); }; + return this; + } + + public LTDescr setMoveLocalY(){ + this.type = TweenAction.MOVE_LOCAL_Y; + this.initInternal = ()=>{ this.fromInternal.x = trans.localPosition.y; }; + this.easeInternal = ()=>{ trans.localPosition=new Vector3( trans.localPosition.x,easeMethod().x,trans.localPosition.z); }; + return this; + } + + public LTDescr setMoveLocalZ(){ + this.type = TweenAction.MOVE_LOCAL_Z; + this.initInternal = ()=>{ this.fromInternal.x = trans.localPosition.z; }; + this.easeInternal = ()=>{ trans.localPosition=new Vector3( trans.localPosition.x,trans.localPosition.y,easeMethod().x); }; + return this; + } + + private void initFromInternal(){ this.fromInternal.x = 0; } + + public LTDescr setMoveCurved(){ + this.type = TweenAction.MOVE_CURVED; + this.initInternal = this.initFromInternal; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + if(this._optional.path.orientToPath){ + if(this._optional.path.orientToPath2d){ + this._optional.path.place2d( trans, val ); + }else{ + this._optional.path.place( trans, val ); + } + }else{ + trans.position = this._optional.path.point( val ); + } + }; + return this; + } + + public LTDescr setMoveCurvedLocal(){ + this.type = TweenAction.MOVE_CURVED_LOCAL; + this.initInternal = this.initFromInternal; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + if(this._optional.path.orientToPath){ + if(this._optional.path.orientToPath2d){ + this._optional.path.placeLocal2d( trans, val ); + }else{ + this._optional.path.placeLocal( trans, val ); + } + }else{ + trans.localPosition = this._optional.path.point( val ); + } + }; + return this; + } + + public LTDescr setMoveSpline(){ + this.type = TweenAction.MOVE_SPLINE; + this.initInternal = this.initFromInternal; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + if(this._optional.spline.orientToPath){ + if(this._optional.spline.orientToPath2d){ + this._optional.spline.place2d( trans, val ); + }else{ + this._optional.spline.place( trans, val ); + } + }else{ + trans.position = this._optional.spline.point( val ); + } + }; + return this; + } + + public LTDescr setMoveSplineLocal(){ + this.type = TweenAction.MOVE_SPLINE_LOCAL; + this.initInternal = this.initFromInternal; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + if(this._optional.spline.orientToPath){ + if(this._optional.spline.orientToPath2d){ + this._optional.spline.placeLocal2d( trans, val ); + }else{ + this._optional.spline.placeLocal( trans, val ); + } + }else{ + trans.localPosition = this._optional.spline.point( val ); + } + }; + return this; + } + + public LTDescr setScaleX(){ + this.type = TweenAction.SCALE_X; + this.initInternal = ()=>{ this.fromInternal.x = trans.localScale.x; }; + this.easeInternal = ()=>{ trans.localScale = new Vector3( easeMethod().x,trans.localScale.y,trans.localScale.z); }; + return this; + } + + public LTDescr setScaleY(){ + this.type = TweenAction.SCALE_Y; + this.initInternal = ()=>{ this.fromInternal.x = trans.localScale.y; }; + this.easeInternal = ()=>{ trans.localScale=new Vector3( trans.localScale.x,easeMethod().x,trans.localScale.z); }; + return this; + } + + public LTDescr setScaleZ(){ + this.type = TweenAction.SCALE_Z; + this.initInternal = ()=>{ this.fromInternal.x = trans.localScale.z; }; + this.easeInternal = ()=>{ trans.localScale=new Vector3( trans.localScale.x,trans.localScale.y,easeMethod().x); }; + return this; + } + + public LTDescr setRotateX(){ + this.type = TweenAction.ROTATE_X; + this.initInternal = ()=>{ this.fromInternal.x = trans.eulerAngles.x; this.toInternal.x = LeanTween.closestRot( this.fromInternal.x, this.toInternal.x);}; + this.easeInternal = ()=>{ trans.eulerAngles=new Vector3(easeMethod().x,trans.eulerAngles.y,trans.eulerAngles.z); }; + return this; + } + + public LTDescr setRotateY(){ + this.type = TweenAction.ROTATE_Y; + this.initInternal = ()=>{ this.fromInternal.x = trans.eulerAngles.y; this.toInternal.x = LeanTween.closestRot( this.fromInternal.x, this.toInternal.x);}; + this.easeInternal = ()=>{ trans.eulerAngles=new Vector3(trans.eulerAngles.x,easeMethod().x,trans.eulerAngles.z); }; + return this; + } + + public LTDescr setRotateZ(){ + this.type = TweenAction.ROTATE_Z; + this.initInternal = ()=>{ + this.fromInternal.x = trans.eulerAngles.z; + this.toInternal.x = LeanTween.closestRot( this.fromInternal.x, this.toInternal.x); + }; + this.easeInternal = ()=>{ trans.eulerAngles=new Vector3(trans.eulerAngles.x,trans.eulerAngles.y,easeMethod().x); }; + return this; + } + + public LTDescr setRotateAround(){ + this.type = TweenAction.ROTATE_AROUND; + this.initInternal = ()=>{ + this.fromInternal.x = 0f; + this._optional.origRotation = trans.rotation; + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Vector3 origPos = trans.localPosition; + Vector3 rotateAroundPt = (Vector3)trans.TransformPoint( this._optional.point ); + // Debug.Log("this._optional.point:"+this._optional.point); + trans.RotateAround(rotateAroundPt, this._optional.axis, -this._optional.lastVal); + Vector3 diff = origPos - trans.localPosition; + + trans.localPosition = origPos - diff; // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position + trans.rotation = this._optional.origRotation; + + rotateAroundPt = (Vector3)trans.TransformPoint( this._optional.point ); + trans.RotateAround(rotateAroundPt, this._optional.axis, val); + + this._optional.lastVal = val; + }; + return this; + } + + public LTDescr setRotateAroundLocal(){ + this.type = TweenAction.ROTATE_AROUND_LOCAL; + this.initInternal = ()=>{ + this.fromInternal.x = 0f; + this._optional.origRotation = trans.localRotation; + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Vector3 origPos = trans.localPosition; + trans.RotateAround((Vector3)trans.TransformPoint( this._optional.point ), trans.TransformDirection(this._optional.axis), -this._optional.lastVal); + Vector3 diff = origPos - trans.localPosition; + + trans.localPosition = origPos - diff; // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position + trans.localRotation = this._optional.origRotation; + Vector3 rotateAroundPt = (Vector3)trans.TransformPoint( this._optional.point ); + trans.RotateAround(rotateAroundPt, trans.TransformDirection(this._optional.axis), val); + + this._optional.lastVal = val; + }; + return this; + } + + public LTDescr setAlpha(){ + this.type = TweenAction.ALPHA; + this.initInternal = ()=>{ + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + if(trans.gameObject.renderer){ this.fromInternal.x = trans.gameObject.renderer.material.color.a; }else if(trans.childCount>0){ foreach (Transform child in trans) { if(child.gameObject.renderer!=null){ Color col = child.gameObject.renderer.material.color; this.fromInternal.x = col.a; break; }}} + this.easeInternal = this.alpha; + break; + #else + SpriteRenderer ren = trans.gameObject.GetComponent(); + if(ren!=null){ + this.fromInternal.x = ren.color.a; + }else{ + if(trans.gameObject.GetComponent()!=null && trans.gameObject.GetComponent().material.HasProperty("_Color")){ + this.fromInternal.x = trans.gameObject.GetComponent().material.color.a; + }else if(trans.gameObject.GetComponent()!=null && trans.gameObject.GetComponent().material.HasProperty("_TintColor")){ + Color col = trans.gameObject.GetComponent().material.GetColor("_TintColor"); + this.fromInternal.x = col.a; + }else if(trans.childCount>0){ + foreach (Transform child in trans) { + if(child.gameObject.GetComponent()!=null){ + Color col = child.gameObject.GetComponent().material.color; + this.fromInternal.x = col.a; + break; + } + } + } + } + #endif + + this.easeInternal = ()=>{ + val = easeMethod().x; + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + alphaRecursive(this.trans, val, this.useRecursion); + #else + if(this.spriteRen!=null){ + this.spriteRen.color = new Color( this.spriteRen.color.r, this.spriteRen.color.g, this.spriteRen.color.b, val); + alphaRecursiveSprite(this.trans, val); + }else{ + alphaRecursive(this.trans, val, this.useRecursion); + } + #endif + }; + + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + alphaRecursive(this.trans, val, this.useRecursion); + #else + if(this.spriteRen!=null){ + this.spriteRen.color = new Color( this.spriteRen.color.r, this.spriteRen.color.g, this.spriteRen.color.b, val); + alphaRecursiveSprite(this.trans, val); + }else{ + alphaRecursive(this.trans, val, this.useRecursion); + } + #endif + }; + return this; + } + + public LTDescr setTextAlpha(){ + this.type = TweenAction.TEXT_ALPHA; + this.initInternal = ()=>{ + this.uiText = trans.gameObject.GetComponent(); + this.fromInternal.x = this.uiText != null ? this.uiText.color.a : 1f; + }; + this.easeInternal = ()=>{ textAlphaRecursive( trans, easeMethod().x, this.useRecursion ); }; + return this; + } + + public LTDescr setAlphaVertex(){ + this.type = TweenAction.ALPHA_VERTEX; + this.initInternal = ()=>{ this.fromInternal.x = trans.GetComponent().mesh.colors32[0].a; }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Mesh mesh = trans.GetComponent().mesh; + Vector3[] vertices = mesh.vertices; + Color32[] colors = new Color32[vertices.Length]; + if (colors.Length == 0){ //MaxFW fix: add vertex colors if the mesh doesn't have any + Color32 transparentWhiteColor32 = new Color32(0xff, 0xff, 0xff, 0x00); + colors = new Color32[mesh.vertices.Length]; + for (int k=0; k{ + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + if(trans.gameObject.renderer){ + this.setFromColor( trans.gameObject.renderer.material.color ); + }else if(trans.childCount>0){ + foreach (Transform child in trans) { + if(child.gameObject.renderer!=null){ + this.setFromColor( child.gameObject.renderer.material.color ); + break; + } + } + } + #else + SpriteRenderer renColor = trans.gameObject.GetComponent(); + if(renColor!=null){ + this.setFromColor( renColor.color ); + }else{ + if(trans.gameObject.GetComponent()!=null && trans.gameObject.GetComponent().material.HasProperty("_Color")){ + Color col = trans.gameObject.GetComponent().material.color; + this.setFromColor( col ); + }else if(trans.gameObject.GetComponent()!=null && trans.gameObject.GetComponent().material.HasProperty("_TintColor")){ + Color col = trans.gameObject.GetComponent().material.GetColor ("_TintColor"); + this.setFromColor( col ); + }else if(trans.childCount>0){ + foreach (Transform child in trans) { + if(child.gameObject.GetComponent()!=null){ + Color col = child.gameObject.GetComponent().material.color; + this.setFromColor( col ); + break; + } + } + } + } + #endif + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Color toColor = tweenColor(this, val); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + + if(this.spriteRen!=null){ + this.spriteRen.color = toColor; + colorRecursiveSprite( trans, toColor); + }else{ + #endif + // Debug.Log("val:"+val+" tween:"+tween+" tween.diff:"+tween.diff); + if(this.type==TweenAction.COLOR) + colorRecursive(trans, toColor, this.useRecursion); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + } + #endif + if(dt!=0f && this._optional.onUpdateColor!=null){ + this._optional.onUpdateColor(toColor); + }else if(dt!=0f && this._optional.onUpdateColorObject!=null){ + this._optional.onUpdateColorObject(toColor, this._optional.onUpdateParam); + } + }; + return this; + } + + public LTDescr setCallbackColor(){ + this.type = TweenAction.CALLBACK_COLOR; + this.initInternal = ()=>{ this.diff = new Vector3(1.0f,0.0f,0.0f); }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Color toColor = tweenColor(this, val); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + if(this.spriteRen!=null){ + this.spriteRen.color = toColor; + colorRecursiveSprite( trans, toColor); + }else{ + #endif + // Debug.Log("val:"+val+" tween:"+tween+" tween.diff:"+tween.diff); + if(this.type==TweenAction.COLOR) + colorRecursive(trans, toColor, this.useRecursion); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + } + #endif + if(dt!=0f && this._optional.onUpdateColor!=null){ + this._optional.onUpdateColor(toColor); + }else if(dt!=0f && this._optional.onUpdateColorObject!=null){ + this._optional.onUpdateColorObject(toColor, this._optional.onUpdateParam); + } + }; + return this; + } + + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + + public LTDescr setTextColor(){ + this.type = TweenAction.TEXT_COLOR; + this.initInternal = ()=>{ + this.uiText = trans.gameObject.GetComponent(); + this.setFromColor( this.uiText != null ? this.uiText.color : Color.white ); + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Color toColor = tweenColor(this, val); + this.uiText.color = toColor; + if (dt!=0f && this._optional.onUpdateColor != null) + this._optional.onUpdateColor(toColor); + + if(this.useRecursion && trans.childCount>0) + textColorRecursive(this.trans, toColor); + }; + return this; + } + + public LTDescr setCanvasAlpha(){ + this.type = TweenAction.CANVAS_ALPHA; + this.initInternal = ()=>{ + this.uiImage = trans.gameObject.GetComponent(); + if(this.uiImage!=null){ + this.fromInternal.x = this.uiImage.color.a; + }else{ + this.rawImage = trans.gameObject.GetComponent(); + if(this.rawImage != null){ + this.fromInternal.x = this.rawImage.color.a; + }else{ + this.fromInternal.x = 1f; + } + } + + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + if(this.uiImage!=null){ + Color c = this.uiImage.color; c.a = val; this.uiImage.color = c; + }else if(this.rawImage!=null){ + Color c = this.rawImage.color; c.a = val; this.rawImage.color = c; + } + if(this.useRecursion){ + alphaRecursive( this.rectTransform, val, 0 ); + textAlphaRecursive( this.rectTransform, val); + } + }; + return this; + } + + public LTDescr setCanvasGroupAlpha(){ + this.type = TweenAction.CANVASGROUP_ALPHA; + this.initInternal = ()=>{this.fromInternal.x = trans.gameObject.GetComponent().alpha;}; + this.easeInternal = ()=>{ this.trans.GetComponent().alpha = easeMethod().x; }; + return this; + } + + public LTDescr setCanvasColor(){ + this.type = TweenAction.CANVAS_COLOR; + this.initInternal = ()=>{ + this.uiImage = trans.gameObject.GetComponent(); + if(this.uiImage==null){ + this.rawImage = trans.gameObject.GetComponent(); + this.setFromColor( this.rawImage!=null ? this.rawImage.color : Color.white ); + }else{ + this.setFromColor( this.uiImage.color ); + } + + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + Color toColor = tweenColor(this, val); + if(this.uiImage!=null){ + this.uiImage.color = toColor; + }else if(this.rawImage!=null){ + this.rawImage.color = toColor; + } + + if (dt!=0f && this._optional.onUpdateColor != null) + this._optional.onUpdateColor(toColor); + + if(this.useRecursion) + colorRecursive(this.rectTransform, toColor); + }; + return this; + } + + public LTDescr setCanvasMoveX(){ + this.type = TweenAction.CANVAS_MOVE_X; + this.initInternal = ()=>{ this.fromInternal.x = this.rectTransform.anchoredPosition3D.x; }; + this.easeInternal = ()=>{ Vector3 c = this.rectTransform.anchoredPosition3D; this.rectTransform.anchoredPosition3D = new Vector3(easeMethod().x, c.y, c.z); }; + return this; + } + + public LTDescr setCanvasMoveY(){ + this.type = TweenAction.CANVAS_MOVE_Y; + this.initInternal = ()=>{ this.fromInternal.x = this.rectTransform.anchoredPosition3D.y; }; + this.easeInternal = ()=>{ Vector3 c = this.rectTransform.anchoredPosition3D; this.rectTransform.anchoredPosition3D = new Vector3(c.x, easeMethod().x, c.z); }; + return this; + } + + public LTDescr setCanvasMoveZ(){ + this.type = TweenAction.CANVAS_MOVE_Z; + this.initInternal = ()=>{ this.fromInternal.x = this.rectTransform.anchoredPosition3D.z; }; + this.easeInternal = ()=>{ Vector3 c = this.rectTransform.anchoredPosition3D; this.rectTransform.anchoredPosition3D = new Vector3(c.x, c.y, easeMethod().x); }; + return this; + } + + private void initCanvasRotateAround(){ + this.lastVal = 0.0f; + this.fromInternal.x = 0.0f; + this._optional.origRotation = this.rectTransform.rotation; + } + + public LTDescr setCanvasRotateAround(){ + this.type = TweenAction.CANVAS_ROTATEAROUND; + this.initInternal = this.initCanvasRotateAround; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + RectTransform rect = this.rectTransform; + Vector3 origPos = rect.localPosition; + rect.RotateAround((Vector3)rect.TransformPoint( this._optional.point ), this._optional.axis, -val); + Vector3 diff = origPos - rect.localPosition; + + rect.localPosition = origPos - diff; // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position + rect.rotation = this._optional.origRotation; + rect.RotateAround((Vector3)rect.TransformPoint( this._optional.point ), this._optional.axis, val); + }; + return this; + } + + public LTDescr setCanvasRotateAroundLocal(){ + this.type = TweenAction.CANVAS_ROTATEAROUND_LOCAL; + this.initInternal = this.initCanvasRotateAround; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + RectTransform rect = this.rectTransform; + Vector3 origPos = rect.localPosition; + rect.RotateAround((Vector3)rect.TransformPoint( this._optional.point ), rect.TransformDirection(this._optional.axis), -val); + Vector3 diff = origPos - rect.localPosition; + + rect.localPosition = origPos - diff; // Subtract the amount the object has been shifted over by the rotate, to get it back to it's orginal position + rect.rotation = this._optional.origRotation; + rect.RotateAround((Vector3)rect.TransformPoint( this._optional.point ), rect.TransformDirection(this._optional.axis), val); + }; + return this; + } + + public LTDescr setCanvasPlaySprite(){ + this.type = TweenAction.CANVAS_PLAYSPRITE; + this.initInternal = ()=>{ + this.uiImage = trans.gameObject.GetComponent(); + this.fromInternal.x = 0f; + }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + val = newVect.x; + int frame = (int)Mathf.Round( val ); + this.uiImage.sprite = this.sprites[ frame ]; + }; + return this; + } + + public LTDescr setCanvasMove(){ + this.type = TweenAction.CANVAS_MOVE; + this.initInternal = ()=>{ this.fromInternal = this.rectTransform.anchoredPosition3D; }; + this.easeInternal = ()=>{ this.rectTransform.anchoredPosition3D = easeMethod(); }; + return this; + } + + public LTDescr setCanvasScale(){ + this.type = TweenAction.CANVAS_SCALE; + this.initInternal = ()=>{ this.from = this.rectTransform.localScale; }; + this.easeInternal = ()=>{ this.rectTransform.localScale = easeMethod(); }; + return this; + } + + public LTDescr setCanvasSizeDelta(){ + this.type = TweenAction.CANVAS_SIZEDELTA; + this.initInternal = ()=>{ this.from = this.rectTransform.sizeDelta; }; + this.easeInternal = ()=>{ this.rectTransform.sizeDelta = easeMethod(); }; + return this; + } + #endif + + private void callback(){ newVect = easeMethod(); val = newVect.x; } + + public LTDescr setCallback(){ + this.type = TweenAction.CALLBACK; + this.initInternal = ()=>{}; + this.easeInternal = this.callback; + return this; + } + public LTDescr setValue3(){ + this.type = TweenAction.VALUE3; + this.initInternal = ()=>{}; + this.easeInternal = this.callback; + return this; + } + + public LTDescr setMove(){ + this.type = TweenAction.MOVE; + this.initInternal = ()=>{ this.from = trans.position; }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + trans.position = newVect; + }; + return this; + } + + public LTDescr setMoveLocal(){ + this.type = TweenAction.MOVE_LOCAL; + this.initInternal = ()=>{ this.from = trans.localPosition; }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + trans.localPosition = newVect; + }; + return this; + } + + public LTDescr setMoveToTransform(){ + this.type = TweenAction.MOVE_TO_TRANSFORM; + this.initInternal = ()=>{ this.from = trans.position; }; + this.easeInternal = ()=>{ + this.to = this._optional.toTrans.position; + this.diff = this.to - this.from; + this.diffDiv2 = this.diff * 0.5f; + + newVect = easeMethod(); + this.trans.position = newVect; + }; + return this; + } + + public LTDescr setRotate(){ + this.type = TweenAction.ROTATE; + this.initInternal = ()=>{ this.from = trans.eulerAngles; this.to = new Vector3(LeanTween.closestRot( this.fromInternal.x, this.toInternal.x), LeanTween.closestRot( this.from.y, this.to.y), LeanTween.closestRot( this.from.z, this.to.z)); }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + trans.eulerAngles = newVect; + }; + return this; + } + + public LTDescr setRotateLocal(){ + this.type = TweenAction.ROTATE_LOCAL; + this.initInternal = ()=>{ this.from = trans.localEulerAngles; this.to = new Vector3(LeanTween.closestRot( this.fromInternal.x, this.toInternal.x), LeanTween.closestRot( this.from.y, this.to.y), LeanTween.closestRot( this.from.z, this.to.z)); }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + trans.localEulerAngles = newVect; + }; + return this; + } + + public LTDescr setScale(){ + this.type = TweenAction.SCALE; + this.initInternal = ()=>{ this.from = trans.localScale; }; + this.easeInternal = ()=>{ + newVect = easeMethod(); + trans.localScale = newVect; + }; + return this; + } + + public LTDescr setGUIMove(){ + this.type = TweenAction.GUI_MOVE; + this.initInternal = ()=>{ this.from = new Vector3(this._optional.ltRect.rect.x, this._optional.ltRect.rect.y, 0); }; + this.easeInternal = ()=>{ Vector3 v = easeMethod(); this._optional.ltRect.rect = new Rect( v.x, v.y, this._optional.ltRect.rect.width, this._optional.ltRect.rect.height); }; + return this; + } + + public LTDescr setGUIMoveMargin(){ + this.type = TweenAction.GUI_MOVE_MARGIN; + this.initInternal = ()=>{ this.from = new Vector2(this._optional.ltRect.margin.x, this._optional.ltRect.margin.y); }; + this.easeInternal = ()=>{ Vector3 v = easeMethod(); this._optional.ltRect.margin = new Vector2(v.x, v.y); }; + return this; + } + + public LTDescr setGUIScale(){ + this.type = TweenAction.GUI_SCALE; + this.initInternal = ()=>{ this.from = new Vector3(this._optional.ltRect.rect.width, this._optional.ltRect.rect.height, 0); }; + this.easeInternal = ()=>{ Vector3 v = easeMethod(); this._optional.ltRect.rect = new Rect( this._optional.ltRect.rect.x, this._optional.ltRect.rect.y, v.x, v.y); }; + return this; + } + + public LTDescr setGUIAlpha(){ + this.type = TweenAction.GUI_ALPHA; + this.initInternal = ()=>{ this.fromInternal.x = this._optional.ltRect.alpha; }; + this.easeInternal = ()=>{ this._optional.ltRect.alpha = easeMethod().x; }; + return this; + } + + public LTDescr setGUIRotate(){ + this.type = TweenAction.GUI_ROTATE; + this.initInternal = ()=>{ if(this._optional.ltRect.rotateEnabled==false){ + this._optional.ltRect.rotateEnabled = true; + this._optional.ltRect.resetForRotation(); + } + + this.fromInternal.x = this._optional.ltRect.rotation; + }; + this.easeInternal = ()=>{ this._optional.ltRect.rotation = easeMethod().x; }; + return this; + } + + public LTDescr setDelayedSound(){ + this.type = TweenAction.DELAYED_SOUND; + this.initInternal = ()=>{ this.hasExtraOnCompletes = true; }; + this.easeInternal = this.callback; + return this; + } + + private void init(){ + this.hasInitiliazed = true; + + usesNormalDt = !(useEstimatedTime || useManualTime || useFrames); // only set this to true if it uses non of the other timing modes + + if (useFrames) + this.optional.initFrameCount = Time.frameCount; + + if (this.time <= 0f) // avoid dividing by zero + this.time = Mathf.Epsilon; + + this.initInternal(); + + this.diff = this.to - this.from; + this.diffDiv2 = this.diff * 0.5f; + + if (this._optional.onStart != null) + this._optional.onStart(); + + if(this.onCompleteOnStart) + callOnCompletes(); + + if(this.speed>=0){ + initSpeed(); + } + } + + private void initSpeed(){ + if(this.type==TweenAction.MOVE_CURVED || this.type==TweenAction.MOVE_CURVED_LOCAL){ + this.time = this._optional.path.distance / this.speed; + }else if(this.type==TweenAction.MOVE_SPLINE || this.type==TweenAction.MOVE_SPLINE_LOCAL){ + this.time = this._optional.spline.distance/ this.speed; + }else{ + this.time = (this.to - this.from).magnitude / this.speed; + } + } + + public static float val; + public static float dt; + public static Vector3 newVect; + + /** + * If you need a tween to happen immediately instead of waiting for the next Update call, you can force it with this method + * + * @method updateNow + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 0f ).updateNow(); + */ + public LTDescr updateNow(){ + updateInternal(); + return this; + } + + public bool updateInternal(){ + + float directionLocal = this.direction; + if(this.usesNormalDt){ + dt = LeanTween.dtActual; + }else if( this.useEstimatedTime ){ + dt = LeanTween.dtEstimated; + }else if( this.useFrames ){ + dt = this.optional.initFrameCount==0 ? 0 : 1; + this.optional.initFrameCount = Time.frameCount; + }else if( this.useManualTime ){ + dt = LeanTween.dtManual; + } + +// Debug.Log ("tween:" + this+ " dt:"+dt); + if(this.delay<=0f && directionLocal!=0f){ + if(trans==null) + return true; + + // initialize if has not done so yet + if(!this.hasInitiliazed) + this.init(); + + dt = dt*directionLocal; + this.passed += dt; + + this.ratioPassed = Mathf.Clamp01(this.passed / this.time); // need to clamp when finished so it will finish at the exact spot and not overshoot + + this.easeInternal(); + + if(this.hasUpdateCallback) + this._optional.callOnUpdate(val, this.ratioPassed); + + bool isTweenFinished = directionLocal>0f ? this.passed>=this.time : this.passed<=0f; + // Debug.Log("lt "+this+" dt:"+dt+" fin:"+isTweenFinished); + if(isTweenFinished){ // increment or flip tween + this.loopCount--; + if(this.loopType==LeanTweenType.pingPong){ + this.direction = 0.0f-directionLocal; + }else{ + this.passed = Mathf.Epsilon; + } + + isTweenFinished = this.loopCount == 0 || this.loopType == LeanTweenType.once; // only return true if it is fully complete + + if(isTweenFinished==false && this.onCompleteOnRepeat && this.hasExtraOnCompletes) + callOnCompletes(); // this only gets called if onCompleteOnRepeat is set to true, otherwise LeanTween class takes care of calling it + + return isTweenFinished; + } + }else{ + this.delay -= dt; + } + + return false; + } + + public void callOnCompletes(){ + if(this.type==TweenAction.GUI_ROTATE) + this._optional.ltRect.rotateFinished = true; + + if(this.type==TweenAction.DELAYED_SOUND){ + AudioSource.PlayClipAtPoint((AudioClip)this._optional.onCompleteParam, this.to, this.from.x); + } + if(this._optional.onComplete!=null){ + this._optional.onComplete(); + }else if(this._optional.onCompleteObject!=null){ + this._optional.onCompleteObject(this._optional.onCompleteParam); + } + } + + // Helper Methods + + public LTDescr setFromColor( Color col ){ + this.from = new Vector3(0.0f, col.a, 0.0f); + this.diff = new Vector3(1.0f,0.0f,0.0f); + this._optional.axis = new Vector3( col.r, col.g, col.b ); + return this; + } + + private static void alphaRecursive( Transform transform, float val, bool useRecursion = true){ + Renderer renderer = transform.gameObject.GetComponent(); + if(renderer!=null){ + foreach(Material mat in renderer.materials){ + if(mat.HasProperty("_Color")){ + mat.color = new Color( mat.color.r, mat.color.g, mat.color.b, val); + }else if(mat.HasProperty("_TintColor")){ + Color col = mat.GetColor ("_TintColor"); + mat.SetColor("_TintColor", new Color( col.r, col.g, col.b, val)); + } + } + } + if(useRecursion && transform.childCount>0){ + foreach (Transform child in transform) { + alphaRecursive(child, val); + } + } + } + + private static void colorRecursive( Transform transform, Color toColor, bool useRecursion = true ){ + Renderer ren = transform.gameObject.GetComponent(); + if(ren!=null){ + foreach(Material mat in ren.materials){ + mat.color = toColor; + } + } + if(useRecursion && transform.childCount>0){ + foreach (Transform child in transform) { + colorRecursive(child, toColor); + } + } + } + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + + private static void alphaRecursive( RectTransform rectTransform, float val, int recursiveLevel = 0){ + if(rectTransform.childCount>0){ + foreach (RectTransform child in rectTransform) { + UnityEngine.UI.MaskableGraphic uiImage = child.GetComponent(); + if (uiImage != null) { + Color c = uiImage.color; c.a = val; uiImage.color = c; + } else { + uiImage = child.GetComponent(); + if (uiImage != null) { + Color c = uiImage.color; c.a = val; uiImage.color = c; + } + } + + alphaRecursive(child, val, recursiveLevel + 1); + } + } + } + + private static void alphaRecursiveSprite( Transform transform, float val ){ + if(transform.childCount>0){ + foreach (Transform child in transform) { + SpriteRenderer ren = child.GetComponent(); + if(ren!=null) + ren.color = new Color( ren.color.r, ren.color.g, ren.color.b, val); + alphaRecursiveSprite(child, val); + } + } + } + + private static void colorRecursiveSprite( Transform transform, Color toColor ){ + if(transform.childCount>0){ + foreach (Transform child in transform) { + SpriteRenderer ren = transform.gameObject.GetComponent(); + if(ren!=null) + ren.color = toColor; + colorRecursiveSprite(child, toColor); + } + } + } + + private static void colorRecursive( RectTransform rectTransform, Color toColor ){ + + if(rectTransform.childCount>0){ + foreach (RectTransform child in rectTransform) { + UnityEngine.UI.MaskableGraphic uiImage = child.GetComponent(); + if (uiImage != null) { + uiImage.color = toColor; + } else { + uiImage = child.GetComponent(); + if (uiImage != null) + uiImage.color = toColor; + } + colorRecursive(child, toColor); + } + } + } + + private static void textAlphaRecursive( Transform trans, float val, bool useRecursion = true ){ + UnityEngine.UI.Text uiText = trans.gameObject.GetComponent(); + if(uiText!=null){ + Color c = uiText.color; + c.a = val; + uiText.color = c; + } + if(useRecursion && trans.childCount>0){ + foreach (Transform child in trans) { + textAlphaRecursive(child, val); + } + } + } + + private static void textColorRecursive(Transform trans, Color toColor ){ + if(trans.childCount>0){ + foreach (Transform child in trans) { + UnityEngine.UI.Text uiText = child.gameObject.GetComponent(); + if(uiText!=null){ + uiText.color = toColor; + } + textColorRecursive(child, toColor); + } + } + } + #endif + + private static Color tweenColor( LTDescr tween, float val ){ + Vector3 diff3 = tween._optional.point - tween._optional.axis; + float diffAlpha = tween.to.y - tween.from.y; + return new Color(tween._optional.axis.x + diff3.x*val, tween._optional.axis.y + diff3.y*val, tween._optional.axis.z + diff3.z*val, tween.from.y + diffAlpha*val); + } + + /** + * Pause a tween + * + * @method pause + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public LTDescr pause(){ + if(this.direction != 0.0f){ // check if tween is already paused + this.directionLast = this.direction; + this.direction = 0.0f; + } + + return this; + } + + /** + * Resume a paused tween + * + * @method resume + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public LTDescr resume(){ + this.direction = this.directionLast; + + return this; + } + + public LTDescr setAxis( Vector3 axis ){ + this._optional.axis = axis; + return this; + } + + /** + * Delay the start of a tween + * + * @method setDelay + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setDelay( 1.5f ); + */ + public LTDescr setDelay( float delay ){ + this.delay = delay; + + return this; + } + + /** + * Set the type of easing used for the tween.
    + * + * + * @method setEase + * @param {LeanTweenType} easeType:LeanTweenType the easing type to use + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeInBounce ); + */ + public LTDescr setEase( LeanTweenType easeType ){ + + switch( easeType ){ + case LeanTweenType.linear: + setEaseLinear(); break; + case LeanTweenType.easeOutQuad: + setEaseOutQuad(); break; + case LeanTweenType.easeInQuad: + setEaseInQuad(); break; + case LeanTweenType.easeInOutQuad: + setEaseInOutQuad(); break; + case LeanTweenType.easeInCubic: + setEaseInCubic();break; + case LeanTweenType.easeOutCubic: + setEaseOutCubic(); break; + case LeanTweenType.easeInOutCubic: + setEaseInOutCubic(); break; + case LeanTweenType.easeInQuart: + setEaseInQuart(); break; + case LeanTweenType.easeOutQuart: + setEaseOutQuart(); break; + case LeanTweenType.easeInOutQuart: + setEaseInOutQuart(); break; + case LeanTweenType.easeInQuint: + setEaseInQuint(); break; + case LeanTweenType.easeOutQuint: + setEaseOutQuint(); break; + case LeanTweenType.easeInOutQuint: + setEaseInOutQuint(); break; + case LeanTweenType.easeInSine: + setEaseInSine(); break; + case LeanTweenType.easeOutSine: + setEaseOutSine(); break; + case LeanTweenType.easeInOutSine: + setEaseInOutSine(); break; + case LeanTweenType.easeInExpo: + setEaseInExpo(); break; + case LeanTweenType.easeOutExpo: + setEaseOutExpo(); break; + case LeanTweenType.easeInOutExpo: + setEaseInOutExpo(); break; + case LeanTweenType.easeInCirc: + setEaseInCirc(); break; + case LeanTweenType.easeOutCirc: + setEaseOutCirc(); break; + case LeanTweenType.easeInOutCirc: + setEaseInOutCirc(); break; + case LeanTweenType.easeInBounce: + setEaseInBounce(); break; + case LeanTweenType.easeOutBounce: + setEaseOutBounce(); break; + case LeanTweenType.easeInOutBounce: + setEaseInOutBounce(); break; + case LeanTweenType.easeInBack: + setEaseInBack(); break; + case LeanTweenType.easeOutBack: + setEaseOutBack(); break; + case LeanTweenType.easeInOutBack: + setEaseInOutBack(); break; + case LeanTweenType.easeInElastic: + setEaseInElastic(); break; + case LeanTweenType.easeOutElastic: + setEaseOutElastic(); break; + case LeanTweenType.easeInOutElastic: + setEaseInOutElastic(); break; + case LeanTweenType.punch: + setEasePunch(); break; + case LeanTweenType.easeShake: + setEaseShake(); break; + case LeanTweenType.easeSpring: + setEaseSpring(); break; + default: + setEaseLinear(); break; + } + + return this; + } + + public LTDescr setEaseLinear(){ this.tweenType = LeanTweenType.linear; this.easeMethod = this.easeLinear; return this; } + + public LTDescr setEaseSpring(){ this.tweenType = LeanTweenType.easeSpring; this.easeMethod = this.easeSpring; return this; } + + public LTDescr setEaseInQuad(){ this.tweenType = LeanTweenType.easeInQuad; this.easeMethod = this.easeInQuad; return this; } + + public LTDescr setEaseOutQuad(){ this.tweenType = LeanTweenType.easeOutQuad; this.easeMethod = this.easeOutQuad; return this; } + + public LTDescr setEaseInOutQuad(){ this.tweenType = LeanTweenType.easeInOutQuad; this.easeMethod = this.easeInOutQuad; return this;} + + public LTDescr setEaseInCubic(){ this.tweenType = LeanTweenType.easeInCubic; this.easeMethod = this.easeInCubic; return this; } + + public LTDescr setEaseOutCubic(){ this.tweenType = LeanTweenType.easeOutCubic; this.easeMethod = this.easeOutCubic; return this; } + + public LTDescr setEaseInOutCubic(){ this.tweenType = LeanTweenType.easeInOutCubic; this.easeMethod = this.easeInOutCubic; return this; } + + public LTDescr setEaseInQuart(){ this.tweenType = LeanTweenType.easeInQuart; this.easeMethod = this.easeInQuart; return this; } + + public LTDescr setEaseOutQuart(){ this.tweenType = LeanTweenType.easeOutQuart; this.easeMethod = this.easeOutQuart; return this; } + + public LTDescr setEaseInOutQuart(){ this.tweenType = LeanTweenType.easeInOutQuart; this.easeMethod = this.easeInOutQuart; return this; } + + public LTDescr setEaseInQuint(){ this.tweenType = LeanTweenType.easeInQuint; this.easeMethod = this.easeInQuint; return this; } + + public LTDescr setEaseOutQuint(){ this.tweenType = LeanTweenType.easeOutQuint; this.easeMethod = this.easeOutQuint; return this; } + + public LTDescr setEaseInOutQuint(){ this.tweenType = LeanTweenType.easeInOutQuint; this.easeMethod = this.easeInOutQuint; return this; } + + public LTDescr setEaseInSine(){ this.tweenType = LeanTweenType.easeInSine; this.easeMethod = this.easeInSine; return this; } + + public LTDescr setEaseOutSine(){ this.tweenType = LeanTweenType.easeOutSine; this.easeMethod = this.easeOutSine; return this; } + + public LTDescr setEaseInOutSine(){ this.tweenType = LeanTweenType.easeInOutSine; this.easeMethod = this.easeInOutSine; return this; } + + public LTDescr setEaseInExpo(){ this.tweenType = LeanTweenType.easeInExpo; this.easeMethod = this.easeInExpo; return this; } + + public LTDescr setEaseOutExpo(){ this.tweenType = LeanTweenType.easeOutExpo; this.easeMethod = this.easeOutExpo; return this; } + + public LTDescr setEaseInOutExpo(){ this.tweenType = LeanTweenType.easeInOutExpo; this.easeMethod = this.easeInOutExpo; return this; } + + public LTDescr setEaseInCirc(){ this.tweenType = LeanTweenType.easeInCirc; this.easeMethod = this.easeInCirc; return this; } + + public LTDescr setEaseOutCirc(){ this.tweenType = LeanTweenType.easeOutCirc; this.easeMethod = this.easeOutCirc; return this; } + + public LTDescr setEaseInOutCirc(){ this.tweenType = LeanTweenType.easeInOutCirc; this.easeMethod = this.easeInOutCirc; return this; } + + public LTDescr setEaseInBounce(){ this.tweenType = LeanTweenType.easeInBounce; this.easeMethod = this.easeInBounce; return this; } + + public LTDescr setEaseOutBounce(){ this.tweenType = LeanTweenType.easeOutBounce; this.easeMethod = this.easeOutBounce; return this; } + + public LTDescr setEaseInOutBounce(){ this.tweenType = LeanTweenType.easeInOutBounce; this.easeMethod = this.easeInOutBounce; return this; } + + public LTDescr setEaseInBack(){ this.tweenType = LeanTweenType.easeInBack; this.easeMethod = this.easeInBack; return this; } + + public LTDescr setEaseOutBack(){ this.tweenType = LeanTweenType.easeOutBack; this.easeMethod = this.easeOutBack; return this; } + + public LTDescr setEaseInOutBack(){ this.tweenType = LeanTweenType.easeInOutBack; this.easeMethod = this.easeInOutBack; return this; } + + public LTDescr setEaseInElastic(){ this.tweenType = LeanTweenType.easeInElastic; this.easeMethod = this.easeInElastic; return this; } + + public LTDescr setEaseOutElastic(){ this.tweenType = LeanTweenType.easeOutElastic; this.easeMethod = this.easeOutElastic; return this; } + + public LTDescr setEaseInOutElastic(){ this.tweenType = LeanTweenType.easeInOutElastic; this.easeMethod = this.easeInOutElastic; return this; } + + public LTDescr setEasePunch(){ this._optional.animationCurve = LeanTween.punch; this.toInternal.x = this.from.x + this.to.x; this.easeMethod = this.tweenOnCurve; return this; } + + public LTDescr setEaseShake(){ this._optional.animationCurve = LeanTween.shake; this.toInternal.x = this.from.x + this.to.x; this.easeMethod = this.tweenOnCurve; return this; } + + private Vector3 tweenOnCurve(){ + return new Vector3(this.from.x + (this.diff.x) * this._optional.animationCurve.Evaluate(ratioPassed), + this.from.y + (this.diff.y) * this._optional.animationCurve.Evaluate(ratioPassed), + this.from.z + (this.diff.z) * this._optional.animationCurve.Evaluate(ratioPassed) ); + } + + // Vector3 Ease Methods + + private Vector3 easeInOutQuad(){ + val = this.ratioPassed * 2f; + + if (val < 1f) { + val = val * val; + return new Vector3( this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + val = (1f-val) * (val - 3f) + 1f; + return new Vector3( this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInQuad(){ + val = ratioPassed * ratioPassed; + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeOutQuad(){ + val = this.ratioPassed; + val = -val * (val - 2f); + return (this.diff * val + this.from); + } + + private Vector3 easeLinear(){ + val = this.ratioPassed; + return new Vector3(this.from.x+this.diff.x*val, this.from.y+this.diff.y*val, this.from.z+this.diff.z*val); + } + + private Vector3 easeSpring(){ + val = Mathf.Clamp01(this.ratioPassed); + val = (Mathf.Sin(val * Mathf.PI * (0.2f + 2.5f * val * val * val)) * Mathf.Pow(1f - val, 2.2f ) + val) * (1f + (1.2f * (1f - val) )); + return this.from + this.diff * val; + } + + private Vector3 easeInCubic(){ + val = this.ratioPassed * this.ratioPassed * this.ratioPassed; + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeOutCubic(){ + val = this.ratioPassed - 1f; + val = (val * val * val + 1); + return new Vector3( this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z) ; + } + + private Vector3 easeInOutCubic(){ + val = this.ratioPassed * 2f; + if (val < 1f) { + val = val * val * val; + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + val -= 2f; + val = val * val * val + 2f; + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y,this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInQuart(){ + val = this.ratioPassed * this.ratioPassed * this.ratioPassed * this.ratioPassed; + return diff * val + this.from; + } + + private Vector3 easeOutQuart(){ + val = this.ratioPassed - 1f; + val = -(val * val * val * val - 1); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y,this.diff.z * val + this.from.z); + } + + private Vector3 easeInOutQuart(){ + val = this.ratioPassed * 2f; + if (val < 1f) { + val = val * val * val * val; + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + val -= 2f; +// val = (val * val * val * val - 2f); + return -this.diffDiv2 * (val * val * val * val - 2f) + this.from; + } + + private Vector3 easeInQuint(){ + val = this.ratioPassed; + val = val * val * val * val * val; + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeOutQuint(){ + val = this.ratioPassed - 1f; + val = (val * val * val * val * val + 1f); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeInOutQuint(){ + val = this.ratioPassed * 2f; + if (val < 1f){ + val = val * val * val * val * val; + return new Vector3(this.diffDiv2.x * val + this.from.x,this.diffDiv2.y * val + this.from.y,this.diffDiv2.z * val + this.from.z); + } + val -= 2f; + val = (val * val * val * val * val + 2f); + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInSine(){ + val = - Mathf.Cos(this.ratioPassed * LeanTween.PI_DIV2); + return new Vector3(this.diff.x * val + this.diff.x + this.from.x, this.diff.y * val + this.diff.y + this.from.y, this.diff.z * val + this.diff.z + this.from.z); + } + + private Vector3 easeOutSine(){ + val = Mathf.Sin(this.ratioPassed * LeanTween.PI_DIV2); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y,this.diff.z * val + this.from.z); + } + + private Vector3 easeInOutSine(){ + val = -(Mathf.Cos(Mathf.PI * this.ratioPassed) - 1f); + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInExpo(){ + val = Mathf.Pow(2f, 10f * (this.ratioPassed - 1f)); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeOutExpo(){ + val = (-Mathf.Pow(2f, -10f * this.ratioPassed) + 1f); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeInOutExpo(){ + val = this.ratioPassed * 2f; + val = Mathf.Pow(2f, 10f * (val - 1f)); + if (val < 1f) + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + val--; + val = (-Mathf.Pow(2f, -10f * val) + 2f); + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInCirc(){ + val = -(Mathf.Sqrt(1f - this.ratioPassed * this.ratioPassed) - 1f); + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeOutCirc(){ + val = this.ratioPassed - 1f; + val = Mathf.Sqrt(1f - val * val); + + return new Vector3(this.diff.x * val + this.from.x, this.diff.y * val + this.from.y, this.diff.z * val + this.from.z); + } + + private Vector3 easeInOutCirc(){ + val = this.ratioPassed * 2f; + if (val < 1f){ + val = -(Mathf.Sqrt(1f - val * val) - 1f); + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + val -= 2f; + val = (Mathf.Sqrt(1f - val * val) + 1f); + return new Vector3(this.diffDiv2.x * val + this.from.x, this.diffDiv2.y * val + this.from.y, this.diffDiv2.z * val + this.from.z); + } + + private Vector3 easeInBounce(){ + val = this.ratioPassed; + val = 1f - val; + return new Vector3(this.diff.x - LeanTween.easeOutBounce(0, this.diff.x, val) + this.from.x, + this.diff.y - LeanTween.easeOutBounce(0, this.diff.y, val) + this.from.y, + this.diff.z - LeanTween.easeOutBounce(0, this.diff.z, val) + this.from.z); + } + + private Vector3 easeOutBounce(){ + val = ratioPassed; + if (val < (1 / 2.75f)){ + val = (7.5625f * val * val); + return this.diff * val + this.from; + }else if (val < (2 / 2.75f)){ + val -= (1.5f / 2.75f); + val = (7.5625f * (val) * val + .75f); + return this.diff * val + this.from; + }else if (val < (2.5 / 2.75)){ + val -= (2.25f / 2.75f); + val = (7.5625f * (val) * val + .9375f); + return this.diff * val + this.from; + }else{ + val -= (2.625f / 2.75f); + val = 7.5625f * (val) * val + .984375f; + return this.diff * val + this.from; + } + } + + private Vector3 easeInOutBounce(){ + val = this.ratioPassed * 2f; + if (val < 1f){ + return new Vector3(LeanTween.easeInBounce(0, this.diff.x, val) * 0.5f + this.from.x, + LeanTween.easeInBounce(0, this.diff.y, val) * 0.5f + this.from.y, + LeanTween.easeInBounce(0, this.diff.z, val) * 0.5f + this.from.z); + }else { + val = val - 1f; + return new Vector3(LeanTween.easeOutBounce(0, this.diff.x, val) * 0.5f + this.diffDiv2.x + this.from.x, + LeanTween.easeOutBounce(0, this.diff.y, val) * 0.5f + this.diffDiv2.y + this.from.y, + LeanTween.easeOutBounce(0, this.diff.z, val) * 0.5f + this.diffDiv2.z + this.from.z); + } + } + + private Vector3 easeInBack(){ + val = this.ratioPassed; + val /= 1; + float s = 1.70158f * this.overshoot; + return this.diff * (val) * val * ((s + 1) * val - s) + this.from; + } + + private Vector3 easeOutBack(){ + float s = 1.70158f * this.overshoot; + val = (this.ratioPassed / 1) - 1; + val = ((val) * val * ((s + 1) * val + s) + 1); + return this.diff * val + this.from; + } + + private Vector3 easeInOutBack(){ + float s = 1.70158f * this.overshoot; + val = this.ratioPassed * 2f; + if ((val) < 1){ + s *= (1.525f) * overshoot; + return this.diffDiv2 * (val * val * (((s) + 1) * val - s)) + this.from; + } + val -= 2; + s *= (1.525f) * overshoot; + val = ((val) * val * (((s) + 1) * val + s) + 2); + return this.diffDiv2 * val + this.from; + } + + private Vector3 easeInElastic(){ + return new Vector3(LeanTween.easeInElastic(this.from.x,this.to.x,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeInElastic(this.from.y,this.to.y,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeInElastic(this.from.z,this.to.z,this.ratioPassed,this.overshoot,this.period)); + } + + private Vector3 easeOutElastic(){ + return new Vector3(LeanTween.easeOutElastic(this.from.x,this.to.x,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeOutElastic(this.from.y,this.to.y,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeOutElastic(this.from.z,this.to.z,this.ratioPassed,this.overshoot,this.period)); + } + + private Vector3 easeInOutElastic() + { + return new Vector3(LeanTween.easeInOutElastic(this.from.x,this.to.x,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeInOutElastic(this.from.y,this.to.y,this.ratioPassed,this.overshoot,this.period), + LeanTween.easeInOutElastic(this.from.z,this.to.z,this.ratioPassed,this.overshoot,this.period)); + } + + /** + * Set how far past a tween will overshoot for certain ease types (compatible: easeInBack, easeInOutBack, easeOutBack, easeOutElastic, easeInElastic, easeInOutElastic).
    + * @method setOvershoot + * @param {float} overshoot:float how far past the destination it will go before settling in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeOutBack ).setOvershoot(2f); + */ + public LTDescr setOvershoot( float overshoot ){ + this.overshoot = overshoot; + return this; + } + + /** + * Set how short the iterations are for certain ease types (compatible: easeOutElastic, easeInElastic, easeInOutElastic).
    + * @method setPeriod + * @param {float} period:float how short the iterations are that the tween will animate at (default 0.3f) + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeOutElastic ).setPeriod(0.3f); + */ + public LTDescr setPeriod( float period ){ + this.period = period; + return this; + } + + /** + * Set how large the effect is for certain ease types (compatible: punch, shake, animation curves).
    + * @method setScale + * @param {float} scale:float how much the ease will be multiplied by (default 1f) + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.punch ).setScale(2f); + */ + public LTDescr setScale( float scale ){ + this.scale = scale; + return this; + } + + /** + * Set the type of easing used for the tween with a custom curve.
    + * @method setEase (AnimationCurve) + * @param {AnimationCurve} easeDefinition:AnimationCurve an AnimationCure that describes the type of easing you want, this is great for when you want a unique type of movement + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setEase( LeanTweenType.easeInBounce ); + */ + public LTDescr setEase( AnimationCurve easeCurve ){ + this._optional.animationCurve = easeCurve; + this.easeMethod = this.tweenOnCurve; + this.tweenType = LeanTweenType.animationCurve; + return this; + } + + /** + * Set the end that the GameObject is tweening towards + * @method setTo + * @param {Vector3} to:Vector3 point at which you want the tween to reach + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LTDescr descr = LeanTween.move( cube, Vector3.up, new Vector3(1f,3f,0f), 1.0f ).setEase( LeanTweenType.easeInOutBounce );
    + * // Later your want to change your destination or your destiation is constantly moving
    + * descr.setTo( new Vector3(5f,10f,3f) );
    + */ + public LTDescr setTo( Vector3 to ){ + if(this.hasInitiliazed){ + this.to = to; + this.diff = to - this.from; + }else{ + this.to = to; + } + + return this; + } + + public LTDescr setTo( Transform to ){ + this._optional.toTrans = to; + return this; + } + + /** + * Set the beginning of the tween + * @method setFrom + * @param {Vector3} from:Vector3 the point you would like the tween to start at + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LTDescr descr = LeanTween.move( cube, Vector3.up, new Vector3(1f,3f,0f), 1.0f ).setFrom( new Vector3(5f,10f,3f) );
    + */ + public LTDescr setFrom( Vector3 from ){ + if(this.trans){ + this.init(); + } + this.from = from; + // this.hasInitiliazed = true; // this is set, so that the "from" value isn't overwritten later on when the tween starts + this.diff = this.to - this.from; + return this; + } + + public LTDescr setFrom( float from ){ + return setFrom( new Vector3(from, 0f, 0f) ); + } + + public LTDescr setDiff( Vector3 diff ){ + this.diff = diff; + return this; + } + + public LTDescr setHasInitialized( bool has ){ + this.hasInitiliazed = has; + return this; + } + + public LTDescr setId( uint id ){ + this._id = id; + this.counter = global_counter; + // Debug.Log("Global counter:"+global_counter); + return this; + } + + /** + * Set the finish time of the tween + * @method setTime + * @param {float} finishTime:float the length of time in seconds you wish the tween to complete in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * int tweenId = LeanTween.moveX(gameObject, 5f, 2.0f ).id;
    + * // Later
    + * LTDescr descr = description( tweenId );
    + * descr.setTime( 1f );
    + */ + public LTDescr setTime( float time ){ + float passedTimeRatio = this.passed / this.time; + this.passed = time * passedTimeRatio; + this.time = time; + return this; + } + + /** + * Set the finish time of the tween + * @method setSpeed + * @param {float} speed:float the speed in unity units per second you wish the object to travel (overrides the given time) + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveLocalZ( gameObject, 10f, 1f).setSpeed(0.2f) // the given time is ignored when speed is set
    + */ + public LTDescr setSpeed( float speed ){ + this.speed = speed; + if(this.hasInitiliazed) + initSpeed(); + return this; + } + + /** + * Set the tween to repeat a number of times. + * @method setRepeat + * @param {int} repeatNum:int the number of times to repeat the tween. -1 to repeat infinite times + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 10 ).setLoopPingPong(); + */ + public LTDescr setRepeat( int repeat ){ + this.loopCount = repeat; + if((repeat>1 && this.loopType == LeanTweenType.once) || (repeat < 0 && this.loopType == LeanTweenType.once)){ + this.loopType = LeanTweenType.clamp; + } + if(this.type==TweenAction.CALLBACK || this.type==TweenAction.CALLBACK_COLOR){ + this.setOnCompleteOnRepeat(true); + } + return this; + } + + public LTDescr setLoopType( LeanTweenType loopType ){ + this.loopType = loopType; + return this; + } + + public LTDescr setUseEstimatedTime( bool useEstimatedTime ){ + this.useEstimatedTime = useEstimatedTime; + this.usesNormalDt = false; + return this; + } + + /** + * Set ignore time scale when tweening an object when you want the animation to be time-scale independent (ignores the Time.timeScale value). Great for pause screens, when you want all other action to be stopped (or slowed down) + * @method setIgnoreTimeScale + * @param {bool} useUnScaledTime:bool whether to use the unscaled time or not + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 2 ).setIgnoreTimeScale( true ); + */ + public LTDescr setIgnoreTimeScale( bool useUnScaledTime ){ + this.useEstimatedTime = useUnScaledTime; + this.usesNormalDt = false; + return this; + } + + /** + * Use frames when tweening an object, when you don't want the animation to be time-frame independent... + * @method setUseFrames + * @param {bool} useFrames:bool whether to use estimated time or not + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setRepeat( 2 ).setUseFrames( true ); + */ + public LTDescr setUseFrames( bool useFrames ){ + this.useFrames = useFrames; + this.usesNormalDt = false; + return this; + } + + public LTDescr setUseManualTime( bool useManualTime ){ + this.useManualTime = useManualTime; + this.usesNormalDt = false; + return this; + } + + public LTDescr setLoopCount( int loopCount ){ + this.loopType = LeanTweenType.clamp; + this.loopCount = loopCount; + return this; + } + + /** + * No looping involved, just run once (the default) + * @method setLoopOnce + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopOnce(); + */ + public LTDescr setLoopOnce(){ this.loopType = LeanTweenType.once; return this; } + + /** + * When the animation gets to the end it starts back at where it began + * @method setLoopClamp + * @param {int} loops:int (defaults to -1) how many times you want the loop to happen (-1 for an infinite number of times) + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopClamp( 2 ); + */ + public LTDescr setLoopClamp(){ + this.loopType = LeanTweenType.clamp; + if(this.loopCount==0) + this.loopCount = -1; + return this; + } + public LTDescr setLoopClamp( int loops ){ + this.loopCount = loops; + return this; + } + + /** + * When the animation gets to the end it then tweens back to where it started (and on, and on) + * @method setLoopPingPong + * @param {int} loops:int (defaults to -1) how many times you want the loop to happen in both directions (-1 for an infinite number of times). Passing a value of 1 will cause the object to go towards and back from it's destination once. + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setLoopPingPong( 2 ); + */ + public LTDescr setLoopPingPong(){ + this.loopType = LeanTweenType.pingPong; + if(this.loopCount==0) + this.loopCount = -1; + return this; + } + public LTDescr setLoopPingPong( int loops ) { + this.loopType = LeanTweenType.pingPong; + this.loopCount = loops == -1 ? loops : loops * 2; + return this; + } + + /** + * Have a method called when the tween finishes + * @method setOnComplete + * @param {Action} onComplete:Action the method that should be called when the tween is finished ex: tweenFinished(){ } + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnComplete( tweenFinished ); + */ + public LTDescr setOnComplete( Action onComplete ){ + this._optional.onComplete = onComplete; + this.hasExtraOnCompletes = true; + return this; + } + + /** + * Have a method called when the tween finishes + * @method setOnComplete (object) + * @param {Action} onComplete:Action the method that should be called when the tween is finished ex: tweenFinished( object myObj ){ } + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnComplete( tweenFinished ); + */ + public LTDescr setOnComplete( Action onComplete ){ + this._optional.onCompleteObject = onComplete; + this.hasExtraOnCompletes = true; + return this; + } + public LTDescr setOnComplete( Action onComplete, object onCompleteParam ){ + this._optional.onCompleteObject = onComplete; + this.hasExtraOnCompletes = true; + if(onCompleteParam!=null) + this._optional.onCompleteParam = onCompleteParam; + return this; + } + + /** + * Pass an object to along with the onComplete Function + * @method setOnCompleteParam + * @param {object} onComplete:object an object that + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.delayedCall(1.5f, enterMiniGameStart).setOnCompleteParam( new object[]{""+5} );

    + * void enterMiniGameStart( object val ){
    + *  object[] arr = (object [])val;
    + *  int lvl = int.Parse((string)arr[0]);
    + * }
    + */ + public LTDescr setOnCompleteParam( object onCompleteParam ){ + this._optional.onCompleteParam = onCompleteParam; + this.hasExtraOnCompletes = true; + return this; + } + + + /** + * Have a method called on each frame that the tween is being animated (passes a float value) + * @method setOnUpdate + * @param {Action} onUpdate:Action a method that will be called on every frame with the float value of the tweened object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved );
    + *
    + * void tweenMoved( float val ){ }
    + */ + public LTDescr setOnUpdate( Action onUpdate ){ + this._optional.onUpdateFloat = onUpdate; + this.hasUpdateCallback = true; + return this; + } + public LTDescr setOnUpdateRatio(Action onUpdate) + { + this._optional.onUpdateFloatRatio = onUpdate; + this.hasUpdateCallback = true; + return this; + } + + public LTDescr setOnUpdateObject( Action onUpdate ){ + this._optional.onUpdateFloatObject = onUpdate; + this.hasUpdateCallback = true; + return this; + } + public LTDescr setOnUpdateVector2( Action onUpdate ){ + this._optional.onUpdateVector2 = onUpdate; + this.hasUpdateCallback = true; + return this; + } + public LTDescr setOnUpdateVector3( Action onUpdate ){ + this._optional.onUpdateVector3 = onUpdate; + this.hasUpdateCallback = true; + return this; + } + public LTDescr setOnUpdateColor( Action onUpdate ){ + this._optional.onUpdateColor = onUpdate; + this.hasUpdateCallback = true; + return this; + } + public LTDescr setOnUpdateColor( Action onUpdate ){ + this._optional.onUpdateColorObject = onUpdate; + this.hasUpdateCallback = true; + return this; + } + + #if !UNITY_FLASH + + public LTDescr setOnUpdate( Action onUpdate ){ + this._optional.onUpdateColor = onUpdate; + this.hasUpdateCallback = true; + return this; + } + + public LTDescr setOnUpdate( Action onUpdate ){ + this._optional.onUpdateColorObject = onUpdate; + this.hasUpdateCallback = true; + return this; + } + + /** + * Have a method called on each frame that the tween is being animated (passes a float value and a object) + * @method setOnUpdate (object) + * @param {Action} onUpdate:Action a method that will be called on every frame with the float value of the tweened object, and an object of the person's choosing + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved ).setOnUpdateParam( myObject );
    + *
    + * void tweenMoved( float val, object obj ){ }
    + */ + public LTDescr setOnUpdate( Action onUpdate, object onUpdateParam = null ){ + this._optional.onUpdateFloatObject = onUpdate; + this.hasUpdateCallback = true; + if(onUpdateParam!=null) + this._optional.onUpdateParam = onUpdateParam; + return this; + } + + public LTDescr setOnUpdate( Action onUpdate, object onUpdateParam = null ){ + this._optional.onUpdateVector3Object = onUpdate; + this.hasUpdateCallback = true; + if(onUpdateParam!=null) + this._optional.onUpdateParam = onUpdateParam; + return this; + } + + public LTDescr setOnUpdate( Action onUpdate, object onUpdateParam = null ){ + this._optional.onUpdateVector2 = onUpdate; + this.hasUpdateCallback = true; + if(onUpdateParam!=null) + this._optional.onUpdateParam = onUpdateParam; + return this; + } + + /** + * Have a method called on each frame that the tween is being animated (passes a float value) + * @method setOnUpdate (Vector3) + * @param {Action} onUpdate:Action a method that will be called on every frame with the float value of the tweened object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved );
    + *
    + * void tweenMoved( Vector3 val ){ }
    + */ + public LTDescr setOnUpdate( Action onUpdate, object onUpdateParam = null ){ + this._optional.onUpdateVector3 = onUpdate; + this.hasUpdateCallback = true; + if(onUpdateParam!=null) + this._optional.onUpdateParam = onUpdateParam; + return this; + } + #endif + + + /** + * Have an object passed along with the onUpdate method + * @method setOnUpdateParam + * @param {object} onUpdateParam:object an object that will be passed along with the onUpdate method + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnUpdate( tweenMoved ).setOnUpdateParam( myObject );
    + *
    + * void tweenMoved( float val, object obj ){ }
    + */ + public LTDescr setOnUpdateParam( object onUpdateParam ){ + this._optional.onUpdateParam = onUpdateParam; + return this; + } + + /** + * While tweening along a curve, set this property to true, to be perpendicalur to the path it is moving upon + * @method setOrientToPath + * @param {bool} doesOrient:bool whether the gameobject will orient to the path it is animating along + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.move( ltLogo, path, 1.0f ).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true).setAxis(Vector3.forward);
    + */ + public LTDescr setOrientToPath( bool doesOrient ){ + if(this.type==TweenAction.MOVE_CURVED || this.type==TweenAction.MOVE_CURVED_LOCAL){ + if(this._optional.path==null) + this._optional.path = new LTBezierPath(); + this._optional.path.orientToPath = doesOrient; + }else{ + this._optional.spline.orientToPath = doesOrient; + } + return this; + } + + /** + * While tweening along a curve, set this property to true, to be perpendicalur to the path it is moving upon + * @method setOrientToPath2d + * @param {bool} doesOrient:bool whether the gameobject will orient to the path it is animating along + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.move( ltLogo, path, 1.0f ).setEase(LeanTweenType.easeOutQuad).setOrientToPath2d(true).setAxis(Vector3.forward);
    + */ + public LTDescr setOrientToPath2d( bool doesOrient2d ){ + setOrientToPath(doesOrient2d); + if(this.type==TweenAction.MOVE_CURVED || this.type==TweenAction.MOVE_CURVED_LOCAL){ + this._optional.path.orientToPath2d = doesOrient2d; + }else{ + this._optional.spline.orientToPath2d = doesOrient2d; + } + return this; + } + + public LTDescr setRect( LTRect rect ){ + this._optional.ltRect = rect; + return this; + } + + public LTDescr setRect( Rect rect ){ + this._optional.ltRect = new LTRect(rect); + return this; + } + + public LTDescr setPath( LTBezierPath path ){ + this._optional.path = path; + return this; + } + + /** + * Set the point at which the GameObject will be rotated around + * @method setPoint + * @param {Vector3} point:Vector3 point at which you want the object to rotate around (local space) + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.rotateAround( cube, Vector3.up, 360.0f, 1.0f ) .setPoint( new Vector3(1f,0f,0f) ) .setEase( LeanTweenType.easeInOutBounce );
    + */ + public LTDescr setPoint( Vector3 point ){ + this._optional.point = point; + return this; + } + + public LTDescr setDestroyOnComplete( bool doesDestroy ){ + this.destroyOnComplete = doesDestroy; + return this; + } + + public LTDescr setAudio( object audio ){ + this._optional.onCompleteParam = audio; + return this; + } + + /** + * Set the onComplete method to be called at the end of every loop cycle (also applies to the delayedCall method) + * @method setOnCompleteOnRepeat + * @param {bool} isOn:bool does call onComplete on every loop cycle + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.delayedCall(gameObject,0.3f, delayedMethod).setRepeat(4).setOnCompleteOnRepeat(true); + */ + public LTDescr setOnCompleteOnRepeat( bool isOn ){ + this.onCompleteOnRepeat = isOn; + return this; + } + + /** + * Set the onComplete method to be called at the beginning of the tween (it will still be called when it is completed as well) + * @method setOnCompleteOnStart + * @param {bool} isOn:bool does call onComplete at the start of the tween + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.delayedCall(gameObject, 2f, ()=>{
    // Flash an object 5 times + *  LeanTween.alpha(gameObject, 0f, 1f);
    + *  LeanTween.alpha(gameObject, 1f, 0f).setDelay(1f);
    + * }).setOnCompleteOnStart(true).setRepeat(5);
    + */ + public LTDescr setOnCompleteOnStart( bool isOn ){ + this.onCompleteOnStart = isOn; + return this; + } + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + public LTDescr setRect( RectTransform rect ){ + this.rectTransform = rect; + return this; + } + + public LTDescr setSprites( UnityEngine.Sprite[] sprites ){ + this.sprites = sprites; + return this; + } + + public LTDescr setFrameRate( float frameRate ){ + this.time = this.sprites.Length / frameRate; + return this; + } + #endif + + /** + * Have a method called when the tween starts + * @method setOnStart + * @param {Action<>} onStart:Action<> the method that should be called when the tween is starting ex: tweenStarted( ){ } + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * C#:
    + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnStart( ()=>{ Debug.Log("I started!"); }); + * Javascript:
    + * LeanTween.moveX(gameObject, 5f, 2.0f ).setOnStart( function(){ Debug.Log("I started!"); } ); + */ + public LTDescr setOnStart( Action onStart ){ + this._optional.onStart = onStart; + return this; + } + + /** + * Set the direction of a tween -1f for backwards 1f for forwards (currently only bezier and spline paths are supported) + * @method setDirection + * @param {float} direction:float the direction that the tween should run, -1f for backwards 1f for forwards + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setDirection(-1f);
    + */ + + public LTDescr setDirection( float direction ){ + if(this.direction!=-1f && this.direction!=1f){ + Debug.LogWarning("You have passed an incorrect direction of '"+direction+"', direction must be -1f or 1f"); + return this; + } + + if(this.direction!=direction){ + // Debug.Log("reverse path:"+this.path+" spline:"+this._optional.spline+" hasInitiliazed:"+this.hasInitiliazed); + if(this.hasInitiliazed){ + this.direction = direction; + }else{ + if(this._optional.path!=null){ + this._optional.path = new LTBezierPath( LTUtility.reverse( this._optional.path.pts ) ); + }else if(this._optional.spline!=null){ + this._optional.spline = new LTSpline( LTUtility.reverse( this._optional.spline.pts ) ); + } + // this.passed = this.time - this.passed; + } + } + + return this; + } + + /** + * Set whether or not the tween will recursively effect an objects children in the hierarchy + * @method setRecursive + * @param {bool} useRecursion:bool whether the tween will recursively effect an objects children in the hierarchy + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.alpha(gameObject, 0f, 1f).setRecursive(true);
    + */ + + public LTDescr setRecursive( bool useRecursion ){ + this.useRecursion = useRecursion; + + return this; + } +} + +//} diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs.meta new file mode 100644 index 0000000..e47c628 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescr.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 381c8d6fb1acdc348870a7147bc98723 +timeCreated: 1463137984 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs new file mode 100644 index 0000000..f2b2476 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs @@ -0,0 +1,88 @@ +//namespace DentedPixel{ +using UnityEngine; +using System; +using System.Collections; +using System.Collections.Generic; + +public class LTDescrOptional { + + public Transform toTrans { get; set; } + public Vector3 point { get; set; } + public Vector3 axis { get; set; } + public float lastVal{ get; set; } + public Quaternion origRotation { get; set; } + public LTBezierPath path { get; set; } + public LTSpline spline { get; set; } + public AnimationCurve animationCurve; + public int initFrameCount; + + public LTRect ltRect { get; set; } // maybe get rid of this eventually + + public Action onUpdateFloat { get; set; } + public Action onUpdateFloatRatio { get; set; } + public Action onUpdateFloatObject { get; set; } + public Action onUpdateVector2 { get; set; } + public Action onUpdateVector3 { get; set; } + public Action onUpdateVector3Object { get; set; } + public Action onUpdateColor { get; set; } + public Action onUpdateColorObject { get; set; } + public Action onComplete { get; set; } + public Action onCompleteObject { get; set; } + public object onCompleteParam { get; set; } + public object onUpdateParam { get; set; } + public Action onStart { get; set; } + + +// #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 +// public SpriteRenderer spriteRen { get; set; } +// #endif +// +// #if LEANTWEEN_1 +// public Hashtable optional; +// #endif +// #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 +// public RectTransform rectTransform; +// public UnityEngine.UI.Text uiText; +// public UnityEngine.UI.Image uiImage; +// public UnityEngine.Sprite[] sprites; +// #endif + + + public void reset(){ + animationCurve = null; + + this.onUpdateFloat = null; + this.onUpdateFloatRatio = null; + this.onUpdateVector2 = null; + this.onUpdateVector3 = null; + this.onUpdateFloatObject = null; + this.onUpdateVector3Object = null; + this.onUpdateColor = null; + this.onComplete = null; + this.onCompleteObject = null; + this.onCompleteParam = null; + this.onStart = null; + + this.point = Vector3.zero; + this.initFrameCount = 0; + } + + public void callOnUpdate( float val, float ratioPassed){ + if(this.onUpdateFloat!=null) + this.onUpdateFloat(val); + + if (this.onUpdateFloatRatio != null){ + this.onUpdateFloatRatio(val,ratioPassed); + }else if(this.onUpdateFloatObject!=null){ + this.onUpdateFloatObject(val, this.onUpdateParam); + }else if(this.onUpdateVector3Object!=null){ + this.onUpdateVector3Object(LTDescr.newVect, this.onUpdateParam); + }else if(this.onUpdateVector3!=null){ + this.onUpdateVector3(LTDescr.newVect); + }else if(this.onUpdateVector2!=null){ + this.onUpdateVector2(new Vector2(LTDescr.newVect.x,LTDescr.newVect.y)); + } + } +} + +//} diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs.meta new file mode 100644 index 0000000..8b83a30 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LTDescrOptional.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: c1ba8f1ef97134cb39b52ae26678db63 +timeCreated: 1471504769 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs new file mode 100644 index 0000000..b7d1939 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs @@ -0,0 +1,418 @@ + +using UnityEngine; +using System.Collections.Generic; + +public class LeanAudioStream { + + public int position = 0; + + public AudioClip audioClip; + public float[] audioArr; + + public LeanAudioStream( float[] audioArr ){ + this.audioArr = audioArr; + } + + public void OnAudioRead(float[] data) { + int count = 0; + while (count < data.Length) { + data[count] = audioArr[this.position]; + position++; + count++; + } + } + + public void OnAudioSetPosition(int newPosition) { + this.position = newPosition; + } +} + +/** +* Create Audio dynamically and easily playback +* +* @class LeanAudio +* @constructor +*/ +public class LeanAudio : object { + + public static float MIN_FREQEUNCY_PERIOD = 0.000115f; + public static int PROCESSING_ITERATIONS_MAX = 50000; + public static float[] generatedWaveDistances; + public static int generatedWaveDistancesCount = 0; + + private static float[] longList; + + public static LeanAudioOptions options(){ + if(generatedWaveDistances==null){ + generatedWaveDistances = new float[ PROCESSING_ITERATIONS_MAX ]; + longList = new float[ PROCESSING_ITERATIONS_MAX ]; + } + return new LeanAudioOptions(); + } + + public static LeanAudioStream createAudioStream( AnimationCurve volume, AnimationCurve frequency, LeanAudioOptions options = null ){ + if(options==null) + options = new LeanAudioOptions(); + + options.useSetData = false; + + int generatedWavePtsLength = createAudioWave( volume, frequency, options); + createAudioFromWave( generatedWavePtsLength, options ); + + return options.stream; + } + + /** + * Create dynamic audio from a set of Animation Curves and other options. + * + * @method createAudio + * @param {AnimationCurve} volumeCurve:AnimationCurve describing the shape of the audios volume (from 0-1). The length of the audio is dicated by the end value here. + * @param {AnimationCurve} frequencyCurve:AnimationCurve describing the width of the oscillations between the sound waves in seconds. Large numbers mean a lower note, while higher numbers mean a tighter frequency and therefor a higher note. Values are usually between 0.01 and 0.000001 (or smaller) + * @param {LeanAudioOptions} options:LeanAudioOptions You can pass any other values in here like vibrato or the frequency you would like the sound to be encoded at. See LeanAudioOptions for more details. + * @return {AudioClip} AudioClip of the procedurally generated audio + * @example + * AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + * AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + * AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0f,0f)} ));
    + */ + public static AudioClip createAudio( AnimationCurve volume, AnimationCurve frequency, LeanAudioOptions options = null ){ + if(options==null) + options = new LeanAudioOptions(); + + int generatedWavePtsLength = createAudioWave( volume, frequency, options); + // Debug.Log("generatedWavePtsLength:"+generatedWavePtsLength); + return createAudioFromWave( generatedWavePtsLength, options ); + } + + private static int createAudioWave( AnimationCurve volume, AnimationCurve frequency, LeanAudioOptions options ){ + float time = volume[ volume.length - 1 ].time; + int listLength = 0; + // List list = new List(); + + // generatedWaveDistances = new List(); + // float[] vibratoValues = new float[ vibrato.Length ]; + float passed = 0f; + for(int i = 0; i < PROCESSING_ITERATIONS_MAX; i++){ + float f = frequency.Evaluate(passed); + if(f=time) + break; + if(listLength >= PROCESSING_ITERATIONS_MAX-1){ + Debug.LogError("LeanAudio has reached it's processing cap. To avoid this error increase the number of iterations ex: LeanAudio.PROCESSING_ITERATIONS_MAX = "+(PROCESSING_ITERATIONS_MAX*2)); + break; + }else{ + int distPoint = listLength / 2; + + //generatedWaveDistances.Add( f ); + passed += f; + + generatedWaveDistances[ distPoint ] = passed; + //Debug.Log("distPoint:"+distPoint+" passed:"+passed); + + //list.Add( passed ); + //list.Add( i%2==0 ? -height : height ); + + longList[ listLength ] = passed; + longList[ listLength + 1 ] = i%2==0 ? -height : height; + } + + + + listLength += 2; + + } + + listLength += -2; + generatedWaveDistancesCount = listLength / 2; + + /*float[] wave = new float[ listLength ]; + for(int i = 0; i < wave.Length; i++){ + wave[i] = longList[i]; + }*/ + return listLength; + } + + private static AudioClip createAudioFromWave( int waveLength, LeanAudioOptions options ){ + float time = longList[ waveLength - 2 ]; + float[] audioArr = new float[ (int)(options.frequencyRate*time) ]; + + int waveIter = 0; + float subWaveDiff = longList[waveIter]; + float subWaveTimeLast = 0f; + float subWaveTime = longList[waveIter]; + float waveHeight = longList[waveIter+1]; + for(int i = 0; i < audioArr.Length; i++){ + float passedTime = (float)i / (float)options.frequencyRate; + if(passedTime > longList[waveIter] ){ + subWaveTimeLast = longList[waveIter]; + waveIter += 2; + subWaveDiff = longList[waveIter] - longList[waveIter-2]; + waveHeight = longList[waveIter+1]; + // Debug.Log("passed wave i:"+i); + } + subWaveTime = passedTime - subWaveTimeLast; + float ratioElapsed = subWaveTime / subWaveDiff; + + float value = Mathf.Sin( ratioElapsed * Mathf.PI ); + + if(options.waveStyle==LeanAudioOptions.LeanAudioWaveStyle.Square){ + if(value>0f) + value = 1f; + if(value<0f) + value = -1f; + }else if(options.waveStyle==LeanAudioOptions.LeanAudioWaveStyle.Sawtooth){ + float sign = value > 0f ? 1f : -1f; + if(ratioElapsed<0.5f){ + value = (ratioElapsed*2f)*sign; + }else{ // 0.5f - 1f + value = (1f - ratioElapsed)*2f*sign; + } + }else if(options.waveStyle==LeanAudioOptions.LeanAudioWaveStyle.Noise){ + float peakMulti = (1f-options.waveNoiseInfluence) + Mathf.PerlinNoise(0f, passedTime * options.waveNoiseScale ) * options.waveNoiseInfluence; + + /*if(i<25){ + Debug.Log("passedTime:"+passedTime+" peakMulti:"+peakMulti+" infl:"+options.waveNoiseInfluence); + }*/ + + value *= peakMulti; + } + + //if(i<25) + // Debug.Log("passedTime:"+passedTime+" value:"+value+" ratioElapsed:"+ratioElapsed+" subWaveTime:"+subWaveTime+" subWaveDiff:"+subWaveDiff); + + value *= waveHeight; + + + if(options.modulation!=null){ + for(int k=0; k(); // add an audio source + aSource.clip = clip; // define the clip + aSource.Play(); // start the sound + GameObject.Destroy(tempGO, clip.length); // destroy object after clip duration + return aSource; // return the AudioSource reference + } + + public static void printOutAudioClip( AudioClip audioClip, ref AnimationCurve curve, float scaleX = 1f ){ + // Debug.Log("Audio channels:"+audioClip.channels+" frequency:"+audioClip.frequency+" length:"+audioClip.length+" samples:"+audioClip.samples); + float[] samples = new float[audioClip.samples * audioClip.channels]; + audioClip.GetData(samples, 0); + int i = 0; + + Keyframe[] frames = new Keyframe[samples.Length]; + while (i < samples.Length) { + frames[i] = new Keyframe( (float)i * scaleX, samples[i] ); + ++i; + } + curve = new AnimationCurve( frames ); + } +} + + +/** +* Pass in options to LeanAudio +* +* @class LeanAudioOptions +* @constructor +*/ +public class LeanAudioOptions : object { + + public enum LeanAudioWaveStyle{ + Sine, + Square, + Sawtooth, + Noise + } + + public LeanAudioWaveStyle waveStyle = LeanAudioWaveStyle.Sine; + public Vector3[] vibrato; + public Vector3[] modulation; + public int frequencyRate = 44100; + public float waveNoiseScale = 1000; + public float waveNoiseInfluence = 1f; + + public bool useSetData = true; + public LeanAudioStream stream; + + public LeanAudioOptions(){} + + /** + * Set the frequency for the audio is encoded. 44100 is CD quality, but you can usually get away with much lower (or use a lower amount to get a more 8-bit sound). + * + * @method setFrequency + * @param {int} frequencyRate:int of the frequency you wish to encode the AudioClip at + * @return {LeanAudioOptions} LeanAudioOptions describing optional values + * @example + * AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + * AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + * AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0f,0f)} ).setFrequency(12100) );
    + */ + public LeanAudioOptions setFrequency( int frequencyRate ){ + this.frequencyRate = frequencyRate; + return this; + } + + /** + * Set details about the shape of the curve by adding vibrato modulations through it (alters the peak values giving it a wah-wah effect). You can add as many as you want to sculpt out more detail in the sound wave. + * + * @method setVibrato + * @param {Vector3[]} vibratoArray:Vector3[] The first value is the period in seconds that you wish to have the vibrato wave fluctuate at. The second value is the minimum height you wish the vibrato wave to dip down to (default is zero). The third is reserved for future effects. + * @return {LeanAudioOptions} LeanAudioOptions describing optional values + * @example + * AnimationCurve volumeCurve = new AnimationCurve( new Keyframe(0f, 1f, 0f, -1f), new Keyframe(1f, 0f, -1f, 0f));
    + * AnimationCurve frequencyCurve = new AnimationCurve( new Keyframe(0f, 0.003f, 0f, 0f), new Keyframe(1f, 0.003f, 0f, 0f));
    + * AudioClip audioClip = LeanAudio.createAudio(volumeCurve, frequencyCurve, LeanAudio.options().setVibrato( new Vector3[]{ new Vector3(0.32f,0.3f,0f)} ).setFrequency(12100) );
    + */ + public LeanAudioOptions setVibrato( Vector3[] vibrato ){ + this.vibrato = vibrato; + return this; + } + + /* + public LeanAudioOptions setModulation( Vector3[] modulation ){ + this.modulation = modulation; + return this; + }*/ + + public LeanAudioOptions setWaveSine(){ + this.waveStyle = LeanAudioWaveStyle.Sine; + return this; + } + + public LeanAudioOptions setWaveSquare(){ + this.waveStyle = LeanAudioWaveStyle.Square; + return this; + } + + public LeanAudioOptions setWaveSawtooth(){ + this.waveStyle = LeanAudioWaveStyle.Sawtooth; + return this; + } + + public LeanAudioOptions setWaveNoise(){ + this.waveStyle = LeanAudioWaveStyle.Noise; + return this; + } + + public LeanAudioOptions setWaveStyle( LeanAudioWaveStyle style ){ + this.waveStyle = style; + return this; + } + + + public LeanAudioOptions setWaveNoiseScale( float waveScale ){ + this.waveNoiseScale = waveScale; + return this; + } + + public LeanAudioOptions setWaveNoiseInfluence( float influence ){ + this.waveNoiseInfluence = influence; + return this; + } +} + + diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs.meta new file mode 100644 index 0000000..cd86baf --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanAudio.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 52e41e970d9353942b27458440bec9eb +timeCreated: 1427917971 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs new file mode 100644 index 0000000..8289622 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs @@ -0,0 +1,123 @@ +using UnityEngine; +using System.Collections; + +public class LeanTester : MonoBehaviour { + public float timeout = 15f; + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + public void Start(){ + StartCoroutine( timeoutCheck() ); + } + + IEnumerator timeoutCheck(){ + float pauseEndTime = Time.realtimeSinceStartup + timeout; + while (Time.realtimeSinceStartup < pauseEndTime) + { + yield return 0; + } + if(LeanTest.testsFinished==false){ + Debug.Log(LeanTest.formatB("Tests timed out!")); + LeanTest.overview(); + } + } + #endif +} + +public class LeanTest : object { + public static int expected = 0; + private static int tests = 0; + private static int passes = 0; + + public static float timeout = 15f; + public static bool timeoutStarted = false; + public static bool testsFinished = false; + + public static void debug( string name, bool didPass, string failExplaination = null){ + expect( didPass, name, failExplaination); + } + + public static void expect( bool didPass, string definition, string failExplaination = null){ + float len = printOutLength(definition); + int paddingLen = 40-(int)(len*1.05f); + #if UNITY_FLASH + string padding = padRight(paddingLen); + #else + string padding = "".PadRight(paddingLen,"_"[0]); + #endif + string logName = formatB(definition) +" " + padding + " [ "+ (didPass ? formatC("pass","green") : formatC("fail","red")) +" ]"; + if(didPass==false && failExplaination!=null) + logName += " - " + failExplaination; + Debug.Log(logName); + if(didPass) + passes++; + tests++; + + // Debug.Log("tests:"+tests+" expected:"+expected); + if(tests==expected && testsFinished==false){ + overview(); + }else if(tests>expected){ + Debug.Log(formatB("Too many tests for a final report!") + " set LeanTest.expected = "+tests); + } + + if(timeoutStarted==false){ + timeoutStarted = true; + GameObject tester = new GameObject(); + tester.name = "~LeanTest"; + LeanTester test = tester.AddComponent(typeof(LeanTester)) as LeanTester; + test.timeout = timeout; + #if !UNITY_EDITOR + tester.hideFlags = HideFlags.HideAndDontSave; + #endif + } + } + + public static string padRight(int len){ + string str = ""; + for(int i = 0; i < len; i++){ + str += "_"; + } + return str; + } + + public static float printOutLength( string str ){ + float len = 0.0f; + for(int i = 0; i < str.Length; i++){ + if(str[i]=="I"[0]){ + len += 0.5f; + }else if(str[i]=="J"[0]){ + len += 0.85f; + }else{ + len += 1.0f; + } + } + return len; + } + + public static string formatBC( string str, string color ){ + return formatC(formatB(str),color); + } + + public static string formatB( string str ){ + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + return str; + #else + return ""+ str + ""; + #endif + } + + public static string formatC( string str, string color ){ + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 + return str; + #else + return ""+ str + ""; + #endif + } + + public static void overview(){ + testsFinished = true; + int failedCnt = (expected-passes); + string failedStr = failedCnt > 0 ? formatBC(""+failedCnt,"red") : ""+failedCnt; + Debug.Log(formatB("Final Report:")+" _____________________ PASSED: "+formatBC(""+passes,"green")+" FAILED: "+failedStr+" "); + } +} + \ No newline at end of file diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs.meta new file mode 100644 index 0000000..0af8aa2 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTest.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 82464f26ca2ba284a8f92f51248c574a +timeCreated: 1427917971 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs new file mode 100644 index 0000000..03543a0 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs @@ -0,0 +1,3615 @@ +//namespace DentedPixel{ + +// LeanTween version 2.43 - http://dentedpixel.com/developer-diary/ +// +// The MIT License (MIT) +// +// Copyright (c) 2017 Russell Savage - Dented Pixel +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + + + +/* +TERMS OF USE - EASING EQUATIONS# +Open source under the BSD License. +Copyright (c)2001 Robert Penner +All rights reserved. +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +Neither the name of the author nor the names of contributors may be used to endorse or promote products derived from this software without specific prior written permission. +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +/** +* Pass this to the "ease" parameter, to get a different easing behavior

    +* Example:
    LeanTween.rotateX(gameObject, 270.0f, 1.5f).setEase(LeanTweenType.easeInBack); +* +* @class LeanTweenType +*/ + +/** +* @property {integer} linear +*/ +/** +* @property {integer} easeOutQuad +*/ +/** +* @property {integer} easeInQuad +*/ +/** +* @property {integer} easeInOutQuad +*/ +/** +* @property {integer} easeInCubic +*/ +/** +* @property {integer} easeOutCubic +*/ +/** +* @property {integer} easeInOutCubic +*/ +/** +* @property {integer} easeInQuart +*/ +/** +* @property {integer} easeOutQuart +*/ +/** +* @property {integer} easeInOutQuart +*/ +/** +* @property {integer} easeInQuint +*/ +/** +* @property {integer} easeOutQuint +*/ +/** +* @property {integer} easeInOutQuint +*/ +/** +* @property {integer} easeInSine +*/ +/** +* @property {integer} easeOutSine +*/ +/** +* @property {integer} easeInOutSine +*/ +/** +* @property {integer} easeInExpo +*/ +/** +* @property {integer} easeOutExpo +*/ +/** +* @property {integer} easeInOutExpo +*/ +/** +* @property {integer} easeInCirc +*/ +/** +* @property {integer} easeOutCirc +*/ +/** +* @property {integer} easeInOutCirc +*/ +/** +* @property {integer} easeInBounce +*/ +/** +* @property {integer} easeOutBounce +*/ +/** +* @property {integer} easeInOutBounce +*/ +/** +* @property {integer} easeInBack +*/ +/** +* @property {integer} easeOutBack +*/ +/** +* @property {integer} easeInOutBack +*/ +/** +* @property {integer} easeInElastic +*/ +/** +* @property {integer} easeOutElastic +*/ +/** +* @property {integer} easeInOutElastic +*/ +/** +* @property {integer} punch +*/ +using UnityEngine; +using System; +using System.Collections.Generic; + +public enum TweenAction{ + MOVE_X, + MOVE_Y, + MOVE_Z, + MOVE_LOCAL_X, + MOVE_LOCAL_Y, + MOVE_LOCAL_Z, + MOVE_CURVED, + MOVE_CURVED_LOCAL, + MOVE_SPLINE, + MOVE_SPLINE_LOCAL, + SCALE_X, + SCALE_Y, + SCALE_Z, + ROTATE_X, + ROTATE_Y, + ROTATE_Z, + ROTATE_AROUND, + ROTATE_AROUND_LOCAL, + CANVAS_ROTATEAROUND, + CANVAS_ROTATEAROUND_LOCAL, + CANVAS_PLAYSPRITE, + ALPHA, + TEXT_ALPHA, + CANVAS_ALPHA, + CANVASGROUP_ALPHA, + ALPHA_VERTEX, + COLOR, + CALLBACK_COLOR, + TEXT_COLOR, + CANVAS_COLOR, + CANVAS_MOVE_X, + CANVAS_MOVE_Y, + CANVAS_MOVE_Z, + CALLBACK, + MOVE, + MOVE_LOCAL, + MOVE_TO_TRANSFORM, + ROTATE, + ROTATE_LOCAL, + SCALE, + VALUE3, + GUI_MOVE, + GUI_MOVE_MARGIN, + GUI_SCALE, + GUI_ALPHA, + GUI_ROTATE, + DELAYED_SOUND, + CANVAS_MOVE, + CANVAS_SCALE, + CANVAS_SIZEDELTA, +} + +public enum LeanTweenType{ + notUsed, linear, easeOutQuad, easeInQuad, easeInOutQuad, easeInCubic, easeOutCubic, easeInOutCubic, easeInQuart, easeOutQuart, easeInOutQuart, + easeInQuint, easeOutQuint, easeInOutQuint, easeInSine, easeOutSine, easeInOutSine, easeInExpo, easeOutExpo, easeInOutExpo, easeInCirc, easeOutCirc, easeInOutCirc, + easeInBounce, easeOutBounce, easeInOutBounce, easeInBack, easeOutBack, easeInOutBack, easeInElastic, easeOutElastic, easeInOutElastic, easeSpring, easeShake, punch, once, clamp, pingPong, animationCurve +} + +/** +* LeanTween is an efficient tweening engine for Unity3d

    +* Index of All Methods | Optional Paramaters that can be passed

    +* Optional Parameters are passed at the end of every method
    +*
    +* Example:
    +* LeanTween.moveX( gameObject, 1f, 1f).setEase( LeanTweenType.easeInQuad ).setDelay(1f);
    +*
    +* You can pass the optional parameters in any order, and chain on as many as you wish!

    +* You can also modify this tween later, just save the unique id of the tween.
    +*

    Example:

    +* int id = LeanTween.moveX(gameObject, 1f, 1f).id;
    +* LTDescr d = LeanTween.descr( id );

    +* if(d!=null){ // if the tween has already finished it will return null
    +*    // change some parameters
    +*    d.setOnComplete( onCompleteFunc ).setEase( LeanTweenType.easeInOutBack );
    +* } +* +* @class LeanTween +*/ + +public class LeanTween : MonoBehaviour { + + public static bool throwErrors = true; + public static float tau = Mathf.PI*2.0f; + public static float PI_DIV2 = Mathf.PI / 2.0f; + + private static LTDescr[] tweens; + private static int[] tweensFinished; + private static LTDescr tween; + private static int tweenMaxSearch = -1; + private static int maxTweens = 400; + private static int frameRendered= -1; + private static GameObject _tweenEmpty; + public static float dtEstimated = -1f; + public static float dtManual; + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 + private static float previousRealTime; + #endif + public static float dtActual; + private static int i; + private static int j; + private static int finishedCnt; + public static AnimationCurve punch = new AnimationCurve( new Keyframe(0.0f, 0.0f ), new Keyframe(0.112586f, 0.9976035f ), new Keyframe(0.3120486f, -0.1720615f ), new Keyframe(0.4316337f, 0.07030682f ), new Keyframe(0.5524869f, -0.03141804f ), new Keyframe(0.6549395f, 0.003909959f ), new Keyframe(0.770987f, -0.009817753f ), new Keyframe(0.8838775f, 0.001939224f ), new Keyframe(1.0f, 0.0f ) ); + public static AnimationCurve shake = new AnimationCurve( new Keyframe(0f, 0f), new Keyframe(0.25f, 1f), new Keyframe(0.75f, -1f), new Keyframe(1f, 0f) ) ; + + public static void init(){ + init(maxTweens); + } + + public static int maxSearch{ + get{ + return tweenMaxSearch; + } + } + + public static int maxSimulataneousTweens{ + get { + return maxTweens; + } + } + + /** + * Find out how many tweens you have animating at a given time + * + * @method LeanTween.tweensRunning + * @example + * Debug.Log("I have "+LeanTween.tweensRunning+" animating!"); + */ + public static int tweensRunning{ + get{ + int count = 0; + for (int i = 0; i <= tweenMaxSearch; i++){ + if (tweens[i].toggle){ + count++; + } + } + return count; + } + } + + /** + * This line is optional. Here you can specify the maximum number of tweens you will use (the default is 400). This must be called before any use of LeanTween is made for it to be effective. + * + * @method LeanTween.init + * @param {integer} maxSimultaneousTweens:int The maximum number of tweens you will use, make sure you don't go over this limit, otherwise the code will throw an error + * @example + * LeanTween.init( 800 ); + */ + public static void init(int maxSimultaneousTweens){ + if(tweens==null){ + maxTweens = maxSimultaneousTweens; + tweens = new LTDescr[maxTweens]; + tweensFinished = new int[maxTweens]; + _tweenEmpty = new GameObject(); + _tweenEmpty.name = "~LeanTween"; + _tweenEmpty.AddComponent(typeof(LeanTween)); + _tweenEmpty.isStatic = true; + #if !UNITY_EDITOR + _tweenEmpty.hideFlags = HideFlags.HideAndDontSave; + #endif + #if UNITY_EDITOR + if(Application.isPlaying) + DontDestroyOnLoad( _tweenEmpty ); + #else + DontDestroyOnLoad( _tweenEmpty ); + #endif + for(int i = 0; i < maxTweens; i++){ + tweens[i] = new LTDescr(); + } + + #if UNITY_5_4_OR_NEWER + UnityEngine.SceneManagement.SceneManager.sceneLoaded += onLevelWasLoaded54; + #endif + } + } + + public static void reset(){ + if(tweens!=null){ + for (int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i]!=null) + tweens[i].toggle = false; + } + } + tweens = null; + Destroy(_tweenEmpty); + } + + public void Update(){ + LeanTween.update(); + } + + #if UNITY_5_4_OR_NEWER + private static void onLevelWasLoaded54( UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode ){ internalOnLevelWasLoaded( scene.buildIndex ); } + #else + public void OnLevelWasLoaded( int lvl ){ internalOnLevelWasLoaded( lvl ); } + #endif + + private static void internalOnLevelWasLoaded( int lvl ){ + // Debug.Log("reseting gui"); + LTGUI.reset(); + } + + private static int maxTweenReached; + + public static void update() { + if(frameRendered != Time.frameCount){ // make sure update is only called once per frame + init(); + + #if UNITY_3_5 || UNITY_4_0 || UNITY_4_0_1 || UNITY_4_1 || UNITY_4_2 || UNITY_4_3 || UNITY_4_5 + dtEstimated = Time.realtimeSinceStartup - previousRealTime; + if(dtEstimated>0.2f) // a catch put in, when at the start sometimes this number can grow unrealistically large + dtEstimated = 0.2f; + previousRealTime = Time.realtimeSinceStartup; + #else + + dtEstimated = dtEstimated<0f ? 0f : dtEstimated = Time.unscaledDeltaTime; + + // Debug.Log("Time.unscaledDeltaTime:"+Time.unscaledDeltaTime); + #endif + + dtActual = Time.deltaTime; + maxTweenReached = 0; + finishedCnt = 0; + // if(tweenMaxSearch>1500) + // Debug.Log("tweenMaxSearch:"+tweenMaxSearch +" maxTweens:"+maxTweens); + for( int i = 0; i <= tweenMaxSearch && i < maxTweens; i++){ + tween = tweens[i]; +// if(i==0 && tweens[i].toggle) +// Debug.Log("tweens["+i+"]"+tweens[i]); + if(tween.toggle){ + maxTweenReached = i; + + if (tween.updateInternal()) { // returns true if the tween is finished with it's loop + tweensFinished[finishedCnt] = i; + finishedCnt++; + } + } + } + + // Debug.Log("maxTweenReached:"+maxTweenReached); + tweenMaxSearch = maxTweenReached; + frameRendered = Time.frameCount; + + for(int i = 0; i < finishedCnt; i++){ + j = tweensFinished[i]; + tween = tweens[ j ]; + // Debug.Log("removing tween:"+tween); + removeTween(j); + if(tween.hasExtraOnCompletes && tween.trans!=null) + tween.callOnCompletes(); + } + + } + } + + + + public static void removeTween( int i, int uniqueId){ // Only removes the tween if the unique id matches + if(tweens[i].uniqueId==uniqueId){ + removeTween( i ); + } + } + + // This method is only used internally! Do not call this from your scripts. To cancel a tween use LeanTween.cancel + public static void removeTween( int i ){ + if(tweens[i].toggle){ + tweens[i].toggle = false; + //logError("Removing tween["+i+"]:"+tweens[i]); + if(tweens[i].destroyOnComplete){ + //Debug.Log("destroying tween.type:"+tween.type); + if(tweens[i].ltRect!=null){ + // Debug.Log("destroy i:"+i+" id:"+tweens[i].ltRect.id); + LTGUI.destroy( tweens[i].ltRect.id ); + }else{ // check if equal to tweenEmpty + if(tweens[i].trans!=null && tweens[i].trans.gameObject!=_tweenEmpty){ + Destroy(tweens[i].trans.gameObject); + } + } + } + //tweens[i].optional = null; + startSearch = i; + //Debug.Log("start search reset:"+startSearch + " i:"+i+" tweenMaxSearch:"+tweenMaxSearch); + if(i+1>=tweenMaxSearch){ + //Debug.Log("reset to zero"); + startSearch = 0; + //tweenMaxSearch--; + } + } + } + + public static Vector3[] add(Vector3[] a, Vector3 b){ + Vector3[] c = new Vector3[ a.Length ]; + for(i=0; i + */ + public static void cancelAll(){ + cancelAll(false); + } + public static void cancelAll(bool callComplete){ + init(); + for (int i = 0; i <= tweenMaxSearch; i++) + { + if (tweens[i].trans != null){ + if (callComplete && tweens[i].optional.onComplete != null) + tweens[i].optional.onComplete(); + removeTween(i); + } + } + } + + /** + * Cancel all tweens that are currently targeting the gameObject + * + * @method LeanTween.cancel + * @param {GameObject} gameObject:GameObject gameObject whose tweens you wish to cancel + * @param {bool} callOnComplete:bool (optional) whether to call the onComplete method before canceling + * @example LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f);
    + * LeanTween.cancel( gameObject ); + */ + public static void cancel( GameObject gameObject ){ + cancel( gameObject, false); + } + public static void cancel( GameObject gameObject, bool callOnComplete ){ + init(); + Transform trans = gameObject.transform; + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].toggle && tweens[i].trans==trans){ + if (callOnComplete && tweens[i].optional.onComplete != null) + tweens[i].optional.onComplete(); + removeTween(i); + } + } + } + + public static void cancel( RectTransform rect ){ + cancel( rect.gameObject, false); + } + +// public static void cancel( GameObject gameObject, int uniqueId ){ +// if(uniqueId>=0){ +// init(); +// int backId = uniqueId & 0xFFFF; +// int backCounter = uniqueId >> 16; +// // Debug.Log("uniqueId:"+uniqueId+ " id:"+backId +" counter:"+backCounter + " setCounter:"+ tweens[backId].counter + " tweens[id].type:"+tweens[backId].type); +// if(tweens[backId].trans==null || (tweens[backId].trans.gameObject == gameObject && tweens[backId].counter==backCounter)) +// removeTween((int)backId); +// } +// } + + public static void cancel( GameObject gameObject, int uniqueId, bool callOnComplete = false ){ + if(uniqueId>=0){ + init(); + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + // Debug.Log("uniqueId:"+uniqueId+ " id:"+backId +" counter:"+backCounter + " setCounter:"+ tw eens[backId].counter + " tweens[id].type:"+tweens[backId].type); + if(tweens[backId].trans==null || (tweens[backId].trans.gameObject == gameObject && tweens[backId].counter==backCounter)) { + if (callOnComplete && tweens[backId].optional.onComplete != null) + tweens[backId].optional.onComplete(); + removeTween((int)backId); + } + } + } + + public static void cancel( LTRect ltRect, int uniqueId ){ + if(uniqueId>=0){ + init(); + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + // Debug.Log("uniqueId:"+uniqueId+ " id:"+backId +" action:"+(TweenAction)backType + " tweens[id].type:"+tweens[backId].type); + if(tweens[backId].ltRect == ltRect && tweens[backId].counter==backCounter) + removeTween((int)backId); + } + } + + /** + * Cancel a specific tween with the provided id + * + * @method LeanTween.cancel + * @param {int} id:int unique id that represents that tween + * @param {bool} callOnComplete:int (optional) whether to call the onComplete method before canceling + * @example int id = LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).id;
    + * LeanTween.cancel( id ); + */ + public static void cancel( int uniqueId ){ + cancel( uniqueId, false); + } + public static void cancel( int uniqueId, bool callOnComplete ){ + if(uniqueId>=0){ + init(); + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + // Debug.Log("uniqueId:"+uniqueId+ " id:"+backId +" action:"+(TweenAction)backType + " tweens[id].type:"+tweens[backId].type); + if(tweens[backId].counter==backCounter){ + if(callOnComplete && tweens[backId].optional.onComplete != null) + tweens[backId].optional.onComplete(); + removeTween((int)backId); + } + } + } + + /** + * Retrieve a tweens LTDescr object to modify + * + * @method LeanTween.descr + * @param {int} id:int unique id that represents that tween + * @example int id = LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).setOnComplete( oldMethod ).id;

    + *
    // later I want decide I want to change onComplete method
    + * LTDescr descr = LeanTween.descr( id );
    + * if(descr!=null) // if the tween has already finished it will come back null
    + *   descr.setOnComplete( newMethod );
    + */ + public static LTDescr descr( int uniqueId ){ + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + + if(tweens[backId]!=null && tweens[backId].uniqueId == uniqueId && tweens[backId].counter==backCounter) + return tweens[backId]; + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].uniqueId == uniqueId && tweens[i].counter==backCounter) + return tweens[i]; + } + return null; + } + + public static LTDescr description( int uniqueId ){ + return descr( uniqueId ); + } + + /** + * Retrieve a tweens LTDescr object(s) to modify + * + * @method LeanTween.descriptions + * @param {GameObject} id:GameObject object whose tween descriptions you want to retrieve + * @example LeanTween.move( gameObject, new Vector3(0f,1f,2f), 1f).setOnComplete( oldMethod );

    + *
    // later I want decide I want to change onComplete method
    + * LTDescr[] descr = LeanTween.descriptions( gameObject );
    + * if(descr.Length>0) // make sure there is a valid description for this target
    + *   descr[0].setOnComplete( newMethod );// in this case we only ever expect there to be one tween on this object
    + */ + public static LTDescr[] descriptions(GameObject gameObject = null) { + if (gameObject == null) return null; + + List descrs = new List(); + Transform trans = gameObject.transform; + for (int i = 0; i <= tweenMaxSearch; i++) { + if (tweens[i].toggle && tweens[i].trans == trans) + descrs.Add( tweens[i] ); + } + return descrs.ToArray(); + } + + [System.Obsolete("Use 'pause( id )' instead")] + public static void pause( GameObject gameObject, int uniqueId ){ + pause( uniqueId ); + } + + /** + * Pause all tweens for a GameObject + * + * @method LeanTween.pause + * @param {int} id:int Id of the tween you want to pause + * @example + * int id = LeanTween.moveX(gameObject, 5, 1.0).id
    + * LeanTween.pause( id );
    + * // Later....
    + * LeanTween.resume( id ); + */ + public static void pause( int uniqueId ){ + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + if(tweens[backId].counter==backCounter){ + tweens[backId].pause(); + } + } + + /** + * Pause all tweens for a GameObject + * + * @method LeanTween.pause + * @param {GameObject} gameObject:GameObject GameObject whose tweens you want to pause + */ + public static void pause( GameObject gameObject ){ + Transform trans = gameObject.transform; + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].trans==trans){ + tweens[i].pause(); + } + } + } + + /** + * Pause all active tweens + * + * @method LeanTween.pauseAll + */ + public static void pauseAll(){ + init(); + for (int i = 0; i <= tweenMaxSearch; i++){ + tweens[i].pause(); + } + } + + /** + * Resume all active tweens + * + * @method LeanTween.resumeAll + */ + public static void resumeAll(){ + init(); + for (int i = 0; i <= tweenMaxSearch; i++){ + tweens[i].resume(); + } + } + + [System.Obsolete("Use 'resume( id )' instead")] + public static void resume( GameObject gameObject, int uniqueId ){ + resume( uniqueId ); + } + + /** + * Resume a specific tween + * + * @method LeanTween.resume + * @param {int} id:int Id of the tween you want to resume + * @example + * int id = LeanTween.moveX(gameObject, 5, 1.0).id
    + * LeanTween.pause( id );
    + * // Later....
    + * LeanTween.resume( id ); + */ + public static void resume( int uniqueId ){ + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + if(tweens[backId].counter==backCounter){ + tweens[backId].resume(); + } + } + + /** + * Resume all the tweens on a GameObject + * + * @method LeanTween.resume + * @param {GameObject} gameObject:GameObject GameObject whose tweens you want to resume + */ + public static void resume( GameObject gameObject ){ + Transform trans = gameObject.transform; + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].trans==trans) + tweens[i].resume(); + } + } + + /** + * Test whether or not a tween is active on a GameObject + * + * @method LeanTween.isTweening + * @param {GameObject} gameObject:GameObject GameObject that you want to test if it is tweening + */ + public static bool isTweening( GameObject gameObject = null ){ + if(gameObject==null){ + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].toggle) + return true; + } + return false; + } + Transform trans = gameObject.transform; + for(int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].toggle && tweens[i].trans==trans) + return true; + } + return false; + } + + public static bool isTweening( RectTransform rect ){ + return isTweening(rect.gameObject); + } + + /** + * Test whether or not a tween is active or not + * + * @method LeanTween.isTweening + * @param {GameObject} id:int id of the tween that you want to test if it is tweening + * @example + * int id = LeanTween.moveX(gameObject, 1f, 3f).id;
    + * if(LeanTween.isTweening( id ))
    + *      Debug.Log("I am tweening!");
    + */ + public static bool isTweening( int uniqueId ){ + int backId = uniqueId & 0xFFFF; + int backCounter = uniqueId >> 16; + if (backId < 0 || backId >= maxTweens) return false; + // Debug.Log("tweens[backId].counter:"+tweens[backId].counter+" backCounter:"+backCounter +" toggle:"+tweens[backId].toggle); + if(tweens[backId].counter==backCounter && tweens[backId].toggle){ + return true; + } + return false; + } + + public static bool isTweening( LTRect ltRect ){ + for( int i = 0; i <= tweenMaxSearch; i++){ + if(tweens[i].toggle && tweens[i].ltRect==ltRect) + return true; + } + return false; + } + + public static void drawBezierPath(Vector3 a, Vector3 b, Vector3 c, Vector3 d, float arrowSize = 0.0f, Transform arrowTransform = null){ + Vector3 last = a; + Vector3 p; + Vector3 aa = (-a + 3*(b-c) + d); + Vector3 bb = 3*(a+c) - 6*b; + Vector3 cc = 3*(b-a); + + float t; + + if(arrowSize>0.0f){ + Vector3 beforePos = arrowTransform.position; + Quaternion beforeQ = arrowTransform.rotation; + float distanceTravelled = 0f; + + for(float k = 1.0f; k <= 120.0f; k++){ + t = k / 120.0f; + p = ((aa* t + (bb))* t + cc)* t + a; + Gizmos.DrawLine(last, p); + distanceTravelled += (p-last).magnitude; + if(distanceTravelled>1f){ + distanceTravelled = distanceTravelled - 1f; + /*float deltaY = p.y - last.y; + float deltaX = p.x - last.x; + float ang = Mathf.Atan(deltaY / deltaX); + Vector3 arrow = p + new Vector3( Mathf.Cos(ang+2.5f), Mathf.Sin(ang+2.5f), 0f)*0.5f; + Gizmos.DrawLine(p, arrow); + arrow = p + new Vector3( Mathf.Cos(ang+-2.5f), Mathf.Sin(ang+-2.5f), 0f)*0.5f; + Gizmos.DrawLine(p, arrow);*/ + + arrowTransform.position = p; + arrowTransform.LookAt( last, Vector3.forward ); + Vector3 to = arrowTransform.TransformDirection(Vector3.right); + // Debug.Log("to:"+to+" tweenEmpty.transform.position:"+arrowTransform.position); + Vector3 back = (last-p); + back = back.normalized; + Gizmos.DrawLine(p, p + (to + back)*arrowSize); + to = arrowTransform.TransformDirection(-Vector3.right); + Gizmos.DrawLine(p, p + (to + back)*arrowSize); + } + last = p; + } + + arrowTransform.position = beforePos; + arrowTransform.rotation = beforeQ; + }else{ + for(float k = 1.0f; k <= 30.0f; k++){ + t = k / 30.0f; + p = ((aa* t + (bb))* t + cc)* t + a; + Gizmos.DrawLine(last, p); + last = p; + } + } + } + + public static object logError( string error ){ + if(throwErrors) Debug.LogError(error); else Debug.Log(error); + return null; + } + + // LeanTween 2.0 Methods + + public static LTDescr options(LTDescr seed){ Debug.LogError("error this function is no longer used"); return null; } + public static LTDescr options(){ + init(); + + bool found = false; + // Debug.Log("Search start"); + for(j=0, i = startSearch; j <= maxTweens; i++){ + if(j >= maxTweens) + return logError("LeanTween - You have run out of available spaces for tweening. To avoid this error increase the number of spaces to available for tweening when you initialize the LeanTween class ex: LeanTween.init( "+(maxTweens*2)+" );") as LTDescr; + if(i>=maxTweens) + i = 0; + // Debug.Log("searching i:"+i); + if(tweens[i].toggle==false){ + if(i+1>tweenMaxSearch) + tweenMaxSearch = i+1; + startSearch = i + 1; + found = true; + break; + } + + j++; + } + if(found==false) + logError("no available tween found!"); + + // Debug.Log("new tween with i:"+i+" counter:"+tweens[i].counter+" tweenMaxSearch:"+tweenMaxSearch+" tween:"+tweens[i]); + tweens[i].reset(); + tweens[i].setId( (uint)i ); + + return tweens[i]; + } + + public static GameObject tweenEmpty{ + get{ + init(maxTweens); + return _tweenEmpty; + } + } + + public static int startSearch = 0; + public static LTDescr d; + + private static LTDescr pushNewTween( GameObject gameObject, Vector3 to, float time, LTDescr tween ){ + init(maxTweens); + if(gameObject==null || tween==null) + return null; + + tween.trans = gameObject.transform; + tween.to = to; + tween.time = time; + //tween.hasPhysics = gameObject.rigidbody!=null; + + return tween; + } + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + /** + * Play a sequence of images on a Unity UI Object + * + * @method LeanTween.play + * @param {RectTransform} rectTransform:RectTransform RectTransform that you want to play the sequence of sprites on + * @param {Sprite[]} sprites:Sprite[] Sequence of sprites to be played + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.play(gameObject.GetComponent(), sprites).setLoopPingPong(); + */ + public static LTDescr play(RectTransform rectTransform, UnityEngine.Sprite[] sprites){ + float defaultFrameRate = 0.25f; + float time = defaultFrameRate * sprites.Length; + return pushNewTween(rectTransform.gameObject, new Vector3((float)sprites.Length - 1.0f,0,0), time, options().setCanvasPlaySprite().setSprites( sprites ).setRepeat(-1)); + } + #endif + + /** + * Fade a gameobject's material to a certain alpha value. The material's shader needs to support alpha. Owl labs has some excellent efficient shaders. + * + * @method LeanTween.alpha + * @param {GameObject} gameObject:GameObject Gameobject that you wish to fade + * @param {float} to:float the final alpha value (0-1) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.alpha(gameObject, 1f, 1f) .setDelay(1f); + */ + public static LTDescr alpha(GameObject gameObject, float to, float time){ + LTDescr lt = pushNewTween( gameObject, new Vector3(to,0,0), time, options().setAlpha() ); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + SpriteRenderer ren = gameObject.GetComponent(); + lt.spriteRen = ren; + #endif + return lt; + } + + /** + * Fade a GUI Object + * + * @method LeanTween.alpha + * @param {LTRect} ltRect:LTRect LTRect that you wish to fade + * @param {float} to:float the final alpha value (0-1) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.alpha(ltRect, 1f, 1f) .setEase(LeanTweenType.easeInCirc); + */ + public static LTDescr alpha(LTRect ltRect, float to, float time){ + ltRect.alphaEnabled = true; + return pushNewTween( tweenEmpty, new Vector3(to,0f,0f), time, options().setGUIAlpha().setRect( ltRect ) ); + } + + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + /** + * Fade a Unity UI Object + * + * @method LeanTween.alphaText + * @param {RectTransform} rectTransform:RectTransform RectTransform associated with the Text Component you wish to fade + * @param {float} to:float the final alpha value (0-1) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.alphaText(gameObject.GetComponent<RectTransform>(), 1f, 1f) .setEase(LeanTweenType.easeInCirc); + */ + public static LTDescr textAlpha(RectTransform rectTransform, float to, float time){ + return pushNewTween(rectTransform.gameObject, new Vector3(to,0,0), time, options().setTextAlpha()); + } + public static LTDescr alphaText(RectTransform rectTransform, float to, float time){ + return pushNewTween(rectTransform.gameObject, new Vector3(to,0,0), time, options().setTextAlpha()); + } + + /** + * Fade a Unity UI Canvas Group + * + * @method LeanTween.alphaCanvas + * @param {RectTransform} rectTransform:RectTransform RectTransform that the CanvasGroup is attached to + * @param {float} to:float the final alpha value (0-1) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.alphaCanvas(gameObject.GetComponent<RectTransform>(), 0f, 1f) .setLoopPingPong(); + */ + public static LTDescr alphaCanvas(CanvasGroup canvasGroup, float to, float time){ + return pushNewTween(canvasGroup.gameObject, new Vector3(to,0,0), time, options().setCanvasGroupAlpha()); + } + #endif + + /** + * This works by tweening the vertex colors directly.
    +
    + Vertex-based coloring is useful because you avoid making a copy of your + object's material for each instance that needs a different color.
    +
    + A shader that supports vertex colors is required for it to work + (for example the shaders in Mobile/Particles/) + * + * @method LeanTween.alphaVertex + * @param {GameObject} gameObject:GameObject Gameobject that you wish to alpha + * @param {float} to:float The alpha value you wish to tween to + * @param {float} time:float The time with which to delay before calling the function + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr alphaVertex(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0f,0f), time, options().setAlphaVertex() ); + } + + /** + * Change a gameobject's material to a certain color value. The material's shader needs to support color tinting. Owl labs has some excellent efficient shaders. + * + * @method LeanTween.color + * @param {GameObject} gameObject:GameObject Gameobject that you wish to change the color + * @param {Color} to:Color the final color value ex: Color.Red, new Color(1.0f,1.0f,0.0f,0.8f) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.color(gameObject, Color.yellow, 1f) .setDelay(1f); + */ + public static LTDescr color(GameObject gameObject, Color to, float time){ + LTDescr lt = pushNewTween( gameObject, new Vector3(1.0f, to.a, 0.0f), time, options().setColor().setPoint( new Vector3(to.r, to.g, to.b) ) ); + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + SpriteRenderer ren = gameObject.GetComponent(); + lt.spriteRen = ren; + #endif + return lt; + } + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + /** + * Change the color a Unity UI Object + * + * @method LeanTween.colorText + * @param {RectTransform} rectTransform:RectTransform RectTransform attached to the Text Component whose color you want to change + * @param {Color} to:Color the final alpha value ex: Color.Red, new Color(1.0f,1.0f,0.0f,0.8f) + * @param {float} time:float The time with which to fade the object + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * LeanTween.colorText(gameObject.GetComponent<RectTransform>(), Color.yellow, 1f) .setDelay(1f); + */ + public static LTDescr textColor(RectTransform rectTransform, Color to, float time){ + return pushNewTween(rectTransform.gameObject, new Vector3(1.0f, to.a, 0.0f), time, options().setTextColor().setPoint(new Vector3(to.r, to.g, to.b))); + } + public static LTDescr colorText(RectTransform rectTransform, Color to, float time){ + return pushNewTween(rectTransform.gameObject, new Vector3(1.0f, to.a, 0.0f), time, options().setTextColor().setPoint(new Vector3(to.r, to.g, to.b))); + } + #endif + + /** + * Call a method after a specified amount of time + * + * @method LeanTween.delayedCall + * @param {GameObject} gameObject:GameObject Gameobject that you wish to associate with this delayed call + * @param {float} time:float delay The time you wish to pass before the method is called + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.delayedCall(gameObject, 1f, ()=>{
    Debug.Log("I am called one second later!");
    })); + */ + public static LTDescr delayedCall( float delayTime, Action callback){ + return pushNewTween( tweenEmpty, Vector3.zero, delayTime, options().setCallback().setOnComplete(callback) ); + } + + public static LTDescr delayedCall( float delayTime, Action callback){ + return pushNewTween( tweenEmpty, Vector3.zero, delayTime, options().setCallback().setOnComplete(callback) ); + } + + public static LTDescr delayedCall( GameObject gameObject, float delayTime, Action callback){ + return pushNewTween( gameObject, Vector3.zero, delayTime, options().setCallback().setOnComplete(callback) ); + } + + public static LTDescr delayedCall( GameObject gameObject, float delayTime, Action callback){ + return pushNewTween( gameObject, Vector3.zero, delayTime, options().setCallback().setOnComplete(callback) ); + } + + public static LTDescr destroyAfter( LTRect rect, float delayTime){ + return pushNewTween( tweenEmpty, Vector3.zero, delayTime, options().setCallback().setRect( rect ).setDestroyOnComplete(true) ); + } + + /*public static LTDescr delayedCall(GameObject gameObject, float delayTime, string callback){ + return pushNewTween( gameObject, Vector3.zero, delayTime, TweenAction.CALLBACK, options().setOnComplete( callback ) ); + }*/ + + /** + * Move a GameObject to a certain location + * + * @method LeanTween.move + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Vector3} vec:Vector3 to The final positin with which to move to + * @param {float} time:float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.move(gameObject, new Vector3(0f,-3f,5f), 2.0f) .setEase( LeanTweenType.easeOutQuad ); + */ + public static LTDescr move(GameObject gameObject, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setMove() ); + } + public static LTDescr move(GameObject gameObject, Vector2 to, float time){ + return pushNewTween( gameObject, new Vector3(to.x, to.y, gameObject.transform.position.z), time, options().setMove() ); + } + + + /** + * Move a GameObject along a set of bezier curves + * + * @method LeanTween.move + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: Point1,Handle2,Handle1,Point2,... + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Javascript:
    + * LeanTween.move(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + * C#:
    + * LeanTween.move(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);;
    + */ + public static LTDescr move(GameObject gameObject, Vector3[] to, float time){ + d = options().setMoveCurved(); + if(d.optional.path==null) + d.optional.path = new LTBezierPath( to ); + else + d.optional.path.setPoints( to ); + + return pushNewTween( gameObject, new Vector3(1.0f,0.0f,0.0f), time, d ); + } + + public static LTDescr move(GameObject gameObject, LTBezierPath to, float time) { + d = options().setMoveCurved(); + d.optional.path = to; + + return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, d); + } + + public static LTDescr move(GameObject gameObject, LTSpline to, float time) { + d = options().setMoveSpline(); + d.optional.spline = to; + + return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, d); + } + + /** + * Move a GameObject through a set of points + * + * @method LeanTween.moveSpline + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: ControlStart,Pt1,Pt2,Pt3,.. ..ControlEnd
    Note: The first and last item just define the angle of the end points, they are not actually used in the spline path itself. If you do not care about the angle you can jus set the first two items and last two items as the same value. + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Javascript:
    + * LeanTween.moveSpline(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + * C#:
    + * LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);
    + */ + public static LTDescr moveSpline(GameObject gameObject, Vector3[] to, float time){ + d = options().setMoveSpline(); + d.optional.spline = new LTSpline( to ); + + return pushNewTween( gameObject, new Vector3(1.0f,0.0f,0.0f), time, d ); + } + + /** + * Move a GameObject through a set of points + * + * @method LeanTween.moveSpline + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {LTSpline} spline:LTSpline pass a pre-existing LTSpline for the object to move along + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Javascript:
    + * LeanTween.moveSpline(gameObject, ltSpline, 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + * C#:
    + * LeanTween.moveSpline(gameObject, ltSpline, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);
    + */ + public static LTDescr moveSpline(GameObject gameObject, LTSpline to, float time){ + d = options().setMoveSpline(); + d.optional.spline = to; + + return pushNewTween( gameObject, new Vector3(1.0f,0.0f,0.0f), time, d ); + } + + /** + * Move a GameObject through a set of points, in local space + * + * @method LeanTween.moveSplineLocal + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: ControlStart,Pt1,Pt2,Pt3,.. ..ControlEnd + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Javascript:
    + * LeanTween.moveSpline(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0) .setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + * C#:
    + * LeanTween.moveSpline(gameObject, new Vector3[]{new Vector3(0f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,0f),new Vector3(1f,0f,1f)}, 1.5f).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);
    + */ + public static LTDescr moveSplineLocal(GameObject gameObject, Vector3[] to, float time){ + d = options().setMoveSplineLocal(); + d.optional.spline = new LTSpline( to ); + + return pushNewTween( gameObject, new Vector3(1.0f,0.0f,0.0f), time, d ); + } + + /** + * Move a GUI Element to a certain location + * + * @method LeanTween.move (GUI) + * @param {LTRect} ltRect:LTRect ltRect LTRect object that you wish to move + * @param {Vector2} vec:Vector2 to The final position with which to move to (pixel coordinates) + * @param {float} time:float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr move(LTRect ltRect, Vector2 to, float time){ + return pushNewTween( tweenEmpty, to, time, options().setGUIMove().setRect( ltRect ) ); + } + + public static LTDescr moveMargin(LTRect ltRect, Vector2 to, float time){ + return pushNewTween( tweenEmpty, to, time, options().setGUIMoveMargin().setRect( ltRect ) ); + } + + /** + * Move a GameObject along the x-axis + * + * @method LeanTween.moveX + * @param {GameObject} gameObject:GameObject gameObject Gameobject that you wish to move + * @param {float} to:float to The final position with which to move to + * @param {float} time:float time The time to complete the move in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr moveX(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveX() ); + } + + /** + * Move a GameObject along the y-axis + * + * @method LeanTween.moveY + * @param {GameObject} GameObject gameObject Gameobject that you wish to move + * @param {float} float to The final position with which to move to + * @param {float} float time The time to complete the move in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr moveY(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveY() ); + } + + /** + * Move a GameObject along the z-axis + * + * @method LeanTween.moveZ + * @param {GameObject} GameObject gameObject Gameobject that you wish to move + * @param {float} float to The final position with which to move to + * @param {float} float time The time to complete the move in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr moveZ(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveZ() ); + } + + /** + * Move a GameObject to a certain location relative to the parent transform. + * + * @method LeanTween.moveLocal + * @param {GameObject} GameObject gameObject Gameobject that you wish to rotate + * @param {Vector3} Vector3 to The final positin with which to move to + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr moveLocal(GameObject gameObject, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setMoveLocal() ); + } + + /** + * Move a GameObject along a set of bezier curves, in local space + * + * @method LeanTween.moveLocal + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Vector3[]} path:Vector3[] A set of points that define the curve(s) ex: Point1,Handle1,Handle2,Point2,... + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Javascript:
    + * LeanTween.moveLocal(gameObject, [Vector3(0,0,0),Vector3(1,0,0),Vector3(1,0,0),Vector3(1,0,1)], 2.0).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);

    + * C#:
    + * LeanTween.moveLocal(gameObject, new Vector3[]{Vector3(0f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,0f),Vector3(1f,0f,1f)}).setEase(LeanTweenType.easeOutQuad).setOrientToPath(true);
    + */ + public static LTDescr moveLocal(GameObject gameObject, Vector3[] to, float time){ + d = options().setMoveCurvedLocal(); + if(d.optional.path==null) + d.optional.path = new LTBezierPath( to ); + else + d.optional.path.setPoints( to ); + + return pushNewTween( gameObject, new Vector3(1.0f,0.0f,0.0f), time, d ); + } + + public static LTDescr moveLocalX(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveLocalX() ); + } + + public static LTDescr moveLocalY(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveLocalY() ); + } + + public static LTDescr moveLocalZ(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setMoveLocalZ() ); + } + + public static LTDescr moveLocal(GameObject gameObject, LTBezierPath to, float time) { + d = options().setMoveCurvedLocal(); + d.optional.path = to; + + return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, d); + } + public static LTDescr moveLocal(GameObject gameObject, LTSpline to, float time) { + d = options().setMoveSplineLocal(); + d.optional.spline = to; + + return pushNewTween(gameObject, new Vector3(1.0f, 0.0f, 0.0f), time, d); + } + + /** + * Move a GameObject to another transform + * + * @method LeanTween.move + * @param {GameObject} gameObject:GameObject Gameobject that you wish to move + * @param {Transform} destination:Transform Transform whose position the tween will finally end on + * @param {float} time:float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.move(gameObject, anotherTransform, 2.0f) .setEase( LeanTweenType.easeOutQuad ); + */ + public static LTDescr move(GameObject gameObject, Transform to, float time){ + return pushNewTween(gameObject, Vector3.zero, time, options().setTo(to).setMoveToTransform() ); + } + + /** + * Rotate a GameObject, to values are in passed in degrees + * + * @method LeanTween.rotate + * @param {GameObject} GameObject gameObject Gameobject that you wish to rotate + * @param {Vector3} Vector3 to The final rotation with which to rotate to + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.rotate(cube, new Vector3(180f,30f,0f), 1.5f); + */ + + public static LTDescr rotate(GameObject gameObject, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setRotate() ); + } + + /** + * Rotate a GUI element (using an LTRect object), to a value that is in degrees + * + * @method LeanTween.rotate + * @param {LTRect} ltRect:LTRect LTRect that you wish to rotate + * @param {float} to:float The final rotation with which to rotate to + * @param {float} time:float The time to complete the tween in + * @param {Array} optional:Array Object Array where you can pass optional items. + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * if(GUI.Button(buttonRect.rect, "Rotate"))
    + * LeanTween.rotate( buttonRect4, 150.0f, 1.0f).setEase(LeanTweenType.easeOutElastic);
    + * GUI.matrix = Matrix4x4.identity;
    + */ + public static LTDescr rotate(LTRect ltRect, float to, float time){ + return pushNewTween( tweenEmpty, new Vector3(to,0f,0f), time, options().setGUIRotate().setRect( ltRect ) ); + } + + /** + * Rotate a GameObject in the objects local space (on the transforms localEulerAngles object) + * + * @method LeanTween.rotateLocal + * @param {GameObject} gameObject:GameObject Gameobject that you wish to rotate + * @param {Vector3} to:Vector3 The final rotation with which to rotate to + * @param {float} time:float The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr rotateLocal(GameObject gameObject, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setRotateLocal() ); + } + + /** + * Rotate a GameObject only on the X axis + * + * @method LeanTween.rotateX + * @param {GameObject} GameObject Gameobject that you wish to rotate + * @param {float} to:float The final x-axis rotation with which to rotate + * @param {float} time:float The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr rotateX(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setRotateX() ); + } + + /** + * Rotate a GameObject only on the Y axis + * + * @method LeanTween.rotateY + * @param {GameObject} GameObject Gameobject that you wish to rotate + * @param {float} to:float The final y-axis rotation with which to rotate + * @param {float} time:float The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr rotateY(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setRotateY() ); + } + + /** + * Rotate a GameObject only on the Z axis + * + * @method LeanTween.rotateZ + * @param {GameObject} GameObject Gameobject that you wish to rotate + * @param {float} to:float The final z-axis rotation with which to rotate + * @param {float} time:float The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr rotateZ(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setRotateZ() ); + } + + /** + * Rotate a GameObject around a certain Axis (the best method to use when you want to rotate beyond 180 degrees) + * + * @method LeanTween.rotateAround + * @param {GameObject} gameObject:GameObject Gameobject that you wish to rotate + * @param {Vector3} vec:Vector3 axis in which to rotate around ex: Vector3.up + * @param {float} degrees:float the degrees in which to rotate + * @param {float} time:float time The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example:
    + * LeanTween.rotateAround ( gameObject, Vector3.left, 90f, 1f ); + */ + public static LTDescr rotateAround(GameObject gameObject, Vector3 axis, float add, float time){ + return pushNewTween( gameObject, new Vector3(add,0f,0f), time, options().setAxis(axis).setRotateAround() ); + } + + /** + * Rotate a GameObject around a certain Axis in Local Space (the best method to use when you want to rotate beyond 180 degrees) + * + * @method LeanTween.rotateAroundLocal + * @param {GameObject} gameObject:GameObject Gameobject that you wish to rotate + * @param {Vector3} vec:Vector3 axis in which to rotate around ex: Vector3.up + * @param {float} degrees:float the degrees in which to rotate + * @param {float} time:float time The time to complete the rotation in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example:
    + * LeanTween.rotateAround ( gameObject, Vector3.left, 90f, 1f ); + */ + public static LTDescr rotateAroundLocal(GameObject gameObject, Vector3 axis, float add, float time){ + return pushNewTween( gameObject, new Vector3(add,0f,0f), time, options().setRotateAroundLocal().setAxis(axis) ); + } + + /** + * Scale a GameObject to a certain size + * + * @method LeanTween.scale + * @param {GameObject} gameObject:GameObject gameObject Gameobject that you wish to scale + * @param {Vector3} vec:Vector3 to The size with which to tween to + * @param {float} time:float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr scale(GameObject gameObject, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setScale() ); + } + + /** + * Scale a GUI Element to a certain width and height + * + * @method LeanTween.scale (GUI) + * @param {LTRect} LTRect ltRect LTRect object that you wish to move + * @param {Vector2} Vector2 to The final width and height to scale to (pixel based) + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * var bRect:LTRect = new LTRect( 0, 0, 100, 50 );
    + * LeanTween.scale( bRect, Vector2(bRect.rect.width, bRect.rect.height) * 1.3, 0.25 ).setEase(LeanTweenType.easeOutBounce);
    + * function OnGUI(){
    + *   if(GUI.Button(bRect.rect, "Scale")){ }
    + * }
    + *
    + * Example C#:
    + * LTRect bRect = new LTRect( 0f, 0f, 100f, 50f );
    + * LeanTween.scale( bRect, new Vector2(150f,75f), 0.25f ).setEase(LeanTweenType.easeOutBounce);
    + * void OnGUI(){
    + *   if(GUI.Button(bRect.rect, "Scale")){ }
    + * }
    + */ + public static LTDescr scale(LTRect ltRect, Vector2 to, float time){ + return pushNewTween( tweenEmpty, to, time, options().setGUIScale().setRect( ltRect ) ); + } + + /** + * Scale a GameObject to a certain size along the x-axis only + * + * @method LeanTween.scaleX + * @param {GameObject} gameObject:GameObject Gameobject that you wish to scale + * @param {float} scaleTo:float the size with which to scale to + * @param {float} time:float the time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr scaleX(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setScaleX() ); + } + + /** + * Scale a GameObject to a certain size along the y-axis only + * + * @method LeanTween.scaleY + * @param {GameObject} gameObject:GameObject Gameobject that you wish to scale + * @param {float} scaleTo:float the size with which to scale to + * @param {float} time:float the time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr scaleY(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setScaleY() ); + } + + /** + * Scale a GameObject to a certain size along the z-axis only + * + * @method LeanTween.scaleZ + * @param {GameObject} gameObject:GameObject Gameobject that you wish to scale + * @param {float} scaleTo:float the size with which to scale to + * @param {float} time:float the time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr scaleZ(GameObject gameObject, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setScaleZ()); + } + + /** + * Tween any particular value (float) + * + * @method LeanTween.value (float) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {float} from:float The original value to start the tween from + * @param {Vector3} to:float The final float with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, 1f, 5f, 5f).setOnUpdate( function( val:float ){
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, 1f, 5f, 5f).setOnUpdate( (float val)=>{
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + */ + public static LTDescr value(GameObject gameObject, float from, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setCallback().setFrom( new Vector3(from,0,0) ) ); + } + public static LTDescr value(float from, float to, float time){ + return pushNewTween( tweenEmpty, new Vector3(to,0,0), time, options().setCallback().setFrom( new Vector3(from,0,0) ) ); + } + + /** + * Tween any particular value (Vector2) + * + * @method LeanTween.value (Vector2) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Vector2} from:Vector2 The original value to start the tween from + * @param {Vector3} to:Vector2 The final Vector2 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, new Vector2(1f,0f), new Vector3(5f,0f), 5f).setOnUpdate( function( val:Vector2 ){
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, new Vector3(1f,0f), new Vector3(5f,0f), 5f).setOnUpdate( (Vector2 val)=>{
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + */ + public static LTDescr value(GameObject gameObject, Vector2 from, Vector2 to, float time){ + return pushNewTween( gameObject, new Vector3(to.x,to.y,0), time, options().setValue3().setTo( new Vector3(to.x,to.y,0f) ).setFrom( new Vector3(from.x,from.y,0) ) ); + } + + /** + * Tween any particular value (Vector3) + * + * @method LeanTween.value (Vector3) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Vector3} from:Vector3 The original value to start the tween from + * @param {Vector3} to:Vector3 The final Vector3 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, new Vector3(1f,0f,0f), new Vector3(5f,0f,0f), 5f).setOnUpdate( function( val:Vector3 ){
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, new Vector3(1f,0f,0f), new Vector3(5f,0f,0f), 5f).setOnUpdate( (Vector3 val)=>{
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + */ + public static LTDescr value(GameObject gameObject, Vector3 from, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setValue3().setFrom( from ) ); + } + + /** + * Tween any particular value (Color) + * + * @method LeanTween.value (Color) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Color} from:Color The original value to start the tween from + * @param {Color} to:Color The final Color with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, Color.red, Color.yellow, 5f).setOnUpdate( function( val:Color ){
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, Color.red, Color.yellow, 5f).setOnUpdate( (Color val)=>{
    + *  Debug.Log("tweened val:"+val);
    + * } );
    + */ + public static LTDescr value(GameObject gameObject, Color from, Color to, float time){ + LTDescr lt = pushNewTween( gameObject, new Vector3(1f, to.a, 0f), time, options().setCallbackColor().setPoint( new Vector3(to.r, to.g, to.b) ) + .setFromColor(from).setHasInitialized(false) ); + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 + SpriteRenderer ren = gameObject.GetComponent(); + lt.spriteRen = ren; + #endif + return lt; + } + + /** + * Tween any particular value, it does not need to be tied to any particular type or GameObject + * + * @method LeanTween.value (float) + * @param {GameObject} GameObject gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject + * @param {Action} callOnUpdate:Action The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( float val ){ } + * @param {float} float from The original value to start the tween from + * @param {float} float to The value to end the tween on + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + * function updateValueExampleCallback( val:float ){
    + *   Debug.Log("tweened value:"+val+" set this to whatever variable you are tweening...");
    + * }
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + * void updateValueExampleCallback( float val ){
    + *   Debug.Log("tweened value:"+val+" set this to whatever variable you are tweening...");
    + * }
    + */ + + public static LTDescr value(GameObject gameObject, Action callOnUpdate, float from, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setCallback().setTo( new Vector3(to,0,0) ).setFrom( new Vector3(from,0,0) ).setOnUpdate(callOnUpdate) ); + } + + /** + * Tweens any float value, it does not need to be tied to any particular type or GameObject + * + * @method LeanTween.value (float) + * @param {GameObject} GameObject gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject + * @param {Action} callOnUpdateRatio:Action Function that's called every Update frame. It must accept two float values ex: function updateValue( float val, float ratio){ } + * @param {float} float from The original value to start the tween from + * @param {float} float to The value to end the tween on + * @param {float} float time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + * function updateValueExampleCallback( val:float, ratio:float ){
    + *   Debug.Log("tweened value:"+val+" percent complete:"+ratio*100);
    + * }
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, updateValueExampleCallback, 180f, 270f, 1f).setEase(LeanTweenType.easeOutElastic);
    + * void updateValueExampleCallback( float val, float ratio ){
    + *   Debug.Log("tweened value:"+val+" percent complete:"+ratio*100);
    + * }
    + */ + + public static LTDescr value(GameObject gameObject, Action callOnUpdateRatio, float from, float to, float time) { + return pushNewTween(gameObject, new Vector3(to, 0, 0), time, options().setCallback().setTo(new Vector3(to, 0, 0)).setFrom(new Vector3(from, 0, 0)).setOnUpdateRatio(callOnUpdateRatio)); + } + + /** + * Tween from one color to another + * + * @method LeanTween.value (Color) + * @param {GameObject} GameObject gameObject GameObject with which to tie the tweening with. This is only used when you need to cancel this tween, it does not actually perform any operations on this gameObject + * @param {Action} callOnUpdate:Action The function that is called on every Update frame, this function needs to accept a color value ex: function updateValue( Color val ){ } + * @param {Color} Color from The original value to start the tween from + * @param {Color} Color to The value to end the tween on + * @param {Color} Color time The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example + * Example Javascript:
    + * LeanTween.value( gameObject, updateValueExampleCallback, Color.red, Color.green, 1f).setEase(LeanTweenType.easeOutElastic);
    + * function updateValueExampleCallback( val:Color ){
    + *   Debug.Log("tweened color:"+val+" set this to whatever variable you are tweening...");
    + * }
    + *
    + * Example C#:
    + * LeanTween.value( gameObject, updateValueExampleCallback, Color.red, Color.green, 1f).setEase(LeanTweenType.easeOutElastic);
    + * void updateValueExampleCallback( Color val ){
    + *   Debug.Log("tweened color:"+val+" set this to whatever variable you are tweening...");
    + * }
    + */ + + public static LTDescr value(GameObject gameObject, Action callOnUpdate, Color from, Color to, float time){ + return pushNewTween( gameObject, new Vector3(1.0f,to.a,0.0f), time, options().setCallbackColor().setPoint( new Vector3(to.r, to.g, to.b) ) + .setAxis( new Vector3(from.r, from.g, from.b) ).setFrom( new Vector3(0.0f, from.a, 0.0f) ).setHasInitialized(false).setOnUpdateColor(callOnUpdate) ); + } + public static LTDescr value(GameObject gameObject, Action callOnUpdate, Color from, Color to, float time){ + return pushNewTween( gameObject, new Vector3(1.0f,to.a,0.0f), time, options().setCallbackColor().setPoint( new Vector3(to.r, to.g, to.b) ) + .setAxis( new Vector3(from.r, from.g, from.b) ).setFrom( new Vector3(0.0f, from.a, 0.0f) ).setHasInitialized(false).setOnUpdateColor(callOnUpdate) ); + } + + /** + * Tween any particular value (Vector2), this could be used to tween an arbitrary value like offset property + * + * @method LeanTween.value (Vector2) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Action} callOnUpdate:Action The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val ){ } + * @param {float} from:Vector2 The original value to start the tween from + * @param {Vector2} to:Vector2 The final Vector3 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr value(GameObject gameObject, Action callOnUpdate, Vector2 from, Vector2 to, float time){ + return pushNewTween( gameObject, new Vector3(to.x,to.y,0f), time, options().setValue3().setTo( new Vector3(to.x,to.y,0f) ).setFrom( new Vector3(from.x,from.y,0f) ).setOnUpdateVector2(callOnUpdate) ); + } + + /** + * Tween any particular value (Vector3), this could be used to tween an arbitrary property that uses a Vector + * + * @method LeanTween.value (Vector3) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Action} callOnUpdate:Action The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val ){ } + * @param {float} from:Vector3 The original value to start the tween from + * @param {Vector3} to:Vector3 The final Vector3 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr value(GameObject gameObject, Action callOnUpdate, Vector3 from, Vector3 to, float time){ + return pushNewTween( gameObject, to, time, options().setValue3().setTo( to ).setFrom( from ).setOnUpdateVector3(callOnUpdate) ); + } + + /** + * Tween any particular value (float) + * + * @method LeanTween.value (float,object) + * @param {GameObject} gameObject:GameObject Gameobject that you wish to attach the tween to + * @param {Action} callOnUpdate:Action The function that is called on every Update frame, this function needs to accept a float value ex: function updateValue( Vector3 val, object obj ){ } + * @param {float} from:float The original value to start the tween from + * @param {Vector3} to:float The final Vector3 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + */ + public static LTDescr value(GameObject gameObject, Action callOnUpdate, float from, float to, float time){ + return pushNewTween( gameObject, new Vector3(to,0,0), time, options().setCallback().setTo( new Vector3(to,0,0) ).setFrom( new Vector3(from,0,0) ).setOnUpdate(callOnUpdate, gameObject) ); + } + + public static LTDescr delayedSound( AudioClip audio, Vector3 pos, float volume ){ + //Debug.LogError("Delay sound??"); + return pushNewTween( tweenEmpty, pos, 0f, options().setDelayedSound().setTo( pos ).setFrom( new Vector3(volume,0,0) ).setAudio( audio ) ); + } + + public static LTDescr delayedSound( GameObject gameObject, AudioClip audio, Vector3 pos, float volume ){ + //Debug.LogError("Delay sound??"); + return pushNewTween( gameObject, pos, 0f, options().setDelayedSound().setTo( pos ).setFrom( new Vector3(volume,0,0) ).setAudio( audio ) ); + } + + #if !UNITY_3_5 && !UNITY_4_0 && !UNITY_4_0_1 && !UNITY_4_1 && !UNITY_4_2 && !UNITY_4_3 && !UNITY_4_5 + + /** + * Move a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.move (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {Vector3} to:Vector3 The final Vector3 with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.move(gameObject.GetComponent<RectTransform>(), new Vector3(200f,-100f,0f), 1f).setDelay(1f); + */ + public static LTDescr move(RectTransform rectTrans, Vector3 to, float time){ + return pushNewTween( rectTrans.gameObject, to, time, options().setCanvasMove().setRect( rectTrans ) ); + } + + /** + * Move a RectTransform object affecting x-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.moveX (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The final x location with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.moveX(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f); + */ + public static LTDescr moveX(RectTransform rectTrans, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasMoveX().setRect( rectTrans ) ); + } + + /** + * Move a RectTransform object affecting y-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.moveY (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The final y location with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.moveY(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f); + */ + public static LTDescr moveY(RectTransform rectTrans, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasMoveY().setRect( rectTrans ) ); + } + + /** + * Move a RectTransform object affecting z-axis only (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.moveZ (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The final x location with which to tween to + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.moveZ(gameObject.GetComponent<RectTransform>(), 200f, 1f).setDelay(1f); + */ + public static LTDescr moveZ(RectTransform rectTrans, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasMoveZ().setRect( rectTrans ) ); + } + + /** + * Rotate a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.rotate (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The degree with which to rotate the RectTransform + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.rotate(gameObject.GetComponent<RectTransform>(), 90f, 1f).setDelay(1f); + */ + public static LTDescr rotate(RectTransform rectTrans, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasRotateAround().setRect( rectTrans ).setAxis(Vector3.forward) ); + } + + public static LTDescr rotate(RectTransform rectTrans, Vector3 to, float time){ + return pushNewTween( rectTrans.gameObject, to, time, options().setCanvasRotateAround().setRect( rectTrans ).setAxis(Vector3.forward) ); + } + + /** + * Rotate a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.rotateAround (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {Vector3} axis:Vector3 The axis in which to rotate the RectTransform (Vector3.forward is most commonly used) + * @param {float} to:float The degree with which to rotate the RectTransform + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.rotateAround(gameObject.GetComponent<RectTransform>(), Vector3.forward, 90f, 1f).setDelay(1f); + */ + public static LTDescr rotateAround(RectTransform rectTrans, Vector3 axis, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasRotateAround().setRect( rectTrans ).setAxis(axis) ); + } + + /** + * Rotate a RectTransform object around it's local axis (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.rotateAroundLocal (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {Vector3} axis:Vector3 The local axis in which to rotate the RectTransform (Vector3.forward is most commonly used) + * @param {float} to:float The degree with which to rotate the RectTransform + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.rotateAroundLocal(gameObject.GetComponent<RectTransform>(), Vector3.forward, 90f, 1f).setDelay(1f); + */ + public static LTDescr rotateAroundLocal(RectTransform rectTrans, Vector3 axis, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasRotateAroundLocal().setRect( rectTrans ).setAxis(axis) ); + } + + /** + * Scale a RectTransform object (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.scale (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {Vector3} to:Vector3 The final Vector3 with which to tween to (localScale) + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.scale(gameObject.GetComponent<RectTransform>(), gameObject.GetComponent<RectTransform>().localScale*2f, 1f).setDelay(1f); + */ + public static LTDescr scale(RectTransform rectTrans, Vector3 to, float time){ + return pushNewTween( rectTrans.gameObject, to, time, options().setCanvasScale().setRect( rectTrans ) ); + } + + /** + * Change the sizeDelta of a RectTransform object (used in Unity Canvas, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.size (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {Vector2} to:Vector2 The final Vector2 the tween will end at for sizeDelta property + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.size(gameObject.GetComponent<RectTransform>(), gameObject.GetComponent<RectTransform>().sizeDelta*2f, 1f).setDelay(1f); + */ + public static LTDescr size(RectTransform rectTrans, Vector2 to, float time){ + return pushNewTween( rectTrans.gameObject, to, time, options().setCanvasSizeDelta().setRect( rectTrans ) ); + } + + /** + * Alpha an Image Component attached to a RectTransform (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.alpha (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The final Vector3 with which to tween to (localScale) + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.alpha(gameObject.GetComponent<RectTransform>(), 0.5f, 1f).setDelay(1f); + */ + public static LTDescr alpha(RectTransform rectTrans, float to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(to,0f,0f), time, options().setCanvasAlpha().setRect( rectTrans ) ); + } + + /** + * Change the Color of an Image Component attached to a RectTransform (used in Unity GUI in 4.6+, for Buttons, Panel, Scrollbar, etc...) + * + * @method LeanTween.alpha (RectTransform) + * @param {RectTransform} rectTrans:RectTransform RectTransform that you wish to attach the tween to + * @param {float} to:float The final Vector3 with which to tween to (localScale) + * @param {float} time:float The time to complete the tween in + * @return {LTDescr} LTDescr an object that distinguishes the tween + * @example LeanTween.color(gameObject.GetComponent<RectTransform>(), 0.5f, 1f).setDelay(1f); + */ + public static LTDescr color(RectTransform rectTrans, Color to, float time){ + return pushNewTween( rectTrans.gameObject, new Vector3(1.0f, to.a, 0.0f), time, options().setCanvasColor().setRect( rectTrans ).setPoint( new Vector3(to.r, to.g, to.b) ) ); + } + + #endif + + // Tweening Functions - Thanks to Robert Penner and GFX47 + + public static float tweenOnCurve( LTDescr tweenDescr, float ratioPassed ){ + // Debug.Log("single ratio:"+ratioPassed+" tweenDescr.animationCurve.Evaluate(ratioPassed):"+tweenDescr.animationCurve.Evaluate(ratioPassed)); + return tweenDescr.from.x + (tweenDescr.diff.x) * tweenDescr.optional.animationCurve.Evaluate(ratioPassed); + } + + public static Vector3 tweenOnCurveVector( LTDescr tweenDescr, float ratioPassed ){ + return new Vector3(tweenDescr.from.x + (tweenDescr.diff.x) * tweenDescr.optional.animationCurve.Evaluate(ratioPassed), + tweenDescr.from.y + (tweenDescr.diff.y) * tweenDescr.optional.animationCurve.Evaluate(ratioPassed), + tweenDescr.from.z + (tweenDescr.diff.z) * tweenDescr.optional.animationCurve.Evaluate(ratioPassed) ); + } + + public static float easeOutQuadOpt( float start, float diff, float ratioPassed ){ + return -diff * ratioPassed * (ratioPassed - 2) + start; + } + + public static float easeInQuadOpt( float start, float diff, float ratioPassed ){ + return diff * ratioPassed * ratioPassed + start; + } + + public static float easeInOutQuadOpt( float start, float diff, float ratioPassed ){ + ratioPassed /= .5f; + if (ratioPassed < 1) return diff / 2 * ratioPassed * ratioPassed + start; + ratioPassed--; + return -diff / 2 * (ratioPassed * (ratioPassed - 2) - 1) + start; + } + + public static Vector3 easeInOutQuadOpt( Vector3 start, Vector3 diff, float ratioPassed ){ + ratioPassed /= .5f; + if (ratioPassed < 1) return diff / 2 * ratioPassed * ratioPassed + start; + ratioPassed--; + return -diff / 2 * (ratioPassed * (ratioPassed - 2) - 1) + start; + } + + public static float linear(float start, float end, float val){ + return Mathf.Lerp(start, end, val); + } + + public static float clerp(float start, float end, float val){ + float min = 0.0f; + float max = 360.0f; + float half = Mathf.Abs((max - min) / 2.0f); + float retval = 0.0f; + float diff = 0.0f; + if ((end - start) < -half){ + diff = ((max - start) + end) * val; + retval = start + diff; + }else if ((end - start) > half){ + diff = -((max - end) + start) * val; + retval = start + diff; + }else retval = start + (end - start) * val; + return retval; + } + + public static float spring(float start, float end, float val ){ + val = Mathf.Clamp01(val); + val = (Mathf.Sin(val * Mathf.PI * (0.2f + 2.5f * val * val * val)) * Mathf.Pow(1f - val, 2.2f ) + val) * (1f + (1.2f * (1f - val) )); + return start + (end - start) * val; + } + + public static float easeInQuad(float start, float end, float val){ + end -= start; + return end * val * val + start; + } + + public static float easeOutQuad(float start, float end, float val){ + end -= start; + return -end * val * (val - 2) + start; + } + + public static float easeInOutQuad(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return end / 2 * val * val + start; + val--; + return -end / 2 * (val * (val - 2) - 1) + start; + } + + + public static float easeInOutQuadOpt2(float start, float diffBy2, float val, float val2){ + val /= .5f; + if (val < 1) return diffBy2 * val2 + start; + val--; + return -diffBy2 * ((val2 - 2) - 1f) + start; + } + + public static float easeInCubic(float start, float end, float val){ + end -= start; + return end * val * val * val + start; + } + + public static float easeOutCubic(float start, float end, float val){ + val--; + end -= start; + return end * (val * val * val + 1) + start; + } + + public static float easeInOutCubic(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return end / 2 * val * val * val + start; + val -= 2; + return end / 2 * (val * val * val + 2) + start; + } + + public static float easeInQuart(float start, float end, float val){ + end -= start; + return end * val * val * val * val + start; + } + + public static float easeOutQuart(float start, float end, float val){ + val--; + end -= start; + return -end * (val * val * val * val - 1) + start; + } + + public static float easeInOutQuart(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return end / 2 * val * val * val * val + start; + val -= 2; + return -end / 2 * (val * val * val * val - 2) + start; + } + + public static float easeInQuint(float start, float end, float val){ + end -= start; + return end * val * val * val * val * val + start; + } + + public static float easeOutQuint(float start, float end, float val){ + val--; + end -= start; + return end * (val * val * val * val * val + 1) + start; + } + + public static float easeInOutQuint(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return end / 2 * val * val * val * val * val + start; + val -= 2; + return end / 2 * (val * val * val * val * val + 2) + start; + } + + public static float easeInSine(float start, float end, float val){ + end -= start; + return -end * Mathf.Cos(val / 1 * (Mathf.PI / 2)) + end + start; + } + + public static float easeOutSine(float start, float end, float val){ + end -= start; + return end * Mathf.Sin(val / 1 * (Mathf.PI / 2)) + start; + } + + public static float easeInOutSine(float start, float end, float val){ + end -= start; + return -end / 2 * (Mathf.Cos(Mathf.PI * val / 1) - 1) + start; + } + + public static float easeInExpo(float start, float end, float val){ + end -= start; + return end * Mathf.Pow(2, 10 * (val / 1 - 1)) + start; + } + + public static float easeOutExpo(float start, float end, float val){ + end -= start; + return end * (-Mathf.Pow(2, -10 * val / 1) + 1) + start; + } + + public static float easeInOutExpo(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return end / 2 * Mathf.Pow(2, 10 * (val - 1)) + start; + val--; + return end / 2 * (-Mathf.Pow(2, -10 * val) + 2) + start; + } + + public static float easeInCirc(float start, float end, float val){ + end -= start; + return -end * (Mathf.Sqrt(1 - val * val) - 1) + start; + } + + public static float easeOutCirc(float start, float end, float val){ + val--; + end -= start; + return end * Mathf.Sqrt(1 - val * val) + start; + } + + public static float easeInOutCirc(float start, float end, float val){ + val /= .5f; + end -= start; + if (val < 1) return -end / 2 * (Mathf.Sqrt(1 - val * val) - 1) + start; + val -= 2; + return end / 2 * (Mathf.Sqrt(1 - val * val) + 1) + start; + } + + public static float easeInBounce(float start, float end, float val){ + end -= start; + float d = 1f; + return end - easeOutBounce(0, end, d-val) + start; + } + + public static float easeOutBounce(float start, float end, float val){ + val /= 1f; + end -= start; + if (val < (1 / 2.75f)){ + return end * (7.5625f * val * val) + start; + }else if (val < (2 / 2.75f)){ + val -= (1.5f / 2.75f); + return end * (7.5625f * (val) * val + .75f) + start; + }else if (val < (2.5 / 2.75)){ + val -= (2.25f / 2.75f); + return end * (7.5625f * (val) * val + .9375f) + start; + }else{ + val -= (2.625f / 2.75f); + return end * (7.5625f * (val) * val + .984375f) + start; + } + } + + public static float easeInOutBounce(float start, float end, float val){ + end -= start; + float d= 1f; + if (val < d/2) return easeInBounce(0, end, val*2) * 0.5f + start; + else return easeOutBounce(0, end, val*2-d) * 0.5f + end*0.5f + start; + } + + public static float easeInBack(float start, float end, float val, float overshoot = 1.0f){ + end -= start; + val /= 1; + float s= 1.70158f * overshoot; + return end * (val) * val * ((s + 1) * val - s) + start; + } + + public static float easeOutBack(float start, float end, float val, float overshoot = 1.0f){ + float s = 1.70158f * overshoot; + end -= start; + val = (val / 1) - 1; + return end * ((val) * val * ((s + 1) * val + s) + 1) + start; + } + + public static float easeInOutBack(float start, float end, float val, float overshoot = 1.0f){ + float s = 1.70158f * overshoot; + end -= start; + val /= .5f; + if ((val) < 1){ + s *= (1.525f) * overshoot; + return end / 2 * (val * val * (((s) + 1) * val - s)) + start; + } + val -= 2; + s *= (1.525f) * overshoot; + return end / 2 * ((val) * val * (((s) + 1) * val + s) + 2) + start; + } + + public static float easeInElastic(float start, float end, float val, float overshoot = 1.0f, float period = 0.3f){ + end -= start; + + float p = period; + float s = 0f; + float a = 0f; + + if (val == 0f) return start; + + if (val == 1f) return start + end; + + if (a == 0f || a < Mathf.Abs(end)){ + a = end; + s = p / 4f; + }else{ + s = p / (2f * Mathf.PI) * Mathf.Asin(end / a); + } + + if(overshoot>1f && val>0.6f ) + overshoot = 1f + ((1f-val) / 0.4f * (overshoot-1f)); + // Debug.Log("ease in elastic val:"+val+" a:"+a+" overshoot:"+overshoot); + + val = val-1f; + return start-(a * Mathf.Pow(2f, 10f * val) * Mathf.Sin((val - s) * (2f * Mathf.PI) / p)) * overshoot; + } + + public static float easeOutElastic(float start, float end, float val, float overshoot = 1.0f, float period = 0.3f){ + end -= start; + + float p = period; + float s = 0f; + float a = 0f; + + if (val == 0f) return start; + + // Debug.Log("ease out elastic val:"+val+" a:"+a); + if (val == 1f) return start + end; + + if (a == 0f || a < Mathf.Abs(end)){ + a = end; + s = p / 4f; + }else{ + s = p / (2f * Mathf.PI) * Mathf.Asin(end / a); + } + if(overshoot>1f && val<0.4f ) + overshoot = 1f + (val / 0.4f * (overshoot-1f)); + // Debug.Log("ease out elastic val:"+val+" a:"+a+" overshoot:"+overshoot); + + return start + end + a * Mathf.Pow(2f, -10f * val) * Mathf.Sin((val - s) * (2f * Mathf.PI) / p) * overshoot; + } + + public static float easeInOutElastic(float start, float end, float val, float overshoot = 1.0f, float period = 0.3f) + { + end -= start; + + float p = period; + float s = 0f; + float a = 0f; + + if (val == 0f) return start; + + val = val / (1f/2f); + if (val == 2f) return start + end; + + if (a == 0f || a < Mathf.Abs(end)){ + a = end; + s = p / 4f; + }else{ + s = p / (2f * Mathf.PI) * Mathf.Asin(end / a); + } + + if(overshoot>1f){ + if( val<0.2f ){ + overshoot = 1f + (val / 0.2f * (overshoot-1f)); + }else if( val > 0.8f ){ + overshoot = 1f + ((1f-val) / 0.2f * (overshoot-1f)); + } + } + + if (val < 1f){ + val = val-1f; + return start - 0.5f * (a * Mathf.Pow(2f, 10f * val) * Mathf.Sin((val - s) * (2f * Mathf.PI) / p)) * overshoot; + } + val = val-1f; + return end + start + a * Mathf.Pow(2f, -10f * val) * Mathf.Sin((val - s) * (2f * Mathf.PI) / p) * 0.5f * overshoot; + } + + // LeanTween Listening/Dispatch + + private static System.Action[] eventListeners; + private static GameObject[] goListeners; + private static int eventsMaxSearch = 0; + public static int EVENTS_MAX = 10; + public static int LISTENERS_MAX = 10; + private static int INIT_LISTENERS_MAX = LISTENERS_MAX; + + public static void addListener( int eventId, System.Action callback ){ + addListener(tweenEmpty, eventId, callback); + } + + /** + * Add a listener method to be called when the appropriate LeanTween.dispatchEvent is called + * + * @method LeanTween.addListener + * @param {GameObject} caller:GameObject the gameObject the listener is attached to + * @param {int} eventId:int a unique int that describes the event (best to use an enum) + * @param {System.Action} callback:System.Action the method to call when the event has been dispatched + * @example + * LeanTween.addListener(gameObject, (int)MyEvents.JUMP, jumpUp);
    + *
    + * void jumpUp( LTEvent e ){ Debug.Log("jump!"); }
    + */ + public static void addListener( GameObject caller, int eventId, System.Action callback ){ + if(eventListeners==null){ + INIT_LISTENERS_MAX = LISTENERS_MAX; + eventListeners = new System.Action[ EVENTS_MAX * LISTENERS_MAX ]; + goListeners = new GameObject[ EVENTS_MAX * LISTENERS_MAX ]; + } + // Debug.Log("searching for an empty space for:"+caller + " eventid:"+event); + for(i = 0; i < INIT_LISTENERS_MAX; i++){ + int point = eventId*INIT_LISTENERS_MAX + i; + if(goListeners[ point ]==null || eventListeners[ point ]==null){ + eventListeners[ point ] = callback; + goListeners[ point ] = caller; + if(i>=eventsMaxSearch) + eventsMaxSearch = i+1; + // Debug.Log("adding event for:"+caller.name); + + return; + } + #if UNITY_FLASH + if(goListeners[ point ] == caller && System.Object.ReferenceEquals( eventListeners[ point ], callback)){ + // Debug.Log("This event is already being listened for."); + return; + } + #else + if(goListeners[ point ] == caller && System.Object.Equals( eventListeners[ point ], callback)){ + // Debug.Log("This event is already being listened for."); + return; + } + #endif + } + Debug.LogError("You ran out of areas to add listeners, consider increasing LISTENERS_MAX, ex: LeanTween.LISTENERS_MAX = "+(LISTENERS_MAX*2)); + } + + public static bool removeListener( int eventId, System.Action callback ){ + return removeListener( tweenEmpty, eventId, callback); + } + + /** + * Remove an event listener you have added + * @method LeanTween.removeListener + * @param {GameObject} caller:GameObject the gameObject the listener is attached to + * @param {int} eventId:int a unique int that describes the event (best to use an enum) + * @param {System.Action} callback:System.Action the method that was specified to call when the event has been dispatched + * @example + * LeanTween.removeListener(gameObject, (int)MyEvents.JUMP, jumpUp);
    + *
    + * void jumpUp( LTEvent e ){ }
    + */ + public static bool removeListener( GameObject caller, int eventId, System.Action callback ){ + for(i = 0; i < eventsMaxSearch; i++){ + int point = eventId*INIT_LISTENERS_MAX + i; + #if UNITY_FLASH + if(goListeners[ point ] == caller && System.Object.ReferenceEquals( eventListeners[ point ], callback) ){ + #else + if(goListeners[ point ] == caller && System.Object.Equals( eventListeners[ point ], callback) ){ + #endif + eventListeners[ point ] = null; + goListeners[ point ] = null; + return true; + } + } + return false; + } + + /** + * Tell the added listeners that you are dispatching the event + * @method LeanTween.dispatchEvent + * @param {int} eventId:int a unique int that describes the event (best to use an enum) + * @example + * LeanTween.dispatchEvent( (int)MyEvents.JUMP );
    + */ + public static void dispatchEvent( int eventId ){ + dispatchEvent( eventId, null); + } + + /** + * Tell the added listeners that you are dispatching the event + * @method LeanTween.dispatchEvent + * @param {int} eventId:int a unique int that describes the event (best to use an enum) + * @param {object} data:object Pass data to the listener, access it from the listener with *.data on the LTEvent object + * @example + * LeanTween.dispatchEvent( (int)MyEvents.JUMP, transform );
    + *
    + * void jumpUp( LTEvent e ){
    + *   Transform tran = (Transform)e.data;
    + * }
    + */ + public static void dispatchEvent( int eventId, object data ){ + for(int k = 0; k < eventsMaxSearch; k++){ + int point = eventId*INIT_LISTENERS_MAX + k; + if(eventListeners[ point ]!=null){ + if(goListeners[point]){ + eventListeners[ point ]( new LTEvent(eventId, data) ); + }else{ + eventListeners[ point ] = null; + } + } + } + } + + +} // End LeanTween class + +public class LTUtility { + + public static Vector3[] reverse( Vector3[] arr ){ + int length = arr.Length; + int left = 0; + int right = length - 1; + + for (; left < right; left += 1, right -= 1){ + Vector3 temporary = arr[left]; + arr[left] = arr[right]; + arr[right] = temporary; + } + return arr; + } +} + +public class LTBezier { + public float length; + + private Vector3 a; + private Vector3 aa; + private Vector3 bb; + private Vector3 cc; + private float len; + private float[] arcLengths; + + public LTBezier(Vector3 a, Vector3 b, Vector3 c, Vector3 d, float precision){ + this.a = a; + aa = (-a + 3*(b-c) + d); + bb = 3*(a+c) - 6*b; + cc = 3*(b-a); + + this.len = 1.0f / precision; + arcLengths = new float[(int)this.len + (int)1]; + arcLengths[0] = 0; + + Vector3 ov = a; + Vector3 v; + float clen = 0.0f; + for(int i = 1; i <= this.len; i++) { + v = bezierPoint(i * precision); + clen += (ov - v).magnitude; + this.arcLengths[i] = clen; + ov = v; + } + this.length = clen; + } + + private float map(float u) { + float targetLength = u * this.arcLengths[(int)this.len]; + int low = 0; + int high = (int)this.len; + int index = 0; + while (low < high) { + index = low + ((int)((high - low) / 2.0f) | 0); + if (this.arcLengths[index] < targetLength) { + low = index + 1; + } else { + high = index; + } + } + if(this.arcLengths[index] > targetLength) + index--; + if(index<0) + index = 0; + + return (index + (targetLength - arcLengths[index]) / (arcLengths[index + 1] - arcLengths[index])) / this.len; + } + + private Vector3 bezierPoint(float t){ + return ((aa* t + (bb))* t + cc)* t + a; + } + + public Vector3 point(float t){ + return bezierPoint( map(t) ); + } +} + +/** +* Manually animate along a bezier path with this class +* @class LTBezierPath +* @constructor +* @param {Vector3 Array} pts A set of points that define one or many bezier paths (the paths should be passed in multiples of 4, which correspond to each individual bezier curve)
    +* It goes in the order: startPoint,endControl,startControl,endPoint - Note: the control for the end and start are reversed! This is just a *quirk* of the API.
    +* +* @example +* LTBezierPath ltPath = new LTBezierPath( new Vector3[] { new Vector3(0f,0f,0f),new Vector3(1f,0f,0f), new Vector3(1f,0f,0f), new Vector3(1f,1f,0f)} );

    +* LeanTween.move(lt, ltPath.vec3, 4.0f).setOrientToPath(true).setDelay(1f).setEase(LeanTweenType.easeInOutQuad); // animate
    +* Vector3 pt = ltPath.point( 0.6f ); // retrieve a point along the path +*/ +public class LTBezierPath { + public Vector3[] pts; + public float length; + public bool orientToPath; + public bool orientToPath2d; + + private LTBezier[] beziers; + private float[] lengthRatio; + private int currentBezier=0,previousBezier=0; + + public LTBezierPath(){ } + public LTBezierPath( Vector3[] pts_ ){ + setPoints( pts_ ); + } + + public void setPoints( Vector3[] pts_ ){ + if(pts_.Length<4) + LeanTween.logError( "LeanTween - When passing values for a vector path, you must pass four or more values!" ); + if(pts_.Length%4!=0) + LeanTween.logError( "LeanTween - When passing values for a vector path, they must be in sets of four: controlPoint1, controlPoint2, endPoint2, controlPoint2, controlPoint2..." ); + + pts = pts_; + + int k = 0; + beziers = new LTBezier[ pts.Length / 4 ]; + lengthRatio = new float[ beziers.Length ]; + int i; + length = 0; + for(i = 0; i < pts.Length; i+=4){ + beziers[k] = new LTBezier(pts[i+0],pts[i+2],pts[i+1],pts[i+3],0.05f); + length += beziers[k].length; + k++; + } + // Debug.Log("beziers.Length:"+beziers.Length + " beziers:"+beziers); + for(i = 0; i < beziers.Length; i++){ + lengthRatio[i] = beziers[i].length / length; + } + } + + /** + * @property {float} distance distance of the path (in unity units) + */ + public float distance{ + get{ + return length; + } + } + + /** + * Retrieve a point along a path + * + * @method point + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @return {Vector3} Vector3 position of the point along the path + * @example + * transform.position = ltPath.point( 0.6f ); + */ + public Vector3 point( float ratio ){ + float added = 0.0f; + for(int i = 0; i < lengthRatio.Length; i++){ + added += lengthRatio[i]; + if(added >= ratio) + return beziers[i].point( (ratio-(added-lengthRatio[i])) / lengthRatio[i] ); + } + return beziers[lengthRatio.Length-1].point( 1.0f ); + } + + public void place2d( Transform transform, float ratio ){ + transform.position = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f){ + Vector3 v3Dir = point( ratio ) - transform.position; + float angle = Mathf.Atan2(v3Dir.y, v3Dir.x) * Mathf.Rad2Deg; + transform.eulerAngles = new Vector3(0, 0, angle); + } + } + + public void placeLocal2d( Transform transform, float ratio ){ + transform.localPosition = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f){ + Vector3 v3Dir = transform.parent.TransformPoint( point( ratio ) ) - transform.localPosition; + float angle = Mathf.Atan2(v3Dir.y, v3Dir.x) * Mathf.Rad2Deg; + transform.eulerAngles = new Vector3(0, 0, angle); + } + } + + /** + * Place an object along a certain point on the path (facing the direction perpendicular to the path) + * + * @method place + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @example + * ltPath.place( transform, 0.6f ); + */ + public void place( Transform transform, float ratio ){ + place( transform, ratio, Vector3.up ); + + } + + /** + * Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path + * + * @method place + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @param {Vector3} rotation:Vector3 the direction in which to place the transform ex: Vector3.up + * @example + * ltPath.place( transform, 0.6f, Vector3.left ); + */ + public void place( Transform transform, float ratio, Vector3 worldUp ){ + transform.position = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f) + transform.LookAt( point( ratio ), worldUp ); + + } + + /** + * Place an object along a certain point on the path (facing the direction perpendicular to the path) - Local Space, not world-space + * + * @method placeLocal + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @example + * ltPath.placeLocal( transform, 0.6f ); + */ + public void placeLocal( Transform transform, float ratio ){ + placeLocal( transform, ratio, Vector3.up ); + } + + /** + * Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path - Local Space, not world-space + * + * @method placeLocal + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @param {Vector3} rotation:Vector3 the direction in which to place the transform ex: Vector3.up + * @example + * ltPath.placeLocal( transform, 0.6f, Vector3.left ); + */ + public void placeLocal( Transform transform, float ratio, Vector3 worldUp ){ + ratio = getRationInOneRange (ratio); + transform.localPosition = point( ratio ); + ratio = getRationInOneRange (ratio + 0.001f); + if(ratio<=1.0f) + transform.LookAt( transform.parent.TransformPoint( point( ratio ) ), worldUp ); + } + + public float getRationInOneRange(float ratio){ + if (ratio >= 0.0f && ratio <= 1.0f) { + return ratio; + } else if (ratio < 0.0f) { + return Mathf.Ceil(ratio) - ratio; //if -1.4 => it returns 0.4 + } else { + return ratio - Mathf.Floor(ratio); //if 1.4 => it return 0.4 + } + } + + public void gizmoDraw(float t = -1.0f) + { + Vector3 prevPt = point(0); + + for (int i = 1; i <= 120; i++) + { + float pm = (float)i / 120f; + Vector3 currPt2 = point(pm); + //Gizmos.color = new Color(UnityEngine.Random.Range(0f,1f),UnityEngine.Random.Range(0f,1f),UnityEngine.Random.Range(0f,1f),1); + Gizmos.color = (previousBezier == currentBezier) ? Color.magenta : Color.grey; + Gizmos.DrawLine(currPt2, prevPt); + prevPt = currPt2; + previousBezier = currentBezier; + } + } +} + +/** +* Animate along a set of points that need to be in the format: controlPoint, point1, point2.... pointLast, endControlPoint +* @class LTSpline +* @constructor +* @param {Vector3 Array} pts A set of points that define the points the path will pass through (starting with starting control point, and ending with a control point)
    +Note: The first and last item just define the angle of the end points, they are not actually used in the spline path itself. If you do not care about the angle you can jus set the first two items and last two items as the same value. +* @example +* LTSpline ltSpline = new LTSpline( new Vector3[] { new Vector3(0f,0f,0f),new Vector3(0f,0f,0f), new Vector3(0f,0.5f,0f), new Vector3(1f,1f,0f), new Vector3(1f,1f,0f)} );

    +* LeanTween.moveSpline(lt, ltSpline.vec3, 4.0f).setOrientToPath(true).setDelay(1f).setEase(LeanTweenType.easeInOutQuad); // animate
    +* Vector3 pt = ltSpline.point( 0.6f ); // retrieve a point along the path +*/ +[System.Serializable] +public class LTSpline { + public static int DISTANCE_COUNT = 3; // increase for a more accurate constant speed + public static int SUBLINE_COUNT = 20; // increase for a more accurate smoothing of the curves into lines + + /** + * @property {float} distance distance of the spline (in unity units) + */ + public float distance = 0f; + + public bool constantSpeed = true; + + public Vector3[] pts; + [System.NonSerialized] + public Vector3[] ptsAdj; + public int ptsAdjLength; + public bool orientToPath; + public bool orientToPath2d; + private int numSections; + private int currPt; + + public LTSpline( Vector3[] pts ){ + init( pts, true); + } + + public LTSpline( Vector3[] pts, bool constantSpeed ) { + this.constantSpeed = constantSpeed; + init(pts, constantSpeed); + } + + private void init( Vector3[] pts, bool constantSpeed){ + if(pts.Length<4){ + LeanTween.logError( "LeanTween - When passing values for a spline path, you must pass four or more values!" ); + return; + } + + this.pts = new Vector3[pts.Length]; + System.Array.Copy(pts, this.pts, pts.Length); + + numSections = pts.Length - 3; + + float minSegment = float.PositiveInfinity; + Vector3 earlierPoint = this.pts[1]; + float totalDistance = 0f; + for(int i=1; i < this.pts.Length-1; i++){ + // float pointDistance = (this.pts[i]-earlierPoint).sqrMagnitude; + float pointDistance = Vector3.Distance(this.pts[i], earlierPoint); + //Debug.Log("pointDist:"+pointDistance); + if(pointDistance < minSegment){ + minSegment = pointDistance; + } + + totalDistance += pointDistance; + } + + if(constantSpeed){ + minSegment = totalDistance / (numSections*SUBLINE_COUNT); + //Debug.Log("minSegment:"+minSegment+" numSections:"+numSections); + + float minPrecision = minSegment / SUBLINE_COUNT; // number of subdivisions in each segment + int precision = (int)Mathf.Ceil(totalDistance / minPrecision) * DISTANCE_COUNT; + // Debug.Log("precision:"+precision); + if(precision<=1) // precision has to be greater than one + precision = 2; + + ptsAdj = new Vector3[ precision ]; + earlierPoint = interp( 0f ); + int num = 1; + ptsAdj[0] = earlierPoint; + distance = 0f; + for(int i = 0; i < precision + 1; i++){ + float fract = ((float)(i)) / precision; + // Debug.Log("fract:"+fract); + Vector3 point = interp( fract ); + float dist = Vector3.Distance(point, earlierPoint); + + // float dist = (point-earlierPoint).sqrMagnitude; + if(dist>=minPrecision || fract>=1.0f){ + ptsAdj[num] = point; + distance += dist; // only add it to the total distance once we know we are adding it as an adjusted point + + earlierPoint = point; + // Debug.Log("fract:"+fract+" point:"+point); + num++; + } + } + // make sure there is a point at the very end + /*num++; + Vector3 endPoint = interp( 1f ); + ptsAdj[num] = endPoint;*/ + // Debug.Log("fract 1f endPoint:"+endPoint); + + ptsAdjLength = num; + } + // Debug.Log("map 1f:"+map(1f)+" end:"+ptsAdj[ ptsAdjLength-1 ]); + + // Debug.Log("ptsAdjLength:"+ptsAdjLength+" minPrecision:"+minPrecision+" precision:"+precision); + } + + public Vector3 map( float u ){ + if(u>=1f) + return pts[ pts.Length - 2]; + float t = u * (ptsAdjLength-1); + int first = (int)Mathf.Floor( t ); + int next = (int)Mathf.Ceil( t ); + + if(first<0) + first = 0; + + Vector3 val = ptsAdj[ first ]; + + + Vector3 nextVal = ptsAdj[ next ]; + float diff = t - first; + + // Debug.Log("u:"+u+" val:"+val +" nextVal:"+nextVal+" diff:"+diff+" first:"+first+" next:"+next); + + val = val + (nextVal - val) * diff; + + return val; + } + + public Vector3 interp(float t) { + currPt = Mathf.Min(Mathf.FloorToInt(t * (float) numSections), numSections - 1); + float u = t * (float) numSections - (float) currPt; + + //Debug.Log("currPt:"+currPt+" numSections:"+numSections+" pts.Length :"+pts.Length ); + Vector3 a = pts[currPt]; + Vector3 b = pts[currPt + 1]; + Vector3 c = pts[currPt + 2]; + Vector3 d = pts[currPt + 3]; + + Vector3 val = (.5f * ( + (-a + 3f * b - 3f * c + d) * (u * u * u) + + (2f * a - 5f * b + 4f * c - d) * (u * u) + + (-a + c) * u + + 2f * b)); + // Debug.Log("currPt:"+currPt+" t:"+t+" val.x"+val.x+" y:"+val.y+" z:"+val.z); + + return val; + } + + /** + * Retrieve a point along a path + * + * @method ratioAtPoint + * @param {Vector3} point:Vector3 given a current location it makes the best approximiation of where it is along the path ratio-wise (0-1) + * @return {float} float of ratio along the path + * @example + * ratioIter = ltSpline.ratioAtPoint( transform.position ); + */ + public float ratioAtPoint( Vector3 pt ){ + float closestDist = float.MaxValue; + int closestI = 0; + for (int i = 0; i < ptsAdjLength; i++) { + float dist = Vector3.Distance(pt, ptsAdj[i]); + // Debug.Log("i:"+i+" dist:"+dist); + if(dist1f?1f:ratio; + return constantSpeed ? map(t) : interp(t); + } + + public void place2d( Transform transform, float ratio ){ + transform.position = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f){ + Vector3 v3Dir = point( ratio ) - transform.position; + float angle = Mathf.Atan2(v3Dir.y, v3Dir.x) * Mathf.Rad2Deg; + transform.eulerAngles = new Vector3(0, 0, angle); + } + } + + public void placeLocal2d( Transform transform, float ratio ){ + Transform trans = transform.parent; + if(trans==null){ // this has no parent, just do a regular transform + place2d(transform, ratio); + return; + } + transform.localPosition = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f){ + Vector3 ptAhead = point( ratio );//trans.TransformPoint( ); + Vector3 v3Dir = ptAhead - transform.localPosition; + float angle = Mathf.Atan2(v3Dir.y, v3Dir.x) * Mathf.Rad2Deg; + transform.eulerAngles = new Vector3(0, 0, angle); + } + } + + + /** + * Place an object along a certain point on the path (facing the direction perpendicular to the path) + * + * @method place + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @example + * ltPath.place( transform, 0.6f ); + */ + public void place( Transform transform, float ratio ){ + place(transform, ratio, Vector3.up); + } + + /** + * Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path + * + * @method place + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @param {Vector3} rotation:Vector3 the direction in which to place the transform ex: Vector3.up + * @example + * ltPath.place( transform, 0.6f, Vector3.left ); + */ + public void place( Transform transform, float ratio, Vector3 worldUp ){ + // ratio = Mathf.Repeat(ratio, 1.0f); // make sure ratio is always between 0-1 + transform.position = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f) + transform.LookAt( point( ratio ), worldUp ); + + } + + /** + * Place an object along a certain point on the path (facing the direction perpendicular to the path) - Local Space, not world-space + * + * @method placeLocal + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @example + * ltPath.placeLocal( transform, 0.6f ); + */ + public void placeLocal( Transform transform, float ratio ){ + placeLocal( transform, ratio, Vector3.up ); + } + + /** + * Place an object along a certain point on the path, with it facing a certain direction perpendicular to the path - Local Space, not world-space + * + * @method placeLocal + * @param {Transform} transform:Transform the transform of the object you wish to place along the path + * @param {float} ratio:float ratio of the point along the path you wish to receive (0-1) + * @param {Vector3} rotation:Vector3 the direction in which to place the transform ex: Vector3.up + * @example + * ltPath.placeLocal( transform, 0.6f, Vector3.left ); + */ + public void placeLocal( Transform transform, float ratio, Vector3 worldUp ){ + transform.localPosition = point( ratio ); + ratio += 0.001f; + if(ratio<=1.0f) + transform.LookAt( transform.parent.TransformPoint( point( ratio ) ), worldUp ); + } + + public void gizmoDraw(float t = -1.0f) { + if(ptsAdj==null || ptsAdj.Length<=0) + return; + + Vector3 prevPt = ptsAdj[0]; + + for (int i = 0; i < ptsAdjLength; i++) { + Vector3 currPt2 = ptsAdj[i]; + // Debug.Log("currPt2:"+currPt2); + //Gizmos.color = new Color(UnityEngine.Random.Range(0f,1f),UnityEngine.Random.Range(0f,1f),UnityEngine.Random.Range(0f,1f),1); + Gizmos.DrawLine(prevPt, currPt2); + prevPt = currPt2; + } + } + + public void drawGizmo( Color color ) { + if( this.ptsAdjLength>=4){ + + Vector3 prevPt = this.ptsAdj[0]; + + Color colorBefore = Gizmos.color; + Gizmos.color = color; + for (int i = 0; i < this.ptsAdjLength; i++) { + Vector3 currPt2 = this.ptsAdj[i]; + // Debug.Log("currPt2:"+currPt2); + + Gizmos.DrawLine(prevPt, currPt2); + prevPt = currPt2; + } + Gizmos.color = colorBefore; + } + } + + public static void drawGizmo(Transform[] arr, Color color) { + if(arr.Length>=4){ + Vector3[] vec3s = new Vector3[arr.Length]; + for(int i = 0; i < arr.Length; i++){ + vec3s[i] = arr[i].position; + } + LTSpline spline = new LTSpline(vec3s); + Vector3 prevPt = spline.ptsAdj[0]; + + Color colorBefore = Gizmos.color; + Gizmos.color = color; + for (int i = 0; i < spline.ptsAdjLength; i++) { + Vector3 currPt2 = spline.ptsAdj[i]; + // Debug.Log("currPt2:"+currPt2); + + Gizmos.DrawLine(prevPt, currPt2); + prevPt = currPt2; + } + Gizmos.color = colorBefore; + } + } + + + public static void drawLine(Transform[] arr, float width, Color color) { + if(arr.Length>=4){ + + } + } + + /*public Vector3 Velocity(float t) { + t = map( t ); + + int numSections = pts.Length - 3; + int currPt = Mathf.Min(Mathf.FloorToInt(t * (float) numSections), numSections - 1); + float u = t * (float) numSections - (float) currPt; + + Vector3 a = pts[currPt]; + Vector3 b = pts[currPt + 1]; + Vector3 c = pts[currPt + 2]; + Vector3 d = pts[currPt + 3]; + + return 1.5f * (-a + 3f * b - 3f * c + d) * (u * u) + + (2f * a -5f * b + 4f * c - d) * u + + .5f * c - .5f * a; + }*/ + + public void drawLinesGLLines(Material outlineMaterial, Color color, float width){ + GL.PushMatrix(); + outlineMaterial.SetPass(0); + GL.LoadPixelMatrix(); + GL.Begin(GL.LINES); + GL.Color(color); + + if (constantSpeed) { + if (this.ptsAdjLength >= 4) { + + Vector3 prevPt = this.ptsAdj[0]; + + for (int i = 0; i < this.ptsAdjLength; i++) { + Vector3 currPt2 = this.ptsAdj[i]; + GL.Vertex(prevPt); + GL.Vertex(currPt2); + + prevPt = currPt2; + } + } + + } else { + if (this.pts.Length >= 4) { + + Vector3 prevPt = this.pts[0]; + + float split = 1f / ((float)this.pts.Length * 10f); + + float iter = 0f; + while (iter < 1f) { + float at = iter / 1f; + Vector3 currPt2 = interp(at); + // Debug.Log("currPt2:"+currPt2); + + GL.Vertex(prevPt); + GL.Vertex(currPt2); + + prevPt = currPt2; + + iter += split; + } + } + } + + + GL.End(); + GL.PopMatrix(); + + } + + public Vector3[] generateVectors(){ + if (this.pts.Length >= 4) { + List meshPoints = new List(); + Vector3 prevPt = this.pts[0]; + meshPoints.Add(prevPt); + + float split = 1f / ((float)this.pts.Length * 10f); + + float iter = 0f; + while (iter < 1f) { + float at = iter / 1f; + Vector3 currPt2 = interp(at); + // Debug.Log("currPt2:"+currPt2); + + // GL.Vertex(prevPt); + // GL.Vertex(currPt2); + meshPoints.Add(currPt2); + + // prevPt = currPt2; + + iter += split; + } + + meshPoints.ToArray(); + } + return null; + } +} + +/** +* Animate GUI Elements by creating this object and passing the *.rect variable to the GUI method

    +* Example Javascript:
    var bRect:LTRect = new LTRect( 0, 0, 100, 50 );
    +* LeanTween.scale( bRect, Vector2(bRect.rect.width, bRect.rect.height) * 1.3, 0.25 );
    +* function OnGUI(){
    +*   if(GUI.Button(bRect.rect, "Scale")){ }
    +* }
    +*
    +* Example C#:
    +* LTRect bRect = new LTRect( 0f, 0f, 100f, 50f );
    +* LeanTween.scale( bRect, new Vector2(150f,75f), 0.25f );
    +* void OnGUI(){
    +*   if(GUI.Button(bRect.rect, "Scale")){ }
    +* }
    +* +* @class LTRect +* @constructor +* @param {float} x:float X location +* @param {float} y:float Y location +* @param {float} width:float Width +* @param {float} height:float Height +* @param {float} alpha:float (Optional) initial alpha amount (0-1) +* @param {float} rotation:float (Optional) initial rotation in degrees (0-360) +*/ + +[System.Serializable] +public class LTRect : System.Object{ + /** + * Pass this value to the GUI Methods + * + * @property rect + * @type {Rect} rect:Rect Rect object that controls the positioning and size + */ + public Rect _rect; + public float alpha = 1f; + public float rotation; + public Vector2 pivot; + public Vector2 margin; + public Rect relativeRect = new Rect(0f,0f,float.PositiveInfinity,float.PositiveInfinity); + + public bool rotateEnabled; + [HideInInspector] + public bool rotateFinished; + public bool alphaEnabled; + public string labelStr; + public LTGUI.Element_Type type; + public GUIStyle style; + public bool useColor = false; + public Color color = Color.white; + public bool fontScaleToFit; + public bool useSimpleScale; + public bool sizeByHeight; + + public Texture texture; + + private int _id = -1; + [HideInInspector] + public int counter; + + public static bool colorTouched; + + public LTRect(){ + reset(); + this.rotateEnabled = this.alphaEnabled = true; + _rect = new Rect(0f,0f,1f,1f); + } + + public LTRect(Rect rect){ + _rect = rect; + reset(); + } + + public LTRect(float x, float y, float width, float height){ + _rect = new Rect(x,y,width,height); + this.alpha = 1.0f; + this.rotation = 0.0f; + this.rotateEnabled = this.alphaEnabled = false; + } + + public LTRect(float x, float y, float width, float height, float alpha){ + _rect = new Rect(x,y,width,height); + this.alpha = alpha; + this.rotation = 0.0f; + this.rotateEnabled = this.alphaEnabled = false; + } + + public LTRect(float x, float y, float width, float height, float alpha, float rotation){ + _rect = new Rect(x,y,width,height); + this.alpha = alpha; + this.rotation = rotation; + this.rotateEnabled = this.alphaEnabled = false; + if(rotation!=0.0f){ + this.rotateEnabled = true; + resetForRotation(); + } + } + + public bool hasInitiliazed{ + get{ + return _id!=-1; + } + } + + public int id{ + get{ + int toId = _id | counter << 16; + + /*uint backId = toId & 0xFFFF; + uint backCounter = toId >> 16; + if(_id!=backId || backCounter!=counter){ + Debug.LogError("BAD CONVERSION toId:"+_id); + }*/ + + return toId; + } + } + + public void setId( int id, int counter){ + this._id = id; + this.counter = counter; + } + + public void reset(){ + this.alpha = 1.0f; + this.rotation = 0.0f; + this.rotateEnabled = this.alphaEnabled = false; + this.margin = Vector2.zero; + this.sizeByHeight = false; + this.useColor = false; + } + + public void resetForRotation(){ + Vector3 scale = new Vector3(GUI.matrix[0,0], GUI.matrix[1,1], GUI.matrix[2,2]); + if(pivot==Vector2.zero){ + pivot = new Vector2((_rect.x+((_rect.width)*0.5f )) * scale.x + GUI.matrix[0,3], (_rect.y+((_rect.height)*0.5f )) * scale.y + GUI.matrix[1,3]); + } + } + + public float x{ + get{ return _rect.x; } + set{ _rect.x = value; } + } + + public float y{ + get{ return _rect.y; } + set{ _rect.y = value; } + } + + public float width{ + get{ return _rect.width; } + set{ _rect.width = value; } + } + + public float height{ + get{ return _rect.height; } + set{ _rect.height = value; } + } + + public Rect rect{ + + get{ + if(colorTouched){ + colorTouched = false; + GUI.color = new Color(GUI.color.r,GUI.color.g,GUI.color.b,1.0f); + } + if(rotateEnabled){ + if(rotateFinished){ + rotateFinished = false; + rotateEnabled = false; + //this.rotation = 0.0f; + pivot = Vector2.zero; + }else{ + GUIUtility.RotateAroundPivot(rotation, pivot); + } + } + if(alphaEnabled){ + GUI.color = new Color(GUI.color.r,GUI.color.g,GUI.color.b,alpha); + colorTouched = true; + } + if(fontScaleToFit){ + if(this.useSimpleScale){ + style.fontSize = (int)(_rect.height*this.relativeRect.height); + }else{ + style.fontSize = (int)_rect.height; + } + } + return _rect; + } + + set{ + _rect = value; + } + } + + public LTRect setStyle( GUIStyle style ){ + this.style = style; + return this; + } + + public LTRect setFontScaleToFit( bool fontScaleToFit ){ + this.fontScaleToFit = fontScaleToFit; + return this; + } + + public LTRect setColor( Color color ){ + this.color = color; + this.useColor = true; + return this; + } + + public LTRect setAlpha( float alpha ){ + this.alpha = alpha; + return this; + } + + public LTRect setLabel( String str ){ + this.labelStr = str; + return this; + } + + public LTRect setUseSimpleScale( bool useSimpleScale, Rect relativeRect){ + this.useSimpleScale = useSimpleScale; + this.relativeRect = relativeRect; + return this; + } + + public LTRect setUseSimpleScale( bool useSimpleScale){ + this.useSimpleScale = useSimpleScale; + this.relativeRect = new Rect(0f,0f,Screen.width,Screen.height); + return this; + } + + public LTRect setSizeByHeight( bool sizeByHeight){ + this.sizeByHeight = sizeByHeight; + return this; + } + + public override string ToString(){ + return "x:"+_rect.x+" y:"+_rect.y+" width:"+_rect.width+" height:"+_rect.height; + } +} + +/** +* Object that describes the event to an event listener +* @class LTEvent +* @constructor +* @param {object} data:object Data that has been passed from the dispatchEvent method +*/ +public class LTEvent { + public int id; + public object data; + + public LTEvent(int id, object data){ + this.id = id; + this.data = data; + } +} + +public class LTGUI { + public static int RECT_LEVELS = 5; + public static int RECTS_PER_LEVEL = 10; + public static int BUTTONS_MAX = 24; + + private static LTRect[] levels; + private static int[] levelDepths; + private static Rect[] buttons; + private static int[] buttonLevels; + private static int[] buttonLastFrame; + private static LTRect r; + private static Color color = Color.white; + private static bool isGUIEnabled = false; + private static int global_counter = 0; + + public enum Element_Type{ + Texture, + Label + } + + public static void init(){ + if(levels==null){ + levels = new LTRect[RECT_LEVELS*RECTS_PER_LEVEL]; + levelDepths = new int[RECT_LEVELS]; + } + } + + public static void initRectCheck(){ + if(buttons==null){ + buttons = new Rect[BUTTONS_MAX]; + buttonLevels = new int[BUTTONS_MAX]; + buttonLastFrame = new int[BUTTONS_MAX]; + for(int i = 0; i < buttonLevels.Length; i++){ + buttonLevels[i] = -1; + } + } + } + + public static void reset(){ + if(isGUIEnabled){ + isGUIEnabled = false; + for(int i = 0; i < levels.Length; i++){ + levels[i] = null; + } + + for(int i = 0; i < levelDepths.Length; i++){ + levelDepths[i] = 0; + } + } + } + + public static void update( int updateLevel ){ + if(isGUIEnabled){ + init(); + if(levelDepths[updateLevel]>0){ + color = GUI.color; + int baseI = updateLevel*RECTS_PER_LEVEL; + int maxLoop = baseI + levelDepths[updateLevel];// RECTS_PER_LEVEL;//; + + for(int i = baseI; i < maxLoop; i++){ + r = levels[i]; + // Debug.Log("r:"+r+" i:"+i); + if(r!=null /*&& checkOnScreen(r.rect)*/){ + //Debug.Log("label:"+r.labelStr+" textColor:"+r.style.normal.textColor); + if(r.useColor) + GUI.color = r.color; + if(r.type == Element_Type.Label){ + if(r.style!=null) + GUI.skin.label = r.style; + if(r.useSimpleScale){ + GUI.Label( new Rect((r.rect.x + r.margin.x + r.relativeRect.x)*r.relativeRect.width, (r.rect.y + r.margin.y + r.relativeRect.y)*r.relativeRect.height, r.rect.width*r.relativeRect.width, r.rect.height*r.relativeRect.height), r.labelStr ); + }else{ + GUI.Label( new Rect(r.rect.x + r.margin.x, r.rect.y + r.margin.y, r.rect.width, r.rect.height), r.labelStr ); + } + }else if(r.type == Element_Type.Texture && r.texture!=null){ + Vector2 size = r.useSimpleScale ? new Vector2(0f, r.rect.height*r.relativeRect.height) : new Vector2(r.rect.width, r.rect.height); + if(r.sizeByHeight){ + size.x = (float)r.texture.width/(float)r.texture.height * size.y; + } + if(r.useSimpleScale){ + GUI.DrawTexture( new Rect((r.rect.x + r.margin.x + r.relativeRect.x)*r.relativeRect.width, (r.rect.y + r.margin.y + r.relativeRect.y)*r.relativeRect.height, size.x, size.y), r.texture ); + }else{ + GUI.DrawTexture( new Rect(r.rect.x + r.margin.x, r.rect.y + r.margin.y, size.x, size.y), r.texture ); + } + } + } + } + GUI.color = color; + } + } + } + + public static bool checkOnScreen(Rect rect){ + bool offLeft = rect.x + rect.width < 0f; + bool offRight = rect.x > Screen.width; + bool offBottom = rect.y > Screen.height; + bool offTop = rect.y + rect.height < 0f; + + return !(offLeft || offRight || offBottom || offTop); + } + + public static void destroy( int id ){ + int backId = id & 0xFFFF; + int backCounter = id >> 16; + if(id>=0 && levels[backId]!=null && levels[backId].hasInitiliazed && levels[backId].counter==backCounter) + levels[backId] = null; + } + + public static void destroyAll( int depth ){ // clears all gui elements on depth + int maxLoop = depth*RECTS_PER_LEVEL + RECTS_PER_LEVEL; + for(int i = depth*RECTS_PER_LEVEL; levels!=null && i < maxLoop; i++){ + levels[i] = null; + } + } + + public static LTRect label( Rect rect, string label, int depth){ + return LTGUI.label(new LTRect(rect), label, depth); + } + + public static LTRect label( LTRect rect, string label, int depth){ + rect.type = Element_Type.Label; + rect.labelStr = label; + return element(rect, depth); + } + + public static LTRect texture( Rect rect, Texture texture, int depth){ + return LTGUI.texture( new LTRect(rect), texture, depth); + } + + public static LTRect texture( LTRect rect, Texture texture, int depth){ + rect.type = Element_Type.Texture; + rect.texture = texture; + return element(rect, depth); + } + + public static LTRect element( LTRect rect, int depth){ + isGUIEnabled = true; + init(); + int maxLoop = depth*RECTS_PER_LEVEL + RECTS_PER_LEVEL; + int k = 0; + if(rect!=null){ + destroy(rect.id); + } + if(rect.type==LTGUI.Element_Type.Label && rect.style!=null){ + if(rect.style.normal.textColor.a<=0f){ + Debug.LogWarning("Your GUI normal color has an alpha of zero, and will not be rendered."); + } + } + if(rect.relativeRect.width==float.PositiveInfinity){ + rect.relativeRect = new Rect(0f,0f,Screen.width,Screen.height); + } + for(int i = depth*RECTS_PER_LEVEL; i < maxLoop; i++){ + r = levels[i]; + if(r==null){ + r = rect; + r.rotateEnabled = true; + r.alphaEnabled = true; + r.setId( i, global_counter ); + levels[i] = r; + // Debug.Log("k:"+k+ " maxDepth:"+levelDepths[depth]); + if(k>=levelDepths[depth]){ + levelDepths[depth] = k + 1; + } + global_counter++; + return r; + } + k++; + } + + Debug.LogError("You ran out of GUI Element spaces"); + + return null; + } + + public static bool hasNoOverlap( Rect rect, int depth ){ + initRectCheck(); + bool hasNoOverlap = true; + bool wasAddedToList = false; + for(int i = 0; i < buttonLevels.Length; i++){ + // Debug.Log("buttonLastFrame["+i+"]:"+buttonLastFrame[i]); + //Debug.Log("buttonLevels["+i+"]:"+buttonLevels[i]); + if(buttonLevels[i]>=0){ + //Debug.Log("buttonLastFrame["+i+"]:"+buttonLastFrame[i]+" Time.frameCount:"+Time.frameCount); + if( buttonLastFrame[i] + 1 < Time.frameCount ){ // It has to have been visible within the current, or + buttonLevels[i] = -1; + // Debug.Log("resetting i:"+i); + }else{ + //if(buttonLevels[i]>=0) + // Debug.Log("buttonLevels["+i+"]:"+buttonLevels[i]); + if(buttonLevels[i]>depth){ + /*if(firstTouch().x > 0){ + Debug.Log("buttons["+i+"]:"+buttons[i] + " firstTouch:"); + Debug.Log(firstTouch()); + Debug.Log(buttonLevels[i]); + }*/ + if(pressedWithinRect( buttons[i] )){ + hasNoOverlap = false; // there is an overlapping button that is higher + } + } + } + } + + if(wasAddedToList==false && buttonLevels[i]<0){ + wasAddedToList = true; + buttonLevels[i] = depth; + buttons[i] = rect; + buttonLastFrame[i] = Time.frameCount; + } + } + + return hasNoOverlap; + } + + public static bool pressedWithinRect( Rect rect ){ + Vector2 vec2 = firstTouch(); + if(vec2.x<0f) + return false; + float vecY = Screen.height-vec2.y; + return (vec2.x > rect.x && vec2.x < rect.x + rect.width && vecY > rect.y && vecY < rect.y + rect.height); + } + + public static bool checkWithinRect(Vector2 vec2, Rect rect){ + vec2.y = Screen.height-vec2.y; + return (vec2.x > rect.x && vec2.x < rect.x + rect.width && vec2.y > rect.y && vec2.y < rect.y + rect.height); + } + + public static Vector2 firstTouch(){ + if(Input.touchCount>0){ + return Input.touches[0].position; + }else if(Input.GetMouseButton(0)){ + return Input.mousePosition; + } + + return new Vector2(Mathf.NegativeInfinity,Mathf.NegativeInfinity); + } + +} + +namespace DentedPixel { public class LeanDummy {} } +//} diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs.meta new file mode 100644 index 0000000..bf90165 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9c2f4b27196f84954b44753aaac214bb +timeCreated: 1463137984 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip new file mode 100644 index 0000000..029cde1 Binary files /dev/null and b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip differ diff --git a/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip.meta b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip.meta new file mode 100644 index 0000000..345e828 --- /dev/null +++ b/IronToad_UnityProject/Assets/Plugins/LeanTween/LeanTween.dll.zip.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ffeadda6aaa064923a3f7e28ff26afb1 +timeCreated: 1477948563 +licenseType: Store +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Scripts/NotificationServer.cs b/IronToad_UnityProject/Assets/Scripts/NotificationServer.cs new file mode 100644 index 0000000..e12866f --- /dev/null +++ b/IronToad_UnityProject/Assets/Scripts/NotificationServer.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class NotificationServer : MonoBehaviour +{ + static Dictionary> notifications = new Dictionary>(); + static Dictionary>> notificationsWithArgument = new Dictionary>>(); + + static public void register(string key, Action action) + { + if (!notifications.ContainsKey(key)) + notifications[key] = new List(); + if (!notifications[key].Contains(action)) + notifications[key].Add(action); + } + + static public void unregister(string key, Action action) + { + if (!notifications.ContainsKey(key)) + return; + if (!notifications[key].Contains(action)) + return; + notifications[key].Remove(action); + } + + static public void notify(string key) + { + if (!notifications.ContainsKey(key)) + return; + for (int i=0; i action) + { + if (!notificationsWithArgument.ContainsKey(key)) + notificationsWithArgument[key] = new List>(); + if (!notificationsWithArgument[key].Contains(action)) + notificationsWithArgument[key].Add(action); + } + + static public void unregister(string key, Action action) + { + if (!notificationsWithArgument.ContainsKey(key)) + return; + if (!notificationsWithArgument[key].Contains(action)) + return; + notificationsWithArgument[key].Remove(action); + } + + static public void notify(string key, object argument) + { + if (!notificationsWithArgument.ContainsKey(key)) + return; + for (int i=0; i(); + canvasGroup = GetComponent(); + if (canvasGroup == null) + canvasGroup = gameObject.AddComponent(); + + if (overrideNotifyName == null || overrideNotifyName == "") + { + NotificationServer.register("show " + gameObject.name, showPanel); + NotificationServer.register("hide " + gameObject.name, hidePanel); + } + else + { + NotificationServer.register("show " + overrideNotifyName, showPanel); + NotificationServer.register("hide " + overrideNotifyName, hidePanel); + } + } + + void Start() + { + originalPos = rectTransform.anchoredPosition3D; + + if (showOnAwake) + setShowState(); + else + setHideState(); + } + + public void showPanel() + { + float startAlpha = 0f; + float endAlpha = 1f; + Vector3 startPos = originalPos; + Vector3 endPos = originalPos; + Vector3 startScale = Vector3.one; + Vector3 endScale = Vector3.one; + + if (showAnimType == UIAnimType.ZoomIn) + startScale /= zoomAmount; + else if (showAnimType == UIAnimType.ZoomOut) + startScale *= zoomAmount; + else if (showAnimType == UIAnimType.SlideRight) + startPos += Vector3.left * slideAmount; + else if (showAnimType == UIAnimType.SlideLeft) + startPos += Vector3.right * slideAmount; + else if (showAnimType == UIAnimType.SlideUp) + startPos += Vector3.down * slideAmount; + else if (showAnimType == UIAnimType.SlideDown) + startPos += Vector3.up * slideAmount; + + LeanTween.cancel(gameObject, true); + canvasGroup.interactable = false; + canvasGroup.blocksRaycasts = true; + canvasGroup.alpha = startAlpha; + rectTransform.anchoredPosition3D = startPos; + transform.localScale = startScale; + LeanTween.value(gameObject, 0f, 1f, time).setOnUpdate((float val)=>{ + canvasGroup.alpha = startAlpha + (endAlpha-startAlpha)*fadeCurve.Evaluate(val); + rectTransform.anchoredPosition3D = startPos + (endPos-startPos)*showCurve.Evaluate(val); + transform.localScale = startScale + (endScale-startScale)*showCurve.Evaluate(val); + }).setOnComplete(setShowState); + } + + public void hidePanel() + { + float startAlpha = 1f; + float endAlpha = 0f; + Vector3 startPos = originalPos; + Vector3 endPos = originalPos; + Vector3 startScale = Vector3.one; + Vector3 endScale = Vector3.one; + + if (hideAnimType == UIAnimType.ZoomIn) + endScale *= zoomAmount; + else if (hideAnimType == UIAnimType.ZoomOut) + endScale /= zoomAmount; + else if (hideAnimType == UIAnimType.SlideRight) + endPos += Vector3.right * slideAmount; + else if (hideAnimType == UIAnimType.SlideLeft) + endPos += Vector3.left * slideAmount; + else if (hideAnimType == UIAnimType.SlideUp) + endPos += Vector3.up * slideAmount; + else if (hideAnimType == UIAnimType.SlideDown) + endPos += Vector3.down * slideAmount; + + LeanTween.cancel(gameObject, true); + canvasGroup.interactable = false; + canvasGroup.blocksRaycasts = true; + canvasGroup.alpha = startAlpha; + rectTransform.anchoredPosition3D = startPos; + transform.localScale = startScale; + LeanTween.value(gameObject, 0f, 1f, time).setOnUpdate((float val)=>{ + canvasGroup.alpha = startAlpha + (endAlpha-startAlpha)*fadeCurve.Evaluate(val); + rectTransform.anchoredPosition3D = startPos + (endPos-startPos)*hideCurve.Evaluate(val); + transform.localScale = startScale + (endScale-startScale)*hideCurve.Evaluate(val); + }).setOnComplete(setHideState); + } + + public void setShowState() + { + canvasGroup.interactable = true; + canvasGroup.blocksRaycasts = true; + canvasGroup.alpha = 1f; + rectTransform.anchoredPosition3D = originalPos; + transform.localScale = Vector3.one; + } + + public void setHideState() + { + canvasGroup.interactable = false; + canvasGroup.blocksRaycasts = false; + canvasGroup.alpha = 0f; + } + + public void quitApplication() + { + Application.Quit(); + } + + public void startGame() + { + NotificationServer.notify("show GameUI"); + } +} diff --git a/IronToad_UnityProject/Assets/Scripts/UIPanel.cs.meta b/IronToad_UnityProject/Assets/Scripts/UIPanel.cs.meta new file mode 100644 index 0000000..6d7d565 --- /dev/null +++ b/IronToad_UnityProject/Assets/Scripts/UIPanel.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8aa49c1af99fd4b5089b614c16f08e8c +timeCreated: 1484954504 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Sound/SFX.meta b/IronToad_UnityProject/Assets/Sound/SFX.meta deleted file mode 100644 index aa8f028..0000000 --- a/IronToad_UnityProject/Assets/Sound/SFX.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 01964e6f65d05334f85cbe4439c557cd -folderAsset: yes -timeCreated: 1484909407 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Standard Assets.meta b/IronToad_UnityProject/Assets/Standard Assets.meta new file mode 100644 index 0000000..306f0ed --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 49f2ee8b06c098745904671a9ef990b0 +folderAsset: yes +timeCreated: 1484960567 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects.meta new file mode 100644 index 0000000..fc4ec9c --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 115d1f9d9bd29064ab981e57c8fc8cdf +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading.meta new file mode 100644 index 0000000..0377a75 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 488ccf78ce5fbe14db33f20cccd9f386 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials.meta new file mode 100644 index 0000000..aea70cf --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 280da6451a1e556438ce789a0d7e1f65 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat new file mode 100644 index 0000000..a079c65 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat @@ -0,0 +1,58 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ToonBasic + m_Shader: {fileID: 4800000, guid: d84268709d11078d11005b9844295342, type: 3} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ToonShade + second: + m_Texture: {fileID: 8900000, guid: b995d4bd9d11078d11005b9844295342, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Shininess + second: .699999988 + data: + first: + name: _Outline + second: .00701886788 + m_Colors: + data: + first: + name: _Color + second: {r: .462686539, g: .462686539, b: .462686539, a: 1} + data: + first: + name: _Emission + second: {r: 0, g: 0, b: 0, a: 0} + data: + first: + name: _SpecColor + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _OutlineColor + second: {r: 0, g: 0, b: 0, a: 1} +--- !u!1002 &2100001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat.meta new file mode 100644 index 0000000..7565316 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasic.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 84b9e1d19d11078d11005b9844295342 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat new file mode 100644 index 0000000..d45073c --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat @@ -0,0 +1,58 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ToonBasicOutline + m_Shader: {fileID: 4800000, guid: 9ce107479d11178d11005b9844295342, type: 3} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ToonShade + second: + m_Texture: {fileID: 8900000, guid: b995d4bd9d11078d11005b9844295342, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Shininess + second: .57971698 + data: + first: + name: _Outline + second: .00659701508 + m_Colors: + data: + first: + name: _Color + second: {r: .462686539, g: .462686539, b: .462686539, a: 1} + data: + first: + name: _Emission + second: {r: 0, g: 0, b: 0, a: 0} + data: + first: + name: _SpecColor + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _OutlineColor + second: {r: 0, g: 0, b: 0, a: 1} +--- !u!1002 &2100001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat.meta new file mode 100644 index 0000000..2245486 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonBasicOutline.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 215977489d11178d11005b9844295342 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat new file mode 100644 index 0000000..84c2369 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat @@ -0,0 +1,80 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ToonLit + m_Shader: {fileID: 4800000, guid: 48dca5b99d113b8d11006bab44295342, type: 3} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 2800000, guid: 9ca701319d113f2d1100ff9b44295342, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _BumpMap + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ToonShade + second: + m_Texture: {fileID: 8900000, guid: ed7fefe29d117c8d11005e4844295342, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _Ramp + second: + m_Texture: {fileID: 2800000, guid: 4a056241e2722dc46a7262a8e7073fd9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Shininess + second: .699999988 + data: + first: + name: _Outline + second: .00807547197 + m_Colors: + data: + first: + name: _Color + second: {r: .50251013, g: .50251013, b: .50251013, a: 1} + data: + first: + name: _MainTex_ST + second: {r: 1, g: 1, b: 0, a: 0} + data: + first: + name: _Emission + second: {r: 0, g: 0, b: 0, a: 0} + data: + first: + name: _SpecColor + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _OutlineColor + second: {r: 0, g: 0, b: 0, a: 1} + data: + first: + name: _ToonShade_ST + second: {r: 1, g: 1, b: 0, a: 0} +--- !u!1002 &2100001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat.meta new file mode 100644 index 0000000..d1e1513 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLit.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: c9e6294c9d11cb8d11006bf944295342 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat new file mode 100644 index 0000000..e8c2c41 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat @@ -0,0 +1,65 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_PrefabParentObject: {fileID: 0} + m_PrefabInternal: {fileID: 0} + m_Name: ToonLitOutline + m_Shader: {fileID: 4800000, guid: 054a31a99d11e49d110086ba44295342, type: 3} + m_ShaderKeywords: [] + m_CustomRenderQueue: -1 + m_SavedProperties: + serializedVersion: 2 + m_TexEnvs: + data: + first: + name: _MainTex + second: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _ToonShade + second: + m_Texture: {fileID: 8900000, guid: ed7fefe29d117c8d11005e4844295342, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + data: + first: + name: _Ramp + second: + m_Texture: {fileID: 2800000, guid: 4a056241e2722dc46a7262a8e7073fd9, type: 3} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Floats: + data: + first: + name: _Shininess + second: .699999988 + data: + first: + name: _Outline + second: .00701492419 + m_Colors: + data: + first: + name: _Color + second: {r: .50251013, g: .50251013, b: .50251013, a: 1} + data: + first: + name: _Emission + second: {r: 0, g: 0, b: 0, a: 0} + data: + first: + name: _SpecColor + second: {r: 1, g: 1, b: 1, a: 1} + data: + first: + name: _OutlineColor + second: {r: 0, g: 0, b: 0, a: 1} +--- !u!1002 &2100001 +EditorExtensionImpl: + serializedVersion: 6 diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat.meta new file mode 100644 index 0000000..c711bf0 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Materials/ToonLitOutline.mat.meta @@ -0,0 +1,5 @@ +fileFormatVersion: 2 +guid: 5d69df9d9d11e49d110086ba44295342 +NativeFormatImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders.meta new file mode 100644 index 0000000..4d2b87a --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: adec466a1f9044ea78471a5ce6f78271 +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader new file mode 100644 index 0000000..63f0b37 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader @@ -0,0 +1,63 @@ +Shader "Toon/Basic" { + Properties { + _Color ("Main Color", Color) = (.5,.5,.5,1) + _MainTex ("Base (RGB)", 2D) = "white" {} + _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { } + } + + + SubShader { + Tags { "RenderType"="Opaque" } + Pass { + Name "BASE" + Cull Off + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + + #include "UnityCG.cginc" + + sampler2D _MainTex; + samplerCUBE _ToonShade; + float4 _MainTex_ST; + float4 _Color; + + struct appdata { + float4 vertex : POSITION; + float2 texcoord : TEXCOORD0; + float3 normal : NORMAL; + }; + + struct v2f { + float4 pos : SV_POSITION; + float2 texcoord : TEXCOORD0; + float3 cubenormal : TEXCOORD1; + UNITY_FOG_COORDS(2) + }; + + v2f vert (appdata v) + { + v2f o; + o.pos = mul (UNITY_MATRIX_MVP, v.vertex); + o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex); + o.cubenormal = mul (UNITY_MATRIX_MV, float4(v.normal,0)); + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + fixed4 col = _Color * tex2D(_MainTex, i.texcoord); + fixed4 cube = texCUBE(_ToonShade, i.cubenormal); + fixed4 c = fixed4(2.0f * cube.rgb * col.rgb, col.a); + UNITY_APPLY_FOG(i.fogCoord, c); + return c; + } + ENDCG + } + } + + Fallback "VertexLit" +} diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader.meta new file mode 100644 index 0000000..a144389 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasic.shader.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: d84268709d11078d11005b9844295342 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader new file mode 100644 index 0000000..3d62217 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader @@ -0,0 +1,70 @@ +Shader "Toon/Basic Outline" { + Properties { + _Color ("Main Color", Color) = (.5,.5,.5,1) + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _Outline ("Outline width", Range (.002, 0.03)) = .005 + _MainTex ("Base (RGB)", 2D) = "white" { } + _ToonShade ("ToonShader Cubemap(RGB)", CUBE) = "" { } + } + + CGINCLUDE + #include "UnityCG.cginc" + + struct appdata { + float4 vertex : POSITION; + float3 normal : NORMAL; + }; + + struct v2f { + float4 pos : SV_POSITION; + UNITY_FOG_COORDS(0) + fixed4 color : COLOR; + }; + + uniform float _Outline; + uniform float4 _OutlineColor; + + v2f vert(appdata v) { + v2f o; + o.pos = mul(UNITY_MATRIX_MVP, v.vertex); + + float3 norm = normalize(mul ((float3x3)UNITY_MATRIX_IT_MV, v.normal)); + float2 offset = TransformViewToProjection(norm.xy); + + #ifdef UNITY_Z_0_FAR_FROM_CLIPSPACE //to handle recent standard asset package on older version of unity (before 5.5) + o.pos.xy += offset * UNITY_Z_0_FAR_FROM_CLIPSPACE(o.pos.z) * _Outline; + #else + o.pos.xy += offset * o.pos.z * _Outline; + #endif + o.color = _OutlineColor; + UNITY_TRANSFER_FOG(o,o.pos); + return o; + } + ENDCG + + SubShader { + Tags { "RenderType"="Opaque" } + UsePass "Toon/Basic/BASE" + Pass { + Name "OUTLINE" + Tags { "LightMode" = "Always" } + Cull Front + ZWrite On + ColorMask RGB + Blend SrcAlpha OneMinusSrcAlpha + + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile_fog + fixed4 frag(v2f i) : SV_Target + { + UNITY_APPLY_FOG(i.fogCoord, i.color); + return i.color; + } + ENDCG + } + } + + Fallback "Toon/Basic" +} diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader.meta new file mode 100644 index 0000000..7e1c493 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonBasicOutline.shader.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 9ce107479d11178d11005b9844295342 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader new file mode 100644 index 0000000..254b7ec --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader @@ -0,0 +1,53 @@ +Shader "Toon/Lit" { + Properties { + _Color ("Main Color", Color) = (0.5,0.5,0.5,1) + _MainTex ("Base (RGB)", 2D) = "white" {} + _Ramp ("Toon Ramp (RGB)", 2D) = "gray" {} + } + + SubShader { + Tags { "RenderType"="Opaque" } + LOD 200 + +CGPROGRAM +#pragma surface surf ToonRamp + +sampler2D _Ramp; + +// custom lighting function that uses a texture ramp based +// on angle between light direction and normal +#pragma lighting ToonRamp exclude_path:prepass +inline half4 LightingToonRamp (SurfaceOutput s, half3 lightDir, half atten) +{ + #ifndef USING_DIRECTIONAL_LIGHT + lightDir = normalize(lightDir); + #endif + + half d = dot (s.Normal, lightDir)*0.5 + 0.5; + half3 ramp = tex2D (_Ramp, float2(d,d)).rgb; + + half4 c; + c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2); + c.a = 0; + return c; +} + + +sampler2D _MainTex; +float4 _Color; + +struct Input { + float2 uv_MainTex : TEXCOORD0; +}; + +void surf (Input IN, inout SurfaceOutput o) { + half4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color; + o.Albedo = c.rgb; + o.Alpha = c.a; +} +ENDCG + + } + + Fallback "Diffuse" +} diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader.meta new file mode 100644 index 0000000..771203c --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLit.shader.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 48dca5b99d113b8d11006bab44295342 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader new file mode 100644 index 0000000..817c0ce --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader @@ -0,0 +1,17 @@ +Shader "Toon/Lit Outline" { + Properties { + _Color ("Main Color", Color) = (0.5,0.5,0.5,1) + _OutlineColor ("Outline Color", Color) = (0,0,0,1) + _Outline ("Outline width", Range (.002, 0.03)) = .005 + _MainTex ("Base (RGB)", 2D) = "white" {} + _Ramp ("Toon Ramp (RGB)", 2D) = "gray" {} + } + + SubShader { + Tags { "RenderType"="Opaque" } + UsePass "Toon/Lit/FORWARD" + UsePass "Toon/Basic Outline/OUTLINE" + } + + Fallback "Toon/Lit" +} diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader.meta new file mode 100644 index 0000000..329c53b --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Shaders/ToonLitOutline.shader.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 054a31a99d11e49d110086ba44295342 +ShaderImporter: + defaultTextures: [] + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures.meta new file mode 100644 index 0000000..6555d84 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: 651770f8be26443fdb85aa3594fa349c +folderAsset: yes +DefaultImporter: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd new file mode 100644 index 0000000..5208374 Binary files /dev/null and b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd differ diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd.meta new file mode 100644 index 0000000..6073900 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/ToonLit.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: b995d4bd9d11078d11005b9844295342 +TextureImporter: + fileIDToRecycleName: + 8900000: generatedCubemap + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 2 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 1 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: 3 + maxTextureSize: 512 + textureSettings: + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapMode: 0 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: -1 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png new file mode 100644 index 0000000..7ce1e8e Binary files /dev/null and b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png differ diff --git a/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png.meta b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png.meta new file mode 100644 index 0000000..c9b7612 --- /dev/null +++ b/IronToad_UnityProject/Assets/Standard Assets/Effects/ToonShading/Textures/UtilToonGradient.png.meta @@ -0,0 +1,52 @@ +fileFormatVersion: 2 +guid: 4a056241e2722dc46a7262a8e7073fd9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 0 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 2 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: 5 + maxTextureSize: 1024 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 0 + textureType: 5 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: diff --git a/IronToad_UnityProject/Assets/Textures.meta b/IronToad_UnityProject/Assets/Textures.meta deleted file mode 100644 index 8e72aa1..0000000 --- a/IronToad_UnityProject/Assets/Textures.meta +++ /dev/null @@ -1,9 +0,0 @@ -fileFormatVersion: 2 -guid: 2b4a3726b0227a643bfdc00ab1d57bf0 -folderAsset: yes -timeCreated: 1484909378 -licenseType: Free -DefaultImporter: - userData: - assetBundleName: - assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/ThirdParty.txt b/IronToad_UnityProject/Assets/ThirdParty.txt new file mode 100644 index 0000000..095fee3 --- /dev/null +++ b/IronToad_UnityProject/Assets/ThirdParty.txt @@ -0,0 +1,2 @@ +BG Curve (1.2.2) by BansheeGz +LeanTween (2.43) by Dented Pixel diff --git a/IronToad_UnityProject/Assets/ThirdParty.txt.meta b/IronToad_UnityProject/Assets/ThirdParty.txt.meta new file mode 100644 index 0000000..f44789b --- /dev/null +++ b/IronToad_UnityProject/Assets/ThirdParty.txt.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e5032c485b6414633a91c55c611f9d6a +timeCreated: 1484953148 +licenseType: Free +TextScriptImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/UIArt.meta b/IronToad_UnityProject/Assets/UIArt.meta new file mode 100644 index 0000000..1107c81 --- /dev/null +++ b/IronToad_UnityProject/Assets/UIArt.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b74f3535a3a9243688681f369868c5b8 +folderAsset: yes +timeCreated: 1484960160 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png b/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png new file mode 100644 index 0000000..44ca0bc Binary files /dev/null and b/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png differ diff --git a/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png.meta b/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png.meta new file mode 100644 index 0000000..444c0f0 --- /dev/null +++ b/IronToad_UnityProject/Assets/UIArt/Icon_4-512.png.meta @@ -0,0 +1,124 @@ +fileFormatVersion: 2 +guid: 1cecc76fb3f1c48238c24811bb2c21e9 +timeCreated: 1484960141 +licenseType: Free +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: iPhone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: tvOS + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Tizen + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: WebGL + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Samsung TV + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 1 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: ui + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity b/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity new file mode 100644 index 0000000..1c698e5 Binary files /dev/null and b/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity differ diff --git a/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity.meta b/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity.meta new file mode 100644 index 0000000..cbc072b --- /dev/null +++ b/IronToad_UnityProject/Assets/_Scenes/GreyBox_Prototype.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9481e1c181ea754a93f2a5142f5cafe +timeCreated: 1484952908 +licenseType: Pro +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity b/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity new file mode 100644 index 0000000..f3c5d53 Binary files /dev/null and b/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity differ diff --git a/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity.meta b/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity.meta new file mode 100644 index 0000000..c9a68a0 --- /dev/null +++ b/IronToad_UnityProject/Assets/_Scenes/UITestScene.unity.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 02b5452cf323349359d4548b3e31c235 +timeCreated: 1484917387 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/IronToad_UnityProject/Library/AssetImportState b/IronToad_UnityProject/Library/AssetImportState deleted file mode 100644 index 9a1ac96..0000000 --- a/IronToad_UnityProject/Library/AssetImportState +++ /dev/null @@ -1 +0,0 @@ -5;0;6;0;0 \ No newline at end of file diff --git a/IronToad_UnityProject/Library/AssetServerCacheV3 b/IronToad_UnityProject/Library/AssetServerCacheV3 deleted file mode 100644 index fadb5f2..0000000 Binary files a/IronToad_UnityProject/Library/AssetServerCacheV3 and /dev/null differ diff --git a/IronToad_UnityProject/Library/AssetVersioning.db b/IronToad_UnityProject/Library/AssetVersioning.db deleted file mode 100644 index 2f50a71..0000000 Binary files a/IronToad_UnityProject/Library/AssetVersioning.db and /dev/null differ diff --git a/IronToad_UnityProject/Library/BuildPlayer.prefs b/IronToad_UnityProject/Library/BuildPlayer.prefs deleted file mode 100644 index e69de29..0000000 diff --git a/IronToad_UnityProject/Library/BuildSettings.asset b/IronToad_UnityProject/Library/BuildSettings.asset deleted file mode 100644 index 516c6f8..0000000 Binary files a/IronToad_UnityProject/Library/BuildSettings.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/CurrentLayout.dwlt b/IronToad_UnityProject/Library/CurrentLayout.dwlt deleted file mode 100644 index a9bf87c..0000000 Binary files a/IronToad_UnityProject/Library/CurrentLayout.dwlt and /dev/null differ diff --git a/IronToad_UnityProject/Library/EditorUserBuildSettings.asset b/IronToad_UnityProject/Library/EditorUserBuildSettings.asset deleted file mode 100644 index 32cab2c..0000000 Binary files a/IronToad_UnityProject/Library/EditorUserBuildSettings.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/EditorUserSettings.asset b/IronToad_UnityProject/Library/EditorUserSettings.asset deleted file mode 100644 index aa41f2d..0000000 Binary files a/IronToad_UnityProject/Library/EditorUserSettings.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/InspectorExpandedItems.asset b/IronToad_UnityProject/Library/InspectorExpandedItems.asset deleted file mode 100644 index 709d609..0000000 Binary files a/IronToad_UnityProject/Library/InspectorExpandedItems.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/LastSceneManagerSetup.txt b/IronToad_UnityProject/Library/LastSceneManagerSetup.txt deleted file mode 100644 index dd18ea7..0000000 --- a/IronToad_UnityProject/Library/LastSceneManagerSetup.txt +++ /dev/null @@ -1 +0,0 @@ -sceneSetups: [] diff --git a/IronToad_UnityProject/Library/LibraryFormatVersion.txt b/IronToad_UnityProject/Library/LibraryFormatVersion.txt deleted file mode 100644 index 6185f09..0000000 --- a/IronToad_UnityProject/Library/LibraryFormatVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -unityRebuildLibraryVersion: 11 -unityForwardCompatibleVersion: 40 diff --git a/IronToad_UnityProject/Library/MonoManager.asset b/IronToad_UnityProject/Library/MonoManager.asset deleted file mode 100644 index a3d6722..0000000 Binary files a/IronToad_UnityProject/Library/MonoManager.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/ProjectSettings.asset b/IronToad_UnityProject/Library/ProjectSettings.asset deleted file mode 100644 index 98bef78..0000000 Binary files a/IronToad_UnityProject/Library/ProjectSettings.asset and /dev/null differ diff --git a/IronToad_UnityProject/Library/ScriptAssemblies/BuiltinAssemblies.stamp b/IronToad_UnityProject/Library/ScriptAssemblies/BuiltinAssemblies.stamp deleted file mode 100644 index e34c8f3..0000000 --- a/IronToad_UnityProject/Library/ScriptAssemblies/BuiltinAssemblies.stamp +++ /dev/null @@ -1,2 +0,0 @@ -0000.5837028e.0000 -0000.583702a0.0000 \ No newline at end of file diff --git a/IronToad_UnityProject/Library/ScriptMapper b/IronToad_UnityProject/Library/ScriptMapper deleted file mode 100644 index 65aa30d..0000000 Binary files a/IronToad_UnityProject/Library/ScriptMapper and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache.db b/IronToad_UnityProject/Library/ShaderCache.db deleted file mode 100644 index 93f0bb9..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache.db and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin b/IronToad_UnityProject/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin deleted file mode 100644 index e2346e6..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/1/100bd73b3200cefc7cd32442b92eba4a.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin b/IronToad_UnityProject/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin deleted file mode 100644 index 25a1c36..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/5/5b63cb87aedcb7584ef09c21b8a190c3.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin b/IronToad_UnityProject/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin deleted file mode 100644 index 0d30117..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/7/703fa551bb95e82b29a69b53663326cd.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin b/IronToad_UnityProject/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin deleted file mode 100644 index a978c3a..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/a/a41f27b20b25491f2f85fd65b9f8a34e.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin b/IronToad_UnityProject/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin deleted file mode 100644 index 21ed045..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/a/a7c2d8b23cf01ba8c6b238e14b3adbad.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin b/IronToad_UnityProject/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin deleted file mode 100644 index d4c4d55..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/d/df1031532db8931fb764546a3d6ffb5e.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin b/IronToad_UnityProject/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin deleted file mode 100644 index d6d1f13..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/f/f04a9b47488db80fffaea3361cf091ea.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin b/IronToad_UnityProject/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin deleted file mode 100644 index d6d1f13..0000000 Binary files a/IronToad_UnityProject/Library/ShaderCache/f/ffd1d5a27655f0e39ddf225cada28231.bin and /dev/null differ diff --git a/IronToad_UnityProject/Library/assetDatabase3 b/IronToad_UnityProject/Library/assetDatabase3 deleted file mode 100644 index dae8b0e..0000000 Binary files a/IronToad_UnityProject/Library/assetDatabase3 and /dev/null differ diff --git a/IronToad_UnityProject/Library/expandedItems b/IronToad_UnityProject/Library/expandedItems deleted file mode 100644 index bf6b622..0000000 Binary files a/IronToad_UnityProject/Library/expandedItems and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000 deleted file mode 100644 index 46ddc6a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000.info deleted file mode 100644 index 0a194ff..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000001000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000 deleted file mode 100644 index b210323..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000.info deleted file mode 100644 index 650a329..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000002000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000 deleted file mode 100644 index f1537be..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000.info deleted file mode 100644 index 6f1239c..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000003000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000 deleted file mode 100644 index 37d7497..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000.info deleted file mode 100644 index 963c9de..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000004000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000 deleted file mode 100644 index 8b2143a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000.info deleted file mode 100644 index 98a4ff9..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000004100000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000 deleted file mode 100644 index e29137a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000.info deleted file mode 100644 index fade0c9..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000005000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000 deleted file mode 100644 index 0db161f..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000.info deleted file mode 100644 index baae292..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000005100000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000 deleted file mode 100644 index 726111b..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000.info deleted file mode 100644 index 020e772..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000006000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000 deleted file mode 100644 index 5277e1a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000.info deleted file mode 100644 index b58d6a3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000006100000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000 deleted file mode 100644 index a44c4e8..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000.info deleted file mode 100644 index 5289be6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000007000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000 deleted file mode 100644 index 8f89f7d..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000.info deleted file mode 100644 index a0a78b5..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000007100000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000 deleted file mode 100644 index fbb5fb5..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000.info deleted file mode 100644 index 94385d4..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000008000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000 b/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000 deleted file mode 100644 index 5e4bacf..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000.info b/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000.info deleted file mode 100644 index 5347fb6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/00000000000000009000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000 b/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000 deleted file mode 100644 index 85cb9ea..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000.info b/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000.info deleted file mode 100644 index 32a7c62..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000a000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000 b/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000 deleted file mode 100644 index 1513e6f..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000.info b/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000.info deleted file mode 100644 index 0827fee..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000a100000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000 b/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000 deleted file mode 100644 index c7126a2..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000.info b/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000.info deleted file mode 100644 index 54067b1..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000b000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000 b/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000 deleted file mode 100644 index 5efe3f1..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000.info b/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000.info deleted file mode 100644 index e71d9d3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/00/0000000000000000c000000000000000.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd b/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd deleted file mode 100644 index 1ede7f5..0000000 Binary files a/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd.info b/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd.info deleted file mode 100644 index 23a7ccb..0000000 Binary files a/IronToad_UnityProject/Library/metadata/01/01964e6f65d05334f85cbe4439c557cd.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79 b/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79 deleted file mode 100644 index d7edbfe..0000000 Binary files a/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79.info b/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79.info deleted file mode 100644 index a78e614..0000000 Binary files a/IronToad_UnityProject/Library/metadata/06/06bba0cb55a0ad94983c8d5e34921e79.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a b/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a deleted file mode 100644 index 02e348a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info b/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info deleted file mode 100644 index 4b71158..0000000 Binary files a/IronToad_UnityProject/Library/metadata/0d/0d3bb855445e36e479c85976fc88383a.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 b/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 deleted file mode 100644 index bbc75c9..0000000 Binary files a/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info b/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info deleted file mode 100644 index a0875a0..0000000 Binary files a/IronToad_UnityProject/Library/metadata/12/12fd8a0055b84bb59e84c9835a37e333.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 b/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 deleted file mode 100644 index d649d65..0000000 Binary files a/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info b/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info deleted file mode 100644 index 5700bba..0000000 Binary files a/IronToad_UnityProject/Library/metadata/1c/1c6d1fbb51834b64847b1b73a75bfc77.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 b/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 deleted file mode 100644 index 95a2e84..0000000 Binary files a/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info b/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info deleted file mode 100644 index 084273e..0000000 Binary files a/IronToad_UnityProject/Library/metadata/21/21eff446d50eaf44a85985cd4c0b6fa1.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 b/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 deleted file mode 100644 index c2e2a77..0000000 Binary files a/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info b/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info deleted file mode 100644 index e9959ab..0000000 Binary files a/IronToad_UnityProject/Library/metadata/26/2682a692a2be7e14e901a738c7806da0.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc b/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc deleted file mode 100644 index 66eabe3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc.info b/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc.info deleted file mode 100644 index ac48656..0000000 Binary files a/IronToad_UnityProject/Library/metadata/26/26b2bb669ca0b444db1c3004967a87cc.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0 b/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0 deleted file mode 100644 index 0f30542..0000000 Binary files a/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0.info b/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0.info deleted file mode 100644 index ed0aaa6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/2b/2b4a3726b0227a643bfdc00ab1d57bf0.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 b/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 deleted file mode 100644 index 78e1af7..0000000 Binary files a/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info b/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info deleted file mode 100644 index b7d8e89..0000000 Binary files a/IronToad_UnityProject/Library/metadata/2f/2fe3476eabbbb6c448e6b55a2cc471f5.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 b/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 deleted file mode 100644 index c9fe5c8..0000000 Binary files a/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info b/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info deleted file mode 100644 index 2548157..0000000 Binary files a/IronToad_UnityProject/Library/metadata/30/307433eba81a469ab1e2084d52d1a5a2.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 b/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 deleted file mode 100644 index 6770a72..0000000 Binary files a/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info b/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info deleted file mode 100644 index f353132..0000000 Binary files a/IronToad_UnityProject/Library/metadata/32/32188fd89022c154c81befa2f0e00be0.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 b/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 deleted file mode 100644 index e5b2aeb..0000000 Binary files a/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info b/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info deleted file mode 100644 index 65d5010..0000000 Binary files a/IronToad_UnityProject/Library/metadata/32/328cc881519068e4eb7db4bb907ad2d9.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778 b/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778 deleted file mode 100644 index 96f4ec6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778.info b/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778.info deleted file mode 100644 index f8f6e6b..0000000 Binary files a/IronToad_UnityProject/Library/metadata/38/3840d50d014fff442a04a43739a88778.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 b/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 deleted file mode 100644 index 9115488..0000000 Binary files a/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info b/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info deleted file mode 100644 index 7ba4904..0000000 Binary files a/IronToad_UnityProject/Library/metadata/3c/3c0ad459c1534645b5d603b7cc258f97.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 b/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 deleted file mode 100644 index 416a157..0000000 Binary files a/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info b/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info deleted file mode 100644 index 3745e96..0000000 Binary files a/IronToad_UnityProject/Library/metadata/41/4113173d5e95493ab8765d7b08371de4.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 b/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 deleted file mode 100644 index deba7bd..0000000 Binary files a/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info b/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info deleted file mode 100644 index d77eade..0000000 Binary files a/IronToad_UnityProject/Library/metadata/49/49f5766d0d4954f44b85d4bbd7131677.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f b/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f deleted file mode 100644 index 42d1404..0000000 Binary files a/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info b/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info deleted file mode 100644 index 20ea559..0000000 Binary files a/IronToad_UnityProject/Library/metadata/4b/4ba2329b63d54f0187bcaa12486b1b0f.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 b/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 deleted file mode 100644 index 9959e84..0000000 Binary files a/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info b/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info deleted file mode 100644 index b9a37c2..0000000 Binary files a/IronToad_UnityProject/Library/metadata/51/517af1b5b81b93b43b9745d58f017562.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 b/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 deleted file mode 100644 index 11290c7..0000000 Binary files a/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info b/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info deleted file mode 100644 index cd53daa..0000000 Binary files a/IronToad_UnityProject/Library/metadata/53/53ebcfaa2e1e4e2dbc85882cd5a73fa1.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc b/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc deleted file mode 100644 index 8bb750e..0000000 Binary files a/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info b/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info deleted file mode 100644 index 2f38d58..0000000 Binary files a/IronToad_UnityProject/Library/metadata/57/5782f9e9e6e0bb94bac99aeea24814fc.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 b/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 deleted file mode 100644 index ee3784a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info b/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info deleted file mode 100644 index 12bc61d..0000000 Binary files a/IronToad_UnityProject/Library/metadata/5f/5f32cd94baa94578a686d4b9d6b660f7.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf b/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf deleted file mode 100644 index 980d337..0000000 Binary files a/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf.info b/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf.info deleted file mode 100644 index bbaad88..0000000 Binary files a/IronToad_UnityProject/Library/metadata/69/6981461fe431401459211818212a29cf.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 b/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 deleted file mode 100644 index eb9477c..0000000 Binary files a/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info b/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info deleted file mode 100644 index 836c869..0000000 Binary files a/IronToad_UnityProject/Library/metadata/6c/6cdf1e5c78d14720aaadccd4c792df96.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef b/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef deleted file mode 100644 index 44e3623..0000000 Binary files a/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info b/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info deleted file mode 100644 index 74e70e4..0000000 Binary files a/IronToad_UnityProject/Library/metadata/73/739bbd9f364b4268874f9fd86ab3beef.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e b/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e deleted file mode 100644 index c53c506..0000000 Binary files a/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info b/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info deleted file mode 100644 index 2ad4725..0000000 Binary files a/IronToad_UnityProject/Library/metadata/7c/7cbab2be89b54486bbd23a6fe637d30e.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f b/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f deleted file mode 100644 index 23a9eb9..0000000 Binary files a/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info b/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info deleted file mode 100644 index beedd87..0000000 Binary files a/IronToad_UnityProject/Library/metadata/80/80a3616ca19596e4da0f10f14d241e9f.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 b/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 deleted file mode 100644 index 6213f88..0000000 Binary files a/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info b/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info deleted file mode 100644 index fe21083..0000000 Binary files a/IronToad_UnityProject/Library/metadata/84/84ca94c19f25ae14d83aa41bb3654390.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0 b/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0 deleted file mode 100644 index d7b9bd6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0.info b/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0.info deleted file mode 100644 index 8c4d6a6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/85/852e56802eb941638acbb491814497b0.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24 b/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24 deleted file mode 100644 index 9ab2988..0000000 Binary files a/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24.info b/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24.info deleted file mode 100644 index 626c3d3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/86/8676adc5f0d75c24b8aa52f6d2cb7e24.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a b/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a deleted file mode 100644 index 4a9369d..0000000 Binary files a/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info b/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info deleted file mode 100644 index 4f4fbea..0000000 Binary files a/IronToad_UnityProject/Library/metadata/86/86f4de9468454445ac2f39e207fafa3a.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba b/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba deleted file mode 100644 index 9da29b3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info b/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info deleted file mode 100644 index a35de2a..0000000 Binary files a/IronToad_UnityProject/Library/metadata/87/870353891bb340e2b2a9c8707e7419ba.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 b/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 deleted file mode 100644 index 904d311..0000000 Binary files a/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info b/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info deleted file mode 100644 index 074026e..0000000 Binary files a/IronToad_UnityProject/Library/metadata/8e/8e0cd8ed44d4412cbe0642067abc9e44.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe b/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe deleted file mode 100644 index 7c65ccf..0000000 Binary files a/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info b/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info deleted file mode 100644 index 4a69639..0000000 Binary files a/IronToad_UnityProject/Library/metadata/8e/8e7066e382b0fc749b25dbb1a3004dfe.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead b/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead deleted file mode 100644 index 8a4760b..0000000 Binary files a/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info b/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info deleted file mode 100644 index fc19d4e..0000000 Binary files a/IronToad_UnityProject/Library/metadata/97/97decbdab0634cdd991f8d23ddf0dead.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f b/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f deleted file mode 100644 index bfcd618..0000000 Binary files a/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info b/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info deleted file mode 100644 index c70deee..0000000 Binary files a/IronToad_UnityProject/Library/metadata/ad/adebbd281f1a4ef3a30be7f21937e02f.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 b/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 deleted file mode 100644 index c28c63d..0000000 Binary files a/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info b/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info deleted file mode 100644 index 004c758..0000000 Binary files a/IronToad_UnityProject/Library/metadata/b2/b2bead50dbf86924f8e51f03ddbebf70.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c b/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c deleted file mode 100644 index c6e4bf0..0000000 Binary files a/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c.info b/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c.info deleted file mode 100644 index 679cc13..0000000 Binary files a/IronToad_UnityProject/Library/metadata/c3/c3c37dccb1d28fb4d8a2af9b0d3c182c.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a b/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a deleted file mode 100644 index 3fea493..0000000 Binary files a/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a.info b/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a.info deleted file mode 100644 index 91382f3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/d0/d05b96cee66e14240838de167097537a.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 b/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 deleted file mode 100644 index e858ca5..0000000 Binary files a/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info b/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info deleted file mode 100644 index f476560..0000000 Binary files a/IronToad_UnityProject/Library/metadata/d9/d91035c548f23744c9bfb107348ed1c0.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb b/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb deleted file mode 100644 index b27d97d..0000000 Binary files a/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info b/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info deleted file mode 100644 index ef29fd6..0000000 Binary files a/IronToad_UnityProject/Library/metadata/dc/dc443db3e92b4983b9738c1131f555cb.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5 b/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5 deleted file mode 100644 index 19103c3..0000000 Binary files a/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5.info b/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5.info deleted file mode 100644 index 2944ccb..0000000 Binary files a/IronToad_UnityProject/Library/metadata/ea/ea126e335e01a684f8eab54a5c9bdfe5.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51 b/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51 deleted file mode 100644 index 1ddab71..0000000 Binary files a/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51.info b/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51.info deleted file mode 100644 index 7d9f86f..0000000 Binary files a/IronToad_UnityProject/Library/metadata/eb/ebc5806db6f12984eb385e31d5016f51.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 b/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 deleted file mode 100644 index 3c545df..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8 and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info b/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info deleted file mode 100644 index 311e931..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f5/f5f67c52d1564df4a8936ccd202a3bd8.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c b/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c deleted file mode 100644 index 6f9d389..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info b/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info deleted file mode 100644 index df250ee..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f7/f70555f144d8491a825f0804e09c671c.info and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc b/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc deleted file mode 100644 index b9c3072..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc and /dev/null differ diff --git a/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info b/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info deleted file mode 100644 index 04c551b..0000000 Binary files a/IronToad_UnityProject/Library/metadata/f7/f7b54ff4a43d4fcf81b4538b678e0bcc.info and /dev/null differ