From 1663ff055c717c3caad10b51bab1319e664c6150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=82=B0?= Date: Tue, 26 Aug 2025 17:37:17 +0900 Subject: [PATCH] =?UTF-8?q?=EB=A0=88=EC=8A=A4=ED=86=A0=EB=9E=91=20?= =?UTF-8?q?=EC=8B=9D=EC=82=AC=20=EC=9D=B8=ED=84=B0=EB=9E=99=EC=85=98=20?= =?UTF-8?q?=EC=84=9C=EB=B8=8C=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EB=B0=8F=20?= =?UTF-8?q?=EC=86=94=EB=B2=84=20=EC=B4=88=EA=B8=B0=20=EA=B5=AC=ED=98=84=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AI/Customer/Subtree/CustomerDefault.asset | 2 +- .../AI/Customer/Subtree/OrderSubtree.asset | 4 +- .../_Addressables/Prefabs/CustomerNpc.prefab | 12 +++ .../Prefabs/RestaurantPlayer.prefab | 2 +- .../_Addressables/Scenes/Restaurant.unity | 3 +- .../DataObjects/RestaurantPlayerData.asset | 4 +- .../GameEvent/InteractionSubsystem.cs | 1 + .../AI/Common/Decorator/TimeLimiter.cs | 10 +-- .../Customer/Actions/StartRestaurantOrder.cs | 17 +++- .../Actions/WaitForPlayerInteraction.cs | 80 +++++++++++++++++++ .../Actions/WaitForPlayerInteraction.cs.meta | 3 + .../Conditionals/RestaurantOrderAvailable.cs | 9 ++- ...estaurantManagementInteractionSubsystem.cs | 5 ++ .../RestaurantMealInteractionSubsystem.cs | 57 +++++++++++++ ...RestaurantMealInteractionSubsystem.cs.meta | 3 + .../RestaurantOrderInteractionSubsystem.cs | 7 +- .../RestaurantInteractionComponent.cs | 3 +- .../RestaurantInteractionEvents.cs | 3 +- .../RestaurantManagementSolver.cs | 10 +-- .../Solvers/RestaurantMeals.meta | 3 + .../RestaurantMeals/RestaurantMealSolver.cs | 18 +++++ .../RestaurantMealSolver.cs.meta | 3 + .../RestaurantMealSolver_WaitForOrder.cs | 19 +++++ .../RestaurantMealSolver_WaitForOrder.cs.meta | 3 + .../RestaurantMealSolver_WaitForServe.cs | 18 +++++ .../RestaurantMealSolver_WaitForServe.cs.meta | 3 + .../RestaurantOrderSolver.cs | 10 +-- .../RestaurantOrderSolver.cs.meta | 0 ProjectSettings/TagManager.asset | 4 +- 29 files changed, 277 insertions(+), 39 deletions(-) create mode 100644 Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForOrder.cs.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantMeals/RestaurantMealSolver_WaitForServe.cs.meta rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{ => RestaurantOrders}/RestaurantOrderSolver.cs (79%) rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{ => RestaurantOrders}/RestaurantOrderSolver.cs.meta (100%) diff --git a/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset b/Assets/_DDD/_Addressables/AI/Customer/Subtree/CustomerDefault.asset index 02928fce5..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:9b4891e275e9cfe98517d3cf01540a621a49b9acf359b93e328956020511e75a +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 index 36968ecfb..8434d7b80 100644 --- a/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset +++ b/Assets/_DDD/_Addressables/AI/Customer/Subtree/OrderSubtree.asset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:22534ea39af895e3aa6e79426f9b4ef3374ec7f3a810c0cd6dbc58906755f1b1 -size 22378 +oid sha256:817cecbbecbe8a6519225bc1d0fce376c0dfb14a240c248e3fbdc8a93f585f72 +size 20385 diff --git a/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab b/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab index bb21a5b4c..0241686e7 100644 --- a/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/CustomerNpc.prefab @@ -10,6 +10,10 @@ PrefabInstance: m_Modifications: - 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} @@ -1172,6 +1176,10 @@ PrefabInstance: propertyPath: m_Name value: CustomerNpc objectReference: {fileID: 0} + - target: {fileID: 7462519206451630147, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3} + propertyPath: m_Layer + value: 0 + objectReference: {fileID: 0} - target: {fileID: 7545136660434259176, guid: ceeea618d8ee23642a0e56b3f963448c, type: 3} propertyPath: m_Constraints value: 112 @@ -1180,6 +1188,10 @@ PrefabInstance: 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 diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab index a66d69676..f842662b8 100644 --- a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab @@ -426,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} diff --git a/Assets/_DDD/_Addressables/Scenes/Restaurant.unity b/Assets/_DDD/_Addressables/Scenes/Restaurant.unity index 8a9316864..d51dbcf6a 100644 --- a/Assets/_DDD/_Addressables/Scenes/Restaurant.unity +++ b/Assets/_DDD/_Addressables/Scenes/Restaurant.unity @@ -474,7 +474,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: [] diff --git a/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset b/Assets/_DDD/_Addressables/So/RestaurantData/DataObjects/RestaurantPlayerData.asset index 85efaff85..4d63d37ff 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:c547bb4c8e960c6504b74f52fce7db1ef4e186627a316a5d33086c848c515ec2 +size 1999 diff --git a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs index 655419a6e..5467d9e77 100644 --- a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs +++ b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs @@ -12,6 +12,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/Common/Decorator/TimeLimiter.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs index 124ba41ac..ec725c587 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Common/Decorator/TimeLimiter.cs @@ -14,13 +14,13 @@ namespace DDD public class TimeLimiter : ILogicNode, IParentNode, ITaskComponentData, IDecorator, ISavableTask { [Tooltip("The index of the node.")] - [SerializeField] ushort _Index; + [SerializeField, HideInInspector] ushort _Index; [Tooltip("The parent index of the node. ushort.MaxValue indicates no parent.")] - [SerializeField] ushort _ParentIndex; + [SerializeField, HideInInspector] ushort _ParentIndex; [Tooltip("The sibling index of the node. ushort.MaxValue indicates no sibling.")] - [SerializeField] ushort _SiblingIndex; + [SerializeField, HideInInspector] ushort _SiblingIndex; [Tooltip("최대 실행 시간(초)")] [SerializeField] float _timeLimit = 30.0f; @@ -28,10 +28,6 @@ public class TimeLimiter : ILogicNode, IParentNode, ITaskComponentData, IDecorat [Tooltip("시간 초과 시 반환할 상태")] [SerializeField] private TaskStatus _timeoutStatus = TaskStatus.Failure; - [Header("Debug")] - [Tooltip("로그 출력")] - [SerializeField] private bool _enableDebug = false; - private ushort _ComponentIndex; public ushort Index diff --git a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs index 336001e00..7fa600a90 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/StartRestaurantOrder.cs @@ -12,6 +12,16 @@ public class StartRestaurantOrder : Action [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() { @@ -26,13 +36,12 @@ public override TaskStatus OnUpdate() // TODO : 아래 상호작용 수행 로직이 우리 프로젝트의 권장하는 방식이 아님. 플레이어가 오브젝트에 인터랙션하는 것과 비슷한 흐름으로 NPC가 오브젝트에 인터랙션하게 만들 것. // 상호작용 수행: 액션이 붙은 에이전트를 Interactor로 사용 - var isGetInteractor = gameObject.TryGetComponent(out var interactor); - if (!isGetInteractor || !interactor.CanInteractTo(outInteractable)) + if (!_isGetInteractor || !_interactor.CanInteractTo(outInteractable)) { return TaskStatus.Failure; } - var interacted = outInteractable.OnInteracted(interactor); + var interacted = outInteractable.OnInteracted(_interactor); if (!interacted) { return TaskStatus.Failure; @@ -41,7 +50,7 @@ public override TaskStatus OnUpdate() if (_registerOnBlackboard) { // 공용 블랙보드 우선 - var shared = gameObject.GetComponentInParent(); + var shared = gameObject.GetComponentInChildren(); if (shared != null) { shared.SetCurrentInteractionTarget(outInteractable.gameObject); 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..659047263 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Actions/WaitForPlayerInteraction.cs @@ -0,0 +1,80 @@ +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; + } + } + + 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/RestaurantOrderAvailable.cs b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs index d6f49b45d..b10254f84 100644 --- a/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs +++ b/Assets/_DDD/_Scripts/RestaurantCharacter/AI/Customer/Conditionals/RestaurantOrderAvailable.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using Opsive.BehaviorDesigner.Runtime.Tasks; using Opsive.BehaviorDesigner.Runtime.Tasks.Conditionals; using UnityEngine; @@ -32,7 +34,7 @@ public override TaskStatus OnUpdate() } - public static TaskStatus FindAvailableOrderInteractable(bool checkCanInteract, RestaurantOrderType targetOrderType, out RestaurantInteractionComponent outInteractable) + public static TaskStatus FindAvailableOrderInteractable(bool checkCanInteract, T targetOrderType, out RestaurantInteractionComponent outInteractable) where T : Enum { outInteractable = null; @@ -49,9 +51,10 @@ public static TaskStatus FindAvailableOrderInteractable(bool checkCanInteract, R // 서브시스템에서 RestaurantOrderType을 가져와 비교 outInteractable = interactable as RestaurantInteractionComponent; if (outInteractable == null) continue; - if (!outInteractable.TryGetSubsystemObject(out var subsystem)) continue; + if (!outInteractable.TryGetSubsystemObject(out var subsystem)) continue; - if (subsystem.GetInteractionSubsystemType() == targetOrderType) + if (EqualityComparer.Default.Equals(subsystem.GetInteractionSubsystemType(), targetOrderType) + ) { // CheckCanInteract이 false면 타입만 맞으면 성공 if (!checkCanInteract) diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs index 8be8f9b3f..aadded097 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs @@ -18,6 +18,11 @@ public RestaurantManagementType GetInteractionSubsystemType() return _managementType; } + public void SetInteractionSubsystemType(RestaurantManagementType inValue) + { + _managementType = inValue; + } + public void InitializeSubsystem() { diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs new file mode 100644 index 000000000..8c7924467 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantMealInteractionSubsystem.cs @@ -0,0 +1,57 @@ +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; + } + + 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 bca226197..6aad9c9e4 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs @@ -42,7 +42,7 @@ public bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = nu public void InitializeSubsystem() { - + currentRestaurantOrderType = orderType; } public RestaurantOrderType GetInteractionSubsystemType() @@ -50,6 +50,11 @@ public RestaurantOrderType GetInteractionSubsystemType() return currentRestaurantOrderType; } + public void SetInteractionSubsystemType(RestaurantOrderType inValue) + { + currentRestaurantOrderType = inValue; + } + private RestaurantOrderType GetNextState(RestaurantOrderType state) { switch (state) diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs index 92f7c8a4d..f47950b38 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)} }; } diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs index 2afa9b785..25599849e 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs @@ -14,7 +14,8 @@ public static class RestaurantInteractionEventSolvers public static Dictionary TypeToSolver = new() { {InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)}, - {InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)} + {InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)}, + {InteractionType.RestaurantMeal, typeof(RestaurantMealSolver)} }; } diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs index 0681cfb69..6f7dcde21 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs @@ -5,19 +5,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..c17717631 --- /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 payloadSo = null) + { + return true; + } + + public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, + ScriptableObject payloadSo = 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..f46d22e80 --- /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 payloadSo = null) + { + return true; + } + + public bool CanExecuteInteractionSubsystem(IInteractor interactor = null, IInteractable interactable = null, + ScriptableObject payloadSo = 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 79% rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs index e3857aa52..71d8149fa 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrders/RestaurantOrderSolver.cs @@ -5,9 +5,9 @@ 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) }, @@ -16,13 +16,9 @@ public static class RestaurantOrderSolvers { 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/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