diff --git a/Assets/_DDD/Restaurant/Environments/Interactables/Common/RestaurantOrder.prefab b/Assets/_DDD/Restaurant/Environments/Interactables/Common/RestaurantOrder.prefab
index 24036b0a6..546d96553 100644
--- a/Assets/_DDD/Restaurant/Environments/Interactables/Common/RestaurantOrder.prefab
+++ b/Assets/_DDD/Restaurant/Environments/Interactables/Common/RestaurantOrder.prefab
@@ -133,7 +133,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 201f9e6d7ca7404baa9945950292a392, type: 3}
m_Name:
m_EditorClassIdentifier:
- _interactionType: 4
+ _interactionType: 2
_executionParameters:
_holdTime: 0
_displayParameters:
@@ -141,6 +141,7 @@ MonoBehaviour:
_interactionAvailableFlows: 2
_aiInteractionPoints:
- {fileID: 1664322405549350652}
+ autoInitialize: 1
--- !u!114 &4456475204957017828
MonoBehaviour:
m_ObjectHideFlags: 0
diff --git a/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab b/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab
index 17ed7f4b3..4b8b4924c 100644
--- a/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab
+++ b/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab
@@ -136,6 +136,7 @@ MonoBehaviour:
m_EditorClassIdentifier:
_interactionType: 1
_executionParameters:
+ _holdTime: 0.1
_holdTime: 0.5
_displayParameters:
_messageKey: Test
diff --git a/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset b/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset
index f1f9e1f9b..0ea95f8d3 100644
--- a/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset
+++ b/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:cd8483b8226cbda88852b05e1285b9603516dfd5842972a2e379a43cb91b9a96
-size 676
+oid sha256:a7ca4b40dc25f4a6ff14a7cbdb2a8be04431ba958038b899fd700df86c4f9618
+size 87312
diff --git a/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset b/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset
new file mode 100644
index 000000000..8434d7b80
--- /dev/null
+++ b/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:817cecbbecbe8a6519225bc1d0fce376c0dfb14a240c248e3fbdc8a93f585f72
+size 20385
diff --git a/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset.meta b/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset.meta
new file mode 100644
index 000000000..8e0fb4972
--- /dev/null
+++ b/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bab8aadc83d64f64b8280e6ebb957e65
+NativeFormatImporter:
+ externalObjects: {}
+ mainObjectFileID: 11400000
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab b/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab
index 4ac33db37..80cdc789c 100644
--- a/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab
+++ b/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab
@@ -8,13 +8,1057 @@ PrefabInstance:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
- propertyPath: m_Subtree
- value:
+ - target: {fileID: 2686192822530022837, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_IsTrigger
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3540956906288785900, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Layer
+ value: 0
objectReference: {fileID: 0}
- target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
- propertyPath: m_GraphName
- value: CustomerBehavior
+ propertyPath: m_Data.m_UniqueID
+ value: 2072347169
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.size
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.size
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_SharedVariableData.Array.size
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_Version
+ value: 3.4
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.size
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.size
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_ObjectType
+ value: Opsive.BehaviorDesigner.Runtime.Tasks.Actions.StackedAction
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.data[0].m_Version
+ value: 3.4
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.data[0].m_ObjectType
+ value: Opsive.BehaviorDesigner.Runtime.Tasks.Events.Start
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_Values.Array.size
+ value: 14
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[2]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[3]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[4]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[5]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[6]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[10]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[11]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[12]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[13]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[14]'
+ value: 118
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[15]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[16]'
+ value: 46
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[17]'
+ value: 66
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[18]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[19]'
+ value: 104
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[20]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[21]'
+ value: 118
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[22]'
+ value: 105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[23]'
+ value: 111
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[24]'
+ value: 114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[25]'
+ value: 68
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[26]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[27]'
+ value: 115
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[28]'
+ value: 105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[29]'
+ value: 103
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[30]'
+ value: 110
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[31]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[32]'
+ value: 114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[33]'
+ value: 46
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[34]'
+ value: 82
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[35]'
+ value: 117
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[36]'
+ value: 110
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[37]'
+ value: 116
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[38]'
+ value: 105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[39]'
+ value: 109
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[40]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[41]'
+ value: 46
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[42]'
+ value: 84
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[43]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[44]'
+ value: 115
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[45]'
+ value: 107
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[46]'
+ value: 115
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[47]'
+ value: 46
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[48]'
+ value: 65
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[49]'
+ value: 99
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[50]'
+ value: 116
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[51]'
+ value: 105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[52]'
+ value: 111
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[53]'
+ value: 110
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[54]'
+ value: 115
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[55]'
+ value: 46
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[56]'
+ value: 83
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[57]'
+ value: 116
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[58]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[59]'
+ value: 114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[60]'
+ value: 116
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[61]'
+ value: 66
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[62]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[63]'
+ value: 104
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[64]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[65]'
+ value: 118
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[66]'
+ value: 105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[67]'
+ value: 111
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[68]'
+ value: 114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[69]'
+ value: 84
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[70]'
+ value: 114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[71]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[72]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[74]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[75]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[76]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[77]'
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_Values.Array.data[79]'
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.data[0].m_Version
+ value: 3.4
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.data[0].m_Values.Array.size
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.data[0].m_Version
+ value: 3.4
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_UnityObjects.Array.size
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.data[0].m_ObjectType
+ value: Opsive.GraphDesigner.Runtime.NodeProperties
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventTaskData.Array.data[0].m_Values.Array.data[0]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventTaskData.Array.data[0].m_Values.Array.data[1]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.data[0].m_ObjectType
+ value: Opsive.GraphDesigner.Runtime.LogicNodeProperties
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.size
+ value: 6
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.size
+ value: 6
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[1]'
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[2]'
+ value: 4
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[3]'
+ value: 6
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[4]'
+ value: 10
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[5]'
+ value: 10
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[6]'
+ value: 73
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[7]'
+ value: 73
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[8]'
+ value: 73
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[9]'
+ value: 74
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[0]'
+ value: 2962117259717031728
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[1]'
+ value: 7266922542588021606
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[2]'
+ value: 7366259733513172608
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[3]'
+ value: 6380291040478046818
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[4]'
+ value: -8530567197348880156
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[5]'
+ value: -3957478287605629114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[6]'
+ value: -1500117594402502404
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[7]'
+ value: -8367522328533733813
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[8]'
+ value: -2139127302081178988
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[9]'
+ value: -4449977117559057706
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[10]'
+ value: 78
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[11]'
+ value: 78
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[12]'
+ value: 78
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[13]'
+ value: 78
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[14]'
+ value: 79
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[15]'
+ value: 83
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_ValuePositions.Array.data[16]'
+ value: 83
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.data[0].m_ValuePositions.Array.size
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[10]'
+ value: 1600038550733978463
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[11]'
+ value: 5078256361681572446
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[12]'
+ value: 2789843053411464425
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[13]'
+ value: 256556895345464718
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[14]'
+ value: 8465553906751671549
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[15]'
+ value: -8530567197348880156
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_TaskData.Array.data[0].m_LongValueHashes.Array.data[16]'
+ value: -3957478287605629114
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventTaskData.Array.data[0].m_LongValueHashes.Array.size
+ value: 1
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.size
+ value: 65
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.size
+ value: 74
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventTaskData.Array.data[0].m_LongValueHashes.Array.data[0]'
+ value: -5674111636788395943
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[0]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[1]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[2]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[3]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[4]'
+ value: 53
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[5]'
+ value: 49
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[6]'
+ value: 102
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[7]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[8]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[9]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[0]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[1]'
+ value: 99
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[2]'
+ value: 100
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[3]'
+ value: 99
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[4]'
+ value: 55
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[5]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[6]'
+ value: 51
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[7]'
+ value: 102
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[8]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[9]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[10]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[11]'
+ value: 57
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[12]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[13]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[14]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[15]'
+ value: 100
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[16]'
+ value: 50
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[17]'
+ value: 57
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[18]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[19]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[20]'
+ value: 102
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[21]'
+ value: 51
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[22]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[23]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[24]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[25]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[26]'
+ value: 51
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[27]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[28]'
+ value: 53
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[29]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[30]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[31]'
+ value: 49
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[32]'
+ value: 100
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[33]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[34]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[35]'
+ value: 53
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[38]'
+ value: 112
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[39]'
+ value: 67
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[42]'
+ value: 240
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[43]'
+ value: 66
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[46]'
+ value: 220
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_Values.Array.data[47]'
+ value: 66
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[10]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[11]'
+ value: 49
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[12]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[13]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[14]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[15]'
+ value: 99
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[16]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[17]'
+ value: 102
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[18]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[19]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[20]'
+ value: 57
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[21]'
+ value: 101
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[22]'
+ value: 57
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[23]'
+ value: 45
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[24]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[25]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[26]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[27]'
+ value: 53
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[28]'
+ value: 97
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[29]'
+ value: 98
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[30]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[31]'
+ value: 49
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[32]'
+ value: 52
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[33]'
+ value: 56
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[34]'
+ value: 100
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[35]'
+ value: 50
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[38]'
+ value: 112
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[39]'
+ value: 67
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[41]'
+ value: 128
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[42]'
+ value: 138
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[43]'
+ value: 67
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[46]'
+ value: 232
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[47]'
+ value: 66
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[69]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[70]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[71]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_Values.Array.data[72]'
+ value: 255
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.size
+ value: 7
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.size
+ value: 12
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.size
+ value: 7
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.size
+ value: 12
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[1]'
+ value: 36
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[2]'
+ value: 44
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[3]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[4]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[5]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[6]'
+ value: 64
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[1]'
+ value: 36
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[2]'
+ value: 44
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[3]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[4]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[5]'
+ value: 48
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[6]'
+ value: 64
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[7]'
+ value: 65
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[8]'
+ value: 69
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[9]'
+ value: 69
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[0]'
+ value: 5480985131265888956
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[1]'
+ value: -7644563576402514701
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[2]'
+ value: 2962117259702096269
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[3]'
+ value: 7257299673358305469
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[4]'
+ value: 2962820280256717871
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[5]'
+ value: 2813741625700550223
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_EventNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[6]'
+ value: 268198477668590510
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[0]'
+ value: 5480985131265888956
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[1]'
+ value: -7644563576402514701
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[2]'
+ value: 2962117259702096269
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[3]'
+ value: 7257299673358305469
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[4]'
+ value: 2962820280256717871
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[5]'
+ value: 2813741625700550223
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[6]'
+ value: 268198477668590510
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[7]'
+ value: 1580835718119765152
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[8]'
+ value: 1324498323093618261
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[9]'
+ value: -5519571879738437719
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[10]'
+ value: 71
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_ValuePositions.Array.data[11]'
+ value: 73
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[10]'
+ value: -4446844345799519105
+ objectReference: {fileID: 0}
+ - target: {fileID: 3854744934792897056, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: 'm_Data.m_LogicNodePropertiesData.Array.data[0].m_LongValueHashes.Array.data[11]'
+ value: 8870558515320684346
objectReference: {fileID: 0}
- target: {fileID: 3971935000603232885, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_LocalPosition.x
@@ -64,6 +1108,34 @@ PrefabInstance:
propertyPath: skeletonDataAsset
value:
objectReference: {fileID: 11400000, guid: 90ef4d2128c770b4cb83806c33867a79, type: 2}
+ - target: {fileID: 5108021082109611361, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: _availableInteractions
+ value: 2
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: gravity.x
+ value: NaN
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: gravity.y
+ value: NaN
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: gravity.z
+ value: NaN
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: orientation
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: enableRotation
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 5654854357519457123, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: alwaysDrawGizmos
+ value: 1
+ objectReference: {fileID: 0}
- target: {fileID: 6336425934484470474, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
propertyPath: m_Materials.Array.size
value: 4
@@ -104,6 +1176,26 @@ PrefabInstance:
propertyPath: m_Name
value: CustomerNpc
objectReference: {fileID: 0}
+ - target: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Layer
+ value: 16
+ objectReference: {fileID: 0}
+ - target: {fileID: 7545136660434259176, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Constraints
+ value: 112
+ objectReference: {fileID: 0}
+ - target: {fileID: 7545136660434259176, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_IsKinematic
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8155105186346135386, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: m_Layer
+ value: 0
+ objectReference: {fileID: 0}
+ - target: {fileID: 8165702938223525558, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ propertyPath: graphMask.value
+ value: 2
+ objectReference: {fileID: 0}
m_RemovedComponents:
- {fileID: 133104368464330048, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
m_RemovedGameObjects: []
@@ -112,6 +1204,15 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
insertIndex: -1
addedObject: {fileID: 6054843938321605399}
+ - targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 3924055170972325225}
+ - targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 3825874317044733320}
+ - targetCorrespondingSourceObject: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: 1122074513716966771}
m_SourcePrefab: {fileID: 100100000, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3}
--- !u!1 &4266090516809920735 stripped
GameObject:
@@ -130,3 +1231,47 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: b242c4f65b2734841840c89dfab1500b, type: 3}
m_Name:
m_EditorClassIdentifier:
+--- !u!114 &3924055170972325225
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4266090516809920735}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 784c770c13244dc0a0804056065eaf92, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &3825874317044733320
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4266090516809920735}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: af69e82818254bfa9cabb2dbf9430850, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+--- !u!114 &1122074513716966771
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 4266090516809920735}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 201f9e6d7ca7404baa9945950292a392, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ _interactionType: 4
+ _executionParameters:
+ _holdTime: 0
+ _displayParameters:
+ _messageKey:
+ _interactionAvailableFlows: 2
+ _aiInteractionPoints: []
+ autoInitialize: 1
diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantNpc.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantNpc.prefab
index d3008f683..992df8657 100644
--- a/Assets/_DDD/_Addressables/Prefabs/RestaurantNpc.prefab
+++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantNpc.prefab
@@ -234,10 +234,18 @@ MonoBehaviour:
m_Data:
m_TaskData: []
m_EventTaskData: []
- m_SharedVariableData: []
+ m_SharedVariableData:
+ - m_ObjectType: 'Opsive.GraphDesigner.Runtime.Variables.SharedVariable`1[[UnityEngine.GameObject,
+ UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]'
+ m_ValueHashes:
+ m_LongValueHashes: 0d00eb254f8d1b29baa620a07799d549a996976a4a64278927dafeacd28e0b00
+ m_ValuePositions: 000000000e0000000e0000000f000000
+ m_Values: 53656c6647616d654f626a65637402ffffffff
+ m_UnityObjects: []
+ m_Version: 3.4
m_DisabledEventNodesData: []
m_DisabledLogicNodesData: []
- m_UniqueID: -1885404201
+ m_UniqueID: 1495981264
m_LogicNodePropertiesData: []
m_EventNodePropertiesData: []
m_GroupPropertiesData: []
diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab
index cc9051a7a..f842662b8 100644
--- a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab
+++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab
@@ -366,6 +366,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 5259510642736920361, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3}
insertIndex: -1
addedObject: {fileID: 8993310060139522557}
+ - targetCorrespondingSourceObject: {fileID: 5259510642736920361, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3}
+ insertIndex: -1
+ addedObject: {fileID: -6848683434426724985}
- targetCorrespondingSourceObject: {fileID: 6791841979869644848, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3}
insertIndex: -1
addedObject: {fileID: 662634663174340165}
@@ -423,7 +426,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 81e01dd8c1cc3404d805400eba1bb4ae, type: 3}
m_Name:
m_EditorClassIdentifier:
- _availableInteractions: 1
+ _availableInteractions: 5
_nearColliders:
- {fileID: 0}
- {fileID: 0}
@@ -461,6 +464,36 @@ MonoBehaviour:
m_EditorClassIdentifier:
blockOutlineAndGlow: 1
blockOverlay: 1
+--- !u!114 &-6848683434426724985
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 7316134055819320434}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 0cdaa3305fa954c45a80c9662aa6f425, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ m_GraphName: Behavior Tree
+ m_Index: 0
+ m_Data:
+ m_TaskData: []
+ m_EventTaskData: []
+ m_SharedVariableData: []
+ m_DisabledEventNodesData: []
+ m_DisabledLogicNodesData: []
+ m_UniqueID: 732308450
+ m_LogicNodePropertiesData: []
+ m_EventNodePropertiesData: []
+ m_GroupPropertiesData: []
+ m_StartWhenEnabled: 1
+ m_PauseWhenDisabled: 0
+ m_UpdateMode: 0
+ m_EvaluationType: 0
+ m_MaxEvaluationCount: 1
+ m_Subtree: {fileID: 0}
--- !u!4 &7511707580127947132 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4993183601549197863, guid: 3db3fc62639929c4ba6031ca4ae6600c, type: 3}
diff --git a/Assets/_DDD/_Addressables/Scenes/Restaurant.unity b/Assets/_DDD/_Addressables/Scenes/Restaurant.unity
index d70733e4c..126935cf0 100644
--- a/Assets/_DDD/_Addressables/Scenes/Restaurant.unity
+++ b/Assets/_DDD/_Addressables/Scenes/Restaurant.unity
@@ -365,7 +365,8 @@ PrefabInstance:
propertyPath: m_Name
value: Prop_CustomerTable_002
objectReference: {fileID: 0}
- m_RemovedComponents: []
+ m_RemovedComponents:
+ - {fileID: 551358949302262764, guid: 0b1ba2f28535d5147bc0ddf354d0712f, type: 3}
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
@@ -10722,6 +10723,92 @@ MeshFilter:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1771012164}
m_Mesh: {fileID: 0}
+--- !u!1 &1775054119
+GameObject:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ serializedVersion: 6
+ m_Component:
+ - component: {fileID: 1775054121}
+ - component: {fileID: 1775054120}
+ m_Layer: 0
+ m_Name: AstarPath
+ m_TagString: Untagged
+ m_Icon: {fileID: 0}
+ m_NavMeshLayer: 0
+ m_StaticEditorFlags: 0
+ m_IsActive: 1
+--- !u!114 &1775054120
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1775054119}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: 78396926cbbfc4ac3b48fc5fc34a87d1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
+ version: 1073741824
+ data:
+ dataString: UEsDBBQAAAgIAABIIewaXtoYSgIAALMEAAALACQAZ3JhcGgxLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQF1U8tu2zAQ/BVD56awZRuOe4ydpoc8CstAgxQ9rMm1RJgiXZKy4xj59+5SjyhNeyI0s7PP0TkRBTgQAd0KpKp88mUw/Dz9NEiENcFW7g6er52zjvCUUdQ6Uy8Yw1KOO4LewUbjN1R5EZqwFlxoVW66lCU8Z9ruWTwe1t/XMsdbNHkoWBlBZVaYK2uaMmPCUKpg3VppbMBReklwaIDHD8hTh1QeWcdzBVchIXt0t3BCd2el2ioBgWox/fMXkVKVaDwhxHKhZNkC42VC/AbELne2MnLt4IDOw0ZpFU4c+qMZmuMcajyACTcO9kVWuS0I7FLaextW+LtSLsYKqzUKbiPDEJTJuZtzD26FsW3Pkn1x8kr4TKBh5vz6F5YuW1THUcHvGBgkB9AVKy5GA2YD5A0Xp3fgyQi0vwXVVpKLdWvruDv0RdznFrR/x6zROVDmH5q1w/4JQh1YW6aE/dIejYdyr2n4r2TGaLdxsxruY9UmWmIApfm6xFqzqHfUtWQqrXkuZ0O8az30MzuQ0FPzvvAb599aJ1Be8T39Ag3V+L9iNPkgadzYCMatYtRK0rqKL+yRW3yoAk2Ib3tg4p6Ou7DG1Kfu77WVNfZ5kxkEhz5k9IjiwejT41NPhoZNeA+HkrSLKjrqTZtXSr63QjKepbNhms7mczEbXc7lBU7kdLZJp7M5yOlEDJM4hTIqKNDfKb8O7WLob+7d20AZM65Q0MEG0fxsV+ngeKNeStvzgDJbmwnyhXmoc3Rj06FB02bldfztez9Fcn5NXv8AUEsDBBQAAAgIAABIIexc6sO8cwAAAIUAAAAJACQAbWV0YS5qc29uCgAgAAAAAAABABgAAIA+1d6xnQEAgD7V3rGdAQCAPtXesZ0Bq1YqSy0qzszPU7JSMNUz1rPQUVBKL0osyCgGChiBOKWZKSB2dF5pTg6Qb2xuZG5gZGRuaZlsbmhhmaKbapJiap5kZGpumZhiapJsoBQLVFVSWZDql5ibiqwzILEkIy0zLyUzL10vKDU5sbjEHWSRUmwtAFBLAQItABQAAAgIAABIIewaXtoYSgIAALMEAAALACQAAAAAAAAAAAAAAAAAAABncmFwaDEuanNvbgoAIAAAAAAAAQAYAACAPtXesZ0BAIA+1d6xnQEAgD7V3rGdAVBLAQItABQAAAgIAABIIexc6sO8cwAAAIUAAAAJACQAAAAAAAAAAAAAAJcCAABtZXRhLmpzb24KACAAAAAAAAEAGAAAgD7V3rGdAQCAPtXesZ0BAIA+1d6xnQFQSwUGAAAAAAIAAgC4AAAAVQMAAAAA
+ file_cachedStartup: {fileID: 0}
+ cacheStartup: 0
+ showNavGraphs: 1
+ showUnwalkableNodes: 1
+ debugMode: 4
+ debugFloor: 0
+ debugRoof: 1
+ manualDebugFloorRoof: 0
+ showSearchTree: 0
+ unwalkableNodeDebugSize: 0.3
+ logPathResults: 0
+ maxNearestNodeDistance: 100
+ scanOnStartup: 1
+ fullGetNearestSearch: 0
+ prioritizeGraphs: 0
+ prioritizeGraphsLimit: 1
+ colorSettings:
+ _SolidColor: {r: 0.11764706, g: 0.4, b: 0.7882353, a: 0.9}
+ _UnwalkableNode: {r: 1, g: 0, b: 0, a: 0.5}
+ _BoundsHandles: {r: 0.29, g: 0.454, b: 0.741, a: 0.9}
+ _ConnectionLowLerp: {r: 0, g: 1, b: 0, a: 0.5}
+ _ConnectionHighLerp: {r: 1, g: 0, b: 0, a: 0.5}
+ _MeshEdgeColor: {r: 0, g: 0, b: 0, a: 0.5}
+ _AreaColors: []
+ tagNames: []
+ heuristic: 2
+ heuristicScale: 1
+ threadCount: -1
+ maxFrameTime: 10
+ batchGraphUpdates: 0
+ graphUpdateBatchingInterval: 0.2
+ navmeshUpdates:
+ updateInterval: 0
+ euclideanEmbedding:
+ mode: 0
+ seed: 0
+ pivotPointRoot: {fileID: 0}
+ spreadOutCount: 10
+ showGraphs: 1
+--- !u!4 &1775054121
+Transform:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1775054119}
+ 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!4 &1784230204 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 1061695247072719575, guid: 70f56d7d65d2e7842b5bd517ae7fe7fe, type: 3}
@@ -15146,3 +15233,4 @@ SceneRoots:
- {fileID: 852575416}
- {fileID: 1311760301}
- {fileID: 504708576}
+ - {fileID: 1775054121}
diff --git a/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset b/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset
index 85efaff85..890a0f723 100644
--- a/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset
+++ b/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:49fc3b72bcb23f6bb08a7531c01cfd1fb185e04975122fd2437f751b3855ab78
-size 1994
+oid sha256:c0b7877dd04da4027a47c923d7c38dbbdb1c4aae40c4a709411f0845190e7cf7
+size 2001
diff --git a/Assets/_DDD/_Scripts/AI.meta b/Assets/_DDD/_Scripts/AI.meta
new file mode 100644
index 000000000..488015a6b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/AI.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c31792c3491f44878a9a5e8ee59504cf
+timeCreated: 1755770768
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/AI/Common.meta b/Assets/_DDD/_Scripts/AI/Common.meta
new file mode 100644
index 000000000..8b9f60e70
--- /dev/null
+++ b/Assets/_DDD/_Scripts/AI/Common.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 49c654aa3aa94cb9928e2d161cad789a
+timeCreated: 1755770768
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs b/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs
new file mode 100644
index 000000000..154eebd47
--- /dev/null
+++ b/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs
@@ -0,0 +1,15 @@
+using UnityEngine;
+
+namespace DDD
+{
+ ///
+ /// ๊ณต์ฉ AI ๋ธ๋๋ณด๋ ์ธํฐํ์ด์ค.
+ /// - ๋ค์ํ ์บ๋ฆญํฐ AI์์ ๊ณตํต์ผ๋ก ์ฐธ์กฐํ๋ ํ์ฌ ์ธํฐ๋์
ํ๊ฒ๋ง ์ ์ํฉ๋๋ค.
+ /// - ํ์ ์ ํค-๊ฐ ํ์ฅ์ ๊ณ ๋ คํ๋, ํ์ฌ๋ ์ต์ ์๊ตฌ๋ง ์ถฉ์กฑํฉ๋๋ค.
+ ///
+ public interface IAISharedBlackboard
+ {
+ void SetCurrentInteractionTarget(GameObject targetGameObject);
+ GameObject GetCurrentInteractionTarget();
+ }
+}
diff --git a/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs.meta b/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs.meta
new file mode 100644
index 000000000..271230278
--- /dev/null
+++ b/Assets/_DDD/_Scripts/AI/Common/IAISharedBlackboard.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 62510fba6cb047419ca463dc523ae536
+timeCreated: 1755770768
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs
index 0f49a032b..ac19eefae 100644
--- a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs
+++ b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs
@@ -13,6 +13,7 @@ public interface IInteractionSubsystemObject
public interface IInteractionSubsystemObject : IInteractionSubsystemObject where T : Enum
{
T GetInteractionSubsystemType();
+ void SetInteractionSubsystemType(T inValue);
}
public interface IInteractionSubsystemSolver
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI.meta
new file mode 100644
index 000000000..c89e792df
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 1fed3b9fae5245cdbf255f627a82a1e6
+timeCreated: 1755747969
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common.meta
new file mode 100644
index 000000000..52bf270e4
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cfc8e456b2134c4a87b9fcd0d385cf1d
+timeCreated: 1755767029
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions.meta
new file mode 100644
index 000000000..b497afe8e
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: ab824a41c52d4cca8cafb1fc96d5d8e7
+timeCreated: 1755769401
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs
new file mode 100644
index 000000000..8abdaabe7
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs
@@ -0,0 +1,140 @@
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
+using UnityEngine;
+
+namespace DDD
+{
+ ///
+ /// ์ธํฐ๋์
ํ๊ฒ์ ๋ฐ๋ผ๋ณด๋๋ก ์๊ฐ(Spine/์ ๋๋ฉ์ด์
) ์ปดํฌ๋ํธ์ ์์ํ๋ ์ก์
์ ๊ป๋ฐ๊ธฐ/๊ณจ๊ฒฉ.
+ /// ์ค์ ํ์ /์คํ์ธ ์ ์ด ๋ก์ง์ ๋ณ๋์ Visual ์ปดํฌ๋ํธ(์: Spine/Animation Controller)์์ ๊ตฌํํ์ญ์์ค.
+ ///
+ public class LookAtInteractionTarget : Action
+ {
+ [Header("Target Settings")]
+ [Tooltip("InteractionPoints๋ฅผ ์ฌ์ฉํด ๊ฐ์ฅ ์ ์ ํ ์ง์ ์ ๋ฐ๋ผ๋ด")]
+ [SerializeField] private bool useInteractionPoints = true;
+ [Tooltip("ํ๊ฒ์ด ์์ ๋ ์ฆ์ ์คํจํ ์ง ์ฌ๋ถ")]
+ [SerializeField] private bool failIfNoTarget = true;
+
+ [Header("Update Settings")]
+ [Tooltip("ํ๋ ์๋ง๋ค ๊ฐฑ์ ํ์ฌ ์ง์์ ์ผ๋ก ๋ฐ๋ผ๋ณผ์ง (Running ๋ฐํ) ์ฌ๋ถ. ๋นํ์ฑํ ์ 1ํ๋ง ์๋ํ๊ณ ์ฑ๊ณต ์ฒ๋ฆฌ")]
+ [SerializeField] private bool continuousUpdate = true;
+
+ // Visual ์ ์ฉ ์ปดํฌ๋ํธ(๋์ค ๊ตฌํ)๋ฅผ ์ํ ์ต์ ์ธํฐํ์ด์ค
+ // ์ค์ ๊ตฌํ์ Spine/์ ๋๋ฉ์ด์
์ ์ด ์ปดํฌ๋ํธ์์ ์ด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ์ธ์.
+ public interface ILookAtVisual
+ {
+ // ์ด๊ธฐ ์์ ์๋. ์ฑ๊ณต ์ฌ๋ถ๋ฅผ ๋ฐํํ ์ ์์ผ๋, ๋ณธ ์ก์
์ ์ฑ๊ณต/์คํจ์ ๋ฏผ๊ฐํ์ง ์์ต๋๋ค.
+ bool TryBeginLookAt(Vector3 worldPosition);
+ // ๋งค ํ๋ ์ ๊ฐฑ์ ์ ํธ์ถ๋ฉ๋๋ค.
+ void UpdateLookAt(Vector3 worldPosition);
+ // ์ก์
์ข
๋ฃ ์ ํธ์ถ๋ฉ๋๋ค.
+ void EndLookAt();
+ }
+
+ private ILookAtVisual visual;
+ private GameObject cachedTarget;
+ private bool isLooking;
+ private Vector3 currentLookPosition;
+
+ public override void OnStart()
+ {
+ visual = gameObject.GetComponentInParent();
+ cachedTarget = null;
+ isLooking = false;
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ var target = GetTarget();
+ if (target == null)
+ {
+ if (isLooking)
+ {
+ // ํ๊ฒ์ด ์ฌ๋ผ์ก๋ค๋ฉด ์ ๋ฆฌ
+ visual?.EndLookAt();
+ isLooking = false;
+ }
+ return failIfNoTarget ? TaskStatus.Failure : TaskStatus.Success;
+ }
+
+ currentLookPosition = CalculateLookPosition(target);
+
+ if (!isLooking)
+ {
+ visual?.TryBeginLookAt(currentLookPosition);
+ isLooking = true;
+ }
+ else
+ {
+ visual?.UpdateLookAt(currentLookPosition);
+ }
+
+ // ์ฐ์ ์
๋ฐ์ดํธ๋ฉด Running, ์๋๋ฉด 1ํ๋ง ์๋ ํ Success ๋ฐํ
+ return continuousUpdate ? TaskStatus.Running : TaskStatus.Success;
+ }
+
+ public override void OnEnd()
+ {
+ if (isLooking)
+ {
+ visual?.EndLookAt();
+ isLooking = false;
+ }
+ cachedTarget = null;
+ }
+
+ private GameObject GetTarget()
+ {
+ // ์บ์๋ ํ๊ฒ์ด ์ ํจํ๋ฉด ์ฌ์ฌ์ฉ
+ if (IsValidTarget(cachedTarget))
+ return cachedTarget;
+
+ // ๋ธ๋๋ณด๋์์ ํ๊ฒ ๊ฒ์
+ cachedTarget = gameObject.GetComponentInParent()
+ ?.GetCurrentInteractionTarget();
+
+ if (IsValidTarget(cachedTarget))
+ return cachedTarget;
+
+ // Interactor์ ํฌ์ปค์ค๋ ํ๊ฒ ๊ฒ์
+ var interactor = gameObject.GetComponentInParent();
+ var focusedInteractable = interactor?.GetFocusedInteractable();
+ cachedTarget = focusedInteractable?.GetInteractableGameObject();
+
+ return cachedTarget;
+ }
+
+ private static bool IsValidTarget(GameObject target) => target != null && target;
+
+ private Vector3 CalculateLookPosition(GameObject target)
+ {
+ if (!useInteractionPoints)
+ return target.transform.position;
+
+ if (target.TryGetComponent(out var ric))
+ {
+ var points = ric.GetInteractionPoints();
+ if (points == null || points.Length == 0)
+ return target.transform.position;
+
+ // ๊ฐ์ฅ ๊ฐ๊น์ด ์ํธ์์ฉ ์ง์ ์ ํ (MoveTo์ ๋์ผํ ๊ธฐ์ค)
+ var agentPos = transform.position;
+ var nearest = target.transform.position;
+ var minSqr = float.MaxValue;
+ foreach (var p in points)
+ {
+ var d = (p - agentPos).sqrMagnitude;
+ if (d < minSqr)
+ {
+ minSqr = d;
+ nearest = p;
+ }
+ }
+ return nearest;
+ }
+
+ return target.transform.position;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs.meta
new file mode 100644
index 000000000..0f840f1cf
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/LookAtInteractionTarget.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a973b52fbfe64f8981b2a1d33864d2eb
+timeCreated: 1755771294
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs
new file mode 100644
index 000000000..828782504
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs
@@ -0,0 +1,173 @@
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
+using UnityEngine;
+
+namespace DDD
+{
+ ///
+ /// IAiMovement๋ฅผ ์ด์ฉํด ์ธํฐ๋์
ํ๊ฒ์ผ๋ก ์ด๋ํ๋ ์ก์
+ ///
+ public class MoveToInteractionTarget : Action
+ {
+ [Header("Target Settings")]
+ [Tooltip("InteractionPoints๋ฅผ ์ฌ์ฉํด ๊ฐ์ฅ ๊ฐ๊น์ด ์ง์ ์ผ๋ก ์ด๋")]
+ [SerializeField] private bool useInteractionPoints = true;
+ [Tooltip("ํ๊ฒ์ด ์์ ๋ ์ฆ์ ์คํจํ ์ง ์ฌ๋ถ")]
+ [SerializeField] private bool failIfNoTarget = true;
+
+ [Header("Movement Settings")]
+ [Tooltip("๋ชฉ์ ์ง ๋๋ฌ ๊ฑฐ๋ฆฌ")]
+ [SerializeField] private float stoppingDistance = 0.01f;
+ [Tooltip("๋ชฉ์ ์ง ์ฌ๊ณ์ฐ ์ฃผ๊ธฐ(์ด), 0 ์ดํ๋ฉด ๋นํ์ฑํ")]
+ [SerializeField] private float repathInterval = 0.5f;
+
+ private IAiMovement movement;
+ private float repathTimer;
+ private Vector3 currentDestination;
+ private bool isMoving;
+ private GameObject cachedTarget;
+
+ public override void OnStart()
+ {
+ if (cachedTarget != null) return;
+ movement = gameObject.GetComponentInParent();
+ repathTimer = 0f;
+ isMoving = false;
+ cachedTarget = null;
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ if (movement == null)
+ return TaskStatus.Failure;
+
+ var target = GetTarget();
+ if (target == null)
+ return failIfNoTarget ? TaskStatus.Failure : TaskStatus.Success;
+ Debug.Log(target.name);
+
+ if (ShouldUpdateDestination())
+ {
+ currentDestination = CalculateDestination(target);
+ StartOrUpdateMovement();
+ }
+
+ return CheckMovementCompletion();
+ }
+
+ public override void OnEnd()
+ {
+ StopMovement();
+ cachedTarget = null;
+ }
+
+ private GameObject GetTarget()
+ {
+ // ์บ์๋ ํ๊ฒ์ด ์ ํจํ๋ฉด ์ฌ์ฌ์ฉ
+ if (IsValidTarget(cachedTarget))
+ return cachedTarget;
+
+ // ๋ธ๋๋ณด๋์์ ํ๊ฒ ๊ฒ์
+ cachedTarget = gameObject.GetComponentInParent()
+ ?.GetCurrentInteractionTarget();
+
+ if (IsValidTarget(cachedTarget))
+ return cachedTarget;
+
+ // Interactor์ ํฌ์ปค์ค๋ ํ๊ฒ ๊ฒ์
+ var interactor = gameObject.GetComponentInParent();
+ var focusedInteractable = interactor?.GetFocusedInteractable();
+ cachedTarget = focusedInteractable?.GetInteractableGameObject();
+
+ return cachedTarget;
+ }
+
+ private bool IsValidTarget(GameObject target) =>
+ target != null && target;
+
+ private bool ShouldUpdateDestination()
+ {
+ repathTimer -= Time.deltaTime;
+ return !isMoving || (repathInterval > 0f && repathTimer <= 0f);
+ }
+
+ private Vector3 CalculateDestination(GameObject target)
+ {
+ repathTimer = repathInterval;
+
+ if (!useInteractionPoints)
+ return target.transform.position;
+
+ return target.TryGetComponent(out var ric)
+ ? GetNearestInteractionPoint(ric)
+ : target.transform.position;
+ }
+
+ private Vector3 GetNearestInteractionPoint(RestaurantInteractionComponent ric)
+ {
+ var points = ric.GetInteractionPoints();
+ if (points == null || points.Length == 0)
+ return ric.transform.position;
+
+ var agentPosition = GetAgentPosition();
+ var nearestPoint = ric.transform.position;
+ var minDistanceSqr = float.MaxValue;
+
+ foreach (var point in points)
+ {
+ var distanceSqr = (point - agentPosition).sqrMagnitude;
+ if (distanceSqr < minDistanceSqr)
+ {
+ minDistanceSqr = distanceSqr;
+ nearestPoint = point;
+ }
+ }
+
+ return nearestPoint;
+ }
+
+ private void StartOrUpdateMovement()
+ {
+ if (!isMoving)
+ {
+ if (movement.TryMoveToPosition(currentDestination))
+ {
+ movement.EnableMove();
+ movement.PlayMove();
+ isMoving = true;
+ }
+ }
+ else
+ {
+ movement.TryMoveToPosition(currentDestination);
+ }
+ }
+
+ private TaskStatus CheckMovementCompletion()
+ {
+ var distanceSqr = (GetAgentPosition() - currentDestination).sqrMagnitude;
+ var stoppingDistanceSqr = stoppingDistance * stoppingDistance;
+
+ if (distanceSqr <= stoppingDistanceSqr || movement.HasReachedDestination())
+ {
+ StopMovement();
+ return TaskStatus.Success;
+ }
+
+ return TaskStatus.Running;
+ }
+
+ private void StopMovement()
+ {
+ if (movement != null && isMoving)
+ {
+ movement.StopMove();
+ movement.DisableMove();
+ isMoving = false;
+ }
+ }
+
+ private Vector3 GetAgentPosition() =>
+ movement?.CurrentPosition ?? transform.position;
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs.meta
new file mode 100644
index 000000000..92e078ee6
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Actions/MoveToInteractionTarget.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d97cd08353334cb698807d4b526d01b6
+timeCreated: 1755769413
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator.meta
new file mode 100644
index 000000000..871887e4a
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: f96045235fcc43c880f2e0ee857b6f2e
+timeCreated: 1756111444
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs
new file mode 100644
index 000000000..ec725c587
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs
@@ -0,0 +1,231 @@
+using Opsive.BehaviorDesigner.Runtime;
+using Opsive.BehaviorDesigner.Runtime.Components;
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Decorators;
+using Opsive.GraphDesigner.Runtime;
+using Opsive.Shared.Utility;
+using Unity.Burst;
+using Unity.Entities;
+using UnityEngine;
+
+namespace DDD
+{
+ [NodeDescription("์์ ํ์คํฌ์ ์คํ ์๊ฐ์ ์ ํํฉ๋๋ค")]
+ public class TimeLimiter : ILogicNode, IParentNode, ITaskComponentData, IDecorator, ISavableTask
+ {
+ [Tooltip("The index of the node.")]
+ [SerializeField, HideInInspector] ushort _Index;
+
+ [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")]
+ [SerializeField, HideInInspector] ushort _ParentIndex;
+
+ [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")]
+ [SerializeField, HideInInspector] ushort _SiblingIndex;
+
+ [Tooltip("์ต๋ ์คํ ์๊ฐ(์ด)")]
+ [SerializeField] float _timeLimit = 30.0f;
+
+ [Tooltip("์๊ฐ ์ด๊ณผ ์ ๋ฐํํ ์ํ")]
+ [SerializeField] private TaskStatus _timeoutStatus = TaskStatus.Failure;
+
+ private ushort _ComponentIndex;
+
+ public ushort Index
+ {
+ get => _Index;
+ set => _Index = value;
+ }
+
+ public ushort ParentIndex
+ {
+ get => _ParentIndex;
+ set => _ParentIndex = value;
+ }
+
+ public ushort SiblingIndex
+ {
+ get => _SiblingIndex;
+ set => _SiblingIndex = value;
+ }
+
+ public ushort RuntimeIndex { get; set; }
+
+ public float TimeLimit
+ {
+ get => _timeLimit;
+ set => _timeLimit = value;
+ }
+
+ public int MaxChildCount
+ {
+ get { return 1; }
+ }
+
+ public ComponentType Tag
+ {
+ get => typeof(TimeLimiterTag);
+ }
+
+ public System.Type SystemType
+ {
+ get => typeof(TimeLimiterTaskSystem);
+ }
+
+
+ public void AddBufferElement(World world, Entity entity)
+ {
+ DynamicBuffer buffer;
+ if (world.EntityManager.HasBuffer(entity))
+ {
+ buffer = world.EntityManager.GetBuffer(entity);
+ }
+ else
+ {
+ buffer = world.EntityManager.AddBuffer(entity);
+ }
+
+ buffer.Add(new TimeLimiterComponent()
+ {
+ Index = RuntimeIndex,
+ TimeLimit = _timeLimit,
+ TimeoutStatus = _timeoutStatus,
+ });
+ _ComponentIndex = (ushort)(buffer.Length - 1);
+ }
+
+ public void ClearBufferElement(World world, Entity entity)
+ {
+ if (world.EntityManager.HasBuffer(entity))
+ {
+ var buffer = world.EntityManager.GetBuffer(entity);
+ buffer.Clear();
+ }
+ }
+
+ public MemberVisibility GetSaveReflectionType(int index)
+ {
+ return MemberVisibility.None;
+ }
+
+ public object Save(World world, Entity entity)
+ {
+ var timeLimiterComponents = world.EntityManager.GetBuffer(entity);
+ var timeLimiterComponent = timeLimiterComponents[_ComponentIndex];
+
+ return timeLimiterComponent.StartTime;
+ }
+
+ public void Load(object saveData, World world, Entity entity)
+ {
+ var timeLimiterComponents = world.EntityManager.GetBuffer(entity);
+ var timeLimiterComponent = timeLimiterComponents[_ComponentIndex];
+
+ timeLimiterComponent.StartTime = (float)saveData;
+ timeLimiterComponents[_ComponentIndex] = timeLimiterComponent;
+ }
+ }
+
+ public struct TimeLimiterComponent : IBufferElementData
+ {
+ [Tooltip("The index of the node.")]
+ public ushort Index;
+
+ [Tooltip("์ต๋ ์คํ ์๊ฐ(์ด)")]
+ public float TimeLimit;
+
+ [Tooltip("์คํ ์์ ์๊ฐ(์ด)")]
+ public float StartTime;
+
+ [Tooltip("Should the task end when the child returns failure?")]
+ public TaskStatus TimeoutStatus;
+ }
+
+ public struct TimeLimiterTag : IComponentData, IEnableableComponent { }
+
+ [DisableAutoCreation]
+ public partial struct TimeLimiterTaskSystem : ISystem
+ {
+ [BurstCompile]
+ private void OnUpdate(ref SystemState state)
+ {
+ var query = SystemAPI.QueryBuilder().WithAllRW().WithAllRW().WithAllRW().WithAll().Build();
+ state.Dependency = new TimeLimiterJob()
+ {
+ CurrentTime = (float)SystemAPI.Time.ElapsedTime
+ }.ScheduleParallel(query, state.Dependency);
+ }
+
+ [BurstCompile]
+ private partial struct TimeLimiterJob : IJobEntity
+ {
+ public float CurrentTime;
+
+ [BurstCompile]
+ public void Execute(ref DynamicBuffer branchComponents,
+ ref DynamicBuffer taskComponents,
+ ref DynamicBuffer timeLimiterComponents)
+ {
+ for (int i = 0; i < timeLimiterComponents.Length; ++i)
+ {
+ var timeLimiterComponent = timeLimiterComponents[i];
+ var taskComponent = taskComponents[timeLimiterComponent.Index];
+ var branchComponent = branchComponents[taskComponent.BranchIndex];
+ TaskComponent childTaskComponent;
+
+ if (taskComponent.Status == TaskStatus.Queued)
+ {
+ taskComponent.Status = TaskStatus.Running;
+ taskComponents[taskComponent.Index] = taskComponent;
+
+ timeLimiterComponent.StartTime = CurrentTime;
+ timeLimiterComponents[i] = timeLimiterComponent;
+
+ childTaskComponent = taskComponents[taskComponent.Index + 1];
+ childTaskComponent.Status = TaskStatus.Queued;
+ taskComponents[taskComponent.Index + 1] = childTaskComponent;
+
+ branchComponent.NextIndex = taskComponent.Index + 1;
+ branchComponents[taskComponent.BranchIndex] = branchComponent;
+ continue;
+ }
+ else if (taskComponent.Status != TaskStatus.Running)
+ {
+ continue;
+ }
+
+ if (timeLimiterComponent.StartTime >= 0f &&
+ CurrentTime - timeLimiterComponent.StartTime >= timeLimiterComponent.TimeLimit) {
+ // ์๊ฐ ์ด๊ณผ
+ taskComponent.Status = timeLimiterComponent.TimeoutStatus;
+ taskComponents[taskComponent.Index] = taskComponent;
+
+ // ์์ ํ์คํฌ๊ฐ ์คํ ์ค์ด๋ฉด ์ค๋จ
+ childTaskComponent = taskComponents[taskComponent.Index + 1];
+ if (childTaskComponent.Status == TaskStatus.Running ||
+ childTaskComponent.Status == TaskStatus.Queued) {
+ childTaskComponent.Status = timeLimiterComponent.TimeoutStatus;
+ taskComponents[taskComponent.Index + 1] = childTaskComponent;
+ }
+
+ branchComponent.NextIndex = taskComponent.ParentIndex;
+ branchComponents[taskComponent.BranchIndex] = branchComponent;
+ continue;
+ }
+
+ childTaskComponent = taskComponents[taskComponent.Index + 1];
+ if (childTaskComponent.Status == TaskStatus.Queued ||
+ childTaskComponent.Status == TaskStatus.Running) {
+ // The child should keep running.
+ continue;
+ }
+
+ taskComponent.Status = childTaskComponent.Status;
+ taskComponents[taskComponent.Index] = taskComponent;
+
+ branchComponent.NextIndex = taskComponent.ParentIndex;
+ branchComponents[taskComponent.BranchIndex] = branchComponent;
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs.meta
new file mode 100644
index 000000000..269fc297d
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d5da50af45c8438eb9677fd18378f9b4
+timeCreated: 1756111556
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer.meta
new file mode 100644
index 000000000..20e141632
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 6f1cc55df1da4604a2a7f445527710de
+timeCreated: 1755765247
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions.meta
new file mode 100644
index 000000000..471d824db
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 6777cf4d7cf4408fafe4bc9097c32b01
+timeCreated: 1755767888
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs
new file mode 100644
index 000000000..37397a54b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs
@@ -0,0 +1,7 @@
+namespace DDD
+{
+ public class ContinueRestaurantOrder
+ {
+ // ์ด๋ฏธ ์๋ ์ธํฐ๋์
ํ๊ฒ์ ๋์์ผ๋ก ์งํํจ
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs.meta
new file mode 100644
index 000000000..bf6373194
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/ContinueRestaurantOrder.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: d0b954edf40f4172964dbd6e4fe22b1a
+timeCreated: 1755772289
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs
new file mode 100644
index 000000000..bf6f0544b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs
@@ -0,0 +1,70 @@
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
+using UnityEngine;
+
+namespace DDD
+{
+ public class StartRestaurantOrder : Action
+ {
+ [Tooltip("์ํธ์์ฉํ RestaurantOrderType")]
+ [SerializeField] private RestaurantOrderType _targetOrderType = RestaurantOrderType.Wait;
+ [Tooltip("์ค์ ์ํธ์์ฉ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๊ณ ์ํํฉ๋๋ค")]
+ [SerializeField] private bool _requireCanInteract = true;
+ [Tooltip("์ฑ๊ณต ์ ๋ธ๋๋ณด๋์ ํ์ฌ ์ธํฐ๋์
๋์์ ๋ฑ๋กํฉ๋๋ค")]
+ [SerializeField] private bool _registerOnBlackboard = true;
+
+ private IInteractor _interactor;
+ private bool _isGetInteractor;
+
+ public override void OnStart()
+ {
+ _isGetInteractor = gameObject.TryGetComponent(out _interactor);
+ if (!_isGetInteractor)
+ Debug.LogError($"[{GetType().Name}] IInteractor๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ // TODO : ์๋ ํ๊ฒ ์ฐพ๊ธฐ๊ฐ RestaurantOrderAvailable๊ณผ ๋์ผํด์ผ ํจ, ๋์ผํ๋ฉด ์ค๋ณต๋ ํ์ ์์ผ๋ ์คํํฑ ์ ํธ ํจ์์ ๋๋ก ๋ง๋ค์ด์ ๊ณต์ ํ๊ธฐ.
+ // ๋ ์คํ ๋ ์ฃผ๋ฌธ ์ธํฐ๋์
ํ๋ณด๋ฅผ ๊ฐ์ ธ์ด
+ TaskStatus targetSearchSuccess = RestaurantOrderAvailable.FindAvailableOrderInteractable(_requireCanInteract, _targetOrderType, out var
+ outInteractable);
+ if (targetSearchSuccess == TaskStatus.Failure)
+ {
+ return TaskStatus.Failure;
+ }
+
+ // TODO : ์๋ ์ํธ์์ฉ ์ํ ๋ก์ง์ด ์ฐ๋ฆฌ ํ๋ก์ ํธ์ ๊ถ์ฅํ๋ ๋ฐฉ์์ด ์๋. ํ๋ ์ด์ด๊ฐ ์ค๋ธ์ ํธ์ ์ธํฐ๋์
ํ๋ ๊ฒ๊ณผ ๋น์ทํ ํ๋ฆ์ผ๋ก NPC๊ฐ ์ค๋ธ์ ํธ์ ์ธํฐ๋์
ํ๊ฒ ๋ง๋ค ๊ฒ.
+ // ์ํธ์์ฉ ์ํ: ์ก์
์ด ๋ถ์ ์์ด์ ํธ๋ฅผ Interactor๋ก ์ฌ์ฉ
+ if (!_isGetInteractor || !_interactor.CanInteractTo(outInteractable))
+ {
+ return TaskStatus.Failure;
+ }
+
+ // TODO : ์ด๋ฒคํธ ํตํด์ ์ธํฐ๋์
. ์ง์ ํธ์ถํ์ง ๋ง ๊ฒ!
+ var interacted = outInteractable.OnInteracted(_interactor);
+ if (!interacted)
+ {
+ return TaskStatus.Failure;
+ }
+
+ if (_registerOnBlackboard)
+ {
+ // ๊ณต์ฉ ๋ธ๋๋ณด๋ ์ฐ์
+ var shared = gameObject.GetComponentInChildren();
+ if (shared != null)
+ {
+ shared.SetCurrentInteractionTarget(outInteractable.gameObject);
+ }
+ else
+ {
+ // ํ์ ํธํ: ๊ณ ๊ฐ ์ ์ฉ ๋ธ๋๋ณด๋ ์ง์
+ var customerBb = gameObject.GetComponentInParent();
+ customerBb?.SetCurrentInteractionTarget(outInteractable.gameObject);
+ }
+ }
+
+ return TaskStatus.Success;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs.meta
new file mode 100644
index 000000000..b24f479a5
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 84b6c26acd1e41afa6b07ed4c6caf860
+timeCreated: 1755767930
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs
new file mode 100644
index 000000000..220788be6
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs
@@ -0,0 +1,102 @@
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Actions;
+using UnityEngine;
+
+namespace DDD
+{
+ //๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์
+ //์ฐจํ ์ ๋ค๋ฆญ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ ์์
+ public class WaitForPlayerInteraction : Action
+ {
+ [Tooltip("๊ธฐ๋ค๋ฆด ์ํธ์์ฉ ํ์
")]
+ [SerializeField] private RestaurantMealType _targetOrderType = RestaurantMealType.WaitForOrder;
+
+ private IInteractionSubsystemObject _interactionSubsystem;
+ private bool _isGetInteractionSubsystem;
+
+ public override void OnStart()
+ {
+ // ์์๊ฐ ๋ณตํฉ ์ํ๋ฅผ ๊ฐ์ง๊ฒ ๋ ๊ฒฝ์ฐ
+ // GameObject interactionTarget = null;
+ // var shared = gameObject.GetComponentInChildren();
+ // if (shared != null)
+ // {
+ // interactionTarget = shared.GetCurrentInteractionTarget();
+ // }
+ // else
+ // {
+ // // ํ์ ํธํ: ๊ณ ๊ฐ ์ ์ฉ ๋ธ๋๋ณด๋ ์ง์
+ // var customerBb = gameObject.GetComponentInParent();
+ // interactionTarget = customerBb?.GetCurrentInteractionTarget();
+ // }
+ //
+ // if (interactionTarget == null)
+ // {
+ // Debug.LogError($"[{GetType().Name}] interactionTarget์ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ // return;
+ // }
+ //
+ // if (!interactionTarget.TryGetComponent(out var interactionComponent))
+ // Debug.LogError($"[{interactionTarget.name}] {nameof(interactionComponent)}๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ // if (interactionComponent is IInteractionSubsystemOwner subsystemOwner)
+ // {
+ // if (!subsystemOwner.TryGetSubsystemObject(out var subsystem))
+ // {
+ // Debug.LogError($"[{GetType().Name}] {nameof(_targetOrderType)}์ Subsystem์ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ // _isGetInteractionSubsystem = false;
+ // return;
+ // }
+ //
+ // _isGetInteractionSubsystem = true;
+ // subsystem.SetInteractionSubsystemType(_targetOrderType);
+ //
+ // if (!gameObject.TryGetComponent(out var interactor))
+ // {
+ // Debug.LogError($"[{GetType().Name}] IInteractor๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ // return;
+ // }
+ //
+ // interactor.CanInteractTo(interactionComponent);
+ //
+ // _interactionSubsystem = subsystem;
+ // }
+
+ if (!gameObject.TryGetComponent(out var interactionComponent))
+ {
+ Debug.LogError($"[{GetType().Name}]์์ interactionComponent๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ return;
+ }
+
+ if (interactionComponent is not IInteractionSubsystemOwner subsystemOwner)
+ {
+ Debug.LogError($"[{GetType().Name}]์์ {nameof(IInteractionSubsystemOwner)}๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ return;
+ }
+
+ if (!subsystemOwner.TryGetSubsystemObject(out _interactionSubsystem))
+ {
+ Debug.LogError($"[{GetType().Name}]์์ {nameof(IInteractionSubsystemObject)}๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค: {gameObject.name}");
+ return;
+ }
+
+ _interactionSubsystem.SetInteractionSubsystemType(_targetOrderType);
+ _isGetInteractionSubsystem = true;
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ if (!_isGetInteractionSubsystem) return TaskStatus.Failure;
+
+ TaskStatus result = CheckToSubsystemStatus();
+ if (result == TaskStatus.Success) Debug.Log($"[{GetType().Name}] Success");
+ return result;
+ }
+
+ private TaskStatus CheckToSubsystemStatus()
+ {
+ return _interactionSubsystem.GetInteractionSubsystemType() == _targetOrderType
+ ? TaskStatus.Running
+ : TaskStatus.Success;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs.meta
new file mode 100644
index 000000000..e9b41353b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 4bb97122045148169906d2f7b04a712e
+timeCreated: 1756171540
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals.meta
new file mode 100644
index 000000000..0df5af835
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c4f20081a3974c08b60b9efdbe1568a7
+timeCreated: 1755765256
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs
new file mode 100644
index 000000000..b10254f84
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs
@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using Opsive.BehaviorDesigner.Runtime.Tasks;
+using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals;
+using UnityEngine;
+using DDD;
+
+namespace DDD
+{
+ public class RestaurantOrderAvailable : Conditional
+ {
+ [Tooltip("๊ฒ์ฌํ RestaurantOrderType")]
+ [SerializeField] private RestaurantOrderType _targetOrderType = RestaurantOrderType.Wait;
+ [Tooltip("์ธํฐ๋์
๊ฐ๋ฅ ์ฌ๋ถ๊น์ง ํ์ธํ ์ง ์ ํ")]
+ [SerializeField] private bool _checkCanInteract = true;
+
+ public RestaurantOrderType TargetOrderType
+ {
+ get => _targetOrderType;
+ set => _targetOrderType = value;
+ }
+
+ public bool CheckCanInteract
+ {
+ get => _checkCanInteract;
+ set => _checkCanInteract = value;
+ }
+
+ public override TaskStatus OnUpdate()
+ {
+ TaskStatus targetSearchSuccess = FindAvailableOrderInteractable(_checkCanInteract, _targetOrderType, out var
+ outInteractable);
+ return targetSearchSuccess;
+
+ }
+
+ public static TaskStatus FindAvailableOrderInteractable(bool checkCanInteract, T targetOrderType, out RestaurantInteractionComponent outInteractable) where T : Enum
+ {
+ outInteractable = null;
+
+ var environmentState = RestaurantState.Instance?.EnvironmentState;
+ if (environmentState == null)
+ {
+ return TaskStatus.Failure;
+ }
+
+ var interactables = environmentState.GetInteractablesByType(InteractionType.RestaurantOrder);
+
+ foreach (var interactable in interactables)
+ {
+ // ์๋ธ์์คํ
์์ RestaurantOrderType์ ๊ฐ์ ธ์ ๋น๊ต
+ outInteractable = interactable as RestaurantInteractionComponent;
+ if (outInteractable == null) continue;
+ if (!outInteractable.TryGetSubsystemObject(out var subsystem)) continue;
+
+ if (EqualityComparer.Default.Equals(subsystem.GetInteractionSubsystemType(), targetOrderType)
+ )
+ {
+ // CheckCanInteract์ด false๋ฉด ํ์
๋ง ๋ง์ผ๋ฉด ์ฑ๊ณต
+ if (!checkCanInteract)
+ {
+ return TaskStatus.Success;
+ }
+
+ // CheckCanInteract์ด true๋ฉด ์ค์ ์ธํฐ๋์
๊ฐ๋ฅ ์ฌ๋ถ๊น์ง ํ์ธ
+ if (interactable.CanInteract())
+ {
+ return TaskStatus.Success;
+ }
+ }
+ }
+
+ return TaskStatus.Failure;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs.meta
new file mode 100644
index 000000000..04186450b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: bef354fd7cae4273b4cb4e7ff9e270f5
+timeCreated: 1755765519
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs
new file mode 100644
index 000000000..6206ce2fb
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs
@@ -0,0 +1,57 @@
+using System;
+using System.Threading.Tasks;
+using Opsive.BehaviorDesigner.Runtime;
+using Unity.Entities;
+using UnityEngine;
+using UnityEngine.AddressableAssets;
+
+namespace DDD
+{
+ [RequireComponent(typeof(BehaviorTree))]
+ [RequireComponent(typeof(RestaurantCustomerBlackboardComponent))]
+ public class RestaurantCustomerAiComponent : MonoBehaviour, IRestaurantCustomerAi
+ {
+ protected BehaviorTree _behaviorTree;
+ protected RestaurantCustomerBlackboardComponent _blackboardComponent;
+
+ private void Awake()
+ {
+ _behaviorTree = GetComponent();
+ _blackboardComponent = GetComponent();
+ }
+
+ public void InitializeAi(CustomerData inCustomerData)
+ {
+ try
+ {
+ InitializeAiInternal(inCustomerData);
+ }
+ catch (Exception e)
+ {
+ // Log
+ Debug.LogError(e);
+ throw; // TODO ์์ธ ์ฒ๋ฆฌ
+ }
+ }
+
+ private async Task InitializeAiInternal(CustomerData inCustomerData)
+ {
+ var customerState = RestaurantState.Instance.CustomerState;
+ var subtree = customerState.GetLoadedSubtree(inCustomerData.CustomerType);
+
+ if (subtree == null)
+ {
+ Debug.LogError(
+ $"[CustomerCharacter] No preloaded subtree found for CustomerType: {inCustomerData.CustomerType}. Make sure CustomerBehaviorData is loaded.");
+ subtree = await customerState.GetOrLoadSubtree(inCustomerData.CustomerType);
+ }
+
+ _behaviorTree.Subgraph = subtree;
+ _blackboardComponent.InitializeWithBehaviorTree(subtree);
+ _blackboardComponent.SetCustomerData(inCustomerData);
+ // TODO : 1. Subtree - Action, Condition
+ // TODO : 2. Blackboard
+ _behaviorTree.StartBehavior();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs.meta
new file mode 100644
index 000000000..42084712a
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerAiComponent.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: af69e82818254bfa9cabb2dbf9430850
+timeCreated: 1755748000
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs
new file mode 100644
index 000000000..98112000e
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs
@@ -0,0 +1,39 @@
+using Opsive.BehaviorDesigner.Runtime;
+using UnityEngine;
+
+namespace DDD
+{
+ public class RestaurantCustomerBlackboardComponent : MonoBehaviour, IRestaurantCustomerBlackboard, IAISharedBlackboard
+ {
+ private Subtree _subtree;
+ private GameObject _currentInteractionTarget;
+
+ public void InitializeWithBehaviorTree(Subtree subtree)
+ {
+ _subtree = subtree;
+ if (_subtree != null)
+ {
+ _subtree.SetVariableValue(nameof(RestaurantCustomerBlackboardKey.SelfGameObject), gameObject);
+ }
+ }
+
+ public void SetCustomerData(CustomerData inCustomerData)
+ {
+ if (_subtree == null) return;
+ _subtree.SetVariableValue(nameof(RestaurantCustomerBlackboardKey.CustomerData), inCustomerData);
+ }
+
+ public void SetCurrentInteractionTarget(GameObject targetGameObject)
+ {
+ _currentInteractionTarget = targetGameObject;
+ if (_subtree == null) return;
+ _subtree.SetVariableValue(nameof(RestaurantCustomerBlackboardKey.CurrentInteractionTarget), targetGameObject);
+ }
+
+ public GameObject GetCurrentInteractionTarget()
+ {
+ // ์บ์ ์ฐ์ ๋ฐํ. ํ์ ์ Subtree์์ ์ง์ ์กฐํํ๋๋ก ํ์ฅ ๊ฐ๋ฅ.
+ return _currentInteractionTarget;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs.meta
new file mode 100644
index 000000000..f4ab0960a
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/RestaurantCustomerBlackboardComponent.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 784c770c13244dc0a0804056065eaf92
+timeCreated: 1755748886
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Core/RestaurantCharacter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Core/RestaurantCharacter.cs
index 45c56de5d..892a2bbfe 100644
--- a/Assets/_DDD/_Scripts/RestaurantCharacter/Core/RestaurantCharacter.cs
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Core/RestaurantCharacter.cs
@@ -14,10 +14,6 @@ protected virtual void Awake()
{
_interactionComponent = GetComponent();
_spineController = GetComponent();
- }
-
- protected virtual void Start()
- {
foreach (var typeToSolver in RestaurantInteractionEventSolvers.TypeToSolver)
{
var flag = typeToSolver.Key;
@@ -32,6 +28,11 @@ protected virtual void Start()
}
}
+ protected virtual void Start()
+ {
+
+ }
+
public GameObject GetInteractorGameObject()
{
return _interactionComponent.GetInteractorGameObject();
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs
new file mode 100644
index 000000000..785b8bb03
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs
@@ -0,0 +1,7 @@
+namespace DDD
+{
+ public interface IRestaurantCustomerAi
+ {
+ void InitializeAi(CustomerData inCustomerData);
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs.meta
new file mode 100644
index 000000000..0aae47e45
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerAi.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 308488f2a02448d3853514eff04711fa
+timeCreated: 1755748296
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs
new file mode 100644
index 000000000..51859cddf
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+
+namespace DDD
+{
+ public enum RestaurantCustomerBlackboardKey
+ {
+ SelfGameObject,
+ CustomerData,
+ CurrentInteractionTarget,
+ }
+
+ public interface IRestaurantCustomerBlackboard
+ {
+ void SetCustomerData(CustomerData inCustomerData);
+ void SetCurrentInteractionTarget(GameObject targetGameObject);
+ GameObject GetCurrentInteractionTarget();
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs.meta b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs.meta
new file mode 100644
index 000000000..694439b41
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Interfaces/IRestaurantCustomerBlackboard.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: a4f20d91da7045e4bc226be60254ef2b
+timeCreated: 1755748894
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/Customer/CustomerCharacter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/Customer/CustomerCharacter.cs
index 652e99556..bba008853 100644
--- a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/Customer/CustomerCharacter.cs
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/Customer/CustomerCharacter.cs
@@ -2,54 +2,28 @@
using Opsive.BehaviorDesigner.Runtime;
using UnityEngine;
using UnityEngine.AddressableAssets;
-using UnityEngine.ResourceManagement.AsyncOperations;
namespace DDD
{
+ [RequireComponent(typeof(RestaurantCustomerAiComponent))]
public class CustomerCharacter : RestaurantNpcCharacter, ICustomerInitializer
{
private CustomerData _customerData;
-
- private AsyncOperationHandle _subtreeHandle;
-
- public async void Initialize(CustomerData customerData)
+ protected IRestaurantCustomerAi restaurantCustomerAi;
+
+ protected override void Awake()
+ {
+ base.Awake();
+ restaurantCustomerAi = GetComponent();
+ }
+
+ public void Initialize(CustomerData customerData)
{
_customerData = customerData;
+ restaurantCustomerAi.InitializeAi(_customerData);
// ์คํจ ์ค์
_spineController.SetSkin(_customerData.SpineSkinKey);
-
- // CustomerType์ ๋ฐ๋ฅธ behavior tree subtree ํ ๋น
- await InitializeBehaviorTree();
- }
-
- private async Task InitializeBehaviorTree()
- {
- var customerData = RestaurantData.Instance.CustomerData;
-
- if (customerData?.CustomerBehaviorData?.TryGetValue(_customerData.CustomerType, out var subtreeReference) != true)
- {
- Debug.LogError($"[CustomerCharacter] No behavior data found for CustomerType: {_customerData.CustomerType}");
- return;
- }
-
- try
- {
- var subtree = await AssetManager.LoadAsset(subtreeReference.AssetGUID);
- if (subtree != null)
- {
- _behaviorTree.Subgraph = subtree;
- _behaviorTree.StartBehavior();
- }
- else
- {
- Debug.LogError($"[CustomerCharacter] Failed to load subtree for CustomerType: {_customerData.CustomerType}");
- }
- }
- catch (System.Exception e)
- {
- Debug.LogError($"[CustomerCharacter] Error loading subtree for CustomerType {_customerData.CustomerType}: {e.Message}");
- }
}
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcCharacter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcCharacter.cs
index 1df86afe0..0b55d5293 100644
--- a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcCharacter.cs
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcCharacter.cs
@@ -3,16 +3,12 @@
namespace DDD
{
- [RequireComponent(typeof(BehaviorTree))]
+ [RequireComponent(typeof(RestaurantNpcMovement))]
public class RestaurantNpcCharacter : RestaurantCharacter
{
- protected BehaviorTree _behaviorTree;
-
protected override void Awake()
{
base.Awake();
-
- _behaviorTree = GetComponent();
}
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcMovement.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcMovement.cs
index cd32293cb..e73acf69f 100644
--- a/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcMovement.cs
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Npc/RestaurantNpcMovement.cs
@@ -101,6 +101,7 @@ public bool HasReachedDestination()
public bool IsPositionMovable(Vector3 endPosition)
{
+
var nearestNode = AstarPath.active.GetNearest(endPosition).node;
return nearestNode != null && nearestNode.Walkable;
}
diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs
index ea20068fb..7dad4869f 100644
--- a/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs
+++ b/Assets/_DDD/_Scripts/RestaurantCharacter/Player/RestaurantPlayerCharacter.cs
@@ -1,5 +1,8 @@
+using UnityEngine;
+
namespace DDD
{
+ [RequireComponent(typeof(RestaurantPlayerMovement))]
public class RestaurantPlayerCharacter : RestaurantCharacter
{
protected override async void Awake()
diff --git a/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/RestaurantRunController.cs b/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/RestaurantRunController.cs
index 179f4a908..6bbc05bc3 100644
--- a/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/RestaurantRunController.cs
+++ b/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/RestaurantRunController.cs
@@ -27,6 +27,9 @@ public override Task InitializeController()
{
_restaurantCustomerStateSo = RestaurantState.Instance.CustomerState;
_restaurantRunStateSo = RestaurantState.Instance.RunState;
+
+ _iCustomerFactory ??= new CustomerFactory();
+
return Task.CompletedTask;
}
@@ -41,6 +44,9 @@ public override async Task OnReadyNewFlow(GameFlowState newFlowState)
{
if (newFlowState == GameFlowState.RunRestaurant)
{
+ _iCustomerFactory.LoadAssets();
+ await _restaurantCustomerStateSo.LoadCustomerBehaviorData();
+
_cts?.Cancel();
_cts?.Dispose();
_cts = new CancellationTokenSource();
@@ -52,6 +58,9 @@ public override Task OnExitCurrentFlow(GameFlowState exitingFlowState)
{
if (exitingFlowState == GameFlowState.RunRestaurant)
{
+ _iCustomerFactory.UnloadAssets();
+ _restaurantCustomerStateSo.UnloadCustomerBehaviorData();
+
_cts?.Cancel();
_cts?.Dispose();
_cts = null;
@@ -61,8 +70,6 @@ public override Task OnExitCurrentFlow(GameFlowState exitingFlowState)
private async Task StartSpawnLoopAsync(CancellationToken token)
{
- _iCustomerFactory ??= new CustomerFactory();
-
var currentGameLevel = GameState.Instance.LevelState.Level;
_levelDataSo ??= DataManager.Instance.GetDataSo();
_customerDataSo ??= DataManager.Instance.GetDataSo();
@@ -115,7 +122,7 @@ SpawnSchedule MakeSchedule() => scheduleBuilder.Build(new SpawnScheduleBuildArgs
{
var rotation = Quaternion.identity;
- _ = _iCustomerFactory.CreateAsync(new CustomerSpawnArgs
+ await _iCustomerFactory.CreateAsync(new CustomerSpawnArgs
{
CustomerData = customerData,
Position = _restaurantRunStateSo.SpawnPoint,
diff --git a/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/Run/Customer/CustomerFactory.cs b/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/Run/Customer/CustomerFactory.cs
index d69b62862..9131469c6 100644
--- a/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/Run/Customer/CustomerFactory.cs
+++ b/Assets/_DDD/_Scripts/RestaurantController/Conrtollers/Run/Customer/CustomerFactory.cs
@@ -1,11 +1,15 @@
using System.Threading.Tasks;
using UnityEngine;
+using UnityEngine.AddressableAssets;
+using UnityEngine.ResourceManagement.AsyncOperations;
namespace DDD
{
public interface ICustomerFactory
{
Task CreateAsync(CustomerSpawnArgs args);
+ void LoadAssets();
+ void UnloadAssets();
}
public interface ICustomerInitializer
@@ -24,26 +28,14 @@ public struct CustomerSpawnArgs
public class CustomerFactory : ICustomerFactory
{
private GameObject _customerPrefab;
+ private AsyncOperationHandle _customerPrefabHandle;
public async Task CreateAsync(CustomerSpawnArgs args)
{
if (!_customerPrefab)
{
- var customerDataAsset = RestaurantData.Instance ? RestaurantData.Instance.CustomerData : null;
- if (customerDataAsset == null || customerDataAsset.CustomerPrefab == null)
- {
- Debug.LogError("[CustomerFactory] RestaurantCustomerData or its CustomerPrefab reference is not set or not loaded.");
- return null;
- }
-
- var handle = customerDataAsset.CustomerPrefab.LoadAssetAsync();
- await handle.Task;
- if (handle.Result == null)
- {
- Debug.LogError("[CustomerFactory] Failed to load customer prefab from AssetReference.");
- return null;
- }
- _customerPrefab = handle.Result;
+ Debug.LogError("[CustomerFactory] Customer prefab is not loaded. Call LoadAssets() first.");
+ await LoadCustomerAsset();
}
var newCustomer = Object.Instantiate(_customerPrefab, args.Position, args.Rotation, args.Parent);
@@ -54,5 +46,47 @@ public async Task CreateAsync(CustomerSpawnArgs args)
}
return newCustomer;
}
+
+ public async void LoadAssets()
+ {
+ await LoadCustomerAsset();
+ }
+
+ private async Task LoadCustomerAsset()
+ {
+ if (_customerPrefab != null)
+ {
+ return;
+ }
+
+ var customerDataAsset = RestaurantData.Instance ? RestaurantData.Instance.CustomerData : null;
+ if (customerDataAsset == null || customerDataAsset.CustomerPrefab == null)
+ {
+ Debug.LogError("[CustomerFactory] RestaurantCustomerData or its CustomerPrefab reference is not set.");
+ return;
+ }
+
+ _customerPrefabHandle = customerDataAsset.CustomerPrefab.LoadAssetAsync();
+ await _customerPrefabHandle.Task;
+
+ if (_customerPrefabHandle.Result == null)
+ {
+ Debug.LogError("[CustomerFactory] Failed to load customer prefab from AssetReference.");
+ return;
+ }
+
+ _customerPrefab = _customerPrefabHandle.Result;
+ Debug.Log("[CustomerFactory] Customer prefab loaded successfully.");
+ }
+
+ public void UnloadAssets()
+ {
+ if (_customerPrefabHandle.IsValid())
+ {
+ Addressables.Release(_customerPrefabHandle);
+ }
+ _customerPrefab = null;
+ Debug.Log("[CustomerFactory] Customer prefab unloaded.");
+ }
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs
index 3fe6d674e..0c7dd033c 100644
--- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs
@@ -19,17 +19,22 @@ public RestaurantManagementType GetInteractionSubsystemType()
return _managementType;
}
- public virtual void InitializeSubsystem()
+ public void SetInteractionSubsystemType(RestaurantManagementType inValue)
+ {
+ _managementType = inValue;
+ }
+
+ public void InitializeSubsystem()
{
}
- public virtual bool CanInteract()
+ public bool CanInteract()
{
return true;
}
- public virtual bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
+ public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
{
return true;
}
diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs
new file mode 100644
index 000000000..d018dc86b
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs
@@ -0,0 +1,62 @@
+using System;
+using UnityEngine;
+
+namespace DDD
+{
+ public enum RestaurantMealType : uint
+ {
+ None = 0u,
+ WaitForOrder = 1u,
+ WaitForServe = 1u << 1
+ }
+ public class RestaurantMealInteractionSubsystem : MonoBehaviour, IInteractionSubsystemObject
+ {
+ private RestaurantMealType _currentRestaurantMealType;
+ private void Awake()
+ {
+ _currentRestaurantMealType = RestaurantMealType.None;
+ }
+ public RestaurantMealType GetInteractionSubsystemType()
+ {
+ return _currentRestaurantMealType;
+ }
+
+ public void SetInteractionSubsystemType(RestaurantMealType inValue)
+ {
+ _currentRestaurantMealType = inValue;
+ }
+
+ public void InitializeSubsystem()
+ {
+ _currentRestaurantMealType = RestaurantMealType.None;
+ }
+
+ public bool CanInteract()
+ {
+ return _currentRestaurantMealType != RestaurantMealType.None;
+ }
+
+ public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
+ {
+ var prev = _currentRestaurantMealType;
+ _currentRestaurantMealType = GetNextState(prev);
+ return true;
+ }
+
+ public ScriptableObject GetPayload()
+ {
+ return null;
+ }
+
+ private RestaurantMealType GetNextState(RestaurantMealType state)
+ {
+ switch (state)
+ {
+ case RestaurantMealType.None : return RestaurantMealType.WaitForOrder;
+ case RestaurantMealType.WaitForOrder : return RestaurantMealType.WaitForServe;
+ case RestaurantMealType.WaitForServe : return RestaurantMealType.None;
+ default: return RestaurantMealType.None;
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs.meta
new file mode 100644
index 000000000..16a96ce29
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 31d5c600061a4f05b19824e068e0c2af
+timeCreated: 1756176676
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs
index 518e84eaa..fd6260925 100644
--- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs
@@ -3,13 +3,14 @@
namespace DDD
{
- [Flags]
public enum RestaurantOrderType : uint
{
Wait = 0u,
Reserved = 1u,
Order = 1u << 1,
Serve = 1u << 2,
+ Busy = 1u << 3,
+ Dirty = 1u << 4,
}
public class RestaurantOrderInteractionSubsystem : MonoBehaviour, IInteractionSubsystemObject
@@ -24,20 +25,18 @@ private void Start()
public bool CanInteract()
{
- if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
- {
- return true;
- }
- return false;
+ //if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
+ //{
+ // return true;
+ //}
+ return true;
}
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
{
- if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
- {
- // DO WAIT CUSTOMER
- }
-
+ // ๊ฐ๋จํ ์ํ ์ ์ด: ํ์ฌ ์ํ์์ ๋ค์ ์ํ๋ก ์ด๋
+ var prev = currentRestaurantOrderType;
+ currentRestaurantOrderType = GetNextState(prev);
return true;
}
@@ -48,12 +47,31 @@ public ScriptableObject GetPayload()
public void InitializeSubsystem()
{
-
+ currentRestaurantOrderType = orderType;
}
public RestaurantOrderType GetInteractionSubsystemType()
{
return currentRestaurantOrderType;
}
+
+ public void SetInteractionSubsystemType(RestaurantOrderType inValue)
+ {
+ currentRestaurantOrderType = inValue;
+ }
+
+ private RestaurantOrderType GetNextState(RestaurantOrderType state)
+ {
+ switch (state)
+ {
+ case RestaurantOrderType.Wait: return RestaurantOrderType.Reserved;
+ case RestaurantOrderType.Reserved: return RestaurantOrderType.Order;
+ case RestaurantOrderType.Order: return RestaurantOrderType.Serve;
+ case RestaurantOrderType.Serve: return RestaurantOrderType.Busy;
+ case RestaurantOrderType.Busy: return RestaurantOrderType.Dirty;
+ case RestaurantOrderType.Dirty: return RestaurantOrderType.Wait;
+ default: return RestaurantOrderType.Wait;
+ }
+ }
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs
index 0970a8410..a7059d6dc 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs
@@ -12,7 +12,8 @@ public static class RestaurantInteractionSubsystems
public static Dictionary TypeToSubsystem = new()
{
{InteractionType.RestaurantOrder, typeof(RestaurantOrderInteractionSubsystem)},
- {InteractionType.RestaurantManagement, typeof(RestaurantManagementInteractionSubsystem)}
+ {InteractionType.RestaurantManagement, typeof(RestaurantManagementInteractionSubsystem)},
+ {InteractionType.RestaurantMeal, typeof(RestaurantMealInteractionSubsystem)}
};
}
@@ -27,12 +28,35 @@ public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInt
[SerializeField] protected GameFlowState _interactionAvailableFlows;
[SerializeField] private Transform[] _aiInteractionPoints;
[SerializeField] private bool autoInitialize = true;
+ private bool _isInitialized = false;
private Dictionary _subsystems = new();
+ private void OnEnable()
+ {
+ // Register this interactable to environment state
+ var environmentState = RestaurantState.Instance?.EnvironmentState;
+ environmentState?.RegisterInteractable(this);
+
+ if (autoInitialize && !_isInitialized)
+ {
+ InitializeInteraction(_interactionType);
+ }
+ }
+
+ private void OnDisable()
+ {
+ var environmentState = RestaurantState.Instance?.EnvironmentState;
+ environmentState?.UnregisterInteractable(this);
+ }
+
private void Start()
{
- if (autoInitialize)
+ // ๋ณด์์ ์ผ๋ก Start์์๋ ๋ฑ๋ก ์๋ (OnEnable ์์ ์ EnvironmentState๊ฐ ์์์ ๊ฒฝ์ฐ ๋๋น)
+ var environmentState = RestaurantState.Instance?.EnvironmentState;
+ environmentState?.RegisterInteractable(this);
+
+ if (autoInitialize && !_isInitialized)
{
InitializeInteraction(_interactionType);
}
@@ -92,6 +116,7 @@ public GameObject GetInteractableGameObject()
public virtual void InitializeInteraction(InteractionType interactionType)
{
_interactionType = interactionType;
+ _isInitialized = true;
InitializeSubsystems();
}
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs
index 87047ccae..bcf28a65b 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs
@@ -15,6 +15,7 @@ public static class RestaurantInteractionEventSolvers
{
{InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)},
{InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)},
+ {InteractionType.RestaurantMeal, typeof(RestaurantMealSolver)},
{InteractionType.RestaurantCook, typeof(RestaurantCookSolver)}
};
}
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs
index 89a985f8f..92e3ce5c5 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs
@@ -3,19 +3,17 @@
namespace DDD
{
- public static class RestaurantManagementSolvers
+ public class RestaurantManagementSolver : RestaurantSubsystemSolver
{
- public static Dictionary TypeToManagementSolver = new()
+
+ private Dictionary _typeToManagementSolver = new()
{
{ RestaurantManagementType.OpenRestaurantMenu, typeof(RestaurantManagementSolver_Menu) },
{ RestaurantManagementType.StartRestaurant, typeof(RestaurantManagementSolver_Start) },
};
- }
- public class RestaurantManagementSolver : RestaurantSubsystemSolver
- {
protected override Dictionary GetSubsystemSolverTypeMappings()
{
- return RestaurantManagementSolvers.TypeToManagementSolver;
+ return _typeToManagementSolver;
}
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals.meta
new file mode 100644
index 000000000..00588c64d
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 601164c0231c43fca9349170e1e0ccec
+timeCreated: 1756176395
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs
new file mode 100644
index 000000000..cd4b2a565
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+
+namespace DDD
+{
+ public class RestaurantMealSolver : RestaurantSubsystemSolver
+ {
+ private Dictionary _typeToMealSolver = new()
+ {
+ { RestaurantMealType.WaitForOrder, typeof(RestaurantMealSolver_WaitForOrder) },
+ { RestaurantMealType.WaitForServe, typeof(RestaurantMealSolver_WaitForServe) }
+ };
+ protected override Dictionary GetSubsystemSolverTypeMappings()
+ {
+ return _typeToMealSolver;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs.meta
new file mode 100644
index 000000000..f0fbded31
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: 391c551614be4f21a2e700f44569e92a
+timeCreated: 1756176491
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs
new file mode 100644
index 000000000..59236cb16
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+
+namespace DDD
+{
+ public class RestaurantMealSolver_WaitForOrder : MonoBehaviour, IInteractionSubsystemSolver
+ {
+ public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ return true;
+ }
+
+ public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
+ ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs.meta
new file mode 100644
index 000000000..b77d17fa1
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: cff2611181194e4a92576bdbcead4fad
+timeCreated: 1756181225
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs
new file mode 100644
index 000000000..86851c9f0
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs
@@ -0,0 +1,18 @@
+using UnityEngine;
+
+namespace DDD
+{
+ public class RestaurantMealSolver_WaitForServe : MonoBehaviour, IInteractionSubsystemSolver
+ {
+ public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ return true;
+ }
+
+ public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
+ ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs.meta
new file mode 100644
index 000000000..4174d79c1
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: e9292616267b4299a3d2e0d29c84f69b
+timeCreated: 1756181667
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs
similarity index 69%
rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs
rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs
index 7f4019448..71d8149fa 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs
@@ -5,22 +5,20 @@
namespace DDD
{
- public static class RestaurantOrderSolvers
+ public class RestaurantOrderSolver : RestaurantSubsystemSolver
{
- public static Dictionary TypeToOrderSolver = new()
+ private Dictionary _typeToOrderSolver = new()
{
{ RestaurantOrderType.Wait, typeof(RestaurantOrderSolver_Wait) },
{ RestaurantOrderType.Reserved, typeof(RestaurantOrderSolver_Reserved) },
{ RestaurantOrderType.Order, typeof(RestaurantOrderSolver_Order) },
- { RestaurantOrderType.Serve, typeof(RestaurantOrderSolver_Serve) }
+ { RestaurantOrderType.Serve, typeof(RestaurantOrderSolver_Serve) },
+ { RestaurantOrderType.Busy, typeof(RestaurantOrderSolver_Busy) },
+ { RestaurantOrderType.Dirty, typeof(RestaurantOrderSolver_Dirty) }
};
- }
-
- public class RestaurantOrderSolver : RestaurantSubsystemSolver
- {
protected override Dictionary GetSubsystemSolverTypeMappings()
{
- return RestaurantOrderSolvers.TypeToOrderSolver;
+ return _typeToOrderSolver;
}
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta
similarity index 100%
rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs.meta
rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs
new file mode 100644
index 000000000..a53ef8b77
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs
@@ -0,0 +1,21 @@
+using UnityEngine;
+
+namespace DDD.RestaurantOrders
+{
+ public class RestaurantOrderSolver_Busy : MonoBehaviour, IInteractionSubsystemSolver
+ {
+ public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable,
+ ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ // TODO : DO SOMETHING!!!
+ return true;
+ }
+
+ public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
+ ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ // TODO : DO SOMETHING!!!
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta
new file mode 100644
index 000000000..c51efc3cf
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: c185b3957ffe47088703be10e709ff66
+timeCreated: 1755761370
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs
new file mode 100644
index 000000000..8819bfe60
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs
@@ -0,0 +1,19 @@
+using UnityEngine;
+
+namespace DDD.RestaurantOrders
+{
+ public class RestaurantOrderSolver_Dirty : MonoBehaviour, IInteractionSubsystemSolver
+ {
+ public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ // TODO : DO SOMETHING!!!
+ return true;
+ }
+
+ public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
+ ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
+ {
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta
new file mode 100644
index 000000000..07cdfe4f7
--- /dev/null
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta
@@ -0,0 +1,3 @@
+fileFormatVersion: 2
+guid: b97bc6ce36df4e05a4d329f11daef43f
+timeCreated: 1755761294
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs
index 7965b8303..5f6fa57dd 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs
@@ -12,7 +12,8 @@ public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable in
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
{
- return true;
+ // Interactable's CurrentInteractor is me? => Can execute
+ return false;
}
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs
index 2596959bd..c1f980df2 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs
@@ -1,3 +1,4 @@
+using Opsive.BehaviorDesigner.Runtime.Tasks;
using UnityEngine;
namespace DDD.RestaurantOrders
@@ -6,7 +7,12 @@ public class RestaurantOrderSolver_Wait : MonoBehaviour, IInteractionSubsystemSo
{
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject causerPayload = null, ScriptableObject targetPayloadSo = null)
{
+ if (CanExecuteInteractionSubsystem(interactor, interactable, causerPayload, targetPayloadSo) == false) return false;
// TODO : DO SOMETHING!!!
+ /* TODO
+ * OnInteracted์์ ์ํ๋ฅผ ๋ฐ๊พธ๋ ๋์ , ์ฌ๊ธฐ์ ์ง์ ๋ฐ๊ฟ์ฃผ๊ณ , ํ์ฌ ๋์๊ฒ ์ ์ ๋์ด ์๋ค๋ ์ฌ์ค์ ์๋ ค์ฃผ๊ธฐ? ๊ทธ๋ฆฌ๊ณ CanInteractTo์์ ์ด๊ฒ ์ผ์นํด์ผ๋ง ์ฐธ ๋ฐํํ๊ฒ?
+ * ํ์ํ๋ค๋ฉด IInteractable ์ธํฐํ์ด์ค์ CurrentInteractor๋ฅผ ๋ฑ๋กํ๋ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด์ผ ํ ์๋?
+ */
return true;
}
diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs
index af3ce4124..34e190d8b 100644
--- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs
+++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs
@@ -10,7 +10,7 @@ public abstract class RestaurantSubsystemSolver : MonoBehaviour, IInteraction
protected abstract Dictionary GetSubsystemSolverTypeMappings();
- private void Start()
+ private void Awake()
{
foreach (var subsystemSolverType in GetSubsystemSolverTypeMappings())
{
diff --git a/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantCustomerState.cs b/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantCustomerState.cs
index 0c326a38b..b18f09bbe 100644
--- a/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantCustomerState.cs
+++ b/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantCustomerState.cs
@@ -1,9 +1,106 @@
+using System.Collections.Generic;
+using System.Threading.Tasks;
+using Opsive.BehaviorDesigner.Runtime;
using Sirenix.OdinInspector;
using UnityEngine;
+using UnityEngine.AddressableAssets;
+using UnityEngine.ResourceManagement.AsyncOperations;
namespace DDD
{
public class RestaurantCustomerState : ScriptableObject
{
+ private Dictionary _loadedSubtrees = new Dictionary();
+ private Dictionary> _subtreeHandles = new Dictionary>();
+
+ public async Task LoadCustomerBehaviorData()
+ {
+ var customerData = RestaurantData.Instance?.CustomerData;
+ if (customerData?.CustomerBehaviorData == null)
+ {
+ Debug.LogError("[RestaurantCustomerState] RestaurantCustomerData or CustomerBehaviorData is null");
+ return;
+ }
+
+ var loadTasks = new List();
+ foreach (var behaviorPair in customerData.CustomerBehaviorData)
+ {
+ var customerType = behaviorPair.Key;
+ var subtreeReference = behaviorPair.Value;
+
+ if (_loadedSubtrees.ContainsKey(customerType))
+ continue; // Already loaded
+
+ loadTasks.Add(LoadSubtreeAsync(customerType, subtreeReference));
+ }
+
+ await Task.WhenAll(loadTasks);
+ Debug.Log($"[RestaurantCustomerState] Loaded {_loadedSubtrees.Count} customer behavior subtrees");
+ }
+
+ private async Task LoadSubtreeAsync(CustomerType customerType, AssetReference subtreeReference)
+ {
+ var handle = Addressables.LoadAssetAsync(subtreeReference);
+ _subtreeHandles[customerType] = handle;
+
+ await handle.Task;
+
+ if (handle.Result != null)
+ {
+ _loadedSubtrees[customerType] = handle.Result;
+ Debug.Log($"[RestaurantCustomerState] Loaded subtree for {customerType}");
+ }
+ else
+ {
+ Debug.LogError($"[RestaurantCustomerState] Failed to load subtree for {customerType}");
+ }
+ }
+
+ public void UnloadCustomerBehaviorData()
+ {
+ foreach (var handle in _subtreeHandles.Values)
+ {
+ if (handle.IsValid())
+ {
+ Addressables.Release(handle);
+ }
+ }
+
+ _loadedSubtrees.Clear();
+ _subtreeHandles.Clear();
+ Debug.Log("[RestaurantCustomerState] Unloaded all customer behavior subtrees");
+ }
+
+ public Subtree GetLoadedSubtree(CustomerType customerType)
+ {
+ _loadedSubtrees.TryGetValue(customerType, out var subtree);
+ return subtree;
+ }
+
+ public async Task GetOrLoadSubtree(CustomerType customerType)
+ {
+ if (IsSubtreeLoaded(customerType))
+ {
+ return GetLoadedSubtree(customerType);
+ }
+ else
+ {
+ var customerData = RestaurantData.Instance?.CustomerData;
+ if (customerData?.CustomerBehaviorData == null ||
+ !customerData.CustomerBehaviorData.TryGetValue(customerType, out var subtreeReference))
+ {
+ Debug.LogError($"[RestaurantCustomerState] No behavior data found for {customerType}");
+ return null;
+ }
+
+ await LoadSubtreeAsync(customerType, subtreeReference);
+ return GetLoadedSubtree(customerType);
+ }
+ }
+
+ public bool IsSubtreeLoaded(CustomerType customerType)
+ {
+ return _loadedSubtrees.ContainsKey(customerType);
+ }
}
}
\ No newline at end of file
diff --git a/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantEnvironmentState.cs b/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantEnvironmentState.cs
index 75313179a..afb94720d 100644
--- a/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantEnvironmentState.cs
+++ b/Assets/_DDD/_Scripts/RestaurantState/FlowStates/RestaurantEnvironmentState.cs
@@ -21,5 +21,54 @@ public class RestaurantEnvironmentState : ScriptableObject
{
public List Props = new List();
public List Objects = new List();
+
+ // ์ธํฐ๋์
๊ฐ๋ฅํ ๊ฐ์ฒด(IInteractable)๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ฆฌ์คํธ (๋ฐํ์ ์ ์ฉ)
+ private readonly List _registeredInteractables = new List();
+
+ ///
+ /// ์ธํฐ๋์
๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ๋ฑ๋กํฉ๋๋ค
+ ///
+ public void RegisterInteractable(IInteractable interactable)
+ {
+ if (interactable == null) return;
+ if (_registeredInteractables.Contains(interactable)) return;
+ _registeredInteractables.Add(interactable);
+ }
+
+ ///
+ /// ์ธํฐ๋์
๊ฐ๋ฅํ ๊ฐ์ฒด๋ฅผ ํด์ ํฉ๋๋ค
+ ///
+ public void UnregisterInteractable(IInteractable interactable)
+ {
+ if (interactable == null) return;
+ _registeredInteractables.Remove(interactable);
+ }
+
+ ///
+ /// ํน์ InteractionType์ ํด๋นํ๋ ์ธํฐ๋์
๊ฐ์ฒด๋ค์ ๋ฐํํฉ๋๋ค
+ ///
+ public List GetInteractablesByType(InteractionType interactionType)
+ {
+ var result = new List();
+ // null ๋๋ Destroyed ์ค๋ธ์ ํธ ์ ๋ฆฌ
+ _registeredInteractables.RemoveAll(item => item == null || (item as UnityEngine.Object) == null);
+ foreach (var interactable in _registeredInteractables)
+ {
+ if (interactable.GetInteractionType() == interactionType)
+ {
+ result.Add(interactable);
+ }
+ }
+ return result;
+ }
+
+ ///
+ /// ๋ชจ๋ ๋ฑ๋ก๋ ์ธํฐ๋์
๊ฐ์ฒด๋ค์ ๋ฐํํฉ๋๋ค
+ ///
+ public List GetAllInteractables()
+ {
+ _registeredInteractables.RemoveAll(item => item == null || (item as UnityEngine.Object) == null);
+ return new List(_registeredInteractables);
+ }
}
}
\ No newline at end of file
diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset
index ed8485fa0..b1d747c7b 100644
--- a/ProjectSettings/EditorBuildSettings.asset
+++ b/ProjectSettings/EditorBuildSettings.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:f86abe14bf9fc4c7c93dfa96efd110ef0f56c3fb96a952c57e06a723fc87c352
+oid sha256:5d69f9ac4352f59df16943fd905dd7351328f295b2a8e4f74e8346f7bd4dc1bc
size 1075
diff --git a/ProjectSettings/TagManager.asset b/ProjectSettings/TagManager.asset
index 04c98086f..63e0e52b4 100644
--- a/ProjectSettings/TagManager.asset
+++ b/ProjectSettings/TagManager.asset
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:79fb0bf613721f4ea379a4d4434fa621933ea25eeb09ee4cb3878ca462a07077
-size 623
+oid sha256:411a0243cb87e0bcd8781e3198ba1f82af7279c14555e3b2db93884f5b7ea700
+size 636