Merge branch 'feature/interaction_subsystem' of http://gitea.capers.co.kr:3000/iwnc2020/ProjectDDD into develop

# Conflicts:
#	Assets/_DDD/Restaurant/Environments/Props/Prop_CustomerTable.prefab
This commit is contained in:
NTG 2025-08-26 14:04:48 +09:00
commit 79ba4c2b36
54 changed files with 961 additions and 157 deletions

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 8b8b2fde5b3b345e292e0b6b951a4abd
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,156 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1 &3857692527302447930
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1664322405549350652}
- component: {fileID: 8522104897182006738}
m_Layer: 0
m_Name: InteractionPoint
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1664322405549350652
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3857692527302447930}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: -0.4, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 3697702677815423220}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!212 &8522104897182006738
SpriteRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3857692527302447930}
m_Enabled: 1
m_CastShadows: 0
m_ReceiveShadows: 0
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 0
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 9dfc825aed78fcd4ba02077103263b40, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 0
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_Sprite: {fileID: 21300000, guid: c607300554a0c44469620484fccbf239, type: 3}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 5.12, y: 5.12}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 1
m_MaskInteraction: 0
m_SpriteSortPoint: 0
--- !u!1 &4103096974375017811
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 3697702677815423220}
- component: {fileID: 3591347921553422000}
- component: {fileID: 4456475204957017828}
m_Layer: 7
m_Name: RestaurantOrder
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &3697702677815423220
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4103096974375017811}
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:
- {fileID: 1664322405549350652}
m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3591347921553422000
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4103096974375017811}
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:
- {fileID: 1664322405549350652}
--- !u!114 &4456475204957017828
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4103096974375017811}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: c0b1e0992510498b8d33d5b6094b8f4b, type: 3}
m_Name:
m_EditorClassIdentifier:
orderType: 0

View File

@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 2bbe3f26765344e6097aa9fd0f020fbf
PrefabImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,238 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &2565741073186224478
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8881739536043914635}
m_Modifications:
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: 0.25
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.y
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 180
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4103096974375017811, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Name
value: RestaurantOrder_001
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
--- !u!4 &1210262234305268138 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
m_PrefabInstance: {fileID: 2565741073186224478}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4510296826299878002
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 8881739536043914635}
m_Modifications:
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.x
value: -0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.y
value: 0.25
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalPosition.z
value: 0.2
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 4103096974375017811, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
propertyPath: m_Name
value: RestaurantOrder
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
--- !u!4 &992810551159552646 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 3697702677815423220, guid: 2bbe3f26765344e6097aa9fd0f020fbf, type: 3}
m_PrefabInstance: {fileID: 4510296826299878002}
m_PrefabAsset: {fileID: 0}
--- !u!1001 &4777358697124966162
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.x
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.y
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.z
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Name
value: Prop_CustomerTable
objectReference: {fileID: 0}
- target: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7856941568993672895, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8282162905857597943, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8467019391491472137, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 56d0a02ae31152e45ba2da46f7694378, type: 2}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Size.x
value: 0.93
objectReference: {fileID: 0}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Size.z
value: 0.31
objectReference: {fileID: 0}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Center.z
value: 0.14
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects:
- targetCorrespondingSourceObject: {fileID: 4111453722694982297, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: 992810551159552646}
- targetCorrespondingSourceObject: {fileID: 4111453722694982297, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: 1210262234305268138}
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
--- !u!4 &8881739536043914635 stripped
Transform:
m_CorrespondingSourceObject: {fileID: 4111453722694982297, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
m_PrefabInstance: {fileID: 4777358697124966162}
m_PrefabAsset: {fileID: 0}

View File

@ -1,107 +0,0 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &4777358697124966162
PrefabInstance:
m_ObjectHideFlags: 0
serializedVersion: 2
m_Modification:
serializedVersion: 3
m_TransformParent: {fileID: 0}
m_Modifications:
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.x
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.y
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalScale.z
value: 2
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalPosition.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.w
value: 1
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalRotation.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.x
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.y
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_LocalEulerAnglesHint.z
value: 0
objectReference: {fileID: 0}
- target: {fileID: 2204914584875671904, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_ConstrainProportionsScale
value: 1
objectReference: {fileID: 0}
- target: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Name
value: Prop_CustomerTable
objectReference: {fileID: 0}
- target: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 7856941568993672895, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8282162905857597943, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_StaticEditorFlags
value: 0
objectReference: {fileID: 0}
- target: {fileID: 8467019391491472137, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: 'm_Materials.Array.data[0]'
value:
objectReference: {fileID: 2100000, guid: 56d0a02ae31152e45ba2da46f7694378, type: 2}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Size.x
value: 0.93
objectReference: {fileID: 0}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Size.z
value: 0.31
objectReference: {fileID: 0}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_Center.z
value: 0.14
objectReference: {fileID: 0}
- target: {fileID: 8516969404588314361, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
propertyPath: m_IsTrigger
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []
m_AddedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}

View File

@ -113,6 +113,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: 6899480242032072806}
- targetCorrespondingSourceObject: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: -4132148316966952702}
m_SourcePrefab: {fileID: 100100000, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
--- !u!1 &9211739394093953175 stripped
GameObject:
@ -131,10 +134,14 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 201f9e6d7ca7404baa9945950292a392, type: 3}
m_Name:
m_EditorClassIdentifier:
_interactionType: 2
_holdTime: 0
_interactionMessageKey: Test
_interactionType: 1
_executionParameters:
_holdTime: 1
_displayParameters:
_messageKey:
_interactionAvailableFlows: 1
_aiInteractionPoints: []
autoInitialize: 1
--- !u!114 &3538352761187622062
MonoBehaviour:
m_ObjectHideFlags: 0
@ -375,3 +382,16 @@ MonoBehaviour:
_outlineSharpness: 8
_currentOutlineType: 0
_currentOpacityMultiplier: 1
--- !u!114 &-4132148316966952702
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 9211739394093953175}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1235f6bde9304d8f85079f2777bd4b3c, type: 3}
m_Name:
m_EditorClassIdentifier:
_managementType: 1

View File

@ -101,6 +101,9 @@ PrefabInstance:
- targetCorrespondingSourceObject: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: 5410819217098966190}
- targetCorrespondingSourceObject: {fileID: 4438924429928472453, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
insertIndex: -1
addedObject: {fileID: -1096657863250535257}
m_SourcePrefab: {fileID: 100100000, guid: 1d634c3376e4a4684bc984ced9134847, type: 3}
--- !u!1 &580268897300907643 stripped
GameObject:
@ -120,8 +123,10 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier:
_interactionType: 1
_holdTime: 0
_interactionMessageKey: Test
_executionParameters:
_holdTime: 1
_displayParameters:
_messageKey:
_interactionAvailableFlows: 1
_aiInteractionPoints: []
--- !u!114 &4545680930728379745
@ -364,3 +369,15 @@ MonoBehaviour:
_outlineSharpness: 8
_currentOutlineType: 0
_currentOpacityMultiplier: 1
--- !u!114 &-1096657863250535257
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 580268897300907643}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 1235f6bde9304d8f85079f2777bd4b3c, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@ -423,7 +423,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 81e01dd8c1cc3404d805400eba1bb4ae, type: 3}
m_Name:
m_EditorClassIdentifier:
_interactionType: 4294967295
_availableInteractions: 1
_nearColliders:
- {fileID: 0}
- {fileID: 0}

View File

@ -8,10 +8,33 @@ namespace DDD
public enum InteractionType : uint
{
None = 0u,
RestaurantManagementUi = 1u << 0,
OpenRestaurant = 1u << 1,
RestaurantManagement = 1u << 0,
RestaurantOrder = 1u << 1,
RestaurantMeal = 1u << 2,
All = 0xFFFFFFFFu
}
[System.Serializable]
public struct InteractionExecutionParameters
{
[SerializeField] private float _holdTime;
public float HoldTime => _holdTime;
public InteractionExecutionParameters(float holdTime = 0f)
{
_holdTime = holdTime;
}
}
[System.Serializable]
public struct InteractionDisplayParameters
{
[SerializeField] private string _messageKey;
public string MessageKey => _messageKey;
public InteractionDisplayParameters(string messageKey = "")
{
_messageKey = messageKey;
}
}
public interface IInteractable
{
@ -21,10 +44,8 @@ public interface IInteractable
InteractionType GetInteractionType();
GameObject GetInteractableGameObject();
void InitializeInteraction(InteractionType interactionType);
// TODO : Struct InteractionExecutionParameters 등으로 정리
float GetRequiredHoldTime();
// TODO : Struct InteractionDisplayParameters 등으로 정리
string GetInteractionMessageKey();
InteractionExecutionParameters GetExecutionParameters();
InteractionDisplayParameters GetDisplayParameters();
Vector3[] GetInteractionPoints();
}

View File

@ -0,0 +1,26 @@
using System;
using UnityEngine;
namespace DDD
{
public interface IInteractionSubsystemObject
{
void InitializeSubsystem();
bool CanInteract();
bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null);
}
public interface IInteractionSubsystemObject<T> : IInteractionSubsystemObject where T : Enum
{
T GetInteractionSubsystemType();
}
public interface IInteractionSubsystemSolver
{
}
public interface IInteractionSubsystemSolver<T> : IInteractionSubsystemSolver where T : Enum
{
bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null);
bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2e8dca10c7c74466bd1df632b7d111c4
timeCreated: 1755665098

View File

@ -23,7 +23,7 @@ protected virtual void Start()
var flag = typeToSolver.Key;
if (flag == InteractionType.None) continue;
if ((_interactionComponent.InteractionType & flag) == 0) continue;
if ((_interactionComponent.AvailableInteractions & flag) == 0) continue;
if (!TryGetComponent(typeToSolver.Value, out _))
{

View File

@ -6,10 +6,10 @@ namespace DDD
{
public class RestaurantCharacterInteraction : MonoBehaviour, IInteractor, IEventHandler<RestaurantInteractionEvent>
{
[EnumToggleButtons, SerializeField] protected InteractionType _interactionType;
[EnumToggleButtons, SerializeField] protected InteractionType _availableInteractions;
[SerializeField, ReadOnly] protected Collider[] _nearColliders = new Collider[10];
public InteractionType InteractionType => _interactionType;
public InteractionType AvailableInteractions => _availableInteractions;
protected IInteractable _nearestInteractable;
protected IInteractable _previousInteractable;
@ -44,7 +44,7 @@ protected virtual void Update()
_interactHeldTime += Time.deltaTime;
float requiredHoldTime = _interactingTarget.GetRequiredHoldTime();
float requiredHoldTime = _interactingTarget.GetExecutionParameters().HoldTime;
float ratio = Mathf.Clamp01(_interactHeldTime / requiredHoldTime);
if (_interactHeldTime >= requiredHoldTime)

View File

@ -49,7 +49,7 @@ private void OnInteractPerformed(InputAction.CallbackContext context)
{
if (_nearestInteractable == null || CanInteractTo(_nearestInteractable) == false) return;
float requiredHoldTime = _nearestInteractable.GetRequiredHoldTime();
float requiredHoldTime = _nearestInteractable.GetExecutionParameters().HoldTime;
if (requiredHoldTime <= 0f)
{
@ -98,7 +98,7 @@ private void BroadcastShowUi(IInteractable interactable, bool canInteract, float
{
var evt = GameEvents.ShowInteractionUiEvent;
evt.CanInteract = canInteract;
evt.TextKey = interactable.GetInteractionMessageKey();
evt.TextKey = interactable.GetDisplayParameters().MessageKey;
evt.HoldProgress = ratio;
EventBus.Broadcast(evt);
}

View File

@ -0,0 +1,10 @@
using System;
using UnityEngine;
namespace DDD
{
public interface IInteractionSubsystemOwner
{
public bool TryGetSubsystemObject<T>(out IInteractionSubsystemObject<T> subsystemObject) where T : Enum;
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 254d64ce6ee84b20a154931fcf04958f
timeCreated: 1755681729

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 30a19025059e4338b29bf140644dd5aa
timeCreated: 1755655803

View File

@ -0,0 +1,36 @@
using System;
using UnityEngine;
namespace DDD
{
[Flags]
public enum RestaurantManagementType : uint
{
OpenRestaurantMenu = 0,
StartRestaurant = 1,
}
public class RestaurantManagementInteractionSubsystem : MonoBehaviour, IInteractionSubsystemObject<RestaurantManagementType>
{
[SerializeField] protected RestaurantManagementType _managementType = RestaurantManagementType.OpenRestaurantMenu;
public RestaurantManagementType GetInteractionSubsystemType()
{
return _managementType;
}
public void InitializeSubsystem()
{
}
public bool CanInteract()
{
return true;
}
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
{
return true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 1235f6bde9304d8f85079f2777bd4b3c
timeCreated: 1755671037

View File

@ -0,0 +1,54 @@
using System;
using UnityEngine;
namespace DDD
{
[Flags]
public enum RestaurantOrderType : uint
{
Wait = 0u,
Reserved = 1u,
Order = 1u << 1,
Serve = 1u << 2,
}
public class RestaurantOrderInteractionSubsystem : MonoBehaviour, IInteractionSubsystemObject<RestaurantOrderType>
{
[SerializeField] protected RestaurantOrderType orderType = RestaurantOrderType.Wait;
private RestaurantOrderType currentRestaurantOrderType;
private void Start()
{
currentRestaurantOrderType = orderType;
}
public bool CanInteract()
{
if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
{
return true;
}
return false;
}
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
{
if (GetInteractionSubsystemType() == RestaurantOrderType.Wait)
{
// DO WAIT CUSTOMER
}
return true;
}
public void InitializeSubsystem()
{
}
public RestaurantOrderType GetInteractionSubsystemType()
{
return currentRestaurantOrderType;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c0b1e0992510498b8d33d5b6094b8f4b
timeCreated: 1755655843

View File

@ -1,3 +1,4 @@
using System;
using Spine.Unity;
using Unity.VisualScripting;
using UnityEngine;

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 59f8f35926714893bb8d4192e527fa48
timeCreated: 1755655771

View File

@ -1,29 +1,69 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using Sirenix.OdinInspector;
namespace DDD
{
public class RestaurantInteractionComponent : MonoBehaviour, IInteractable
public static class RestaurantInteractionSubsystems
{
[SerializeField] private InteractionType _interactionType = InteractionType.None;
[SerializeField] private float _holdTime = 1f;
[SerializeField] private string _interactionMessageKey = "";
public static Dictionary<InteractionType, Type> TypeToSubsystem = new()
{
{InteractionType.RestaurantOrder, typeof(RestaurantOrderInteractionSubsystem)},
{InteractionType.RestaurantManagement, typeof(RestaurantManagementInteractionSubsystem)}
};
}
public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner
{
// Single interaction type
[ValueDropdown("GetAllInteractionTypes")]
[SerializeField] protected InteractionType _interactionType = InteractionType.None;
[SerializeField] protected InteractionExecutionParameters _executionParameters = new InteractionExecutionParameters(1f);
[SerializeField] protected InteractionDisplayParameters _displayParameters = new InteractionDisplayParameters("");
[SerializeField] protected GameFlowState _interactionAvailableFlows;
[SerializeField] private Transform[] _aiInteractionPoints;
public bool CanInteract()
[SerializeField] private bool autoInitialize = true;
private Dictionary<InteractionType, IInteractionSubsystemObject> _subsystems = new();
private void Start()
{
return !IsInteractionHidden();
if (autoInitialize)
{
InitializeInteraction(_interactionType);
}
}
public bool IsInteractionHidden()
private static IEnumerable GetAllInteractionTypes()
{
return System.Enum.GetValues(typeof(InteractionType))
.Cast<InteractionType>()
.Where(x => x != InteractionType.All); // All은 제외
}
public virtual bool CanInteract()
{
bool isInteractionVisible = !IsInteractionHidden();
bool hasValidSubsystem = true;
if (HasSubsystem(_interactionType))
{
hasValidSubsystem = GetSubsystem(_interactionType).CanInteract();
}
return isInteractionVisible && hasValidSubsystem;
}
public virtual bool IsInteractionHidden()
{
var currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState;
var flowDisabled = (currentGameFlowState & _interactionAvailableFlows) == 0;
return flowDisabled;
}
public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
public virtual bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null)
{
if (CanInteract() == false)
{
@ -31,10 +71,14 @@ public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = nu
}
bool interactionResult = RestaurantInteractionEvents.RestaurantInteraction.RequestInteraction(interactor.GetInteractorGameObject(),
GetInteractableGameObject(), GetInteractionType(), payloadSo, true);
if (HasSubsystem(_interactionType))
{
interactionResult &= GetSubsystem(_interactionType).OnInteracted(interactor, payloadSo);
}
return interactionResult;
}
public InteractionType GetInteractionType()
public virtual InteractionType GetInteractionType()
{
return _interactionType;
}
@ -44,26 +88,64 @@ public GameObject GetInteractableGameObject()
return gameObject;
}
public void InitializeInteraction(InteractionType interactionType)
public virtual void InitializeInteraction(InteractionType interactionType)
{
_interactionType = interactionType;
InitializeSubsystems();
}
private void InitializeSubsystems()
{
// Initialize Interaction Subsystems
bool hasSubsystemType = RestaurantInteractionSubsystems.TypeToSubsystem.TryGetValue(_interactionType, out var subsystemType);
if (!hasSubsystemType) return;
var subsystem = gameObject.GetComponent(subsystemType) as IInteractionSubsystemObject;
if (subsystem == null)
{
subsystem = gameObject.AddComponent(subsystemType) as IInteractionSubsystemObject;
}
_subsystems.Add(_interactionType, subsystem);
subsystem?.InitializeSubsystem();
}
private bool HasSubsystem(InteractionType interactionType)
{
return _subsystems.ContainsKey(interactionType);
}
private IInteractionSubsystemObject GetSubsystem(InteractionType interactionType)
{
return _subsystems.GetValueOrDefault(interactionType) as IInteractionSubsystemObject;
}
// 새로운 스트럭트 기반 메서드들
public virtual InteractionExecutionParameters GetExecutionParameters()
{
return _executionParameters;
}
public virtual InteractionDisplayParameters GetDisplayParameters()
{
return _displayParameters;
}
// 하위 호환성을 위한 기존 메서드들
public float GetRequiredHoldTime()
{
return _holdTime;
return _executionParameters.HoldTime;
}
public string GetInteractionMessageKey()
{
return _interactionMessageKey;
return _displayParameters.MessageKey;
}
public Vector3[] GetInteractionPoints()
{
if (_aiInteractionPoints == null || _aiInteractionPoints.Length == 0)
{
// AI 상호작용 포인트가 설정되지 않은 경우 오브젝트의 위치를 기본값으로 반환
return new Vector3[] { transform.position };
}
@ -81,5 +163,20 @@ public Vector3[] GetInteractionPoints()
}
return positions;
}
public bool TryGetSubsystemObject<T>(out IInteractionSubsystemObject<T> subsystemObject) where T : Enum
{
foreach (var interactionSubsystemObject in _subsystems.Values)
{
if (interactionSubsystemObject is IInteractionSubsystemObject<T> subsystem)
{
subsystemObject = subsystem;
return true;
}
}
subsystemObject = null;
return false;
}
}
}

View File

@ -13,8 +13,8 @@ public static class RestaurantInteractionEventSolvers
{
public static Dictionary<InteractionType, Type> TypeToSolver = new()
{
{InteractionType.RestaurantManagementUi, typeof(RestaurantManagementUiEventSolver)},
{InteractionType.OpenRestaurant, typeof(RestaurantOpenEventSolver)}
{InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)},
{InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)}
};
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ad4643acb4b34f1ab27e79503ccff0dd
timeCreated: 1755677592

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using DDD.RestaurantOrders;
using UnityEngine;
namespace DDD
{
public static class RestaurantManagementSolvers
{
public static Dictionary<RestaurantManagementType, Type> TypeToManagementSolver = new()
{
{ RestaurantManagementType.OpenRestaurantMenu, typeof(RestaurantManagementSolver_Menu) },
{ RestaurantManagementType.StartRestaurant, typeof(RestaurantManagementSolver_Start) }
};
}
public class RestaurantManagementSolver : RestaurantSubsystemSolver<RestaurantManagementType>
{
protected override Dictionary<RestaurantManagementType, Type> GetSubsystemSolverTypeMappings()
{
return RestaurantManagementSolvers.TypeToManagementSolver;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: c457857b6ba0432db546ef0d8970548d
timeCreated: 1755677639

View File

@ -2,11 +2,11 @@
namespace DDD
{
public class RestaurantManagementUiEventSolver : MonoBehaviour, IInteractionSolver
public class RestaurantManagementSolver_Menu : MonoBehaviour, IInteractionSubsystemSolver<RestaurantManagementType>
{
public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
if (CanExecuteInteraction() == false) return false;
if (CanExecuteInteractionSubsystem(interactor, interactable, payloadSo) == false) return false;
var evt = GameEvents.OpenPopupUiEvent;
evt.UiType = typeof(RestaurantManagementUi);
@ -14,7 +14,7 @@ public bool ExecuteInteraction(IInteractor interactor, IInteractable interactabl
return true;
}
public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null,
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
GameFlowState currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState;

View File

@ -3,22 +3,23 @@
namespace DDD
{
public class RestaurantOpenEventSolver : MonoBehaviour, IInteractionSolver
public class RestaurantManagementSolver_Start : MonoBehaviour, IInteractionSubsystemSolver<RestaurantManagementType>
{
public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject interactionPayloadSo = null)
{
if (CanExecuteInteraction() == false) return false;
_ = GameFlowManager.Instance.ChangeFlow(GameFlowState.RunRestaurant);
return true;
}
private RestaurantManagementState GetManagementState()
{
return RestaurantState.Instance.ManagementState;
}
public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payloadSo = null)
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
if (CanExecuteInteractionSubsystem(interactor, interactable, payloadSo) == false) return false;
_ = GameFlowManager.Instance.ChangeFlow(GameFlowState.RunRestaurant);
return true;
}
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
GameFlowState currentGameFlowState = GameFlowManager.Instance.GameFlowDataSo.CurrentGameState;

View File

@ -0,0 +1,26 @@
using System;
using System.Collections.Generic;
using DDD.RestaurantOrders;
using UnityEngine;
namespace DDD
{
public static class RestaurantOrderSolvers
{
public static Dictionary<RestaurantOrderType, Type> TypeToOrderSolver = new()
{
{ RestaurantOrderType.Wait, typeof(RestaurantOrderSolver_Wait) },
{ RestaurantOrderType.Reserved, typeof(RestaurantOrderSolver_Reserved) },
{ RestaurantOrderType.Order, typeof(RestaurantOrderSolver_Order) },
{ RestaurantOrderType.Serve, typeof(RestaurantOrderSolver_Serve) }
};
}
public class RestaurantOrderSolver : RestaurantSubsystemSolver<RestaurantOrderType>
{
protected override Dictionary<RestaurantOrderType, Type> GetSubsystemSolverTypeMappings()
{
return RestaurantOrderSolvers.TypeToOrderSolver;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: b832b16fa5964817afa836bc86f25f6b
timeCreated: 1755664610

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 0a7eea23af674c2aa6ffc20bd5801efb
timeCreated: 1755672003

View File

@ -0,0 +1,19 @@
using UnityEngine;
namespace DDD.RestaurantOrders
{
public class RestaurantOrderSolver_Order : MonoBehaviour, IInteractionSubsystemSolver<RestaurantOrderType>
{
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
// TODO : DO SOMETHING!!!
return true;
}
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
return true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3afc1759b02e4230967b3b72fe354ea3
timeCreated: 1755672492

View File

@ -0,0 +1,19 @@
using UnityEngine;
namespace DDD.RestaurantOrders
{
public class RestaurantOrderSolver_Reserved : MonoBehaviour, IInteractionSubsystemSolver<RestaurantOrderType>
{
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
// TODO : DO SOMETHING!!!
return true;
}
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
return true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f62abf1706184529880b9353b63a2adc
timeCreated: 1755682089

View File

@ -0,0 +1,19 @@
using UnityEngine;
namespace DDD.RestaurantOrders
{
public class RestaurantOrderSolver_Serve : MonoBehaviour, IInteractionSubsystemSolver<RestaurantOrderType>
{
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
// TODO : DO SOMETHING!!!
return true;
}
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
return true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 4df15c40347044648623d5932bb0724e
timeCreated: 1755672501

View File

@ -0,0 +1,19 @@
using UnityEngine;
namespace DDD.RestaurantOrders
{
public class RestaurantOrderSolver_Wait : MonoBehaviour, IInteractionSubsystemSolver<RestaurantOrderType>
{
public bool ExecuteInteractionSubsystem(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
// TODO : DO SOMETHING!!!
return true;
}
public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
return true;
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: cc81a22ff98a4b42b45ad27219ec05fa
timeCreated: 1755672371

View File

@ -0,0 +1,49 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace DDD
{
public abstract class RestaurantSubsystemSolver<T> : MonoBehaviour, IInteractionSolver where T : Enum
{
private Dictionary<T, IInteractionSubsystemSolver<T>> _solvers = new();
protected abstract Dictionary<T, Type> GetSubsystemSolverTypeMappings();
private void Start()
{
foreach (var subsystemSolverType in GetSubsystemSolverTypeMappings())
{
var solver = (IInteractionSubsystemSolver<T>)gameObject.AddComponent(subsystemSolverType.Value);
_solvers.Add(subsystemSolverType.Key, solver);
}
}
public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payloadSo = null)
{
return TryGetSolver(interactable, out var solver) &&
solver.ExecuteInteractionSubsystem(interactor, interactable, payloadSo);
}
public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null,
ScriptableObject payloadSo = null)
{
return TryGetSolver(interactable, out var solver) &&
solver.CanExecuteInteractionSubsystem(interactor, interactable, payloadSo);
}
// Solver를 가져오는 공통 로직
private bool TryGetSolver(IInteractable interactable, out IInteractionSubsystemSolver<T> solver)
{
solver = null;
var owner = interactable as IInteractionSubsystemOwner;
IInteractionSubsystemObject<T> subsystem = null;
bool isExist = owner != null && owner.TryGetSubsystemObject<T>(out subsystem);
if (!isExist || subsystem == null) return false;
var type = subsystem.GetInteractionSubsystemType();
return _solvers.TryGetValue(type, out solver);
}
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 716224c78a914321b7b7e43a93860465
timeCreated: 1755677990

BIN
ProjectSettings/EditorBuildSettings.asset (Stored with Git LFS)

Binary file not shown.