diff --git a/Assets/Resources/HapticData/HapticObject.bytes b/Assets/Resources/HapticData/HapticObject.bytes
index 904cb51..6c8776c 100644
Binary files a/Assets/Resources/HapticData/HapticObject.bytes and b/Assets/Resources/HapticData/HapticObject.bytes differ
diff --git a/Assets/Resources/Haptics.meta b/Assets/Resources/Haptics.meta
new file mode 100644
index 0000000..f9e6230
--- /dev/null
+++ b/Assets/Resources/Haptics.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 50ce29defe5bc42808e887aa20cef298
+folderAsset: yes
+DefaultImporter:
+ externalObjects: {}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/Resources/Haptics/NVDice.haptic b/Assets/Resources/Haptics/NVDice.haptic
new file mode 100644
index 0000000..b76f105
--- /dev/null
+++ b/Assets/Resources/Haptics/NVDice.haptic
@@ -0,0 +1 @@
+{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVDice.wav","project":"NVDice","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.00029056615},{"time":0.0010204081,"amplitude":0.00029056615},{"time":0.020022675,"amplitude":0.0010838391},{"time":0.023015874,"amplitude":0.24628326,"emphasis":{"amplitude":0.64811385,"frequency":1}},{"time":0.04301587,"amplitude":0.30893233},{"time":0.06201814,"amplitude":0.14449422},{"time":0.0870068,"amplitude":0.058487773},{"time":0.090022676,"amplitude":0.21247946,"emphasis":{"amplitude":0.5591565,"frequency":0.1768105}},{"time":0.114013605,"amplitude":0.21455966},{"time":0.14301588,"amplitude":0.06968115},{"time":0.21102041,"amplitude":0.031449247},{"time":0.21201813,"amplitude":0.24404025,"emphasis":{"amplitude":0.6422112,"frequency":0.2923607}},{"time":0.23301587,"amplitude":0.28606227},{"time":0.26600906,"amplitude":0.07495963},{"time":0.26700678,"amplitude":0.6502027},{"time":0.27002266,"amplitude":0.308164,"emphasis":{"amplitude":0.8109579,"frequency":0.618822}},{"time":0.28301588,"amplitude":0.49409807},{"time":0.30301586,"amplitude":0.21208319},{"time":0.3170068,"amplitude":0.120308496},{"time":0.35201815,"amplitude":0.044048432},{"time":0.35301587,"amplitude":0.597531},{"time":0.37201813,"amplitude":0.29360098},{"time":0.3840136,"amplitude":0.17828391},{"time":0.38501135,"amplitude":0.3910198},{"time":0.41201812,"amplitude":0.14365426},{"time":0.42501134,"amplitude":0.18421979},{"time":0.4640136,"amplitude":0.043719392},{"time":0.46501133,"amplitude":0.13552359},{"time":0.48,"amplitude":0.08007864},{"time":0.48600906,"amplitude":0.17900568},{"time":0.5050113,"amplitude":0.090373725},{"time":0.57900226,"amplitude":0.023051888},{"time":0.58,"amplitude":0.07891691},{"time":0.61,"amplitude":0.024494085},{"time":0.61099774,"amplitude":0.10730806},{"time":0.65,"amplitude":0.023467101},{"time":0.6509977,"amplitude":0.056163862},{"time":0.69600904,"amplitude":0.013153992},{"time":0.7140136,"amplitude":0.06063435},{"time":0.77900225,"amplitude":0.0046691853},{"time":0.9629932,"amplitude":0.0005919837},{"time":0.9633333,"amplitude":0.0005919837},{"time":0.9633333,"amplitude":0.0005919837}],"frequency":[{"time":0,"frequency":1},{"time":0.0058049876,"frequency":0.45383245},{"time":0.043537416,"frequency":0.74745363},{"time":0.13931973,"frequency":0.574811},{"time":0.18575963,"frequency":0.7171733},{"time":0.20897959,"frequency":0.5531693},{"time":0.23510204,"frequency":0.6953524},{"time":0.26702946,"frequency":0.52940357},{"time":0.30476192,"frequency":0.6585863},{"time":0.38893422,"frequency":0.5463057},{"time":0.41505668,"frequency":0.68535703},{"time":0.42376417,"frequency":0.54946226},{"time":0.4614966,"frequency":0.5811323},{"time":0.53696144,"frequency":0.54777396},{"time":0.6066213,"frequency":0.5811939},{"time":0.64435375,"frequency":0.72476804},{"time":0.6675737,"frequency":0.5684711},{"time":0.6849887,"frequency":0.9723859},{"time":0.69659865,"frequency":0.66252524},{"time":0.751746,"frequency":0.6206365},{"time":0.757551,"frequency":0.97920614},{"time":0.7662585,"frequency":0.6674669},{"time":0.786576,"frequency":0.679469},{"time":0.8039909,"frequency":0.99255854},{"time":0.8185034,"frequency":0.6613598},{"time":0.83591837,"frequency":1},{"time":0.85043085,"frequency":0.635323},{"time":0.8649433,"frequency":0.65902764},{"time":0.8707483,"frequency":1},{"time":0.94911563,"frequency":1}]}}}}
\ No newline at end of file
diff --git a/Assets/Resources/Haptics/NVDice.haptic.meta b/Assets/Resources/Haptics/NVDice.haptic.meta
new file mode 100644
index 0000000..df62dd6
--- /dev/null
+++ b/Assets/Resources/Haptics/NVDice.haptic.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 5889c407bb04d42428e6225122e4b847
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3}
diff --git a/Assets/Resources/Haptics/NVHeartbeats.haptic b/Assets/Resources/Haptics/NVHeartbeats.haptic
new file mode 100644
index 0000000..c061759
--- /dev/null
+++ b/Assets/Resources/Haptics/NVHeartbeats.haptic
@@ -0,0 +1 @@
+{"version":{"major":1,"minor":0,"patch":0},"metadata":{"author":"joao@lofelt.com","editor":"Lofelt Studio","source":"AHAPPresets/NVHeartbeats.wav","project":"NVHeartbeats","tags":[],"description":""},"signals":{"continuous":{"envelopes":{"amplitude":[{"time":0,"amplitude":0.009742844},{"time":0.0010204081,"amplitude":0.009742844},{"time":0.003015873,"amplitude":0.19868761},{"time":0.0070068026,"amplitude":0.21186994},{"time":0.009002267,"amplitude":0.3535316},{"time":0.018004535,"amplitude":0.32513767},{"time":0.029002268,"amplitude":0.2547701},{"time":0.045011338,"amplitude":0.18802175},{"time":0.06301587,"amplitude":0.13030155},{"time":0.083015874,"amplitude":0.085643366},{"time":0.10401361,"amplitude":0.055023465},{"time":0.12900226,"amplitude":0.031824943},{"time":0.18501133,"amplitude":0.008188676},{"time":0.22900227,"amplitude":0.0017238385},{"time":0.29999998,"amplitude":0.000433428},{"time":0.3010204,"amplitude":0.023433387},{"time":0.3040086,"amplitude":0.3662426,"emphasis":{"amplitude":0.8550492434482757,"frequency":1}},{"time":0.3040136,"amplitude":0.5318154},{"time":0.3070068,"amplitude":0.50587577},{"time":0.30900225,"amplitude":0.8576526},{"time":0.31201813,"amplitude":0.8540082},{"time":0.31501132,"amplitude":0.78581953},{"time":0.31900227,"amplitude":0.79041666},{"time":0.32900226,"amplitude":0.6319953},{"time":0.3370068,"amplitude":0.54113984},{"time":0.3540136,"amplitude":0.38007545},{"time":0.37301588,"amplitude":0.25503132},{"time":0.39301586,"amplitude":0.16664001},{"time":0.4170068,"amplitude":0.098586604},{"time":0.4540136,"amplitude":0.042635933},{"time":0.48301587,"amplitude":0.020449765},{"time":0.53301585,"amplitude":0.0033419875},{"time":0.5770068,"amplitude":0.0005798723},{"time":0.9,"amplitude":0.0004947566},{"time":0.9020066357822161,"amplitude":0.10341841455295508},{"time":0.9029932,"amplitude":0.15402092,"emphasis":{"amplitude":0.18556738,"frequency":0.14043266}},{"time":0.9050361486566805,"amplitude":0.17912326986405525},{"time":0.9070068,"amplitude":0.20333728},{"time":0.90900224,"amplitude":0.34423363},{"time":0.9370068,"amplitude":0.21514598},{"time":0.9550113,"amplitude":0.1495948},{"time":0.9729932,"amplitude":0.10280151},{"time":1.0009977,"amplitude":0.059750818},{"time":1.0019954,"amplitude":0.057907753},{"time":1.0170068,"amplitude":0.04022924},{"time":1.0429932,"amplitude":0.022579549},{"time":1.0670068,"amplitude":0.012942444},{"time":1.1,"amplitude":0.0051094904},{"time":1.1520181,"amplitude":0.0006914464},{"time":1.2000227,"amplitude":0.00037157716},{"time":1.2010204,"amplitude":0.016553689},{"time":1.2040085999999999,"amplitude":0.36852205,"emphasis":{"amplitude":0.8336576524137936,"frequency":0.96081686}},{"time":1.2040136,"amplitude":0.53432286},{"time":1.2070068,"amplitude":0.50807685},{"time":1.2090023,"amplitude":0.85174495},{"time":1.2100227,"amplitude":0.8910244},{"time":1.2120181,"amplitude":0.87354046},{"time":1.2140136,"amplitude":0.81445026},{"time":1.2180045,"amplitude":0.7936242},{"time":1.2210203,"amplitude":0.72203946},{"time":1.2250113,"amplitude":0.695834},{"time":1.2290022,"amplitude":0.61917233},{"time":1.2340136,"amplitude":0.5880176},{"time":1.2370068,"amplitude":0.53021616},{"time":1.2410204,"amplitude":0.50928617},{"time":1.2450113,"amplitude":0.45255724},{"time":1.2500226,"amplitude":0.42614263},{"time":1.2540135,"amplitude":0.37573743},{"time":1.259025,"amplitude":0.35394874},{"time":1.2630159,"amplitude":0.3121782},{"time":1.2700226,"amplitude":0.28171903},{"time":1.2730159,"amplitude":0.25217998},{"time":1.2780045,"amplitude":0.23790987},{"time":1.2830158,"amplitude":0.2039585},{"time":1.3040136,"amplitude":0.13108838},{"time":1.3170068,"amplitude":0.09773624},{"time":1.3410203,"amplitude":0.057223924},{"time":1.3700227,"amplitude":0.028775413},{"time":1.399025,"amplitude":0.012871244},{"time":1.4290249,"amplitude":0.0040058647},{"time":1.4660317,"amplitude":0.00085569033},{"time":1.5120181,"amplitude":0.00051419035},{"time":1.7990476,"amplitude":0.00053922477},{"time":1.8,"amplitude":0.00053922477},{"time":1.8,"amplitude":0.00053922477}],"frequency":[{"time":0,"frequency":0.020718927},{"time":0.17414966,"frequency":0.0033238232},{"time":0.20897959,"frequency":0.09051466},{"time":0.21188208,"frequency":0.017611936},{"time":0.22349207,"frequency":0.36407393},{"time":0.22929706,"frequency":0.3733385},{"time":0.23510204,"frequency":1},{"time":0.28734693,"frequency":1},{"time":0.29315192,"frequency":0.03697985},{"time":0.3076644,"frequency":0.015080327},{"time":0.44408163,"frequency":0.0042551477},{"time":0.510839,"frequency":0.013670002},{"time":0.5195465,"frequency":0.114794515},{"time":0.528254,"frequency":1},{"time":0.6675737,"frequency":1},{"time":0.6704762,"frequency":0.39109683},{"time":0.6733787,"frequency":1},{"time":0.76335603,"frequency":1},{"time":0.7662585,"frequency":0.34064588},{"time":0.769161,"frequency":1},{"time":0.8126984,"frequency":1},{"time":0.8156009,"frequency":0.46277383},{"time":0.8185034,"frequency":1},{"time":0.8591383,"frequency":1},{"time":0.8620408,"frequency":0.33363342},{"time":0.8649433,"frequency":1},{"time":0.88816327,"frequency":1},{"time":0.8910658,"frequency":0.14180698},{"time":0.8939682,"frequency":0.029813504},{"time":0.9984581,"frequency":0.0049297404},{"time":1.0013604,"frequency":0.0075458325},{"time":1.0390929,"frequency":0.0169438},{"time":1.0594103,"frequency":0.0026711088},{"time":1.0942403,"frequency":0.010803959},{"time":1.1058502,"frequency":0.07026733},{"time":1.1116552,"frequency":0.18236092},{"time":1.1174603,"frequency":0.1253173},{"time":1.1203628,"frequency":0.028144006},{"time":1.1232653,"frequency":0.4114257},{"time":1.1261678,"frequency":1},{"time":1.1900226,"frequency":1},{"time":1.1929251,"frequency":0.04367737},{"time":1.2074375,"frequency":0.015173969},{"time":1.2974149,"frequency":0.0044053462},{"time":1.3264399,"frequency":0.013245664},{"time":1.3612697,"frequency":0.0032118666},{"time":1.3670747,"frequency":0.019418897},{"time":1.3873922,"frequency":0.0033809673},{"time":1.4077097,"frequency":0.009184113},{"time":1.4106121,"frequency":0.056718018},{"time":1.4193196,"frequency":0.050725304},{"time":1.4280272,"frequency":0.2703589},{"time":1.4309297,"frequency":1},{"time":1.4512471,"frequency":1},{"time":1.4541496,"frequency":0.22229218},{"time":1.4570521,"frequency":1},{"time":1.6457142,"frequency":1},{"time":1.6486167,"frequency":0.3691811},{"time":1.6515192,"frequency":1},{"time":1.7879364,"frequency":1}]}}}}
\ No newline at end of file
diff --git a/Assets/Resources/Haptics/NVHeartbeats.haptic.meta b/Assets/Resources/Haptics/NVHeartbeats.haptic.meta
new file mode 100644
index 0000000..2383fdf
--- /dev/null
+++ b/Assets/Resources/Haptics/NVHeartbeats.haptic.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 2a996381c3ac0493a8a4ec47d6d84232
+ScriptedImporter:
+ internalIDToNameTable: []
+ externalObjects: {}
+ serializedVersion: 2
+ userData:
+ assetBundleName:
+ assetBundleVariant:
+ script: {fileID: 11500000, guid: dc84fb4fa9e67485a972c887d976d004, type: 3}
diff --git a/Assets/Scenes/HomeScene.unity b/Assets/Scenes/HomeScene.unity
index 5ceeff4..c03b503 100644
--- a/Assets/Scenes/HomeScene.unity
+++ b/Assets/Scenes/HomeScene.unity
@@ -122,6 +122,228 @@ NavMeshSettings:
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
+--- !u!1 &109734265
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 109734266}
+ - component: {fileID: 109734268}
+ - component: {fileID: 109734267}
+ m_Layer: 5
+ m_Name: Text (Legacy)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &109734266
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 109734265}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1053000218}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &109734267
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 109734265}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 40
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 4
+ m_MaxSize: 69
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Play Haptic
+--- !u!222 &109734268
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 109734265}
+ m_CullTransparentMesh: 1
+--- !u!1 &498129365
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 498129366}
+ - component: {fileID: 498129368}
+ - component: {fileID: 498129367}
+ m_Layer: 5
+ m_Name: Placeholder
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &498129366
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498129365}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660846378}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: -0.5}
+ m_SizeDelta: {x: -20, y: -13}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &498129367
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498129365}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 35
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 5
+ m_MaxSize: 50
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 1
+ m_HorizontalOverflow: 0
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text: Haptic ID
+--- !u!222 &498129368
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 498129365}
+ m_CullTransparentMesh: 1
+--- !u!1 &499674478
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 499674479}
+ - component: {fileID: 499674480}
+ m_Layer: 5
+ m_Name: Content
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &499674479
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499674478}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 1660846378}
+ - {fileID: 1053000218}
+ m_Father: {fileID: 1757585525}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0.5, y: 0.5}
+ m_AnchorMax: {x: 0.5, y: 0.5}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 250, y: 80}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &499674480
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 499674478}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Padding:
+ m_Left: 0
+ m_Right: 0
+ m_Top: 0
+ m_Bottom: 0
+ m_ChildAlignment: 0
+ m_Spacing: 20
+ m_ChildForceExpandWidth: 1
+ m_ChildForceExpandHeight: 1
+ m_ChildControlWidth: 0
+ m_ChildControlHeight: 0
+ m_ChildScaleWidth: 0
+ m_ChildScaleHeight: 0
+ m_ReverseArrangement: 0
--- !u!1 &705507993
GameObject:
m_ObjectHideFlags: 0
@@ -216,6 +438,85 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
+--- !u!1 &757236543
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 757236544}
+ - component: {fileID: 757236546}
+ - component: {fileID: 757236545}
+ m_Layer: 5
+ m_Name: Text (Legacy)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &757236544
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 757236543}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 1660846378}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 1, y: 1}
+ m_AnchoredPosition: {x: 0, y: -0.5}
+ m_SizeDelta: {x: -20, y: -13}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &757236545
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 757236543}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_FontData:
+ m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
+ m_FontSize: 35
+ m_FontStyle: 0
+ m_BestFit: 0
+ m_MinSize: 3
+ m_MaxSize: 40
+ m_Alignment: 4
+ m_AlignByGeometry: 0
+ m_RichText: 0
+ m_HorizontalOverflow: 1
+ m_VerticalOverflow: 0
+ m_LineSpacing: 1
+ m_Text:
+--- !u!222 &757236546
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 757236543}
+ m_CullTransparentMesh: 1
--- !u!1 &963194225
GameObject:
m_ObjectHideFlags: 0
@@ -308,6 +609,210 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1053000217
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1053000218}
+ - component: {fileID: 1053000221}
+ - component: {fileID: 1053000220}
+ - component: {fileID: 1053000219}
+ - component: {fileID: 1053000222}
+ m_Layer: 5
+ m_Name: Button (Legacy)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1053000218
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1053000217}
+ m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 109734266}
+ m_Father: {fileID: 499674479}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 250, y: 80}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1053000219
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1053000217}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1053000220}
+ m_OnClick:
+ m_PersistentCalls:
+ m_Calls: []
+--- !u!114 &1053000220
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1053000217}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1053000221
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1053000217}
+ m_CullTransparentMesh: 1
+--- !u!114 &1053000222
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1053000217}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 40c403aed9b64df8a9cecc470d6788a4, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ inputField: {fileID: 1660846379}
+ button: {fileID: 1053000219}
+--- !u!1 &1239030540
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1239030543}
+ - component: {fileID: 1239030542}
+ - component: {fileID: 1239030541}
+ m_Layer: 0
+ m_Name: EventSystem
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1239030541
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1239030540}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_SendPointerHoverToParent: 1
+ m_HorizontalAxis: Horizontal
+ m_VerticalAxis: Vertical
+ m_SubmitButton: Submit
+ m_CancelButton: Cancel
+ m_InputActionsPerSecond: 10
+ m_RepeatDelay: 0.5
+ m_ForceModuleActive: 0
+--- !u!114 &1239030542
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1239030540}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_FirstSelected: {fileID: 0}
+ m_sendNavigationEvents: 1
+ m_DragThreshold: 10
+--- !u!4 &1239030543
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1239030540}
+ serializedVersion: 2
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children: []
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1279932961
GameObject:
m_ObjectHideFlags: 0
@@ -352,6 +857,254 @@ Transform:
m_Children: []
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+--- !u!1 &1660846377
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1660846378}
+ - component: {fileID: 1660846381}
+ - component: {fileID: 1660846380}
+ - component: {fileID: 1660846379}
+ m_Layer: 5
+ m_Name: InputField (Legacy)
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!224 &1660846378
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660846377}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 1, y: 1, z: 1}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 498129366}
+ - {fileID: 757236544}
+ m_Father: {fileID: 499674479}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 250, y: 80}
+ m_Pivot: {x: 0.5, y: 0.5}
+--- !u!114 &1660846379
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660846377}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Navigation:
+ m_Mode: 3
+ m_WrapAround: 0
+ m_SelectOnUp: {fileID: 0}
+ m_SelectOnDown: {fileID: 0}
+ m_SelectOnLeft: {fileID: 0}
+ m_SelectOnRight: {fileID: 0}
+ m_Transition: 1
+ m_Colors:
+ m_NormalColor: {r: 1, g: 1, b: 1, a: 1}
+ m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}
+ m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}
+ m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}
+ m_ColorMultiplier: 1
+ m_FadeDuration: 0.1
+ m_SpriteState:
+ m_HighlightedSprite: {fileID: 0}
+ m_PressedSprite: {fileID: 0}
+ m_SelectedSprite: {fileID: 0}
+ m_DisabledSprite: {fileID: 0}
+ m_AnimationTriggers:
+ m_NormalTrigger: Normal
+ m_HighlightedTrigger: Highlighted
+ m_PressedTrigger: Pressed
+ m_SelectedTrigger: Selected
+ m_DisabledTrigger: Disabled
+ m_Interactable: 1
+ m_TargetGraphic: {fileID: 1660846380}
+ m_TextComponent: {fileID: 757236545}
+ m_Placeholder: {fileID: 498129367}
+ m_ContentType: 2
+ m_InputType: 0
+ m_AsteriskChar: 42
+ m_KeyboardType: 2
+ m_LineType: 0
+ m_HideMobileInput: 0
+ m_CharacterValidation: 1
+ m_CharacterLimit: 0
+ m_OnSubmit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnDidEndEdit:
+ m_PersistentCalls:
+ m_Calls: []
+ m_OnValueChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}
+ m_CustomCaretColor: 0
+ m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412}
+ m_Text:
+ m_CaretBlinkRate: 0.85
+ m_CaretWidth: 1
+ m_ReadOnly: 0
+ m_ShouldActivateOnSelect: 1
+--- !u!114 &1660846380
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660846377}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_Material: {fileID: 0}
+ m_Color: {r: 1, g: 1, b: 1, a: 1}
+ m_RaycastTarget: 1
+ m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
+ m_Maskable: 1
+ m_OnCullStateChanged:
+ m_PersistentCalls:
+ m_Calls: []
+ m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0}
+ m_Type: 1
+ m_PreserveAspect: 0
+ m_FillCenter: 1
+ m_FillMethod: 4
+ m_FillAmount: 1
+ m_FillClockwise: 1
+ m_FillOrigin: 0
+ m_UseSpriteMesh: 0
+ m_PixelsPerUnitMultiplier: 1
+--- !u!222 &1660846381
+CanvasRenderer:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1660846377}
+ m_CullTransparentMesh: 1
+--- !u!1 &1757585521
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1757585525}
+ - component: {fileID: 1757585524}
+ - component: {fileID: 1757585523}
+ - component: {fileID: 1757585522}
+ m_Layer: 5
+ m_Name: Canvas
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1757585522
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1757585521}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_IgnoreReversedGraphics: 1
+ m_BlockingObjects: 0
+ m_BlockingMask:
+ serializedVersion: 2
+ m_Bits: 4294967295
+--- !u!114 &1757585523
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1757585521}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_UiScaleMode: 1
+ m_ReferencePixelsPerUnit: 100
+ m_ScaleFactor: 1
+ m_ReferenceResolution: {x: 720, y: 1600}
+ m_ScreenMatchMode: 0
+ m_MatchWidthOrHeight: 0
+ m_PhysicalUnit: 3
+ m_FallbackScreenDPI: 96
+ m_DefaultSpriteDPI: 96
+ m_DynamicPixelsPerUnit: 1
+ m_PresetInfoIsWorld: 0
+--- !u!223 &1757585524
+Canvas:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1757585521}
+ m_Enabled: 1
+ serializedVersion: 3
+ m_RenderMode: 0
+ m_Camera: {fileID: 0}
+ m_PlaneDistance: 100
+ m_PixelPerfect: 0
+ m_ReceivesEvents: 1
+ m_OverrideSorting: 0
+ m_OverridePixelPerfect: 0
+ m_SortingBucketNormalizedSize: 0
+ m_VertexColorAlwaysGammaSpace: 1
+ m_AdditionalShaderChannelsFlag: 0
+ m_UpdateRectTransformForStandalone: 0
+ m_SortingLayerID: 0
+ m_SortingOrder: 0
+ m_TargetDisplay: 0
+--- !u!224 &1757585525
+RectTransform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1757585521}
+ m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
+ m_LocalPosition: {x: 0, y: 0, z: 0}
+ m_LocalScale: {x: 0, y: 0, z: 0}
+ m_ConstrainProportionsScale: 0
+ m_Children:
+ - {fileID: 499674479}
+ m_Father: {fileID: 0}
+ m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+ m_AnchorMin: {x: 0, y: 0}
+ m_AnchorMax: {x: 0, y: 0}
+ m_AnchoredPosition: {x: 0, y: 0}
+ m_SizeDelta: {x: 0, y: 0}
+ m_Pivot: {x: 0, y: 0}
--- !u!1660057539 &9223372036854775807
SceneRoots:
m_ObjectHideFlags: 0
@@ -359,3 +1112,5 @@ SceneRoots:
- {fileID: 963194228}
- {fileID: 705507995}
- {fileID: 1279932963}
+ - {fileID: 1757585525}
+ - {fileID: 1239030543}
diff --git a/Assets/Scripts/OCES/Haptic/Handwritten/HandwrittenDefinitions.cs b/Assets/Scripts/OCES/Haptic/Handwritten/HandwrittenDefinitions.cs
index f3579d5..fa11f17 100644
--- a/Assets/Scripts/OCES/Haptic/Handwritten/HandwrittenDefinitions.cs
+++ b/Assets/Scripts/OCES/Haptic/Handwritten/HandwrittenDefinitions.cs
@@ -11,8 +11,36 @@ namespace OCES.Haptic
public enum HapticType
{
Preset = 0, //播放预制
- Transient = 1, //播放瞬时
- Continuous = 2, //播放连续
+ Emphasis = 1, //播放瞬时
+ Constant = 2, //播放连续
Advance = 3, //播放文件
}
+
+ ///
+ /// 文件操作类
+ ///
+ public static class FileManager
+ {
+ ///
+ /// 从内存流中读取二进制
+ ///
+ ///
+ ///
+ ///
+ public static bool ReadBinaryDataFromBytes(byte[] bytes, ref IBinarySerializable data)
+ {
+ if (bytes == null)
+ return false;
+ using (MemoryStream memoryStream = new(bytes))
+ {
+ using (var br = new BinaryReader(memoryStream))
+ {
+ data.DeSerialize(br);
+ br.Close();
+ }
+ memoryStream.Close();
+ }
+ return true;
+ }
+ }
}
diff --git a/Assets/Scripts/OCES/Haptic/Handwritten/HapticSystem.cs b/Assets/Scripts/OCES/Haptic/Handwritten/HapticSystem.cs
index e28cdb7..2ce7b4a 100644
--- a/Assets/Scripts/OCES/Haptic/Handwritten/HapticSystem.cs
+++ b/Assets/Scripts/OCES/Haptic/Handwritten/HapticSystem.cs
@@ -1,12 +1,138 @@
+using System;
using System.Collections;
using System.Collections.Generic;
+using Lofelt.NiceVibrations;
using UnityEngine;
namespace OCES.Haptic
{
public class HapticSystem : MonoBehaviour
{
+ public static HapticSystem Instance {get; private set;}
+ [NonSerialized]
+ public bool IsHapticSupported = DeviceCapabilities.isVersionSupported;
+ [NonSerialized]
+ public bool IsMeetsAdvanceRequirements = DeviceCapabilities.meetsAdvancedRequirements;
+ HapticObjectConfig m_hapticObjects;
+ const string k_hapticConfigPath = "HapticData/";
+ const string k_hapticResourcesPath = "Haptics/";
+ public void Play(uint hapticId, bool isDirectCall = true)
+ {
+ HapticObject hapticObject = this.m_hapticObjects.QueryById(hapticId);
+ if (hapticObject != null)
+ {
+ Play(hapticObject);
+ if (isDirectCall)
+ {
+ Debug.LogWarning($"[Haptic System] Playing haptic id {hapticId} without play audio." +
+ "This method should only be called during debugging.");
+ }
+ }
+ else
+ {
+ Debug.LogError("[Haptic System] Could not find Haptic Object with id: " + hapticId);
+ }
+
+ }
+
+ public void Play(HapticObject hapticObject)
+ {
+ switch (hapticObject.Type)
+ {
+ case HapticType.Preset:
+ if (Enum.TryParse(hapticObject.Payload, out HapticPatterns.PresetType hapticPattern))
+ {
+ HapticPatterns.PlayPreset(hapticPattern);
+ }
+ else
+ {
+ Debug.LogError($"[Haptic System] Could not parse haptic pattern: {hapticObject.Payload}]");
+ }
+ break;
+ case HapticType.Emphasis:
+ if (hapticObject.Amplitude < 0f || hapticObject.Frequency < 0f)
+ {
+ Debug.LogWarning($"[Haptic System] Haptic {hapticObject.Id} have no amplitude or frequency." +
+ "Please check the datatable.");
+ break;
+ }
+ HapticPatterns.PlayEmphasis(hapticObject.Amplitude, hapticObject.Frequency);
+ break;
+ case HapticType.Constant:
+ if (hapticObject.Amplitude < 0f || hapticObject.Frequency < 0f || hapticObject.Duration < 0f)
+ {
+ Debug.LogWarning($"[Haptic System] Haptic {hapticObject.Id} have no amplitude, frequency or duration." +
+ "Please check the datatable.");
+ break;
+ }
+ HapticController.Stop();
+ HapticPatterns.PlayConstant(hapticObject.Amplitude, hapticObject.Frequency, hapticObject.Duration);
+ break;
+ case HapticType.Advance:
+ if (Enum.TryParse(hapticObject.FallbackPreset, out HapticPatterns.PresetType fallbackPreset))
+ {
+ HapticController.fallbackPreset = fallbackPreset;
+ HapticClip hapticClip = GetHapticClip(hapticObject);
+ if (hapticClip)
+ {
+ HapticController.Stop();
+ HapticController.Play(hapticClip);
+ }
+ else
+ {
+ Debug.LogError($"[Haptic System] Could not parse haptic file: {hapticObject.Payload}");
+ }
+ }
+ else
+ {
+ Debug.LogError($"[Haptic System] Could not parse fallback preset: {hapticObject.FallbackPreset}]");
+ }
+ break;
+ default:
+ throw new ArgumentOutOfRangeException();
+ }
+
+ }
+
+ public void Stop()
+ {
+ HapticController.Stop();
+ }
+
+ void Awake()
+ {
+ if (Instance && Instance != this)
+ {
+ Destroy(gameObject);
+ return;
+ }
+ Instance = this;
+ DontDestroyOnLoad(gameObject);
+
+ this.m_hapticObjects = HapticConfigLoader.Load(k_hapticConfigPath + "HapticObject");
+ }
+
+ static HapticClip GetHapticClip(HapticObject hapticObject)
+ {
+ return Resources.Load(k_hapticResourcesPath + hapticObject.Payload);
+ }
+
+ static class HapticConfigLoader
+ {
+ internal static T Load(string tableName) where T : IBinarySerializable, new()
+ {
+ TextAsset bytes = Resources.Load(tableName);
+ if (!bytes)
+ Debug.LogError($"未找到表 {tableName}");
+ IBinarySerializable data = new T();
+ bool readOk = FileManager.ReadBinaryDataFromBytes(bytes.bytes, ref data);
+ if (readOk)
+ return (T)data;
+ Debug.LogError($"{tableName} 解析出错,类型 {typeof(T)}");
+ return default;
+ }
+ }
}
}
diff --git a/Assets/Scripts/OCES/Haptic/HapticInvoker.cs b/Assets/Scripts/OCES/Haptic/HapticInvoker.cs
new file mode 100644
index 0000000..9579e91
--- /dev/null
+++ b/Assets/Scripts/OCES/Haptic/HapticInvoker.cs
@@ -0,0 +1,40 @@
+using System;
+using UnityEngine;
+using UnityEngine.UI;
+
+namespace OCES.Haptic
+{
+ public class HapticInvoker : MonoBehaviour
+ {
+ public InputField inputField;
+ public Button button;
+
+ uint m_hapticId;
+
+ void OnEnable()
+ {
+ this.inputField.onSubmit.AddListener(GetCurrentHapticId);
+ this.inputField.onEndEdit.AddListener(GetCurrentHapticId);
+ this.button.onClick.AddListener(InvokeHaptic);
+ }
+
+ void OnDisable()
+ {
+ this.inputField.onSubmit.RemoveListener(GetCurrentHapticId);
+ this.inputField.onEndEdit.RemoveListener(GetCurrentHapticId);
+ this.button.onClick.RemoveListener(InvokeHaptic);
+ }
+
+ void GetCurrentHapticId(string value)
+ {
+ if(string.IsNullOrEmpty(value)) return;
+
+ this.m_hapticId = uint.Parse(value);
+ }
+
+ void InvokeHaptic()
+ {
+ HapticSystem.Instance.Play(this.m_hapticId);
+ }
+ }
+}
diff --git a/Assets/Scripts/OCES/Haptic/HapticInvoker.cs.meta b/Assets/Scripts/OCES/Haptic/HapticInvoker.cs.meta
new file mode 100644
index 0000000..7b15fd8
--- /dev/null
+++ b/Assets/Scripts/OCES/Haptic/HapticInvoker.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 40c403aed9b64df8a9cecc470d6788a4
+timeCreated: 1775717470
\ No newline at end of file
diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset
index ab5677a..b2879c5 100644
--- a/ProjectSettings/ProjectSettings.asset
+++ b/ProjectSettings/ProjectSettings.asset
@@ -9,10 +9,10 @@ PlayerSettings:
AndroidFilterTouchesWhenObscured: 0
AndroidEnableSustainedPerformanceMode: 0
defaultScreenOrientation: 4
- targetDevice: 2
+ targetDevice: 0
useOnDemandResources: 0
accelerometerFrequency: 60
- companyName: DefaultCompany
+ companyName: oces
productName: HapticSystem
defaultCursor: {fileID: 0}
cursorHotspot: {x: 0, y: 0}
@@ -164,6 +164,8 @@ PlayerSettings:
androidMaxAspectRatio: 2.1
applicationIdentifier:
Android: com.DefaultCompany.HapticSystem
+ Standalone: com.oces.HapticSystem
+ iPhone: com.oces.HapticSystem
buildNumber:
Standalone: 0
VisionOS: 0