You need to sign in or sign up before continuing.
I_Jemin

Init

Showing 613 changed files with 3863 additions and 0 deletions
1 +
2 +# Created by https://www.gitignore.io/api/unity
3 +
4 +### Unity ###
5 +/[Ll]ibrary/
6 +/[Tt]emp/
7 +/[Oo]bj/
8 +/[Bb]uild/
9 +/[Bb]uilds/
10 +/Assets/AssetStoreTools*
11 +
12 +
13 +# Visual Studio 2015 cache directory
14 +/.vscode/
15 +
16 +# Visual Studio 2015 cache directory
17 +/.vs/
18 +
19 +# Autogenerated VS/MD/Consulo solution and project files
20 +ExportedObj/
21 +.consulo/
22 +*.csproj
23 +*.unityproj
24 +*.sln
25 +*.suo
26 +*.tmp
27 +*.user
28 +*.userprefs
29 +*.pidb
30 +*.booproj
31 +*.svd
32 +*.pdb
33 +
34 +# Unity3D generated meta files
35 +*.pidb.meta
36 +
37 +# Unity3D Generated File On Crash Reports
38 +sysinfo.txt
39 +
40 +# Builds
41 +*.apk
42 +*.unitypackage
43 +
44 +
45 +# End of https://www.gitignore.io/api/unity
...\ No newline at end of file ...\ No newline at end of file
1 +fileFormatVersion: 2
2 +guid: d393f5b72d8777d48aa49843ba1f9ca4
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!134 &13400000
4 +PhysicMaterial:
5 + m_ObjectHideFlags: 0
6 + m_PrefabParentObject: {fileID: 0}
7 + m_PrefabInternal: {fileID: 0}
8 + m_Name: Ball Physics Material
9 + dynamicFriction: 1
10 + staticFriction: 1
11 + bounciness: 0
12 + frictionCombine: 0
13 + bounceCombine: 0
1 +fileFormatVersion: 2
2 +guid: e05af2f3a6bdd3743af70b50868da37b
3 +timeCreated: 1523554632
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + externalObjects: {}
7 + mainObjectFileID: 13400000
8 + userData:
9 + assetBundleName:
10 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!29 &1
4 +OcclusionCullingSettings:
5 + m_ObjectHideFlags: 0
6 + serializedVersion: 2
7 + m_OcclusionBakeSettings:
8 + smallestOccluder: 5
9 + smallestHole: 0.25
10 + backfaceThreshold: 100
11 + m_SceneGUID: 00000000000000000000000000000000
12 + m_OcclusionCullingData: {fileID: 0}
13 +--- !u!104 &2
14 +RenderSettings:
15 + m_ObjectHideFlags: 0
16 + serializedVersion: 9
17 + m_Fog: 0
18 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
19 + m_FogMode: 3
20 + m_FogDensity: 0.01
21 + m_LinearFogStart: 0
22 + m_LinearFogEnd: 300
23 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
24 + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
25 + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
26 + m_AmbientIntensity: 1
27 + m_AmbientMode: 0
28 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
29 + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
30 + m_HaloStrength: 0.5
31 + m_FlareStrength: 1
32 + m_FlareFadeSpeed: 3
33 + m_HaloTexture: {fileID: 0}
34 + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
35 + m_DefaultReflectionMode: 0
36 + m_DefaultReflectionResolution: 128
37 + m_ReflectionBounces: 1
38 + m_ReflectionIntensity: 1
39 + m_CustomReflection: {fileID: 0}
40 + m_Sun: {fileID: 0}
41 + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1}
42 + m_UseRadianceAmbientProbe: 0
43 +--- !u!157 &3
44 +LightmapSettings:
45 + m_ObjectHideFlags: 0
46 + serializedVersion: 11
47 + m_GIWorkflowMode: 0
48 + m_GISettings:
49 + serializedVersion: 2
50 + m_BounceScale: 1
51 + m_IndirectOutputScale: 1
52 + m_AlbedoBoost: 1
53 + m_TemporalCoherenceThreshold: 1
54 + m_EnvironmentLightingMode: 0
55 + m_EnableBakedLightmaps: 1
56 + m_EnableRealtimeLightmaps: 1
57 + m_LightmapEditorSettings:
58 + serializedVersion: 10
59 + m_Resolution: 2
60 + m_BakeResolution: 40
61 + m_AtlasSize: 1024
62 + m_AO: 0
63 + m_AOMaxDistance: 1
64 + m_CompAOExponent: 1
65 + m_CompAOExponentDirect: 0
66 + m_Padding: 2
67 + m_LightmapParameters: {fileID: 0}
68 + m_LightmapsBakeMode: 1
69 + m_TextureCompression: 1
70 + m_FinalGather: 0
71 + m_FinalGatherFiltering: 1
72 + m_FinalGatherRayCount: 256
73 + m_ReflectionCompression: 2
74 + m_MixedBakeMode: 1
75 + m_BakeBackend: 0
76 + m_PVRSampling: 1
77 + m_PVRDirectSampleCount: 32
78 + m_PVRSampleCount: 500
79 + m_PVRBounces: 2
80 + m_PVRFilterTypeDirect: 0
81 + m_PVRFilterTypeIndirect: 0
82 + m_PVRFilterTypeAO: 0
83 + m_PVRFilteringMode: 0
84 + m_PVRCulling: 1
85 + m_PVRFilteringGaussRadiusDirect: 1
86 + m_PVRFilteringGaussRadiusIndirect: 5
87 + m_PVRFilteringGaussRadiusAO: 2
88 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5
89 + m_PVRFilteringAtrousPositionSigmaIndirect: 2
90 + m_PVRFilteringAtrousPositionSigmaAO: 1
91 + m_ShowResolutionOverlay: 1
92 + m_LightingDataAsset: {fileID: 0}
93 + m_UseShadowmask: 0
94 +--- !u!196 &4
95 +NavMeshSettings:
96 + serializedVersion: 2
97 + m_ObjectHideFlags: 0
98 + m_BuildSettings:
99 + serializedVersion: 2
100 + agentTypeID: 0
101 + agentRadius: 0.5
102 + agentHeight: 2
103 + agentSlope: 45
104 + agentClimb: 0.4
105 + ledgeDropHeight: 0
106 + maxJumpAcrossDistance: 0
107 + minRegionArea: 2
108 + manualCellSize: 0
109 + cellSize: 0.16666667
110 + manualTileSize: 0
111 + tileSize: 256
112 + accuratePlacement: 0
113 + debug:
114 + m_Flags: 0
115 + m_NavMeshData: {fileID: 0}
116 +--- !u!1001 &155261415
117 +Prefab:
118 + m_ObjectHideFlags: 0
119 + serializedVersion: 2
120 + m_Modification:
121 + m_TransformParent: {fileID: 0}
122 + m_Modifications:
123 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
124 + propertyPath: m_LocalPosition.x
125 + value: 0
126 + objectReference: {fileID: 0}
127 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
128 + propertyPath: m_LocalPosition.y
129 + value: 0
130 + objectReference: {fileID: 0}
131 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
132 + propertyPath: m_LocalPosition.z
133 + value: 0
134 + objectReference: {fileID: 0}
135 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
136 + propertyPath: m_LocalRotation.x
137 + value: -0
138 + objectReference: {fileID: 0}
139 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
140 + propertyPath: m_LocalRotation.y
141 + value: -0
142 + objectReference: {fileID: 0}
143 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
144 + propertyPath: m_LocalRotation.z
145 + value: -0
146 + objectReference: {fileID: 0}
147 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
148 + propertyPath: m_LocalRotation.w
149 + value: 1
150 + objectReference: {fileID: 0}
151 + - target: {fileID: 4297793100120782, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
152 + propertyPath: m_RootOrder
153 + value: 0
154 + objectReference: {fileID: 0}
155 + - target: {fileID: 54889650561961254, guid: 0e71b24f3fb6f684596ef143448959c0,
156 + type: 2}
157 + propertyPath: m_AngularDrag
158 + value: 1000
159 + objectReference: {fileID: 0}
160 + m_RemovedComponents: []
161 + m_ParentPrefab: {fileID: 100100000, guid: 0e71b24f3fb6f684596ef143448959c0, type: 2}
162 + m_IsPrefabParent: 0
163 +--- !u!1 &785643733
164 +GameObject:
165 + m_ObjectHideFlags: 0
166 + m_PrefabParentObject: {fileID: 0}
167 + m_PrefabInternal: {fileID: 0}
168 + serializedVersion: 5
169 + m_Component:
170 + - component: {fileID: 785643737}
171 + - component: {fileID: 785643736}
172 + - component: {fileID: 785643735}
173 + - component: {fileID: 785643734}
174 + m_Layer: 0
175 + m_Name: Camera
176 + m_TagString: Untagged
177 + m_Icon: {fileID: 0}
178 + m_NavMeshLayer: 0
179 + m_StaticEditorFlags: 0
180 + m_IsActive: 1
181 +--- !u!81 &785643734
182 +AudioListener:
183 + m_ObjectHideFlags: 0
184 + m_PrefabParentObject: {fileID: 0}
185 + m_PrefabInternal: {fileID: 0}
186 + m_GameObject: {fileID: 785643733}
187 + m_Enabled: 1
188 +--- !u!124 &785643735
189 +Behaviour:
190 + m_ObjectHideFlags: 0
191 + m_PrefabParentObject: {fileID: 0}
192 + m_PrefabInternal: {fileID: 0}
193 + m_GameObject: {fileID: 785643733}
194 + m_Enabled: 1
195 +--- !u!20 &785643736
196 +Camera:
197 + m_ObjectHideFlags: 0
198 + m_PrefabParentObject: {fileID: 0}
199 + m_PrefabInternal: {fileID: 0}
200 + m_GameObject: {fileID: 785643733}
201 + m_Enabled: 1
202 + serializedVersion: 2
203 + m_ClearFlags: 1
204 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
205 + m_NormalizedViewPortRect:
206 + serializedVersion: 2
207 + x: 0
208 + y: 0
209 + width: 1
210 + height: 1
211 + near clip plane: 0.3
212 + far clip plane: 1000
213 + field of view: 60
214 + orthographic: 0
215 + orthographic size: 5
216 + m_Depth: 0
217 + m_CullingMask:
218 + serializedVersion: 2
219 + m_Bits: 4294934527
220 + m_RenderingPath: -1
221 + m_TargetTexture: {fileID: 0}
222 + m_TargetDisplay: 0
223 + m_TargetEye: 3
224 + m_HDR: 1
225 + m_AllowMSAA: 1
226 + m_AllowDynamicResolution: 0
227 + m_ForceIntoRT: 0
228 + m_OcclusionCulling: 1
229 + m_StereoConvergence: 10
230 + m_StereoSeparation: 0.022
231 +--- !u!4 &785643737
232 +Transform:
233 + m_ObjectHideFlags: 0
234 + m_PrefabParentObject: {fileID: 0}
235 + m_PrefabInternal: {fileID: 0}
236 + m_GameObject: {fileID: 785643733}
237 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
238 + m_LocalPosition: {x: 0, y: 0, z: -4.68}
239 + m_LocalScale: {x: 1, y: 1, z: 1}
240 + m_Children:
241 + - {fileID: 1113254002}
242 + m_Father: {fileID: 0}
243 + m_RootOrder: 1
244 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
245 +--- !u!1 &1113253996
246 +GameObject:
247 + m_ObjectHideFlags: 0
248 + m_PrefabParentObject: {fileID: 0}
249 + m_PrefabInternal: {fileID: 0}
250 + serializedVersion: 5
251 + m_Component:
252 + - component: {fileID: 1113254002}
253 + - component: {fileID: 1113254001}
254 + - component: {fileID: 1113254000}
255 + - component: {fileID: 1113253999}
256 + - component: {fileID: 1113253998}
257 + - component: {fileID: 1113253997}
258 + m_Layer: 0
259 + m_Name: Cube
260 + m_TagString: Untagged
261 + m_Icon: {fileID: 0}
262 + m_NavMeshLayer: 0
263 + m_StaticEditorFlags: 0
264 + m_IsActive: 1
265 +--- !u!54 &1113253997
266 +Rigidbody:
267 + m_ObjectHideFlags: 0
268 + m_PrefabParentObject: {fileID: 0}
269 + m_PrefabInternal: {fileID: 0}
270 + m_GameObject: {fileID: 1113253996}
271 + serializedVersion: 2
272 + m_Mass: 1
273 + m_Drag: 0
274 + m_AngularDrag: 0.05
275 + m_UseGravity: 0
276 + m_IsKinematic: 1
277 + m_Interpolate: 0
278 + m_Constraints: 0
279 + m_CollisionDetection: 0
280 +--- !u!114 &1113253998
281 +MonoBehaviour:
282 + m_ObjectHideFlags: 0
283 + m_PrefabParentObject: {fileID: 0}
284 + m_PrefabInternal: {fileID: 0}
285 + m_GameObject: {fileID: 1113253996}
286 + m_Enabled: 1
287 + m_EditorHideFlags: 0
288 + m_Script: {fileID: 11500000, guid: 061e358065833c542812bcff8271d265, type: 3}
289 + m_Name:
290 + m_EditorClassIdentifier:
291 + m_MoveSpeed: 2
292 + m_ScrollSpeed: 100
293 + m_YawSpeed: 100
294 +--- !u!65 &1113253999
295 +BoxCollider:
296 + m_ObjectHideFlags: 0
297 + m_PrefabParentObject: {fileID: 0}
298 + m_PrefabInternal: {fileID: 0}
299 + m_GameObject: {fileID: 1113253996}
300 + m_Material: {fileID: 0}
301 + m_IsTrigger: 0
302 + m_Enabled: 1
303 + serializedVersion: 2
304 + m_Size: {x: 1, y: 1, z: 1}
305 + m_Center: {x: 0, y: 0, z: 0}
306 +--- !u!23 &1113254000
307 +MeshRenderer:
308 + m_ObjectHideFlags: 0
309 + m_PrefabParentObject: {fileID: 0}
310 + m_PrefabInternal: {fileID: 0}
311 + m_GameObject: {fileID: 1113253996}
312 + m_Enabled: 1
313 + m_CastShadows: 1
314 + m_ReceiveShadows: 1
315 + m_DynamicOccludee: 1
316 + m_MotionVectors: 1
317 + m_LightProbeUsage: 1
318 + m_ReflectionProbeUsage: 1
319 + m_RenderingLayerMask: 4294967295
320 + m_Materials:
321 + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
322 + m_StaticBatchInfo:
323 + firstSubMesh: 0
324 + subMeshCount: 0
325 + m_StaticBatchRoot: {fileID: 0}
326 + m_ProbeAnchor: {fileID: 0}
327 + m_LightProbeVolumeOverride: {fileID: 0}
328 + m_ScaleInLightmap: 1
329 + m_PreserveUVs: 0
330 + m_IgnoreNormalsForChartDetection: 0
331 + m_ImportantGI: 0
332 + m_StitchLightmapSeams: 0
333 + m_SelectedEditorRenderState: 3
334 + m_MinimumChartSize: 4
335 + m_AutoUVMaxDistance: 0.5
336 + m_AutoUVMaxAngle: 89
337 + m_LightmapParameters: {fileID: 0}
338 + m_SortingLayerID: 0
339 + m_SortingLayer: 0
340 + m_SortingOrder: 0
341 +--- !u!33 &1113254001
342 +MeshFilter:
343 + m_ObjectHideFlags: 0
344 + m_PrefabParentObject: {fileID: 0}
345 + m_PrefabInternal: {fileID: 0}
346 + m_GameObject: {fileID: 1113253996}
347 + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
348 +--- !u!4 &1113254002
349 +Transform:
350 + m_ObjectHideFlags: 0
351 + m_PrefabParentObject: {fileID: 0}
352 + m_PrefabInternal: {fileID: 0}
353 + m_GameObject: {fileID: 1113253996}
354 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
355 + m_LocalPosition: {x: -0.94, y: 0, z: 2.39}
356 + m_LocalScale: {x: 1, y: 1, z: 1}
357 + m_Children: []
358 + m_Father: {fileID: 785643737}
359 + m_RootOrder: 0
360 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
1 +fileFormatVersion: 2
2 +guid: 291dfa6181bfdaa418cdd784a674c1d3
3 +timeCreated: 1523555264
4 +licenseType: Pro
5 +DefaultImporter:
6 + externalObjects: {}
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: a1667d37678804b48b656b2a3c954f53
3 +folderAsset: yes
4 +timeCreated: 1484136440
5 +licenseType: Pro
6 +DefaultImporter:
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: ArrayMat
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords: _EMISSION
12 + m_LightmapFlags: 1
13 + m_CustomRenderQueue: -1
14 + stringTagMap: {}
15 + m_SavedProperties:
16 + serializedVersion: 2
17 + m_TexEnvs:
18 + - first:
19 + name: _BumpMap
20 + second:
21 + m_Texture: {fileID: 0}
22 + m_Scale: {x: 1, y: 1}
23 + m_Offset: {x: 0, y: 0}
24 + - first:
25 + name: _DetailAlbedoMap
26 + second:
27 + m_Texture: {fileID: 0}
28 + m_Scale: {x: 1, y: 1}
29 + m_Offset: {x: 0, y: 0}
30 + - first:
31 + name: _DetailMask
32 + second:
33 + m_Texture: {fileID: 0}
34 + m_Scale: {x: 1, y: 1}
35 + m_Offset: {x: 0, y: 0}
36 + - first:
37 + name: _DetailNormalMap
38 + second:
39 + m_Texture: {fileID: 0}
40 + m_Scale: {x: 1, y: 1}
41 + m_Offset: {x: 0, y: 0}
42 + - first:
43 + name: _EmissionMap
44 + second:
45 + m_Texture: {fileID: 0}
46 + m_Scale: {x: 1, y: 1}
47 + m_Offset: {x: 0, y: 0}
48 + - first:
49 + name: _MainTex
50 + second:
51 + m_Texture: {fileID: 0}
52 + m_Scale: {x: 1, y: 1}
53 + m_Offset: {x: 0, y: 0}
54 + - first:
55 + name: _MetallicGlossMap
56 + second:
57 + m_Texture: {fileID: 0}
58 + m_Scale: {x: 1, y: 1}
59 + m_Offset: {x: 0, y: 0}
60 + - first:
61 + name: _OcclusionMap
62 + second:
63 + m_Texture: {fileID: 0}
64 + m_Scale: {x: 1, y: 1}
65 + m_Offset: {x: 0, y: 0}
66 + - first:
67 + name: _ParallaxMap
68 + second:
69 + m_Texture: {fileID: 0}
70 + m_Scale: {x: 1, y: 1}
71 + m_Offset: {x: 0, y: 0}
72 + m_Floats:
73 + - first:
74 + name: _BumpScale
75 + second: 1
76 + - first:
77 + name: _Cutoff
78 + second: 0.5
79 + - first:
80 + name: _DetailNormalMapScale
81 + second: 1
82 + - first:
83 + name: _DstBlend
84 + second: 0
85 + - first:
86 + name: _GlossMapScale
87 + second: 1
88 + - first:
89 + name: _Glossiness
90 + second: 0.5
91 + - first:
92 + name: _GlossyReflections
93 + second: 1
94 + - first:
95 + name: _Metallic
96 + second: 0
97 + - first:
98 + name: _Mode
99 + second: 0
100 + - first:
101 + name: _OcclusionStrength
102 + second: 1
103 + - first:
104 + name: _Parallax
105 + second: 0.02
106 + - first:
107 + name: _SmoothnessTextureChannel
108 + second: 0
109 + - first:
110 + name: _SpecularHighlights
111 + second: 1
112 + - first:
113 + name: _SrcBlend
114 + second: 1
115 + - first:
116 + name: _UVSec
117 + second: 0
118 + - first:
119 + name: _ZWrite
120 + second: 1
121 + m_Colors:
122 + - first:
123 + name: _Color
124 + second: {r: 0, g: 0, b: 0, a: 1}
125 + - first:
126 + name: _EmissionColor
127 + second: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: a9ebddeebc93d87448925603f5520944
3 +timeCreated: 1484136451
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: GravityBall Material
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords: _EMISSION
12 + m_LightmapFlags: 1
13 + m_EnableInstancingVariants: 0
14 + m_DoubleSidedGI: 0
15 + m_CustomRenderQueue: -1
16 + stringTagMap: {}
17 + disabledShaderPasses: []
18 + m_SavedProperties:
19 + serializedVersion: 3
20 + m_TexEnvs:
21 + - _BumpMap:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + - _DetailAlbedoMap:
26 + m_Texture: {fileID: 0}
27 + m_Scale: {x: 1, y: 1}
28 + m_Offset: {x: 0, y: 0}
29 + - _DetailMask:
30 + m_Texture: {fileID: 0}
31 + m_Scale: {x: 1, y: 1}
32 + m_Offset: {x: 0, y: 0}
33 + - _DetailNormalMap:
34 + m_Texture: {fileID: 0}
35 + m_Scale: {x: 1, y: 1}
36 + m_Offset: {x: 0, y: 0}
37 + - _EmissionMap:
38 + m_Texture: {fileID: 0}
39 + m_Scale: {x: 1, y: 1}
40 + m_Offset: {x: 0, y: 0}
41 + - _MainTex:
42 + m_Texture: {fileID: 0}
43 + m_Scale: {x: 1, y: 1}
44 + m_Offset: {x: 0, y: 0}
45 + - _MetallicGlossMap:
46 + m_Texture: {fileID: 0}
47 + m_Scale: {x: 1, y: 1}
48 + m_Offset: {x: 0, y: 0}
49 + - _OcclusionMap:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + - _ParallaxMap:
54 + m_Texture: {fileID: 0}
55 + m_Scale: {x: 1, y: 1}
56 + m_Offset: {x: 0, y: 0}
57 + m_Floats:
58 + - _BumpScale: 1
59 + - _Cutoff: 0.5
60 + - _DetailNormalMapScale: 1
61 + - _DstBlend: 0
62 + - _GlossMapScale: 1
63 + - _Glossiness: 0.5
64 + - _GlossyReflections: 1
65 + - _Metallic: 0
66 + - _Mode: 0
67 + - _OcclusionStrength: 1
68 + - _Parallax: 0.02
69 + - _SmoothnessTextureChannel: 0
70 + - _SpecularHighlights: 1
71 + - _SrcBlend: 1
72 + - _UVSec: 0
73 + - _ZWrite: 1
74 + m_Colors:
75 + - _Color: {r: 0, g: 0, b: 0, a: 1}
76 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: 2c08eef64dd9963468283d5134da86b5
3 +timeCreated: 1525000475
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + externalObjects: {}
7 + mainObjectFileID: 2100000
8 + userData:
9 + assetBundleName:
10 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: X
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_DoubleSidedGI: 0
15 + m_CustomRenderQueue: -1
16 + stringTagMap: {}
17 + disabledShaderPasses: []
18 + m_SavedProperties:
19 + serializedVersion: 3
20 + m_TexEnvs:
21 + - _BumpMap:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + - _DetailAlbedoMap:
26 + m_Texture: {fileID: 0}
27 + m_Scale: {x: 1, y: 1}
28 + m_Offset: {x: 0, y: 0}
29 + - _DetailMask:
30 + m_Texture: {fileID: 0}
31 + m_Scale: {x: 1, y: 1}
32 + m_Offset: {x: 0, y: 0}
33 + - _DetailNormalMap:
34 + m_Texture: {fileID: 0}
35 + m_Scale: {x: 1, y: 1}
36 + m_Offset: {x: 0, y: 0}
37 + - _EmissionMap:
38 + m_Texture: {fileID: 0}
39 + m_Scale: {x: 1, y: 1}
40 + m_Offset: {x: 0, y: 0}
41 + - _MainTex:
42 + m_Texture: {fileID: 0}
43 + m_Scale: {x: 1, y: 1}
44 + m_Offset: {x: 0, y: 0}
45 + - _MetallicGlossMap:
46 + m_Texture: {fileID: 0}
47 + m_Scale: {x: 1, y: 1}
48 + m_Offset: {x: 0, y: 0}
49 + - _OcclusionMap:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + - _ParallaxMap:
54 + m_Texture: {fileID: 0}
55 + m_Scale: {x: 1, y: 1}
56 + m_Offset: {x: 0, y: 0}
57 + m_Floats:
58 + - _BumpScale: 1
59 + - _Cutoff: 0.5
60 + - _DetailNormalMapScale: 1
61 + - _DstBlend: 0
62 + - _GlossMapScale: 1
63 + - _Glossiness: 0
64 + - _GlossyReflections: 1
65 + - _Metallic: 0
66 + - _Mode: 0
67 + - _OcclusionStrength: 1
68 + - _Parallax: 0.02
69 + - _SmoothnessTextureChannel: 0
70 + - _SpecularHighlights: 1
71 + - _SrcBlend: 1
72 + - _UVSec: 0
73 + - _ZWrite: 1
74 + m_Colors:
75 + - _Color: {r: 1, g: 0.13774185, b: 0, a: 1}
76 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: bc9e87a8448c0ad44b1706a14f0daf66
3 +timeCreated: 1525000475
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + externalObjects: {}
7 + mainObjectFileID: 2100000
8 + userData:
9 + assetBundleName:
10 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Y
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_DoubleSidedGI: 0
15 + m_CustomRenderQueue: -1
16 + stringTagMap: {}
17 + disabledShaderPasses: []
18 + m_SavedProperties:
19 + serializedVersion: 3
20 + m_TexEnvs:
21 + - _BumpMap:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + - _DetailAlbedoMap:
26 + m_Texture: {fileID: 0}
27 + m_Scale: {x: 1, y: 1}
28 + m_Offset: {x: 0, y: 0}
29 + - _DetailMask:
30 + m_Texture: {fileID: 0}
31 + m_Scale: {x: 1, y: 1}
32 + m_Offset: {x: 0, y: 0}
33 + - _DetailNormalMap:
34 + m_Texture: {fileID: 0}
35 + m_Scale: {x: 1, y: 1}
36 + m_Offset: {x: 0, y: 0}
37 + - _EmissionMap:
38 + m_Texture: {fileID: 0}
39 + m_Scale: {x: 1, y: 1}
40 + m_Offset: {x: 0, y: 0}
41 + - _MainTex:
42 + m_Texture: {fileID: 0}
43 + m_Scale: {x: 1, y: 1}
44 + m_Offset: {x: 0, y: 0}
45 + - _MetallicGlossMap:
46 + m_Texture: {fileID: 0}
47 + m_Scale: {x: 1, y: 1}
48 + m_Offset: {x: 0, y: 0}
49 + - _OcclusionMap:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + - _ParallaxMap:
54 + m_Texture: {fileID: 0}
55 + m_Scale: {x: 1, y: 1}
56 + m_Offset: {x: 0, y: 0}
57 + m_Floats:
58 + - _BumpScale: 1
59 + - _Cutoff: 0.5
60 + - _DetailNormalMapScale: 1
61 + - _DstBlend: 0
62 + - _GlossMapScale: 1
63 + - _Glossiness: 0
64 + - _GlossyReflections: 1
65 + - _Metallic: 0
66 + - _Mode: 0
67 + - _OcclusionStrength: 1
68 + - _Parallax: 0.02
69 + - _SmoothnessTextureChannel: 0
70 + - _SpecularHighlights: 1
71 + - _SrcBlend: 1
72 + - _UVSec: 0
73 + - _ZWrite: 1
74 + m_Colors:
75 + - _Color: {r: 0, g: 1, b: 0, a: 1}
76 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: b2d5dace7e9b678499ab2e25cad8cdf3
3 +timeCreated: 1525000475
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + externalObjects: {}
7 + mainObjectFileID: 2100000
8 + userData:
9 + assetBundleName:
10 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Z
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_DoubleSidedGI: 0
15 + m_CustomRenderQueue: -1
16 + stringTagMap: {}
17 + disabledShaderPasses: []
18 + m_SavedProperties:
19 + serializedVersion: 3
20 + m_TexEnvs:
21 + - _BumpMap:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + - _DetailAlbedoMap:
26 + m_Texture: {fileID: 0}
27 + m_Scale: {x: 1, y: 1}
28 + m_Offset: {x: 0, y: 0}
29 + - _DetailMask:
30 + m_Texture: {fileID: 0}
31 + m_Scale: {x: 1, y: 1}
32 + m_Offset: {x: 0, y: 0}
33 + - _DetailNormalMap:
34 + m_Texture: {fileID: 0}
35 + m_Scale: {x: 1, y: 1}
36 + m_Offset: {x: 0, y: 0}
37 + - _EmissionMap:
38 + m_Texture: {fileID: 0}
39 + m_Scale: {x: 1, y: 1}
40 + m_Offset: {x: 0, y: 0}
41 + - _MainTex:
42 + m_Texture: {fileID: 0}
43 + m_Scale: {x: 1, y: 1}
44 + m_Offset: {x: 0, y: 0}
45 + - _MetallicGlossMap:
46 + m_Texture: {fileID: 0}
47 + m_Scale: {x: 1, y: 1}
48 + m_Offset: {x: 0, y: 0}
49 + - _OcclusionMap:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + - _ParallaxMap:
54 + m_Texture: {fileID: 0}
55 + m_Scale: {x: 1, y: 1}
56 + m_Offset: {x: 0, y: 0}
57 + m_Floats:
58 + - _BumpScale: 1
59 + - _Cutoff: 0.5
60 + - _DetailNormalMapScale: 1
61 + - _DstBlend: 0
62 + - _GlossMapScale: 1
63 + - _Glossiness: 0
64 + - _GlossyReflections: 1
65 + - _Metallic: 0
66 + - _Mode: 0
67 + - _OcclusionStrength: 1
68 + - _Parallax: 0.02
69 + - _SmoothnessTextureChannel: 0
70 + - _SpecularHighlights: 1
71 + - _SrcBlend: 1
72 + - _UVSec: 0
73 + - _ZWrite: 1
74 + m_Colors:
75 + - _Color: {r: 0, g: 0.20210934, b: 1, a: 1}
76 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: 6ffb880675a34414e9b85bb5f7d4d731
3 +timeCreated: 1525000475
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + externalObjects: {}
7 + mainObjectFileID: 2100000
8 + userData:
9 + assetBundleName:
10 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 7f4aa94b50c845545904855825f632e2
3 +folderAsset: yes
4 +timeCreated: 1484136287
5 +licenseType: Pro
6 +DefaultImporter:
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
This diff could not be displayed because it is too large.
1 +fileFormatVersion: 2
2 +guid: eea4913cea234014d9b45a77f4e18893
3 +NativeFormatImporter:
4 + externalObjects: {}
5 + mainObjectFileID: 100100000
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
This diff could not be displayed because it is too large.
1 +fileFormatVersion: 2
2 +guid: 0e71b24f3fb6f684596ef143448959c0
3 +NativeFormatImporter:
4 + externalObjects: {}
5 + mainObjectFileID: 100100000
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 35a2dc7dab4e4524a85ffbaaf6f8d49c
3 +folderAsset: yes
4 +timeCreated: 1484227520
5 +licenseType: Pro
6 +DefaultImporter:
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +using UnityEngine;
2 +using Ultrahaptics;
3 +
4 +/// <summary>
5 +/// Helper class to handle conversion between world space and Ultrahaptics device space.
6 +/// </summary>
7 +public class CoordinateSpaceConverter : MonoBehaviour
8 +{
9 + // Expose this field to the Unity inspector so it can be set to
10 + // the transform that corresponds to the origin of the array (top-centre)
11 + [SerializeField]
12 + private Transform _arrayOrigin;
13 +
14 + /// <summary>
15 + /// Converts the given position vector from world space to device space.
16 + /// </summary>
17 + /// <param name="vector">The position vector in world space.</param>
18 + /// <returns>The equivalent position vector in device space.</returns>
19 + public Ultrahaptics.Vector3 WorldToDevicePosition(UnityEngine.Vector3 vector)
20 + {
21 + // Transform the world position to the local space of the array
22 + var localPosition = _arrayOrigin.InverseTransformPoint(vector);
23 + // Construct an Ultrahaptics Vector3
24 + // Note that the y and z coordinates are swapped as Ultrahaptics uses a coordinate system where the positive Y-axis is up
25 + var ultrahapticsPosition = new Ultrahaptics.Vector3(localPosition.x, localPosition.z, localPosition.y);
26 + return ultrahapticsPosition;
27 + }
28 +
29 + /// <summary>
30 + /// Converts the given direction vector from world space to device space.
31 + /// </summary>
32 + /// <param name="vector">The direction vector in world space.</param>
33 + /// <returns>The equivalent direction vector in device space.</returns>
34 + public Ultrahaptics.Vector3 WorldToDeviceDirection(UnityEngine.Vector3 vector)
35 + {
36 + // Transform the world direction to the local space of the array
37 + var localDirection = _arrayOrigin.InverseTransformDirection(vector);
38 + // Construct an Ultrahaptics Vector3
39 + // Note that the y and z coordinates are swapped as Ultrahaptics uses a coordinate system where the positive Y-axis is up
40 + var ultrahapticsDirection = new Ultrahaptics.Vector3(localDirection.x, localDirection.z, localDirection.y);
41 + return ultrahapticsDirection;
42 + }
43 +}
1 +fileFormatVersion: 2
2 +guid: 0ffc3ea8979bc8d42b1ca0eec3dff9ba
3 +timeCreated: 1484227689
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +using System.Collections;
2 +using System.Collections.Generic;
3 +using UnityEngine;
4 +
5 +public class GravityBall : MonoBehaviour
6 +{
7 + public static GravityBall Instance
8 + {
9 + get
10 + {
11 + if (!m_Instance)
12 + {
13 + m_Instance = FindObjectOfType<GravityBall>();
14 +
15 + if (!m_Instance)
16 + {
17 + Debug.LogError("You didn't Crate GravityBall!");
18 + }
19 + }
20 + return m_Instance;
21 + }
22 + }
23 +
24 + private static GravityBall m_Instance;
25 +
26 + public LayerMask m_ContactTarget;
27 + //private SphereCollider m_Collider;
28 + private const float m_ColliderThickness = 0.001f;
29 +
30 + public bool m_IsTouched { get; private set; }
31 +
32 + private Vector3 m_StartPos;
33 +
34 + private Material m_RenderMaterial;
35 +
36 + private Rigidbody m_Rigidbody;
37 +
38 + public Color m_IdleColor = Color.black;
39 + public Color m_PressedColor = Color.red;
40 +
41 + public string m_XDistanceInputName = "Horizontal";
42 + public string m_ZDistanceINputName = "Vertical";
43 +
44 + public string m_XSwipeInputName = "Scroll";
45 + public string m_YSwipeInputName = "Spin";
46 + public string m_ZSwipeInputName = "Stroke";
47 +
48 + public float m_ControlRange = 0.08f;
49 +
50 + [Range(0.01f, 0.2f)]
51 + public float m_RotationDeadzone = 0.01f;
52 +
53 + [Range(0.1f, 5f)]
54 + public float m_RotationSenstive = 1f;
55 +
56 +
57 + private void Awake()
58 + {
59 + m_Rigidbody = GetComponent<Rigidbody>();
60 + }
61 +
62 + private void Start()
63 + {
64 + m_StartPos = m_Rigidbody.position;
65 +
66 + m_RenderMaterial = GetComponentInChildren<Renderer>().material;
67 + m_RenderMaterial.color = m_IdleColor;
68 + }
69 +
70 + private void Update()
71 + {
72 + if (GetButton())
73 + {
74 + m_RenderMaterial.color = m_PressedColor;
75 + }
76 + else
77 + {
78 + m_RenderMaterial.color = m_IdleColor;
79 + }
80 + }
81 +
82 + private void FixedUpdate()
83 + {
84 + // 범위를 벗어난 경우 범위 내부로 강제로 되돌리기
85 + if (m_IsTouched)
86 + {
87 + if (Vector3.Distance(m_StartPos, m_Rigidbody.position) > m_ControlRange)
88 + {
89 + m_Rigidbody.MovePosition(m_StartPos + (m_Rigidbody.position - m_StartPos) * m_ControlRange);
90 + }
91 + }
92 + }
93 +
94 + public bool GetButton()
95 + {
96 + if (!m_IsTouched)
97 + {
98 + return false;
99 + }
100 +
101 + if ((m_StartPos.y - m_Rigidbody.position.y) >= m_ControlRange * 0.5f)
102 + {
103 + return true;
104 + }
105 +
106 + return false;
107 + }
108 +
109 +
110 + public float GetInputAxis(string inputName)
111 + {
112 + if (!m_IsTouched)
113 + {
114 + return 0;
115 + }
116 +
117 + // Swipe를 하고 있다면, 값을 억누르기
118 + float inputFactorBySwipe = 1.0f;
119 +
120 + if (m_Rigidbody.angularVelocity.sqrMagnitude >= 1.0f)
121 + {
122 + inputFactorBySwipe = 1.0f / m_Rigidbody.angularVelocity.sqrMagnitude;
123 + }
124 +
125 +
126 + Vector3 deltaVec = m_Rigidbody.position - m_StartPos;
127 +
128 + Vector3 relativeVec = deltaVec / m_ControlRange;
129 +
130 + if (inputName == m_XDistanceInputName)
131 + {
132 + return Mathf.Clamp(relativeVec.x, -1.0f, 1.0f) * inputFactorBySwipe;
133 + }
134 + else if (inputName == m_ZDistanceINputName)
135 + {
136 + return Mathf.Clamp(relativeVec.z, -1.0f, 1.0f) * inputFactorBySwipe;
137 + }
138 +
139 + Debug.LogError("Can't Find Input Name: " + inputName);
140 +
141 + return 0;
142 + }
143 +
144 + public float GetInputSwipe(string inputName)
145 + {
146 + if (!m_IsTouched)
147 + {
148 + return 0;
149 + }
150 +
151 + Vector3 angularVelocity = m_Rigidbody.angularVelocity;
152 + angularVelocity *= m_RotationSenstive;
153 +
154 +
155 + float absX = Mathf.Abs(angularVelocity.x);
156 + float absY = Mathf.Abs(angularVelocity.y);
157 + float absZ = Mathf.Abs(angularVelocity.z);
158 +
159 + angularVelocity.x = absX <= m_RotationDeadzone ? 0 : angularVelocity.x;
160 + angularVelocity.y = absY <= m_RotationDeadzone ? 0 : angularVelocity.y;
161 + angularVelocity.z = absZ <= m_RotationDeadzone ? 0 : angularVelocity.z;
162 +
163 +
164 + if (absX >= absY && absX >= absZ)
165 + {
166 + angularVelocity.y = 0;
167 + angularVelocity.z = 0;
168 +
169 + }
170 + else if(absY >= absX && absY >= absZ)
171 + {
172 + angularVelocity.x = 0;
173 + angularVelocity.z = 0;
174 + }
175 + else if (absZ >= absX && absZ >= absY)
176 + {
177 + angularVelocity.x = 0;
178 + angularVelocity.y = 0;
179 + }
180 +
181 + float factorByButton = GetButton() ? 0.1f : 1.0f;
182 +
183 + if (inputName == m_XSwipeInputName)
184 + {
185 + return Mathf.Clamp(angularVelocity.x, -1f, 1f) * factorByButton;
186 + }
187 + else if (inputName == m_YSwipeInputName)
188 + {
189 + return Mathf.Clamp(angularVelocity.y, -1f, 1f) * factorByButton;
190 + }
191 + else if (inputName == m_ZSwipeInputName)
192 + {
193 + return Mathf.Clamp(angularVelocity.z, -1f, 1f) * factorByButton;
194 + }
195 +
196 +
197 + Debug.LogError("Can't Find Input Name: " + inputName);
198 +
199 + return 0;
200 + }
201 +
202 +
203 + private void OnCollisionExit(Collision collision)
204 + {
205 + m_IsTouched = false;
206 + m_Rigidbody.MoveRotation(Quaternion.identity);
207 +
208 + }
209 +
210 + private void OnCollisionStay(Collision collision)
211 + {
212 + m_IsTouched = true;
213 + }
214 +
215 +
216 + void OnDrawGizmos()
217 + {
218 +
219 + // Draw a wire sphere at each of the points
220 + Gizmos.color = Color.blue;
221 +
222 + if (m_Rigidbody == null)
223 + {
224 + Gizmos.DrawWireSphere(transform.position, m_ControlRange);
225 + }
226 + else
227 + {
228 + Gizmos.DrawWireSphere(m_StartPos, m_ControlRange);
229 +
230 + }
231 + }
232 +}
1 +fileFormatVersion: 2
2 +guid: 8501577b7fbf32b4392132f3e98d2937
3 +timeCreated: 1523555450
4 +licenseType: Pro
5 +MonoImporter:
6 + externalObjects: {}
7 + serializedVersion: 2
8 + defaultReferences: []
9 + executionOrder: 0
10 + icon: {instanceID: 0}
11 + userData:
12 + assetBundleName:
13 + assetBundleVariant:
1 +using UnityEngine;
2 +using System.Collections.Generic;
3 +using System.Linq;
4 +//using Ultrahaptics;
5 +
6 +
7 +/// <summary>
8 +/// Keeps track of collision data to be used for haptics.
9 +/// This class should be attached to GameObjects that will receive haptics when touched,
10 +/// these GameObjects must also have a collider and a Rigidbody.
11 +/// </summary>
12 +[RequireComponent(typeof(Collider), typeof(Rigidbody))]
13 +public class HapticReceiver : MonoBehaviour
14 +{
15 + // Dictionary of colliders that are currently touching the haptic receiver,
16 + // and the corresponding point of contact
17 +
18 + private Rigidbody hapticRigidbody;
19 +
20 + private CoordinateSpaceConverter _coordinateSpaceConverter;
21 +
22 + private const float skinThickness = 0.001f;
23 +
24 +
25 +
26 + private void Awake()
27 + {
28 +
29 + hapticRigidbody = GetComponent<Rigidbody>();
30 + _coordinateSpaceConverter = FindObjectOfType<CoordinateSpaceConverter>();
31 + }
32 +
33 + public RaycastHit[] GetCurrentContactPoint()
34 + {
35 + RaycastHit[] downHit = hapticRigidbody.SweepTestAll(-transform.up, skinThickness);
36 + //RaycastHit[] upHit = hapticRigidbody.SweepTestAll(Vector3.up, 0.01f);
37 +
38 + return downHit.ToArray();
39 + }
40 +}
1 +fileFormatVersion: 2
2 +guid: 3e7520c3b6ec68d4faec7690dce606da
3 +timeCreated: 1484213939
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +using UnityEngine;
2 +using Ultrahaptics;
3 +using System.Linq;
4 +using System.Collections.Generic;
5 +
6 +/// <summary>
7 +/// Controller class for all the haptics in the scene.
8 +/// This class is responsible for controlling the Ultrahaptics device
9 +/// and telling it when and where to emit control points.
10 +/// </summary>
11 +public class HapticsController : MonoBehaviour
12 +{
13 + public float contactPointBackwardAdjust = 0.001f;
14 +
15 + [Range(100f,200f)]
16 + public float currentFrequency = 200f;
17 +
18 + [Range(0f,1.0f)]
19 + public float hapticStrength = 0.5f;
20 +
21 + // The parent GameObject of the hands (so we can get access to the haptic receivers)
22 + [SerializeField]
23 + private GameObject _handsRoot;
24 +
25 + public int currentControlPoints
26 + {
27 + get
28 + {
29 + if(hapticStrength < 0.95f)
30 + {
31 + return (int)(_maxControlPoints * 1.5f);
32 + }
33 + else
34 + {
35 + return _maxControlPoints;
36 + }
37 + }
38 + }
39 +
40 + // 4 is the maximum number of control points that should be emitted at any time
41 + // If this number is set higher than 4 then all points will be weaker
42 + private int _maxControlPoints = 4;
43 +
44 + // The AmplitudeModulationEmitter allows us to control the Ultrahaptics array.
45 + // Please refer to the SDK documentation for an explanation of the difference between
46 + // AmplitudeModulationEmitter and TimePointStreamingEmitter.
47 + private AmplitudeModulationEmitter _amEmitter;
48 + List<UnityEngine.Vector3> _debugPoints = new List<UnityEngine.Vector3>();
49 +
50 + // The CoordinateSpaceConverter enables conversion between world space and device coordinate space
51 + private CoordinateSpaceConverter _coordinateSpaceConverter;
52 +
53 + // A collection of all the haptic receivers in the scene
54 + private HapticReceiver[] _hapticReceivers;
55 +
56 + // Use this for initialization
57 + void Start()
58 + {
59 + _amEmitter = new AmplitudeModulationEmitter();
60 + _coordinateSpaceConverter = FindObjectOfType<CoordinateSpaceConverter>();
61 + _hapticReceivers = _handsRoot.GetComponentsInChildren<HapticReceiver>(true);
62 +
63 + if (!_amEmitter.isConnected())
64 + {
65 + Debug.LogWarning("No Ultrahaptics array connected");
66 + }
67 + }
68 +
69 + // Update is called once per frame
70 + void FixedUpdate()
71 + {
72 + // Get the current contact points from all the haptic receivers
73 + var contactPoints = new List<UnityEngine.Vector3>();
74 +
75 + for(int i = 0; i < _hapticReceivers.Length; i++) {
76 + if (_hapticReceivers[i].gameObject.activeInHierarchy)
77 + {
78 + var contactHits = _hapticReceivers[i].GetCurrentContactPoint();
79 +
80 + contactPoints.AddRange(contactHits.Select((hit) => hit.point + hit.normal * contactPointBackwardAdjust));
81 + }
82 + }
83 +
84 + if(contactPoints.Count <= 0)
85 + {
86 + _amEmitter.stop();
87 + return;
88 + }
89 +
90 + // Choose which points to emit if there are too many
91 + var pointsToEmit = ChoosePointsToEmit(contactPoints);
92 +
93 + // Store a reference to these points so they can be rendered for debugging
94 + _debugPoints = pointsToEmit;
95 +
96 + // Create a list to hold all the control points we want to emit this frame
97 + var amControlPoints = new List<AmplitudeModulationControlPoint>();
98 +
99 + // Construct control points for each of the points we want to emit
100 + foreach (var pointToEmit in pointsToEmit)
101 + {
102 + // The positions are in world space so convert them to device space
103 + var deviceSpacePosition = _coordinateSpaceConverter.WorldToDevicePosition(pointToEmit);
104 + // Construct a control point with the position and intensity of the point
105 + var amControlPoint = new AmplitudeModulationControlPoint(deviceSpacePosition, hapticStrength);
106 +
107 + amControlPoint.setFrequency(currentFrequency * (float)Units.hertz);
108 +
109 + amControlPoints.Add(amControlPoint);
110 + }
111 +
112 + // Give the list of control points to the emitter
113 + if (contactPoints.Count > 0)
114 + {
115 + _amEmitter.update(amControlPoints);
116 + }
117 + }
118 +
119 + void OnDrawGizmos()
120 + {
121 + if (_debugPoints == null || _debugPoints.Count == 0)
122 + {
123 + // Nothing to draw
124 + return;
125 + }
126 +
127 + // Draw a wire sphere at each of the points
128 + Gizmos.color = Color.red;
129 + foreach (var point in _debugPoints)
130 + {
131 + Gizmos.DrawWireSphere(point, 0.005f);
132 + }
133 + }
134 +
135 + void OnDisable()
136 + {
137 + // Stop the emitter when this GameObject is destroyed
138 + _amEmitter.stop();
139 + }
140 +
141 + /// <summary>
142 + /// Chooses which of the given points should be emitted this frame.
143 + /// If there are fewer or equal points in the given list than the maximum then all will be chosen.
144 + /// </summary>
145 + /// <param name="contactPoints">The list of possible points that could be emitted this frame.</param>
146 + /// <returns>A subset of the given list.</returns>
147 + List<UnityEngine.Vector3> ChoosePointsToEmit(List<UnityEngine.Vector3> contactPoints)
148 + {
149 + var pointsToEmit = new List<UnityEngine.Vector3>();
150 +
151 + if (contactPoints.Count <= currentControlPoints)
152 + {
153 + // We can emit all the points
154 + pointsToEmit.AddRange(contactPoints);
155 + }
156 + else
157 + {
158 + // There are more points of contact than haptic points we can emit this frame,
159 + // so we must choose which ones to emit.
160 + // This implementation chooses them randomly, but more sophisticated algorithms could be used
161 +
162 +
163 +
164 + var indices = new int[contactPoints.Count];
165 + for (var i = 0; i < contactPoints.Count; i++)
166 + {
167 + indices[i] = i;
168 + }
169 + indices.OrderBy(a => Random.Range(0, int.MaxValue));
170 +
171 + for (var i = 0; i < currentControlPoints; i++)
172 + {
173 + pointsToEmit.Add(contactPoints[indices[i]]);
174 + }
175 +
176 + }
177 +
178 + return pointsToEmit;
179 + }
180 +}
1 +fileFormatVersion: 2
2 +guid: b04d8f70aa93f78469d2964d21a313f8
3 +timeCreated: 1484214302
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +using System.Collections;
2 +using System.Collections.Generic;
3 +using UnityEngine;
4 +
5 +public class RiggingTest : MonoBehaviour {
6 +
7 + public Rigidbody rigTarget;
8 + private Rigidbody myRigid;
9 +
10 + float dampTime = 0.05f;
11 +
12 + float movingSpeed = 1000f;
13 + // Use this for initialization
14 + void Start () {
15 + myRigid = GetComponent<Rigidbody>();
16 + }
17 +
18 + // Update is called once per frame
19 + void FixedUpdate () {
20 +
21 + //Vector3 direction = rigTarget.position - myRigid.position;
22 + // transform.position = rigTarget.position;
23 + // myRigid.AddForce(direction * Time.deltaTime * movingSpeed);
24 +
25 + myRigid.MovePosition(rigTarget.position);
26 + //myRigid.MoveRotation(rigTarget.rotation);
27 + }
28 +}
1 +fileFormatVersion: 2
2 +guid: c23a56b57e507984ebcf42e02a53b19a
3 +timeCreated: 1523954696
4 +licenseType: Pro
5 +MonoImporter:
6 + externalObjects: {}
7 + serializedVersion: 2
8 + defaultReferences: []
9 + executionOrder: 0
10 + icon: {instanceID: 0}
11 + userData:
12 + assetBundleName:
13 + assetBundleVariant:
1 +using System.Collections;
2 +using System.Collections.Generic;
3 +using UnityEngine;
4 +
5 +public class SyncTestCube : MonoBehaviour {
6 +
7 + public float m_MoveSpeed = 2f;
8 +
9 + public float m_ScrollSpeed = 30f;
10 +
11 + public float m_YawSpeed = 30f;
12 +
13 + private Rigidbody m_Rigidbody;
14 +
15 + private Material m_ColorMaterial;
16 +
17 + private void Awake()
18 + {
19 + m_Rigidbody = GetComponent<Rigidbody>();
20 + m_ColorMaterial = GetComponent<Renderer>().material;
21 + m_ColorMaterial.color = Color.white;
22 +
23 + }
24 +
25 +
26 +
27 + // Update is called once per frame
28 + void Update () {
29 +
30 + if(GravityBall.Instance.GetButton())
31 + {
32 + m_ColorMaterial.color = Color.red;
33 + }
34 + else
35 + {
36 + m_ColorMaterial.color = Color.white;
37 + }
38 +
39 + float xInput = GravityBall.Instance.GetInputAxis("Horizontal");
40 + float zIput = GravityBall.Instance.GetInputAxis("Vertical");
41 +
42 + transform.Translate(xInput * m_MoveSpeed * Time.deltaTime, 0, zIput * m_MoveSpeed * Time.deltaTime, Space.World);
43 +
44 + float scroll = GravityBall.Instance.GetInputSwipe("Scroll");
45 + float yaw = GravityBall.Instance.GetInputSwipe("Stroke");
46 +
47 + transform.Rotate(scroll * m_ScrollSpeed * Time.deltaTime, yaw * m_YawSpeed * Time.deltaTime, 0f,Space.World);
48 + }
49 +
50 +}
1 +fileFormatVersion: 2
2 +guid: 061e358065833c542812bcff8271d265
3 +timeCreated: 1524027925
4 +licenseType: Pro
5 +MonoImporter:
6 + externalObjects: {}
7 + serializedVersion: 2
8 + defaultReferences: []
9 + executionOrder: 0
10 + icon: {instanceID: 0}
11 + userData:
12 + assetBundleName:
13 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: c6e8375801ed84be28f219cfb84c2935
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 73f260fa43a63d64e8af172330c64e4b
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +This Unity Asset is dependent on Leap Motion tracking and the Leap Motion Controller which can be installed from: https://developer.leapmotion.com/
...\ No newline at end of file ...\ No newline at end of file
1 +fileFormatVersion: 2
2 +guid: cb1e08d6c2b9e4e629986b5afb697fdb
3 +timeCreated: 1427392316
4 +licenseType: Pro
5 +TextScriptImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 2681d190be51e474bac5bf9f13a4bcb7
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using UnityEngine;
11 +using UnityEditor;
12 +
13 +namespace Leap.Unity {
14 +
15 + public static class CorePreferences {
16 +
17 + private const string ALLOW_CLEAR_TRANSFORM_HOTKEY_KEY = "LeapMotion_AllowClearTransformHotkey";
18 + private const string ALLOW_GROUP_OBJECTS_HOTKEY_KEY = "LeapMotion_AllowGroupObjectsHotkey";
19 +
20 + public static bool allowClearTransformHotkey {
21 + get {
22 + return EditorPrefs.GetBool(ALLOW_CLEAR_TRANSFORM_HOTKEY_KEY, defaultValue: false);
23 + }
24 + set {
25 + EditorPrefs.SetBool(ALLOW_CLEAR_TRANSFORM_HOTKEY_KEY, value);
26 + }
27 + }
28 +
29 + public static bool allowGroupObjectsHotkey {
30 + get {
31 + return EditorPrefs.GetBool(ALLOW_GROUP_OBJECTS_HOTKEY_KEY, defaultValue: false);
32 + }
33 + set {
34 + EditorPrefs.SetBool(ALLOW_GROUP_OBJECTS_HOTKEY_KEY, value);
35 + }
36 + }
37 +
38 + [LeapPreferences("Core", 0)]
39 + private static void drawCorePreferences() {
40 + drawPreferencesBool(ALLOW_CLEAR_TRANSFORM_HOTKEY_KEY, "Clear Transforms Hotkey", "When you press Ctrl+E, clear out the local position, rotation, and scale of the selected transforms.");
41 + drawPreferencesBool(ALLOW_GROUP_OBJECTS_HOTKEY_KEY, "Group Transforms Hotkey", "When you press Ctrl+G, group all selected objects underneath a single new object named Group.");
42 + }
43 +
44 + private static void drawPreferencesBool(string key, string label, string tooltip) {
45 + GUIContent content = new GUIContent(label, tooltip);
46 +
47 + bool value = EditorPrefs.GetBool(key, defaultValue: false);
48 + var newValue = EditorGUILayout.Toggle(content, value);
49 + if (newValue != value) {
50 + EditorPrefs.SetBool(key, newValue);
51 + }
52 + }
53 + }
54 +}
1 +fileFormatVersion: 2
2 +guid: 6659559e2a159ac4cbc8a42ba449dcf6
3 +timeCreated: 1498009954
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
This diff is collapsed. Click to expand it.
1 +fileFormatVersion: 2
2 +guid: 5153a3309ec1fdb4fb6d7ebecfc60279
3 +timeCreated: 1459454776
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System;
11 +using System.Collections.Generic;
12 +using UnityEngine;
13 +using UnityEditor;
14 +
15 +namespace Leap.Unity {
16 +
17 + public class CustomPropertyDrawerBase : PropertyDrawer {
18 + public const float INDENT_AMOUNT = 12;
19 +
20 + private List<IDrawable> _drawables;
21 + private SerializedProperty _property;
22 +
23 + private string _onGuiSampleName;
24 + private string _getHeightSampleName;
25 +
26 + public CustomPropertyDrawerBase() {
27 + _onGuiSampleName = "OnGUI for " + GetType().Name;
28 + _getHeightSampleName = "GetPropertyHeight for " + GetType().Name;
29 + }
30 +
31 + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) {
32 + using (new ProfilerSample(_onGuiSampleName)) {
33 + init(property);
34 +
35 + foreach (var drawable in _drawables) {
36 + drawable.Draw(ref position);
37 + }
38 + }
39 + }
40 +
41 + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) {
42 + using (new ProfilerSample(_getHeightSampleName)) {
43 + init(property);
44 +
45 + float height = 0;
46 + foreach (var drawable in _drawables) {
47 + if (drawable is PropertyContainer) {
48 + height += ((PropertyContainer)drawable).getHeight();
49 + }
50 + }
51 +
52 + return height;
53 + }
54 + }
55 +
56 + protected virtual void init(SerializedProperty property) {
57 + if (_property == property) {
58 + return;
59 + }
60 +
61 + _drawables = new List<IDrawable>();
62 + _property = property;
63 + }
64 +
65 + protected void drawPropertyConditionally(string propertyName, string conditionalName, bool includeChildren = true) {
66 + SerializedProperty property, condition;
67 + if (!tryGetProperty(propertyName, out property) || !tryGetProperty(conditionalName, out condition)) {
68 + return;
69 + }
70 +
71 + _drawables.Add(new PropertyContainer() {
72 + draw = rect => {
73 + if (condition.boolValue) {
74 + EditorGUI.PropertyField(rect, property, includeChildren);
75 + }
76 + },
77 + getHeight = () => {
78 + return condition.boolValue ? EditorGUI.GetPropertyHeight(property, GUIContent.none, includeChildren) : 0;
79 + }
80 + });
81 + }
82 +
83 + protected void drawPropertyConditionally(string propertyName, Func<bool> condition, bool includeChildren = true) {
84 + SerializedProperty property;
85 + if (!tryGetProperty(propertyName, out property)) {
86 + return;
87 + }
88 +
89 + _drawables.Add(new PropertyContainer() {
90 + draw = rect => {
91 + if (condition()) {
92 + EditorGUI.PropertyField(rect, property, includeChildren);
93 + }
94 + },
95 + getHeight = () => {
96 + return condition() ? EditorGUI.GetPropertyHeight(property, GUIContent.none, includeChildren) : 0;
97 + }
98 + });
99 + }
100 +
101 + protected void drawProperty(string name, bool includeChildren = true, bool disable = false) {
102 + SerializedProperty property;
103 + if (!tryGetProperty(name, out property)) {
104 + return;
105 + }
106 +
107 + GUIContent content = new GUIContent(property.displayName, property.tooltip);
108 + _drawables.Add(new PropertyContainer() {
109 + draw = rect => {
110 + EditorGUI.BeginDisabledGroup(disable);
111 + EditorGUI.PropertyField(rect, property, content, includeChildren);
112 + EditorGUI.EndDisabledGroup();
113 + },
114 + getHeight = () => EditorGUI.GetPropertyHeight(property, GUIContent.none, includeChildren)
115 + });
116 + }
117 +
118 + protected void drawProperty(string name, Func<string> nameFunc, bool includeChildren = true) {
119 + SerializedProperty property;
120 + if (!tryGetProperty(name, out property)) {
121 + return;
122 + }
123 +
124 + GUIContent content = new GUIContent(nameFunc(), property.tooltip);
125 +
126 + _drawables.Add(new PropertyContainer() {
127 + draw = rect => {
128 + content.text = nameFunc() ?? property.displayName;
129 + EditorGUI.PropertyField(rect, property, content, includeChildren);
130 + },
131 + getHeight = () => EditorGUI.GetPropertyHeight(property, content, includeChildren)
132 + });
133 + }
134 +
135 + protected void drawCustom(Action<Rect> drawFunc, float height) {
136 + _drawables.Add(new PropertyContainer() {
137 + draw = drawFunc,
138 + getHeight = () => height
139 + });
140 + }
141 +
142 + protected void drawCustom(Action<Rect> drawFunc, Func<float> heightFunc) {
143 + _drawables.Add(new PropertyContainer() {
144 + draw = drawFunc,
145 + getHeight = heightFunc
146 + });
147 + }
148 +
149 + protected void increaseIndent() {
150 + _drawables.Add(new IndentDrawable() {
151 + indent = INDENT_AMOUNT
152 + });
153 + }
154 +
155 + protected void decreaseIndent() {
156 + _drawables.Add(new IndentDrawable() {
157 + indent = -INDENT_AMOUNT
158 + });
159 + }
160 +
161 + protected bool tryGetProperty(string name, out SerializedProperty property) {
162 + property = _property.FindPropertyRelative(name);
163 +
164 + if (property == null) {
165 + Debug.LogWarning("Could not find property " + name + ", was it renamed or removed?");
166 + return false;
167 + } else {
168 + return true;
169 + }
170 + }
171 +
172 + protected bool validateProperty(string name) {
173 + if (_property.FindPropertyRelative(name) == null) {
174 + Debug.LogWarning("Could not find property " + name + ", was it renamed or removed?");
175 + return false;
176 + }
177 +
178 + return true;
179 + }
180 +
181 + private interface IDrawable {
182 + void Draw(ref Rect rect);
183 + }
184 +
185 + private struct PropertyContainer : IDrawable {
186 + public Action<Rect> draw;
187 + public Func<float> getHeight;
188 +
189 + public void Draw(ref Rect rect) {
190 + rect.height = getHeight();
191 + draw(rect);
192 + rect.y += rect.height;
193 + }
194 + }
195 +
196 + private struct IndentDrawable : IDrawable {
197 + public float indent;
198 +
199 + public void Draw(ref Rect rect) {
200 + rect.x += indent;
201 + rect.width -= indent;
202 + }
203 + }
204 + }
205 +}
1 +fileFormatVersion: 2
2 +guid: bf0db7f46a29f4745bdcc7d116b80572
3 +timeCreated: 1493751356
4 +licenseType: Free
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System;
11 +using System.IO;
12 +using System.Linq;
13 +using UnityEditor;
14 +using UnityEngine;
15 +
16 +public static class EmptyFolderUtility {
17 +
18 + [MenuItem("Assets/Delete Empty Folders")]
19 + public static void DeleteEmptyFolders() {
20 + string[] directories = Directory.GetDirectories("Assets", "*", SearchOption.AllDirectories);
21 +
22 + foreach (var directory in directories) {
23 + try {
24 + if (!Directory.Exists(directory)) {
25 + continue;
26 + }
27 +
28 + if (Directory.GetFiles(directory, "*", SearchOption.AllDirectories).Count(p => Path.GetExtension(p) != ".meta") > 0) {
29 + continue;
30 + }
31 + } catch (Exception e) {
32 + Debug.LogException(e);
33 + }
34 +
35 + try {
36 + Directory.Delete(directory, recursive: true);
37 + } catch (Exception e) {
38 + Debug.LogError("Could not delete directory " + directory);
39 + Debug.LogException(e);
40 + }
41 +
42 + }
43 +
44 + AssetDatabase.Refresh();
45 + }
46 +}
1 +fileFormatVersion: 2
2 +guid: 86c4d5fe8c1e52f438fc8663e7d3b46d
3 +timeCreated: 1502479020
4 +licenseType: Free
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using UnityEditor;
11 +using UnityEngine;
12 +using System.Collections;
13 +using Leap;
14 +
15 +namespace Leap.Unity {
16 + [CustomEditor(typeof(LeapHandController))]
17 + public class LeapHandControllerEditor : CustomEditorBase<LeapHandController> {
18 + private const float BOX_RADIUS = 0.45f;
19 + private const float BOX_WIDTH = 0.965f;
20 + private const float BOX_DEPTH = 0.6671f;
21 +
22 + public void OnSceneGUI() {
23 + Vector3 origin = target.transform.TransformPoint(Vector3.zero);
24 +
25 + Vector3 local_top_left, top_left, local_top_right, top_right,
26 + local_bottom_left, bottom_left, local_bottom_right, bottom_right;
27 + getLocalGlobalPoint(-1, 1, 1, out local_top_left, out top_left);
28 + getLocalGlobalPoint(1, 1, 1, out local_top_right, out top_right);
29 + getLocalGlobalPoint(-1, 1, -1, out local_bottom_left, out bottom_left);
30 + getLocalGlobalPoint(1, 1, -1, out local_bottom_right, out bottom_right);
31 +
32 + Handles.DrawLine(origin, top_left);
33 + Handles.DrawLine(origin, top_right);
34 + Handles.DrawLine(origin, bottom_left);
35 + Handles.DrawLine(origin, bottom_right);
36 +
37 + drawControllerEdge(origin, local_top_left, local_top_right);
38 + drawControllerEdge(origin, local_bottom_left, local_top_left);
39 + drawControllerEdge(origin, local_bottom_left, local_bottom_right);
40 + drawControllerEdge(origin, local_bottom_right, local_top_right);
41 +
42 + drawControllerArc(origin, local_top_left, local_bottom_left, local_top_right, local_bottom_right, -Vector3.forward);
43 + drawControllerArc(origin, local_top_left, local_top_right, local_bottom_left, local_bottom_right, -Vector3.right);
44 + }
45 +
46 + private void getLocalGlobalPoint(int x, int y, int z, out Vector3 local, out Vector3 global) {
47 + local = new Vector3(x * BOX_WIDTH, y * BOX_RADIUS, z * BOX_DEPTH);
48 + global = target.transform.TransformPoint(BOX_RADIUS * local.normalized);
49 + }
50 +
51 + private void drawControllerEdge(Vector3 origin,
52 + Vector3 edge0, Vector3 edge1) {
53 + Vector3 right_normal = target.transform.TransformDirection(Vector3.Cross(edge0, edge1));
54 + float right_angle = Vector3.Angle(edge0, edge1);
55 + Handles.DrawWireArc(origin, right_normal,
56 + target.transform.TransformDirection(edge0),
57 + right_angle, target.transform.lossyScale.x * BOX_RADIUS);
58 + }
59 +
60 + private void drawControllerArc(Vector3 origin,
61 + Vector3 edgeA0, Vector3 edgeA1,
62 + Vector3 edgeB0, Vector3 edgeB1,
63 + Vector3 direction) {
64 + Vector3 faceA = Vector3.Lerp(edgeA0, edgeA1, 0.5f);
65 + Vector3 faceB = Vector3.Lerp(edgeB0, edgeB1, 0.5f);
66 +
67 + Vector3 depth_normal = target.transform.TransformDirection(direction);
68 + float angle = Vector3.Angle(faceA, faceB);
69 + Handles.DrawWireArc(origin, depth_normal,
70 + target.transform.TransformDirection(faceA),
71 + angle, target.transform.lossyScale.x * BOX_RADIUS);
72 + }
73 + }
74 +}
1 +fileFormatVersion: 2
2 +guid: e617762d9583845b884c0dce6e2b54a6
3 +MonoImporter:
4 + serializedVersion: 2
5 + defaultReferences: []
6 + executionOrder: 0
7 + icon: {instanceID: 0}
8 + userData:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using UnityEngine;
11 +using UnityEditor;
12 +
13 +namespace Leap.Unity{
14 + [CustomEditor(typeof(LeapImageRetriever))]
15 + public class LeapImageRetrieverEditor : CustomEditorBase<LeapImageRetriever> {
16 +
17 + private GUIContent _brightTextureGUIContent;
18 + private GUIContent _rawTextureGUIContent;
19 + private GUIContent _distortionTextureGUIContent;
20 +
21 + protected override void OnEnable() {
22 + base.OnEnable();
23 +
24 + _brightTextureGUIContent = new GUIContent("Bright Texture");
25 + _rawTextureGUIContent = new GUIContent("Raw Texture");
26 + _distortionTextureGUIContent = new GUIContent("Distortion Texture");
27 + }
28 +
29 + public override void OnInspectorGUI() {
30 + base.OnInspectorGUI();
31 +
32 + if (Application.isPlaying) {
33 + var data = target.TextureData;
34 + var dataType = typeof(Object);
35 +
36 + EditorGUI.BeginDisabledGroup(true);
37 + EditorGUILayout.ObjectField(_brightTextureGUIContent, data.BrightTexture.CombinedTexture, dataType, true);
38 + EditorGUILayout.ObjectField(_rawTextureGUIContent, data.RawTexture.CombinedTexture, dataType, true);
39 + EditorGUILayout.ObjectField(_distortionTextureGUIContent, data.Distortion.CombinedTexture, dataType, true);
40 + EditorGUI.EndDisabledGroup();
41 + }
42 + }
43 + }
44 +}
1 +fileFormatVersion: 2
2 +guid: 489ddbb3e49c3c34f8016d4ea0c4b5d2
3 +timeCreated: 1429813852
4 +licenseType: Free
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using UnityEditor;
11 +
12 +namespace Leap.Unity {
13 +
14 + [CustomEditor(typeof(LeapServiceProvider))]
15 + public class LeapServiceProviderEditor : CustomEditorBase {
16 + protected override void OnEnable() {
17 + base.OnEnable();
18 +
19 + specifyCustomDecorator("_frameOptimization", frameOptimizationWarning);
20 +
21 + specifyConditionalDrawing("_frameOptimization", (int)LeapServiceProvider.FrameOptimizationMode.None,
22 + "_physicsExtrapolation",
23 + "_physicsExtrapolationTime");
24 +
25 + specifyConditionalDrawing("_physicsExtrapolation", (int)LeapServiceProvider.PhysicsExtrapolationMode.Manual,
26 + "_physicsExtrapolationTime");
27 + }
28 +
29 + private void frameOptimizationWarning(SerializedProperty property) {
30 + var mode = (LeapServiceProvider.FrameOptimizationMode)property.intValue;
31 + string warningText;
32 +
33 + switch (mode) {
34 + case LeapServiceProvider.FrameOptimizationMode.ReuseUpdateForPhysics:
35 + warningText = "Reusing update frames for physics introduces a frame of latency for physics interactions.";
36 + break;
37 + case LeapServiceProvider.FrameOptimizationMode.ReusePhysicsForUpdate:
38 + warningText = "This optimization REQUIRES physics framerate to match your target framerate EXACTLY.";
39 + break;
40 + default:
41 + return;
42 + }
43 +
44 + EditorGUILayout.HelpBox(warningText, MessageType.Warning);
45 + }
46 + }
47 +}
1 +fileFormatVersion: 2
2 +guid: 820a690b04c5ed7449f6d0bd3a657f06
3 +timeCreated: 1458765852
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 18de20d1eb6c6394386ad46cb2ab3db3
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System.Linq;
11 +using NUnit.Framework;
12 +
13 +namespace Leap.Unity.Tests {
14 +
15 + public abstract class FrameValidator {
16 + protected const float TOLERANCE = 0.0001f;
17 + protected static Finger.FingerType[] _fingers = {
18 + Finger.FingerType.TYPE_INDEX,
19 + Finger.FingerType.TYPE_MIDDLE,
20 + Finger.FingerType.TYPE_PINKY,
21 + Finger.FingerType.TYPE_RING,
22 + Finger.FingerType.TYPE_THUMB
23 + };
24 +
25 + protected static Bone.BoneType[] _bones = {
26 + Bone.BoneType.TYPE_DISTAL,
27 + Bone.BoneType.TYPE_INTERMEDIATE,
28 + Bone.BoneType.TYPE_METACARPAL,
29 + Bone.BoneType.TYPE_PROXIMAL
30 + };
31 +
32 + protected Frame _frame;
33 +
34 + [SetUp]
35 + public virtual void Setup() {
36 + _frame = createFrame();
37 + }
38 +
39 + [SetUp]
40 + public virtual void Teardown() {
41 + _frame = null;
42 + }
43 +
44 + protected abstract Frame createFrame();
45 +
46 + [Test]
47 + public void HandsAreUnique() {
48 + bool existDuplicates = _frame.Hands.GroupBy(h => h.Id).Any(g => g.Count() > 1);
49 + Assert.That(existDuplicates, Is.False);
50 + }
51 +
52 + [Test]
53 + public void HandsHaveFiveFingers() {
54 + foreach (Hand hand in _frame.Hands) {
55 + Assert.That(hand.Fingers.Count, Is.EqualTo(5));
56 + }
57 + }
58 +
59 + [Test]
60 + public void FingersHaveFourBones([ValueSource(typeof(FrameValidator), "_fingers")] Finger.FingerType fingerType,
61 + [ValueSource(typeof(FrameValidator), "_bones")] Bone.BoneType boneType) {
62 + foreach (Hand hand in _frame.Hands) {
63 + Bone bone = getBone(hand, fingerType, boneType);
64 + Assert.That(bone, Is.Not.Null);
65 + }
66 + }
67 +
68 + [Test]
69 + public void BoneLength([ValueSource(typeof(FrameValidator), "_fingers")] Finger.FingerType fingerType,
70 + [ValueSource(typeof(FrameValidator), "_bones")] Bone.BoneType boneType) {
71 + foreach (Hand hand in _frame.Hands) {
72 + Bone bone = getBone(hand, fingerType, boneType);
73 + float apparentLength = bone.NextJoint.DistanceTo(bone.PrevJoint);
74 + float actualLength = bone.Length;
75 + Assert.That(actualLength, Is.EqualTo(apparentLength).Within(TOLERANCE));
76 + }
77 + }
78 +
79 + [Test]
80 + public void JointsMatch([ValueSource(typeof(FrameValidator), "_fingers")] Finger.FingerType fingerType,
81 + [ValueSource(typeof(FrameValidator), "_bones")] Bone.BoneType boneType) {
82 + foreach (Hand hand in _frame.Hands) {
83 + Bone prevBone = getBone(hand, fingerType, boneType - 1);
84 + Bone bone = getBone(hand, fingerType, boneType);
85 + Bone nextBone = getBone(hand, fingerType, boneType + 1);
86 +
87 + if (prevBone != null) {
88 + assertVectorsEqual(prevBone.NextJoint, bone.PrevJoint);
89 + }
90 +
91 + if (nextBone != null) {
92 + assertVectorsEqual(nextBone.PrevJoint, bone.NextJoint);
93 + }
94 + }
95 + }
96 +
97 + [Test]
98 + public void CenterIsBetweenJoints([ValueSource(typeof(FrameValidator), "_fingers")] Finger.FingerType fingerType,
99 + [ValueSource(typeof(FrameValidator), "_bones")] Bone.BoneType boneType) {
100 + foreach (Hand hand in _frame.Hands) {
101 + Bone bone = getBone(hand, fingerType, boneType);
102 +
103 + Vector jointAverage = (bone.NextJoint + bone.PrevJoint) * 0.5f;
104 + assertVectorsEqual(jointAverage, bone.Center);
105 + }
106 + }
107 +
108 + [Test]
109 + public void DirectionMatchesJoints([ValueSource(typeof(FrameValidator), "_fingers")] Finger.FingerType fingerType,
110 + [ValueSource(typeof(FrameValidator), "_bones")] Bone.BoneType boneType) {
111 + foreach (Hand hand in _frame.Hands) {
112 + Bone bone = getBone(hand, fingerType, boneType);
113 +
114 + //If the joints are at the same position this test is meaningless
115 + if (bone.NextJoint.DistanceTo(bone.PrevJoint) < TOLERANCE) {
116 + continue;
117 + }
118 +
119 + Vector jointDirection = (bone.NextJoint - bone.PrevJoint).Normalized;
120 + assertVectorsEqual(jointDirection, bone.Direction);
121 + }
122 + }
123 +
124 + [Test]
125 + public void RotationIsValid() {
126 + foreach (Hand hand in _frame.Hands) {
127 + Assert.That(hand.Rotation.IsValid());
128 + }
129 + }
130 +
131 + protected Bone getBone(Hand hand, Finger.FingerType fingerType, Bone.BoneType boneType) {
132 + if (boneType < 0 || (int)boneType >= 4) {
133 + return null;
134 + }
135 +
136 + foreach (Finger finger in hand.Fingers) {
137 + if (finger.Type != fingerType) {
138 + continue;
139 + }
140 +
141 + return finger.Bone(boneType);
142 + }
143 + return null;
144 + }
145 +
146 + protected void assertVectorsEqual(Vector a, Vector b, string vectorName = "Vector") {
147 + Assert.That(a.x, Is.EqualTo(b.x).Within(TOLERANCE), vectorName + ".x");
148 + Assert.That(a.y, Is.EqualTo(b.y).Within(TOLERANCE), vectorName + ".y");
149 + Assert.That(a.z, Is.EqualTo(b.z).Within(TOLERANCE), vectorName + ".z");
150 + }
151 + }
152 +}
1 +fileFormatVersion: 2
2 +guid: 7c6eb467dcf4a1446badf724a74ce9e3
3 +timeCreated: 1461712111
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System.Linq;
11 +using System.Collections;
12 +using System.Collections.Generic;
13 +using UnityEngine;
14 +using NUnit.Framework;
15 +
16 +namespace Leap.Unity.Tests {
17 +
18 + /// <summary>
19 + /// Tests for From(), To(), and Then() extension methods.
20 + ///
21 + /// These extension methods provide a consistent rightward syntax for mathematical
22 + /// transformations, e.g. Quaternions and matrices as well as more trivial types like
23 + /// float and Vector3.
24 + /// </summary>
25 + public class FromThenTests {
26 +
27 + public static float EPSILON = 0.0006f;
28 +
29 + #region Vector3
30 +
31 + private static Vector3 VEC_A = new Vector3(0.5f, 0.2f, 0.8f);
32 + private static Vector3 VEC_B = new Vector3(0.13f, 0.98f, 3000f);
33 +
34 + [Test]
35 + public void FromVecAToVecB() {
36 + Assert.That(AreVector3sEqual(VEC_A.Then(VEC_B.From(VEC_A)), VEC_B));
37 + }
38 +
39 + [Test]
40 + public void ToVecBFromVecA() {
41 + Assert.That(AreVector3sEqual(VEC_A.Then(VEC_A.To(VEC_B)), VEC_B));
42 + }
43 +
44 + [Test]
45 + public void FromVecBToVecA() {
46 + Assert.That(AreVector3sEqual(VEC_B.Then(VEC_A.From(VEC_B)), VEC_A));
47 + }
48 +
49 + [Test]
50 + public void ToVecAFromVecB() {
51 + Assert.That(AreVector3sEqual(VEC_B.Then(VEC_B.To(VEC_A)), VEC_A));
52 + }
53 +
54 + private static bool AreVector3sEqual(Vector3 a, Vector3 b) {
55 + return (a - b).magnitude < EPSILON;
56 + }
57 +
58 + #endregion
59 +
60 + #region Quaternion
61 +
62 + private static Quaternion QUAT_A {
63 + get { return Quaternion.AngleAxis(90f, Vector3.up); }
64 + }
65 + private static Quaternion QUAT_B {
66 + get { return Quaternion.AngleAxis(43f, Vector3.one.normalized); }
67 + }
68 +
69 + [Test]
70 + public void FromQuatAToQuatB() {
71 + Assert.That(AreQuaternionsEqual(QUAT_A.Then(QUAT_B.From(QUAT_A)), QUAT_B));
72 + }
73 +
74 + [Test]
75 + public void ToQuatAFromQuatB() {
76 + Assert.That(AreQuaternionsEqual(QUAT_A.Then(QUAT_A.To(QUAT_B)), QUAT_B));
77 + }
78 +
79 + [Test]
80 + public void FromQuatBToQuatA() {
81 + Assert.That(AreQuaternionsEqual(QUAT_B.Then(QUAT_A.From(QUAT_B)), QUAT_A));
82 + }
83 +
84 + [Test]
85 + public void ToQuatBFromQuatA() {
86 + Assert.That(AreQuaternionsEqual(QUAT_B.Then(QUAT_B.To(QUAT_A)), QUAT_A));
87 + }
88 +
89 + private static bool AreQuaternionsEqual(Quaternion a, Quaternion b) {
90 + return (a.ToAngleAxisVector() - b.ToAngleAxisVector()).magnitude < EPSILON;
91 + }
92 +
93 + #endregion
94 +
95 + #region Pose
96 +
97 + public static Pose POSE_A {
98 + get { return new Pose(VEC_A, QUAT_A); }
99 + }
100 + public static Pose POSE_B {
101 + get { return new Pose(VEC_B, QUAT_B); }
102 + }
103 +
104 + [Test]
105 + public void FromPoseAToPoseB() {
106 + Assert.That(ArePosesEqual(POSE_B.Then(POSE_A.From(POSE_B)), POSE_A));
107 + }
108 +
109 + [Test]
110 + public void ToPoseAFromPoseB() {
111 + Assert.That(ArePosesEqual(POSE_B.Then(POSE_B.To(POSE_A)), POSE_A));
112 + }
113 +
114 + [Test]
115 + public void FromPoseBToPoseA() {
116 + Assert.That(ArePosesEqual(POSE_A.Then(POSE_B.From(POSE_A)), POSE_B));
117 + }
118 +
119 + [Test]
120 + public void ToPoseBFromPoseA() {
121 + Assert.That(ArePosesEqual(POSE_A.Then(POSE_A.To(POSE_B)), POSE_B));
122 + }
123 +
124 + private bool ArePosesEqual(Pose a, Pose b) {
125 + return AreVector3sEqual(a.position, b.position)
126 + && AreQuaternionsEqual(a.rotation, b.rotation);
127 + }
128 +
129 + #endregion
130 +
131 + #region Matrix4x4
132 +
133 + private Matrix4x4 MAT_A {
134 + get {
135 + return Matrix4x4.TRS(Vector3.right * 100f,
136 + Quaternion.AngleAxis(77f, Vector3.one),
137 + Vector3.one * 35f);
138 + }
139 + }
140 +
141 + private Matrix4x4 MAT_B {
142 + get {
143 + return Matrix4x4.TRS(Vector3.one * 20f,
144 + Quaternion.AngleAxis(24f, Vector3.up),
145 + Vector3.one * 2f);
146 + }
147 + }
148 +
149 + [Test]
150 + public void FromMatrixBToMatrixA() {
151 + Assert.That(AreMatricesEqual(MAT_B.Then(MAT_A.From(MAT_B)), MAT_A));
152 + }
153 +
154 + [Test]
155 + public void ToMatrixAFromMatrixB() {
156 + Assert.That(AreMatricesEqual(MAT_B.Then(MAT_B.To(MAT_A)), MAT_A));
157 + }
158 +
159 + [Test]
160 + public void FromMatrixAToMatrixB() {
161 + Assert.That(AreMatricesEqual(MAT_A.Then(MAT_B.From(MAT_A)), MAT_B));
162 + }
163 +
164 + private static bool AreMatricesEqual(Matrix4x4 a, Matrix4x4 b) {
165 + return AreVector3sEqual(a.GetVector3(), b.GetVector3())
166 + && AreQuaternionsEqual(a.GetQuaternion(), b.GetQuaternion());
167 + }
168 +
169 + #endregion
170 +
171 + }
172 +}
1 +fileFormatVersion: 2
2 +guid: d8dae2a3179de4145ad49d629d64787d
3 +timeCreated: 1508543219
4 +licenseType: Free
5 +MonoImporter:
6 + externalObjects: {}
7 + serializedVersion: 2
8 + defaultReferences: []
9 + executionOrder: 0
10 + icon: {instanceID: 0}
11 + userData:
12 + assetBundleName:
13 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System;
11 +using NUnit.Framework;
12 +
13 +namespace Leap.Unity.Tests {
14 +
15 + [TestFixture(Category = "TestHandFactory")]
16 + public class HandFactoryTwoHands : FrameValidator {
17 + protected override Frame createFrame() {
18 + return TestHandFactory.MakeTestFrame(0, true, true);
19 + }
20 +
21 + [Test]
22 + public void CorrectHandCount() {
23 + Assert.That(_frame.Hands.Count, Is.EqualTo(2));
24 + }
25 + }
26 +
27 + [TestFixture(Category = "TestHandFactory")]
28 + public class HandFactoryLeft : FrameValidator {
29 + protected override Frame createFrame() {
30 + return TestHandFactory.MakeTestFrame(0, true, false);
31 + }
32 +
33 + [Test]
34 + public void CorrectHandCount() {
35 + Assert.That(_frame.Hands.Count, Is.EqualTo(1));
36 + }
37 + }
38 +
39 + [TestFixture(Category = "TestHandFactory")]
40 + public class HandFactoryRight : FrameValidator {
41 + protected override Frame createFrame() {
42 + return TestHandFactory.MakeTestFrame(0, false, true);
43 + }
44 +
45 + [Test]
46 + public void CorrectHandCount() {
47 + Assert.That(_frame.Hands.Count, Is.EqualTo(1));
48 + }
49 + }
50 +}
1 +fileFormatVersion: 2
2 +guid: 0fb0f9371f59c894f8597f3dcaefec54
3 +timeCreated: 1461711202
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +/******************************************************************************
2 + * Copyright (C) Leap Motion, Inc. 2011-2017. *
3 + * Leap Motion proprietary and confidential. *
4 + * *
5 + * Use subject to the terms of the Leap Motion SDK Agreement available at *
6 + * https://developer.leapmotion.com/sdk_agreement, or another agreement *
7 + * between Leap Motion and you, your company or other organization. *
8 + ******************************************************************************/
9 +
10 +using System;
11 +using System.Linq;
12 +using System.Reflection;
13 +using System.Collections;
14 +using NUnit.Framework;
15 +
16 +namespace Leap.Unity.Tests {
17 +
18 + public class TransformCopyIdentity : FrameValidator {
19 + protected Frame _originalFrame;
20 +
21 + protected override Frame createFrame() {
22 + _originalFrame = TestHandFactory.MakeTestFrame(0, true, true);
23 + return _originalFrame.TransformedCopy(LeapTransform.Identity);
24 + }
25 +
26 + [Test]
27 + public void IdsAreSame() {
28 + Assert.That(_frame.Hands.Count, Is.EqualTo(_originalFrame.Hands.Count));
29 +
30 + for (int i = 0; i < _frame.Hands.Count; i++) {
31 + Hand oldHand = _originalFrame.Hands[i];
32 + Hand newHand = _frame.Hands[i];
33 + Assert.That(oldHand.Id, Is.EqualTo(newHand.Id));
34 +
35 + for (int j = 0; j < 5; j++) {
36 + Finger oldFinger = oldHand.Fingers[j];
37 + Finger newFinger = newHand.Fingers[j];
38 + Assert.That(oldFinger.Id, Is.EqualTo(newFinger.Id));
39 + }
40 + }
41 + }
42 +
43 + [Test]
44 + public void AreBinaryEqual() {
45 + assertObjectsEqual("Frame", _originalFrame, _frame);
46 + }
47 +
48 + private void assertObjectsEqual(string objectName, object a, object b) {
49 + if ((a == null) != (b == null)) {
50 + Assert.Fail("For " + objectName + ", one object was null an the other was not.");
51 + return;
52 + }
53 +
54 + Type typeA = a.GetType();
55 + Type typeB = b.GetType();
56 +
57 + if (typeA != typeB) {
58 + Assert.Fail("For " + objectName + ", object Type " + typeA + " is not equal to type " + typeB + ".");
59 + }
60 +
61 + if (typeA.IsValueType) {
62 + Assert.That(a, Is.EqualTo(b), objectName);
63 + return;
64 + }
65 +
66 + if (a is IList) {
67 + IList aList = a as IList;
68 + IList bList = b as IList;
69 +
70 + Assert.That(aList.Count, Is.EqualTo(bList.Count), objectName + ".Count");
71 +
72 + for (int i = 0; i < aList.Count; i++) {
73 + assertObjectsEqual(objectName + "[" + i + "]", aList[i], bList[i]);
74 + }
75 + } else {
76 + FieldInfo[] fields = typeA.GetFields(BindingFlags.Public | BindingFlags.Instance);
77 + foreach (FieldInfo field in fields) {
78 + assertObjectsEqual(objectName + "." + field.Name, field.GetValue(a), field.GetValue(b));
79 + }
80 +
81 + PropertyInfo[] properties = typeA.GetProperties(BindingFlags.Public | BindingFlags.Instance);
82 + foreach (PropertyInfo property in properties) {
83 + if (property.GetIndexParameters().Length == 0) {
84 + object propA;
85 + try {
86 + propA = property.GetValue(a, null);
87 + } catch (Exception exceptionA) {
88 + try {
89 + property.GetValue(b, null);
90 + Assert.Fail("For " + objectName + ", one property threw an exception where the other did not.");
91 + return;
92 + } catch (Exception exceptionB) {
93 + Assert.That(exceptionA.GetType(), Is.EqualTo(exceptionB.GetType()), "For " + objectName + ", both properties threw exceptions but their types were different.");
94 + return;
95 + }
96 + }
97 +
98 + object propB = property.GetValue(b, null);
99 +
100 + assertObjectsEqual(objectName + "." + property.Name, propA, propB);
101 + }
102 + }
103 + }
104 + }
105 + }
106 +
107 + public class TransformCopyTranslation : FrameValidator {
108 + protected static Vector translation = Vector.Forward;
109 + protected Frame _originalFrame;
110 +
111 + protected override Frame createFrame() {
112 + _originalFrame = TestHandFactory.MakeTestFrame(0, true, true);
113 + LeapTransform forwardTransform = new LeapTransform(translation, LeapQuaternion.Identity);
114 + return _originalFrame.TransformedCopy(forwardTransform);
115 + }
116 +
117 + [Test]
118 + public void IsTranslated() {
119 + for (int i = 0; i < _frame.Hands.Count; i++) {
120 + Hand oldHand = _originalFrame.Hands[i];
121 + Hand newHand = _frame.Hands[i];
122 +
123 + assertVectorsEqual(oldHand.PalmPosition + translation, newHand.PalmPosition, "Palm Position");
124 +
125 + for (int j = 0; j < 5; j++) {
126 + Finger oldFinger = oldHand.Fingers[j];
127 + Finger newFinger = newHand.Fingers[j];
128 +
129 + assertVectorsEqual(oldFinger.TipPosition + translation, newFinger.TipPosition, oldFinger.Type.ToString());
130 + }
131 + }
132 + }
133 + }
134 +}
1 +fileFormatVersion: 2
2 +guid: 735f00b9d48456f469d7d7fce9a5a333
3 +timeCreated: 1461711984
4 +licenseType: Pro
5 +MonoImporter:
6 + serializedVersion: 2
7 + defaultReferences: []
8 + executionOrder: 0
9 + icon: {instanceID: 0}
10 + userData:
11 + assetBundleName:
12 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 2eb1085ae7df28d488d4f685b4f209d8
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: deb56e030d40a2e459ff79f6da5e82cc
3 +timeCreated: 1493336311
4 +licenseType: Free
5 +TextureImporter:
6 + fileIDToRecycleName: {}
7 + serializedVersion: 4
8 + mipmaps:
9 + mipMapMode: 0
10 + enableMipMap: 0
11 + sRGBTexture: 1
12 + linearTexture: 0
13 + fadeOut: 0
14 + borderMipMap: 0
15 + mipMapFadeDistanceStart: 1
16 + mipMapFadeDistanceEnd: 3
17 + bumpmap:
18 + convertToNormalMap: 0
19 + externalNormalMap: 0
20 + heightScale: 0.25
21 + normalMapFilter: 0
22 + isReadable: 0
23 + grayScaleToAlpha: 0
24 + generateCubemap: 6
25 + cubemapConvolution: 0
26 + seamlessCubemap: 0
27 + textureFormat: 1
28 + maxTextureSize: 2048
29 + textureSettings:
30 + filterMode: 0
31 + aniso: -1
32 + mipBias: -1
33 + wrapMode: 1
34 + nPOTScale: 1
35 + lightmap: 0
36 + compressionQuality: 50
37 + spriteMode: 0
38 + spriteExtrude: 1
39 + spriteMeshType: 1
40 + alignment: 0
41 + spritePivot: {x: 0.5, y: 0.5}
42 + spriteBorder: {x: 0, y: 0, z: 0, w: 0}
43 + spritePixelsToUnits: 100
44 + alphaUsage: 0
45 + alphaIsTransparency: 0
46 + spriteTessellationDetail: -1
47 + textureType: 0
48 + textureShape: 1
49 + maxTextureSizeSet: 0
50 + compressionQualitySet: 0
51 + textureFormatSet: 0
52 + platformSettings:
53 + - buildTarget: DefaultTexturePlatform
54 + maxTextureSize: 256
55 + textureFormat: -1
56 + textureCompression: 3
57 + compressionQuality: 1
58 + crunchedCompression: 1
59 + allowsAlphaSplitting: 0
60 + overridden: 0
61 + - buildTarget: Standalone
62 + maxTextureSize: 256
63 + textureFormat: -1
64 + textureCompression: 3
65 + compressionQuality: 1
66 + crunchedCompression: 1
67 + allowsAlphaSplitting: 0
68 + overridden: 0
69 + - buildTarget: Android
70 + maxTextureSize: 256
71 + textureFormat: -1
72 + textureCompression: 3
73 + compressionQuality: 1
74 + crunchedCompression: 1
75 + allowsAlphaSplitting: 0
76 + overridden: 0
77 + spriteSheet:
78 + serializedVersion: 2
79 + sprites: []
80 + outline: []
81 + spritePackingTag:
82 + userData:
83 + assetBundleName:
84 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 00048aead71e05243b337b5046e4947e
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 6bdf40ab4a111d648a7e00084192c40f
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Attachment Hands Example Blue
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_CustomRenderQueue: -1
15 + stringTagMap: {}
16 + disabledShaderPasses: []
17 + m_SavedProperties:
18 + serializedVersion: 3
19 + m_TexEnvs:
20 + - _BumpMap:
21 + m_Texture: {fileID: 0}
22 + m_Scale: {x: 1, y: 1}
23 + m_Offset: {x: 0, y: 0}
24 + - _DetailAlbedoMap:
25 + m_Texture: {fileID: 0}
26 + m_Scale: {x: 1, y: 1}
27 + m_Offset: {x: 0, y: 0}
28 + - _DetailMask:
29 + m_Texture: {fileID: 0}
30 + m_Scale: {x: 1, y: 1}
31 + m_Offset: {x: 0, y: 0}
32 + - _DetailNormalMap:
33 + m_Texture: {fileID: 0}
34 + m_Scale: {x: 1, y: 1}
35 + m_Offset: {x: 0, y: 0}
36 + - _EmissionMap:
37 + m_Texture: {fileID: 0}
38 + m_Scale: {x: 1, y: 1}
39 + m_Offset: {x: 0, y: 0}
40 + - _MainTex:
41 + m_Texture: {fileID: 0}
42 + m_Scale: {x: 1, y: 1}
43 + m_Offset: {x: 0, y: 0}
44 + - _MetallicGlossMap:
45 + m_Texture: {fileID: 0}
46 + m_Scale: {x: 1, y: 1}
47 + m_Offset: {x: 0, y: 0}
48 + - _OcclusionMap:
49 + m_Texture: {fileID: 0}
50 + m_Scale: {x: 1, y: 1}
51 + m_Offset: {x: 0, y: 0}
52 + - _ParallaxMap:
53 + m_Texture: {fileID: 0}
54 + m_Scale: {x: 1, y: 1}
55 + m_Offset: {x: 0, y: 0}
56 + m_Floats:
57 + - _BumpScale: 1
58 + - _Cutoff: 0.5
59 + - _DetailNormalMapScale: 1
60 + - _DstBlend: 0
61 + - _GlossMapScale: 1
62 + - _Glossiness: 0.5
63 + - _GlossyReflections: 1
64 + - _Metallic: 0
65 + - _Mode: 0
66 + - _OcclusionStrength: 1
67 + - _Parallax: 0.02
68 + - _SmoothnessTextureChannel: 0
69 + - _SpecularHighlights: 1
70 + - _SrcBlend: 1
71 + - _UVSec: 0
72 + - _ZWrite: 1
73 + m_Colors:
74 + - _Color: {r: 0, g: 0.42068958, b: 1, a: 1}
75 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: 67b66d4eb50ed684d94eb00bc04709d2
3 +timeCreated: 1493435146
4 +licenseType: Free
5 +NativeFormatImporter:
6 + mainObjectFileID: 2100000
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Attachment Hands Example Green
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_CustomRenderQueue: -1
15 + stringTagMap: {}
16 + disabledShaderPasses: []
17 + m_SavedProperties:
18 + serializedVersion: 3
19 + m_TexEnvs:
20 + - _BumpMap:
21 + m_Texture: {fileID: 0}
22 + m_Scale: {x: 1, y: 1}
23 + m_Offset: {x: 0, y: 0}
24 + - _DetailAlbedoMap:
25 + m_Texture: {fileID: 0}
26 + m_Scale: {x: 1, y: 1}
27 + m_Offset: {x: 0, y: 0}
28 + - _DetailMask:
29 + m_Texture: {fileID: 0}
30 + m_Scale: {x: 1, y: 1}
31 + m_Offset: {x: 0, y: 0}
32 + - _DetailNormalMap:
33 + m_Texture: {fileID: 0}
34 + m_Scale: {x: 1, y: 1}
35 + m_Offset: {x: 0, y: 0}
36 + - _EmissionMap:
37 + m_Texture: {fileID: 0}
38 + m_Scale: {x: 1, y: 1}
39 + m_Offset: {x: 0, y: 0}
40 + - _MainTex:
41 + m_Texture: {fileID: 0}
42 + m_Scale: {x: 1, y: 1}
43 + m_Offset: {x: 0, y: 0}
44 + - _MetallicGlossMap:
45 + m_Texture: {fileID: 0}
46 + m_Scale: {x: 1, y: 1}
47 + m_Offset: {x: 0, y: 0}
48 + - _OcclusionMap:
49 + m_Texture: {fileID: 0}
50 + m_Scale: {x: 1, y: 1}
51 + m_Offset: {x: 0, y: 0}
52 + - _ParallaxMap:
53 + m_Texture: {fileID: 0}
54 + m_Scale: {x: 1, y: 1}
55 + m_Offset: {x: 0, y: 0}
56 + m_Floats:
57 + - _BumpScale: 1
58 + - _Cutoff: 0.5
59 + - _DetailNormalMapScale: 1
60 + - _DstBlend: 0
61 + - _GlossMapScale: 1
62 + - _Glossiness: 0.5
63 + - _GlossyReflections: 1
64 + - _Metallic: 0
65 + - _Mode: 0
66 + - _OcclusionStrength: 1
67 + - _Parallax: 0.02
68 + - _SmoothnessTextureChannel: 0
69 + - _SpecularHighlights: 1
70 + - _SrcBlend: 1
71 + - _UVSec: 0
72 + - _ZWrite: 1
73 + m_Colors:
74 + - _Color: {r: 0.48316428, g: 1, b: 0.2352941, a: 1}
75 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: 81f6d387b9d5c994d9e291af97c84648
3 +timeCreated: 1493435146
4 +licenseType: Free
5 +NativeFormatImporter:
6 + mainObjectFileID: 2100000
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Attachment Hands Example Red
10 + m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 4
13 + m_EnableInstancingVariants: 0
14 + m_CustomRenderQueue: -1
15 + stringTagMap: {}
16 + disabledShaderPasses: []
17 + m_SavedProperties:
18 + serializedVersion: 3
19 + m_TexEnvs:
20 + - _BumpMap:
21 + m_Texture: {fileID: 0}
22 + m_Scale: {x: 1, y: 1}
23 + m_Offset: {x: 0, y: 0}
24 + - _DetailAlbedoMap:
25 + m_Texture: {fileID: 0}
26 + m_Scale: {x: 1, y: 1}
27 + m_Offset: {x: 0, y: 0}
28 + - _DetailMask:
29 + m_Texture: {fileID: 0}
30 + m_Scale: {x: 1, y: 1}
31 + m_Offset: {x: 0, y: 0}
32 + - _DetailNormalMap:
33 + m_Texture: {fileID: 0}
34 + m_Scale: {x: 1, y: 1}
35 + m_Offset: {x: 0, y: 0}
36 + - _EmissionMap:
37 + m_Texture: {fileID: 0}
38 + m_Scale: {x: 1, y: 1}
39 + m_Offset: {x: 0, y: 0}
40 + - _MainTex:
41 + m_Texture: {fileID: 0}
42 + m_Scale: {x: 1, y: 1}
43 + m_Offset: {x: 0, y: 0}
44 + - _MetallicGlossMap:
45 + m_Texture: {fileID: 0}
46 + m_Scale: {x: 1, y: 1}
47 + m_Offset: {x: 0, y: 0}
48 + - _OcclusionMap:
49 + m_Texture: {fileID: 0}
50 + m_Scale: {x: 1, y: 1}
51 + m_Offset: {x: 0, y: 0}
52 + - _ParallaxMap:
53 + m_Texture: {fileID: 0}
54 + m_Scale: {x: 1, y: 1}
55 + m_Offset: {x: 0, y: 0}
56 + m_Floats:
57 + - _BumpScale: 1
58 + - _Cutoff: 0.5
59 + - _DetailNormalMapScale: 1
60 + - _DstBlend: 0
61 + - _GlossMapScale: 1
62 + - _Glossiness: 0.5
63 + - _GlossyReflections: 1
64 + - _Metallic: 0
65 + - _Mode: 0
66 + - _OcclusionStrength: 1
67 + - _Parallax: 0.02
68 + - _SmoothnessTextureChannel: 0
69 + - _SpecularHighlights: 1
70 + - _SrcBlend: 1
71 + - _UVSec: 0
72 + - _ZWrite: 1
73 + m_Colors:
74 + - _Color: {r: 1, g: 0.058823526, b: 0.42880338, a: 1}
75 + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
1 +fileFormatVersion: 2
2 +guid: 113742fcb5ec3254e96c40315b70f248
3 +timeCreated: 1493435146
4 +licenseType: Free
5 +NativeFormatImporter:
6 + mainObjectFileID: 2100000
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!1001 &100100000
4 +Prefab:
5 + m_ObjectHideFlags: 1
6 + serializedVersion: 2
7 + m_Modification:
8 + m_TransformParent: {fileID: 0}
9 + m_Modifications: []
10 + m_RemovedComponents: []
11 + m_ParentPrefab: {fileID: 0}
12 + m_RootGameObject: {fileID: 1354446095468498}
13 + m_IsPrefabParent: 1
14 +--- !u!1 &1354446095468498
15 +GameObject:
16 + m_ObjectHideFlags: 0
17 + m_PrefabParentObject: {fileID: 0}
18 + m_PrefabInternal: {fileID: 100100000}
19 + serializedVersion: 5
20 + m_Component:
21 + - component: {fileID: 4742774030164970}
22 + m_Layer: 0
23 + m_Name: Attachment Hands Example Transform Prefab
24 + m_TagString: Untagged
25 + m_Icon: {fileID: 0}
26 + m_NavMeshLayer: 0
27 + m_StaticEditorFlags: 0
28 + m_IsActive: 1
29 +--- !u!1 &1531365716100390
30 +GameObject:
31 + m_ObjectHideFlags: 0
32 + m_PrefabParentObject: {fileID: 0}
33 + m_PrefabInternal: {fileID: 100100000}
34 + serializedVersion: 5
35 + m_Component:
36 + - component: {fileID: 4471079068341904}
37 + - component: {fileID: 33258764987043748}
38 + - component: {fileID: 23068812418196360}
39 + m_Layer: 0
40 + m_Name: Capsule (1)
41 + m_TagString: Untagged
42 + m_Icon: {fileID: 0}
43 + m_NavMeshLayer: 0
44 + m_StaticEditorFlags: 0
45 + m_IsActive: 1
46 +--- !u!1 &1663003037467920
47 +GameObject:
48 + m_ObjectHideFlags: 0
49 + m_PrefabParentObject: {fileID: 0}
50 + m_PrefabInternal: {fileID: 100100000}
51 + serializedVersion: 5
52 + m_Component:
53 + - component: {fileID: 4291965287335194}
54 + - component: {fileID: 33102402002948822}
55 + - component: {fileID: 23281748798793066}
56 + m_Layer: 0
57 + m_Name: Capsule
58 + m_TagString: Untagged
59 + m_Icon: {fileID: 0}
60 + m_NavMeshLayer: 0
61 + m_StaticEditorFlags: 0
62 + m_IsActive: 1
63 +--- !u!1 &1944279291534800
64 +GameObject:
65 + m_ObjectHideFlags: 0
66 + m_PrefabParentObject: {fileID: 0}
67 + m_PrefabInternal: {fileID: 100100000}
68 + serializedVersion: 5
69 + m_Component:
70 + - component: {fileID: 4544740298448378}
71 + - component: {fileID: 33108316112102534}
72 + - component: {fileID: 23598185842902946}
73 + m_Layer: 0
74 + m_Name: Capsule (2)
75 + m_TagString: Untagged
76 + m_Icon: {fileID: 0}
77 + m_NavMeshLayer: 0
78 + m_StaticEditorFlags: 0
79 + m_IsActive: 1
80 +--- !u!4 &4291965287335194
81 +Transform:
82 + m_ObjectHideFlags: 1
83 + m_PrefabParentObject: {fileID: 0}
84 + m_PrefabInternal: {fileID: 100100000}
85 + m_GameObject: {fileID: 1663003037467920}
86 + m_LocalRotation: {x: 0.7071065, y: -0, z: -0, w: 0.7071071}
87 + m_LocalPosition: {x: 0.000000007450581, y: -0, z: 0.0104}
88 + m_LocalScale: {x: -0.005102402, y: 0.015, z: -0.0051024}
89 + m_Children: []
90 + m_Father: {fileID: 4742774030164970}
91 + m_RootOrder: 0
92 + m_LocalEulerAnglesHint: {x: 90.00001, y: 0, z: 0}
93 +--- !u!4 &4471079068341904
94 +Transform:
95 + m_ObjectHideFlags: 1
96 + m_PrefabParentObject: {fileID: 0}
97 + m_PrefabInternal: {fileID: 100100000}
98 + m_GameObject: {fileID: 1531365716100390}
99 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
100 + m_LocalPosition: {x: 0, y: 0.0095, z: 0}
101 + m_LocalScale: {x: -0.0053297738, y: 0.015, z: -0.0053297738}
102 + m_Children: []
103 + m_Father: {fileID: 4742774030164970}
104 + m_RootOrder: 1
105 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
106 +--- !u!4 &4544740298448378
107 +Transform:
108 + m_ObjectHideFlags: 1
109 + m_PrefabParentObject: {fileID: 0}
110 + m_PrefabInternal: {fileID: 100100000}
111 + m_GameObject: {fileID: 1944279291534800}
112 + m_LocalRotation: {x: -0, y: -0, z: -0.70710677, w: 0.7071068}
113 + m_LocalPosition: {x: 0.0091, y: 0, z: 0}
114 + m_LocalScale: {x: -0.0053267055, y: 0.015, z: -0.0053267055}
115 + m_Children: []
116 + m_Father: {fileID: 4742774030164970}
117 + m_RootOrder: 2
118 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: -90.00001}
119 +--- !u!4 &4742774030164970
120 +Transform:
121 + m_ObjectHideFlags: 1
122 + m_PrefabParentObject: {fileID: 0}
123 + m_PrefabInternal: {fileID: 100100000}
124 + m_GameObject: {fileID: 1354446095468498}
125 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
126 + m_LocalPosition: {x: 0, y: 0, z: 0}
127 + m_LocalScale: {x: 0.6588137, y: 0.65881366, z: 0.65881366}
128 + m_Children:
129 + - {fileID: 4291965287335194}
130 + - {fileID: 4471079068341904}
131 + - {fileID: 4544740298448378}
132 + m_Father: {fileID: 0}
133 + m_RootOrder: 0
134 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
135 +--- !u!23 &23068812418196360
136 +MeshRenderer:
137 + m_ObjectHideFlags: 1
138 + m_PrefabParentObject: {fileID: 0}
139 + m_PrefabInternal: {fileID: 100100000}
140 + m_GameObject: {fileID: 1531365716100390}
141 + m_Enabled: 1
142 + m_CastShadows: 1
143 + m_ReceiveShadows: 1
144 + m_DynamicOccludee: 1
145 + m_MotionVectors: 1
146 + m_LightProbeUsage: 1
147 + m_ReflectionProbeUsage: 1
148 + m_Materials:
149 + - {fileID: 2100000, guid: 81f6d387b9d5c994d9e291af97c84648, type: 2}
150 + m_StaticBatchInfo:
151 + firstSubMesh: 0
152 + subMeshCount: 0
153 + m_StaticBatchRoot: {fileID: 0}
154 + m_ProbeAnchor: {fileID: 0}
155 + m_LightProbeVolumeOverride: {fileID: 0}
156 + m_ScaleInLightmap: 1
157 + m_PreserveUVs: 1
158 + m_IgnoreNormalsForChartDetection: 0
159 + m_ImportantGI: 0
160 + m_StitchLightmapSeams: 0
161 + m_SelectedEditorRenderState: 3
162 + m_MinimumChartSize: 4
163 + m_AutoUVMaxDistance: 0.5
164 + m_AutoUVMaxAngle: 89
165 + m_LightmapParameters: {fileID: 0}
166 + m_SortingLayerID: 0
167 + m_SortingLayer: 0
168 + m_SortingOrder: 0
169 +--- !u!23 &23281748798793066
170 +MeshRenderer:
171 + m_ObjectHideFlags: 1
172 + m_PrefabParentObject: {fileID: 0}
173 + m_PrefabInternal: {fileID: 100100000}
174 + m_GameObject: {fileID: 1663003037467920}
175 + m_Enabled: 1
176 + m_CastShadows: 1
177 + m_ReceiveShadows: 1
178 + m_DynamicOccludee: 1
179 + m_MotionVectors: 1
180 + m_LightProbeUsage: 1
181 + m_ReflectionProbeUsage: 1
182 + m_Materials:
183 + - {fileID: 2100000, guid: 67b66d4eb50ed684d94eb00bc04709d2, type: 2}
184 + m_StaticBatchInfo:
185 + firstSubMesh: 0
186 + subMeshCount: 0
187 + m_StaticBatchRoot: {fileID: 0}
188 + m_ProbeAnchor: {fileID: 0}
189 + m_LightProbeVolumeOverride: {fileID: 0}
190 + m_ScaleInLightmap: 1
191 + m_PreserveUVs: 1
192 + m_IgnoreNormalsForChartDetection: 0
193 + m_ImportantGI: 0
194 + m_StitchLightmapSeams: 0
195 + m_SelectedEditorRenderState: 3
196 + m_MinimumChartSize: 4
197 + m_AutoUVMaxDistance: 0.5
198 + m_AutoUVMaxAngle: 89
199 + m_LightmapParameters: {fileID: 0}
200 + m_SortingLayerID: 0
201 + m_SortingLayer: 0
202 + m_SortingOrder: 0
203 +--- !u!23 &23598185842902946
204 +MeshRenderer:
205 + m_ObjectHideFlags: 1
206 + m_PrefabParentObject: {fileID: 0}
207 + m_PrefabInternal: {fileID: 100100000}
208 + m_GameObject: {fileID: 1944279291534800}
209 + m_Enabled: 1
210 + m_CastShadows: 1
211 + m_ReceiveShadows: 1
212 + m_DynamicOccludee: 1
213 + m_MotionVectors: 1
214 + m_LightProbeUsage: 1
215 + m_ReflectionProbeUsage: 1
216 + m_Materials:
217 + - {fileID: 2100000, guid: 113742fcb5ec3254e96c40315b70f248, type: 2}
218 + m_StaticBatchInfo:
219 + firstSubMesh: 0
220 + subMeshCount: 0
221 + m_StaticBatchRoot: {fileID: 0}
222 + m_ProbeAnchor: {fileID: 0}
223 + m_LightProbeVolumeOverride: {fileID: 0}
224 + m_ScaleInLightmap: 1
225 + m_PreserveUVs: 1
226 + m_IgnoreNormalsForChartDetection: 0
227 + m_ImportantGI: 0
228 + m_StitchLightmapSeams: 0
229 + m_SelectedEditorRenderState: 3
230 + m_MinimumChartSize: 4
231 + m_AutoUVMaxDistance: 0.5
232 + m_AutoUVMaxAngle: 89
233 + m_LightmapParameters: {fileID: 0}
234 + m_SortingLayerID: 0
235 + m_SortingLayer: 0
236 + m_SortingOrder: 0
237 +--- !u!33 &33102402002948822
238 +MeshFilter:
239 + m_ObjectHideFlags: 1
240 + m_PrefabParentObject: {fileID: 0}
241 + m_PrefabInternal: {fileID: 100100000}
242 + m_GameObject: {fileID: 1663003037467920}
243 + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
244 +--- !u!33 &33108316112102534
245 +MeshFilter:
246 + m_ObjectHideFlags: 1
247 + m_PrefabParentObject: {fileID: 0}
248 + m_PrefabInternal: {fileID: 100100000}
249 + m_GameObject: {fileID: 1944279291534800}
250 + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
251 +--- !u!33 &33258764987043748
252 +MeshFilter:
253 + m_ObjectHideFlags: 1
254 + m_PrefabParentObject: {fileID: 0}
255 + m_PrefabInternal: {fileID: 100100000}
256 + m_GameObject: {fileID: 1531365716100390}
257 + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0}
1 +fileFormatVersion: 2
2 +guid: 1477d75bc13cce74ea026927aa88dd9f
3 +timeCreated: 1493435497
4 +licenseType: Free
5 +NativeFormatImporter:
6 + mainObjectFileID: 100100000
7 + userData:
8 + assetBundleName:
9 + assetBundleVariant:
This diff could not be displayed because it is too large.
1 +fileFormatVersion: 2
2 +guid: e136a15ad33ad024d857c80ab2e20ec8
3 +timeCreated: 1493340871
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
This diff is collapsed. Click to expand it.
1 +fileFormatVersion: 2
2 +guid: e97e5c56326797c41be5a618cde4727a
3 +timeCreated: 1456790283
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 480afe764b344a64688bf3a502bc612a
3 +timeCreated: 1456789367
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
This diff could not be displayed because it is too large.
1 +fileFormatVersion: 2
2 +guid: b8716ea72d45ecc4f9d690226f6664d1
3 +timeCreated: 1455584052
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 9a1f8659dc3f7b74486b73db925392de
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: d88e9011efa39d24a9c768560b6c9bf0
3 +timeCreated: 1462923422
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
This diff could not be displayed because it is too large.
1 +fileFormatVersion: 2
2 +guid: af5071277bb494844a54bfccdc5e226f
3 +timeCreated: 1460509684
4 +licenseType: Free
5 +DefaultImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 1d352d8f60ef73b4aad43bee36c7ddab
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 8e191cfd76525421fa90723c1a520a70
3 +TextureImporter:
4 + fileIDToRecycleName: {}
5 + serializedVersion: 2
6 + mipmaps:
7 + mipMapMode: 0
8 + enableMipMap: 1
9 + linearTexture: 0
10 + correctGamma: 0
11 + fadeOut: 0
12 + borderMipMap: 0
13 + mipMapFadeDistanceStart: 1
14 + mipMapFadeDistanceEnd: 3
15 + bumpmap:
16 + convertToNormalMap: 0
17 + externalNormalMap: 0
18 + heightScale: .25
19 + normalMapFilter: 0
20 + isReadable: 0
21 + grayScaleToAlpha: 0
22 + generateCubemap: 0
23 + seamlessCubemap: 0
24 + textureFormat: -1
25 + maxTextureSize: 4096
26 + textureSettings:
27 + filterMode: -1
28 + aniso: -1
29 + mipBias: -1
30 + wrapMode: -1
31 + nPOTScale: 1
32 + lightmap: 0
33 + compressionQuality: 50
34 + spriteMode: 0
35 + spriteExtrude: 1
36 + spriteMeshType: 1
37 + alignment: 0
38 + spritePivot: {x: .5, y: .5}
39 + spriteBorder: {x: 0, y: 0, z: 0, w: 0}
40 + spritePixelsToUnits: 100
41 + alphaIsTransparency: 1
42 + textureType: -1
43 + buildTargetSettings: []
44 + spriteSheet:
45 + sprites: []
46 + spritePackingTag:
47 + userData:
1 +fileFormatVersion: 2
2 +guid: 36c2955be7f365c44ad76b5f21a9e8d1
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +fileFormatVersion: 2
2 +guid: 4f1e7bc24ef9d25499537cf0f916ad53
3 +folderAsset: yes
4 +DefaultImporter:
5 + externalObjects: {}
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Background
10 + m_Shader: {fileID: 4800000, guid: a944a7b9f5c8740469de79e2e07b4437, type: 3}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 5
13 + m_CustomRenderQueue: -1
14 + stringTagMap: {}
15 + m_SavedProperties:
16 + serializedVersion: 2
17 + m_TexEnvs: {}
18 + m_Floats: {}
19 + m_Colors: {}
1 +fileFormatVersion: 2
2 +guid: a781c82cecc141143bb13e71d88efa99
3 +timeCreated: 1429641609
4 +licenseType: Free
5 +NativeFormatImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: Foreground
10 + m_Shader: {fileID: 4800000, guid: 4a2714c8f776648479c759c998cdbf16, type: 3}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 5
13 + m_CustomRenderQueue: -1
14 + stringTagMap: {}
15 + m_SavedProperties:
16 + serializedVersion: 2
17 + m_TexEnvs:
18 + data:
19 + first:
20 + name: _MainTex
21 + second:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + data:
26 + first:
27 + name: _BumpMap
28 + second:
29 + m_Texture: {fileID: 0}
30 + m_Scale: {x: 1, y: 1}
31 + m_Offset: {x: 0, y: 0}
32 + data:
33 + first:
34 + name: _DetailNormalMap
35 + second:
36 + m_Texture: {fileID: 0}
37 + m_Scale: {x: 1, y: 1}
38 + m_Offset: {x: 0, y: 0}
39 + data:
40 + first:
41 + name: _ParallaxMap
42 + second:
43 + m_Texture: {fileID: 0}
44 + m_Scale: {x: 1, y: 1}
45 + m_Offset: {x: 0, y: 0}
46 + data:
47 + first:
48 + name: _OcclusionMap
49 + second:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + data:
54 + first:
55 + name: _EmissionMap
56 + second:
57 + m_Texture: {fileID: 0}
58 + m_Scale: {x: 1, y: 1}
59 + m_Offset: {x: 0, y: 0}
60 + data:
61 + first:
62 + name: _DetailMask
63 + second:
64 + m_Texture: {fileID: 0}
65 + m_Scale: {x: 1, y: 1}
66 + m_Offset: {x: 0, y: 0}
67 + data:
68 + first:
69 + name: _DetailAlbedoMap
70 + second:
71 + m_Texture: {fileID: 0}
72 + m_Scale: {x: 1, y: 1}
73 + m_Offset: {x: 0, y: 0}
74 + data:
75 + first:
76 + name: _MetallicGlossMap
77 + second:
78 + m_Texture: {fileID: 0}
79 + m_Scale: {x: 1, y: 1}
80 + m_Offset: {x: 0, y: 0}
81 + m_Floats:
82 + data:
83 + first:
84 + name: _SrcBlend
85 + second: 1
86 + data:
87 + first:
88 + name: _DstBlend
89 + second: 0
90 + data:
91 + first:
92 + name: _Cutoff
93 + second: 0.5
94 + data:
95 + first:
96 + name: _Parallax
97 + second: 0.02
98 + data:
99 + first:
100 + name: _ZWrite
101 + second: 1
102 + data:
103 + first:
104 + name: _Glossiness
105 + second: 0.5
106 + data:
107 + first:
108 + name: _BumpScale
109 + second: 1
110 + data:
111 + first:
112 + name: _OcclusionStrength
113 + second: 1
114 + data:
115 + first:
116 + name: _DetailNormalMapScale
117 + second: 1
118 + data:
119 + first:
120 + name: _UVSec
121 + second: 0
122 + data:
123 + first:
124 + name: _Mode
125 + second: 0
126 + data:
127 + first:
128 + name: _Metallic
129 + second: 0
130 + data:
131 + first:
132 + name: _EmissionScaleUI
133 + second: 0
134 + m_Colors:
135 + data:
136 + first:
137 + name: _EmissionColor
138 + second: {r: 0, g: 0, b: 0, a: 1}
139 + data:
140 + first:
141 + name: _Color
142 + second: {r: 1, g: 1, b: 1, a: 1}
143 + data:
144 + first:
145 + name: _EmissionColorUI
146 + second: {r: 1, g: 1, b: 1, a: 1}
1 +fileFormatVersion: 2
2 +guid: 3f4fac4e15d524ca1bdd90a2fe016185
3 +timeCreated: 1430880378
4 +licenseType: Pro
5 +NativeFormatImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
1 +%YAML 1.1
2 +%TAG !u! tag:unity3d.com,2011:
3 +--- !u!21 &2100000
4 +Material:
5 + serializedVersion: 6
6 + m_ObjectHideFlags: 0
7 + m_PrefabParentObject: {fileID: 0}
8 + m_PrefabInternal: {fileID: 0}
9 + m_Name: ThresholdOverlay
10 + m_Shader: {fileID: 4800000, guid: 8e5b00b7c29383f48b52edad41699d70, type: 3}
11 + m_ShaderKeywords:
12 + m_LightmapFlags: 5
13 + m_CustomRenderQueue: -1
14 + stringTagMap: {}
15 + m_SavedProperties:
16 + serializedVersion: 2
17 + m_TexEnvs:
18 + data:
19 + first:
20 + name: _MainTex
21 + second:
22 + m_Texture: {fileID: 0}
23 + m_Scale: {x: 1, y: 1}
24 + m_Offset: {x: 0, y: 0}
25 + data:
26 + first:
27 + name: _BumpMap
28 + second:
29 + m_Texture: {fileID: 0}
30 + m_Scale: {x: 1, y: 1}
31 + m_Offset: {x: 0, y: 0}
32 + data:
33 + first:
34 + name: _DetailNormalMap
35 + second:
36 + m_Texture: {fileID: 0}
37 + m_Scale: {x: 1, y: 1}
38 + m_Offset: {x: 0, y: 0}
39 + data:
40 + first:
41 + name: _ParallaxMap
42 + second:
43 + m_Texture: {fileID: 0}
44 + m_Scale: {x: 1, y: 1}
45 + m_Offset: {x: 0, y: 0}
46 + data:
47 + first:
48 + name: _OcclusionMap
49 + second:
50 + m_Texture: {fileID: 0}
51 + m_Scale: {x: 1, y: 1}
52 + m_Offset: {x: 0, y: 0}
53 + data:
54 + first:
55 + name: _EmissionMap
56 + second:
57 + m_Texture: {fileID: 0}
58 + m_Scale: {x: 1, y: 1}
59 + m_Offset: {x: 0, y: 0}
60 + data:
61 + first:
62 + name: _DetailMask
63 + second:
64 + m_Texture: {fileID: 0}
65 + m_Scale: {x: 1, y: 1}
66 + m_Offset: {x: 0, y: 0}
67 + data:
68 + first:
69 + name: _DetailAlbedoMap
70 + second:
71 + m_Texture: {fileID: 0}
72 + m_Scale: {x: 1, y: 1}
73 + m_Offset: {x: 0, y: 0}
74 + data:
75 + first:
76 + name: _MetallicGlossMap
77 + second:
78 + m_Texture: {fileID: 0}
79 + m_Scale: {x: 1, y: 1}
80 + m_Offset: {x: 0, y: 0}
81 + m_Floats:
82 + data:
83 + first:
84 + name: _SrcBlend
85 + second: 1
86 + data:
87 + first:
88 + name: _DstBlend
89 + second: 0
90 + data:
91 + first:
92 + name: _Cutoff
93 + second: 0.5
94 + data:
95 + first:
96 + name: _Parallax
97 + second: 0.02
98 + data:
99 + first:
100 + name: _ZWrite
101 + second: 1
102 + data:
103 + first:
104 + name: _Glossiness
105 + second: 0.5
106 + data:
107 + first:
108 + name: _BumpScale
109 + second: 1
110 + data:
111 + first:
112 + name: _OcclusionStrength
113 + second: 1
114 + data:
115 + first:
116 + name: _DetailNormalMapScale
117 + second: 1
118 + data:
119 + first:
120 + name: _UVSec
121 + second: 0
122 + data:
123 + first:
124 + name: _Mode
125 + second: 0
126 + data:
127 + first:
128 + name: _Metallic
129 + second: 0
130 + data:
131 + first:
132 + name: _EmissionScaleUI
133 + second: 0
134 + data:
135 + first:
136 + name: _Fade
137 + second: 0.5
138 + data:
139 + first:
140 + name: _Min
141 + second: 0.2
142 + data:
143 + first:
144 + name: _Max
145 + second: 0.3
146 + m_Colors:
147 + data:
148 + first:
149 + name: _EmissionColor
150 + second: {r: 0, g: 0, b: 0, a: 1}
151 + data:
152 + first:
153 + name: _Color
154 + second: {r: 1, g: 1, b: 1, a: 1}
155 + data:
156 + first:
157 + name: _EmissionColorUI
158 + second: {r: 1, g: 1, b: 1, a: 1}
1 +fileFormatVersion: 2
2 +guid: aa4becb64f4f17d429ea16a4241a82e0
3 +timeCreated: 1429641624
4 +licenseType: Free
5 +NativeFormatImporter:
6 + userData:
7 + assetBundleName:
8 + assetBundleVariant:
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff could not be displayed because it is too large.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
No preview for this file type
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
No preview for this file type
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
No preview for this file type
This diff is collapsed. Click to expand it.
No preview for this file type
This diff is collapsed. Click to expand it.
No preview for this file type
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.
This diff is collapsed. Click to expand it.