From 56a08801847d746bcf02a656815d0eec46e20c87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=82=B0?= Date: Wed, 20 Aug 2025 18:55:30 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=9C=EB=B8=8C=20=EC=8B=9C=EC=8A=A4?= =?UTF-8?q?=ED=85=9C=20=EC=88=98=EC=A0=95,=20=EC=9D=B8=ED=84=B0=EB=A0=89?= =?UTF-8?q?=ED=8A=B8=20=EC=BB=B4=ED=8F=AC=EB=84=8C=ED=8A=B8=EC=97=90=20?= =?UTF-8?q?=EC=84=9C=EB=B8=8C=20=EC=8B=9C=EC=8A=A4=ED=85=9C=20=EA=B2=80?= =?UTF-8?q?=EC=83=89=20=EC=9D=B8=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=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 --- .../Environments/Props/Prop_Open.prefab | 26 ++++++++-- .../Prop/MenuBoard/PropMenuBoard.prefab | 22 ++++++++- .../Prefabs/RestaurantPlayer.prefab | 2 +- .../_DDD/_Scripts/GameEvent/IInteractable.cs | 7 ++- .../GameEvent/InteractionSubsystem.cs | 1 - .../IInteractionSubsystemOwner.cs | 10 ++++ .../IInteractionSubsystemOwner.cs.meta | 3 ++ .../RestaurantManagementInteraction.cs | 16 ------ ...estaurantManagementInteractionSubsystem.cs | 36 ++++++++++++++ ...antManagementInteractionSubsystem.cs.meta} | 0 .../RestaurantOrderInteractionSubsystem.cs | 4 +- .../RestaurantEnvironment.cs | 6 +++ .../RestaurantInteractionComponent.cs | 29 ++++++++++- .../RestaurantInteractionEvents.cs | 3 +- .../Solvers/RestaurantManagements.meta | 3 ++ .../RestaurantManagementSolver.cs | 23 +++++++++ .../RestaurantManagementSolver.cs.meta | 3 ++ .../RestaurantManagementSolver_Menu.cs} | 8 +-- .../RestaurantManagementSolver_Menu.cs.meta} | 0 .../RestaurantManagementSolver_Start.cs} | 21 ++++---- .../RestaurantManagementSolver_Start.cs.meta} | 0 .../Solvers/RestaurantOrderSolver.cs | 37 ++------------ .../Solvers/RestaurantSubsystemSolver.cs | 49 +++++++++++++++++++ .../Solvers/RestaurantSubsystemSolver.cs.meta | 3 ++ 24 files changed, 230 insertions(+), 82 deletions(-) create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs.meta delete mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs rename Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/{RestaurantManagementInteraction.cs.meta => RestaurantManagementInteractionSubsystem.cs.meta} (100%) create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements.meta create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{RestaurantManagementUiEventSolver.cs => RestaurantManagements/RestaurantManagementSolver_Menu.cs} (51%) rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{RestaurantManagementUiEventSolver.cs.meta => RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta} (100%) rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{RestaurantOpenEventSolver.cs => RestaurantManagements/RestaurantManagementSolver_Start.cs} (53%) rename Assets/_DDD/_Scripts/RestaurantEvent/Solvers/{RestaurantOpenEventSolver.cs.meta => RestaurantManagements/RestaurantManagementSolver_Start.cs.meta} (100%) create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs create mode 100644 Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs.meta diff --git a/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab b/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab index fa7374f77..e3535c2f0 100644 --- a/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab +++ b/Assets/_DDD/Restaurant/Environments/Props/Prop_Open.prefab @@ -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 diff --git a/Assets/_DDD/_Addressables/Environments/Prop/MenuBoard/PropMenuBoard.prefab b/Assets/_DDD/_Addressables/Environments/Prop/MenuBoard/PropMenuBoard.prefab index ddf5310b2..149bc761d 100644 --- a/Assets/_DDD/_Addressables/Environments/Prop/MenuBoard/PropMenuBoard.prefab +++ b/Assets/_DDD/_Addressables/Environments/Prop/MenuBoard/PropMenuBoard.prefab @@ -97,6 +97,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: @@ -116,9 +119,12 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: _interactionType: 1 - _holdTime: 0 - _interactionMessageKey: Test + _executionParameters: + _holdTime: 1 + _displayParameters: + _messageKey: _interactionAvailableFlows: 1 + _aiInteractionPoints: [] --- !u!114 &4545680930728379745 MonoBehaviour: m_ObjectHideFlags: 0 @@ -359,3 +365,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: diff --git a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab index c1e3a3a75..cc9051a7a 100644 --- a/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab +++ b/Assets/_DDD/_Addressables/Prefabs/RestaurantPlayer.prefab @@ -423,7 +423,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 81e01dd8c1cc3404d805400eba1bb4ae, type: 3} m_Name: m_EditorClassIdentifier: - _interactionType: 4294967287 + _availableInteractions: 1 _nearColliders: - {fileID: 0} - {fileID: 0} diff --git a/Assets/_DDD/_Scripts/GameEvent/IInteractable.cs b/Assets/_DDD/_Scripts/GameEvent/IInteractable.cs index c52bd47fd..a0c5cbe95 100644 --- a/Assets/_DDD/_Scripts/GameEvent/IInteractable.cs +++ b/Assets/_DDD/_Scripts/GameEvent/IInteractable.cs @@ -8,10 +8,9 @@ namespace DDD public enum InteractionType : uint { None = 0u, - RestaurantManagementUi = 1u << 0, - OpenRestaurant = 1u << 1, - RestaurantOrder = 1u << 2, - RestaurantMeal = 1u << 3, + RestaurantManagement = 1u << 0, + RestaurantOrder = 1u << 1, + RestaurantMeal = 1u << 2, All = 0xFFFFFFFFu } diff --git a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs index 1085117d3..655419a6e 100644 --- a/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs +++ b/Assets/_DDD/_Scripts/GameEvent/InteractionSubsystem.cs @@ -5,7 +5,6 @@ namespace DDD { public interface IInteractionSubsystemObject { - Type GetSubsystemEnumType(); void InitializeSubsystem(); bool CanInteract(); bool OnInteracted(IInteractor interactor, ScriptableObject payloadSo = null); diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs new file mode 100644 index 000000000..bd99e64be --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs @@ -0,0 +1,10 @@ +using System; +using UnityEngine; + +namespace DDD +{ + public interface IInteractionSubsystemOwner + { + public bool TryGetSubsystemObject(out IInteractionSubsystemObject subsystemObject) where T : Enum; + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs.meta new file mode 100644 index 000000000..d15ead482 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/IInteractionSubsystemOwner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 254d64ce6ee84b20a154931fcf04958f +timeCreated: 1755681729 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs deleted file mode 100644 index c2df3a351..000000000 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace DDD -{ - [Flags] - public enum RestaurantManagementType : uint - { - OpenRestaurantMenu = 0, - StartRestaurant = 1, - } - - //public class RestaurantManagementInteraction : RestaurantInteractionComponent, IInteractionSubsystemObject - //{ - // - //} -} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs new file mode 100644 index 000000000..8be8f9b3f --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs @@ -0,0 +1,36 @@ +using System; +using UnityEngine; + +namespace DDD +{ + [Flags] + public enum RestaurantManagementType : uint + { + OpenRestaurantMenu = 0, + StartRestaurant = 1, + } + + public class RestaurantManagementInteractionSubsystem : MonoBehaviour, IInteractionSubsystemObject + { + [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; + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs.meta b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteraction.cs.meta rename to Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantManagementInteractionSubsystem.cs.meta diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs index 40b619387..59ec44864 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/Interactions/RestaurantOrderInteractionSubsystem.cs @@ -15,9 +15,7 @@ public class RestaurantOrderInteractionSubsystem : MonoBehaviour, IInteractionSu { [SerializeField] protected RestaurantOrderType orderType = RestaurantOrderType.Wait; private RestaurantOrderType currentRestaurantOrderType; - - public Type GetSubsystemEnumType() => typeof(RestaurantOrderType); - + private void Start() { currentRestaurantOrderType = orderType; diff --git a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs index a2d647545..ea9252369 100644 --- a/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs +++ b/Assets/_DDD/_Scripts/RestaurantEnvironment/RestaurantEnvironment.cs @@ -1,3 +1,4 @@ +using System; using Spine.Unity; using Unity.VisualScripting; using UnityEngine; @@ -13,6 +14,11 @@ public class RestaurantEnvironment : MonoBehaviour private Transform _visualLook; private Renderer _renderer; + private void Start() + { + Initialize(restaurantPropLocation); + } + public async void Initialize(RestaurantPropLocation location) { EnvironmentData environmentData = DataManager.Instance.GetDataSo().GetDataById(location.Id); diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs index 72090e59d..2cf9c4102 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionComponent.cs @@ -11,12 +11,13 @@ public static class RestaurantInteractionSubsystems { public static Dictionary TypeToSubsystem = new() { - {InteractionType.RestaurantOrder, typeof(RestaurantOrderInteractionSubsystem)} + {InteractionType.RestaurantOrder, typeof(RestaurantOrderInteractionSubsystem)}, + {InteractionType.RestaurantManagement, typeof(RestaurantManagementInteractionSubsystem)} }; } - public class RestaurantInteractionComponent : MonoBehaviour, IInteractable + public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner { // Single interaction type [ValueDropdown("GetAllInteractionTypes")] @@ -25,9 +26,18 @@ public class RestaurantInteractionComponent : MonoBehaviour, IInteractable [SerializeField] protected InteractionDisplayParameters _displayParameters = new InteractionDisplayParameters(""); [SerializeField] protected GameFlowState _interactionAvailableFlows; [SerializeField] private Transform[] _aiInteractionPoints; + [SerializeField] private bool autoInitialize = true; private Dictionary _subsystems = new(); + private void Start() + { + if (autoInitialize) + { + InitializeInteraction(_interactionType); + } + } + private static IEnumerable GetAllInteractionTypes() { return System.Enum.GetValues(typeof(InteractionType)) @@ -153,5 +163,20 @@ public Vector3[] GetInteractionPoints() } return positions; } + + public bool TryGetSubsystemObject(out IInteractionSubsystemObject subsystemObject) where T : Enum + { + foreach (var interactionSubsystemObject in _subsystems.Values) + { + if (interactionSubsystemObject is IInteractionSubsystemObject subsystem) + { + subsystemObject = subsystem; + return true; + } + } + + subsystemObject = null; + return false; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs index 6d9021765..2afa9b785 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/RestaurantInteractionEvents.cs @@ -13,8 +13,7 @@ public static class RestaurantInteractionEventSolvers { public static Dictionary TypeToSolver = new() { - {InteractionType.RestaurantManagementUi, typeof(RestaurantManagementUiEventSolver)}, - {InteractionType.OpenRestaurant, typeof(RestaurantOpenEventSolver)}, + {InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver)}, {InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver)} }; } diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements.meta new file mode 100644 index 000000000..da3e18e6c --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ad4643acb4b34f1ab27e79503ccff0dd +timeCreated: 1755677592 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs new file mode 100644 index 000000000..0681cfb69 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using DDD.RestaurantOrders; +using UnityEngine; + +namespace DDD +{ + public static class RestaurantManagementSolvers + { + public static Dictionary TypeToManagementSolver = new() + { + { RestaurantManagementType.OpenRestaurantMenu, typeof(RestaurantManagementSolver_Menu) }, + { RestaurantManagementType.StartRestaurant, typeof(RestaurantManagementSolver_Start) } + }; + } + public class RestaurantManagementSolver : RestaurantSubsystemSolver + { + protected override Dictionary GetSubsystemSolverTypeMappings() + { + return RestaurantManagementSolvers.TypeToManagementSolver; + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta new file mode 100644 index 000000000..a9847e43f --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c457857b6ba0432db546ef0d8970548d +timeCreated: 1755677639 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagementUiEventSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs similarity index 51% rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagementUiEventSolver.cs rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs index c740cfb4f..4c4e3ab26 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagementUiEventSolver.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs @@ -2,11 +2,11 @@ namespace DDD { - public class RestaurantManagementUiEventSolver : MonoBehaviour, IInteractionSolver + public class RestaurantManagementSolver_Menu : MonoBehaviour, IInteractionSubsystemSolver { - 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; diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagementUiEventSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagementUiEventSolver.cs.meta rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOpenEventSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs similarity index 53% rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOpenEventSolver.cs rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs index ccc92fd90..fe7f96388 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOpenEventSolver.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs @@ -3,22 +3,23 @@ namespace DDD { - public class RestaurantOpenEventSolver : MonoBehaviour, IInteractionSolver + public class RestaurantManagementSolver_Start : MonoBehaviour, IInteractionSubsystemSolver { - 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; diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOpenEventSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOpenEventSolver.cs.meta rename to Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs index 38bfe2d87..b54ef3956 100644 --- a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantOrderSolver.cs @@ -15,42 +15,11 @@ public static class RestaurantOrderSolvers }; } - public class RestaurantOrderSolver : MonoBehaviour, IInteractionSolver + public class RestaurantOrderSolver : RestaurantSubsystemSolver { - private Dictionary> _solvers = new(); - - private void Start() + protected override Dictionary GetSubsystemSolverTypeMappings() { - foreach (var orderSolver in RestaurantOrderSolvers.TypeToOrderSolver) - { - var solver = (IInteractionSubsystemSolver)gameObject.AddComponent(orderSolver.Value); - _solvers.Add(orderSolver.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 solver) - { - solver = null; - - if (interactable is not IInteractionSubsystemObject subsystem) - return false; - - var type = subsystem.GetInteractionSubsystemType(); - return _solvers.TryGetValue(type, out solver); + return RestaurantOrderSolvers.TypeToOrderSolver; } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs new file mode 100644 index 000000000..6edbf5102 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace DDD +{ + public abstract class RestaurantSubsystemSolver : MonoBehaviour, IInteractionSolver where T : Enum + { + private Dictionary> _solvers = new(); + + protected abstract Dictionary GetSubsystemSolverTypeMappings(); + + private void Start() + { + foreach (var subsystemSolverType in GetSubsystemSolverTypeMappings()) + { + var solver = (IInteractionSubsystemSolver)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 solver) + { + solver = null; + + var owner = interactable as IInteractionSubsystemOwner; + IInteractionSubsystemObject subsystem = null; + bool isExist = owner != null && owner.TryGetSubsystemObject(out subsystem); + + if (!isExist || subsystem == null) return false; + + var type = subsystem.GetInteractionSubsystemType(); + return _solvers.TryGetValue(type, out solver); + } + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs.meta b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs.meta new file mode 100644 index 000000000..a27412565 --- /dev/null +++ b/Assets/_DDD/_Scripts/RestaurantEvent/Solvers/RestaurantSubsystemSolver.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 716224c78a914321b7b7e43a93860465 +timeCreated: 1755677990 \ No newline at end of file