diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs new file mode 100644 index 000000000..6d2f13618 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs @@ -0,0 +1,10 @@ +using UnityEngine; + +namespace DDD.Restaurant +{ + public enum CharacterActionState + { + None = 0, + CleaningTable = 1, + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta new file mode 100644 index 000000000..956522c27 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterActionTypes.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d2e8668bef454e00a5f8b8cd49919645 +timeCreated: 1756795869 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs index 372abf494..0179c1822 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Core/CharacterInteraction.cs @@ -11,8 +11,13 @@ public interface IInteractionStateProvider float GetMovementSpeedMultiplier(); bool IsMovementBlocked(); } + + public interface ICharacterActionStateProvider + { + CharacterActionState GetCurrentActionState(); + } - public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler, IInteractionStateProvider + public class CharacterInteraction : MonoBehaviour, IInteractor, IEventHandler, IInteractionStateProvider, ICharacterActionStateProvider { [EnumToggleButtons, SerializeField] protected InteractionType _availableInteractions; [SerializeField, ReadOnly] protected Collider[] _nearColliders = new Collider[10]; @@ -63,7 +68,7 @@ public IInteractable GetFocusedInteractable() return _nearestInteractable; } - private bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver solver) + protected bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver solver) { solver = null; if (interactable == null) return false; @@ -71,7 +76,7 @@ private bool TryGetSolverFor(IInteractable interactable, out IInteractionSolver return TryGetSolverForType(interactable.GetInteractionType(), out solver); } - private bool TryGetSolverForType(InteractionType type, out IInteractionSolver solver) + protected bool TryGetSolverForType(InteractionType type, out IInteractionSolver solver) { if (_cachedSolvers.TryGetValue(type, out solver)) return solver != null; @@ -153,5 +158,17 @@ protected void InitializeInteractionSolvers(Dictionary ty public virtual bool IsInteracting() => _interactingTarget != null; public virtual float GetMovementSpeedMultiplier() => 1f; public virtual bool IsMovementBlocked() => false; + + public CharacterActionState GetCurrentActionState() + { + if (IsInteracting()) + { + if(_nearestInteractable is ICharacterActionStateProvider actionStateProvider) + { + return actionStateProvider.GetCurrentActionState(); + } + } + return CharacterActionState.None; + } } } diff --git a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs index 2d3984832..54351a2f3 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Character/Player/PlayerAnimation.cs @@ -11,12 +11,6 @@ public enum PlayerTaskAnimationState Dashing } - public enum PlayerActionAnimationState - { - None = 0, - CleaningTable = 1, - } - public enum PlayerDefaultAnimationState { None = 0, @@ -31,7 +25,7 @@ public class PlayerAnimation : CharacterAnimation private IMovementState _movementState; private PlayerTaskAnimationState _currentTaskAnimationState = PlayerTaskAnimationState.None; - private PlayerActionAnimationState _currentActionAnimationState = PlayerActionAnimationState.None; + private CharacterActionState _currentActionState = CharacterActionState.None; private PlayerDefaultAnimationState _currentDefaultAnimationState = PlayerDefaultAnimationState.None; private Dictionary _taskToAnimation = new() @@ -39,9 +33,9 @@ public class PlayerAnimation : CharacterAnimation { PlayerTaskAnimationState.Dashing, "Dash" }, }; - private Dictionary _actionToAnimation = new() + private Dictionary _actionToAnimation = new() { - { PlayerActionAnimationState.CleaningTable, "Cleaning/CleaningTable" }, + { CharacterActionState.CleaningTable, "Cleaning/CleaningTable" }, }; private Dictionary _defaultToAnimation = new() @@ -90,24 +84,24 @@ private void UpdateAnimations() // 1순위: Task 애니메이션이 재생 중이면 다른 애니메이션 처리하지 않음 if (_currentTaskAnimationState != PlayerTaskAnimationState.None) { - _currentActionAnimationState = PlayerActionAnimationState.None; + _currentActionState = CharacterActionState.None; _currentDefaultAnimationState = PlayerDefaultAnimationState.None; return; } // 2순위: ActionState 체크 var desiredActionState = GetDesiredActionState(); - if (desiredActionState == PlayerActionAnimationState.None) + if (desiredActionState == CharacterActionState.None) { - _currentActionAnimationState = PlayerActionAnimationState.None; + _currentActionState = CharacterActionState.None; } else { - if (_currentActionAnimationState != desiredActionState) + if (_currentActionState != desiredActionState) { _currentDefaultAnimationState = PlayerDefaultAnimationState.None; - _currentActionAnimationState = desiredActionState; - PlayActionAnimation(_currentActionAnimationState); + _currentActionState = desiredActionState; + PlayActionAnimation(_currentActionState); } return; } @@ -146,25 +140,21 @@ private async Task PlayTaskAnimation(PlayerTaskAnimationState state, float durat _currentTaskAnimationState = PlayerTaskAnimationState.None; } - private PlayerActionAnimationState GetDesiredActionState() + private CharacterActionState GetDesiredActionState() { - if (_interactor.IsInteracting() == false) return PlayerActionAnimationState.None; - - var interactable = _interactor.GetFocusedInteractable(); - if (interactable == null) return PlayerActionAnimationState.None; + if (_interactor.IsInteracting() == false) return CharacterActionState.None; - var interactionType = interactable.GetInteractionType(); - if (interactionType == InteractionType.RestaurantTrash) // TODO : 서브시스템 연결해서 테이블청소 연결해야함 + if (_interactor is ICharacterActionStateProvider actionStateProvider) { - return PlayerActionAnimationState.CleaningTable; + return actionStateProvider.GetCurrentActionState(); } - return PlayerActionAnimationState.None; + return CharacterActionState.None; } - private void PlayActionAnimation(PlayerActionAnimationState actionAnimationState) + private void PlayActionAnimation(CharacterActionState actionState) { - if (_actionToAnimation.TryGetValue(actionAnimationState, out string animationName)) + if (_actionToAnimation.TryGetValue(actionState, out string animationName)) { _spineController.PlayAnimation(animationName, true); } diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs similarity index 88% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs index 6196f5546..0c1221114 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs @@ -10,7 +10,7 @@ namespace DDD.Restaurant { public static class RestaurantInteractionSubsystems { - public static Dictionary TypeToSubsystem = new() + public static readonly Dictionary TypeToSubsystem = new() { {InteractionType.RestaurantManagement, typeof(InteractionSubsystem_Management)}, {InteractionType.RestaurantOrder, typeof(InteractionSubsystem_Order)}, @@ -18,8 +18,15 @@ public static class RestaurantInteractionSubsystems }; } + public static class RestaurantInteractionActions + { + public static readonly Dictionary TypeToAction = new() + { + {InteractionType.RestaurantTrash, CharacterActionState.CleaningTable}, + }; + } - public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner + public class RestaurantInteractionComponent : MonoBehaviour, IInteractable, IInteractionSubsystemOwner, ICharacterActionStateProvider { // Single interaction type [ValueDropdown("GetAllInteractionTypes")] @@ -239,5 +246,24 @@ public bool TryGetSubsystemEnumType(out T enumValue) where T : Enum enumValue = default; return false; } + + public CharacterActionState GetCurrentActionState() + { + if (HasSubsystem(_interactionType)) + { + var subsystemObject = GetSubsystem(_interactionType); + if(subsystemObject is ICharacterActionStateProvider actionStateProvider) + { + return actionStateProvider.GetCurrentActionState(); + } + } + else + { + return RestaurantInteractionActions.TypeToAction.GetValueOrDefault(_interactionType, + CharacterActionState.None); + } + + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionComponent.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionComponent.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/RestaurantInteractionEvents.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/RestaurantInteractionEvents.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta new file mode 100644 index 000000000..acf5250c2 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4cc0ab3a0d5b47e2b46992a16ecbbc5a +timeCreated: 1756798057 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs similarity index 61% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs index e292d488d..b341a3bd7 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs @@ -2,9 +2,9 @@ namespace DDD.Restaurant { - public class RestaurantTrashSolver : MonoBehaviour, IInteractionSolver + public class RestaurantTrashSolver : RestaurantBaseSolver { - public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) + public override bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) { var carrier = interactor?.GetInteractorGameObject()?.GetComponent(); if (carrier == null) @@ -14,7 +14,7 @@ public bool ExecuteInteraction(IInteractor interactor, IInteractable interactabl return true; } - public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, + public override bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) { // Check carrying state @@ -25,7 +25,7 @@ public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable i return false; } - public bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) + public override bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) { return true; } diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/Misc/RestaurantTrashSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/Misc/RestaurantTrashSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantCooks/RestaurantCookSolver_StartCooking.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Menu.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantManagements/RestaurantManagementSolver_Start.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolverBase.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Busy.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Dirty.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Order.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reaction.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Reserved.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Serve.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantOrders/RestaurantOrderSolver_Wait.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs similarity index 65% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs index 60be7f94c..e2c3c4ceb 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs @@ -2,9 +2,20 @@ using System.Collections.Generic; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { - public abstract class RestaurantSubsystemSolver : MonoBehaviour, IInteractionSolver where T : Enum + public abstract class RestaurantBaseSolver : MonoBehaviour, IInteractionSolver + { + public abstract bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, + ScriptableObject payload = null); + + public abstract bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, + ScriptableObject payload = null); + + public abstract bool CanSolveInteraction(IInteractor interactor, IInteractable interactable); + } + + public abstract class RestaurantSubsystemSolver : RestaurantBaseSolver where T : Enum { private Dictionary> _solvers = new(); @@ -18,19 +29,19 @@ private void Awake() _solvers.Add(subsystemSolverType.Key, solver); } } - public bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) + public override bool ExecuteInteraction(IInteractor interactor, IInteractable interactable, ScriptableObject payload = null) { return TryGetSolver(interactable, out var solver) && solver.ExecuteInteractionSubsystem(interactor, interactable, payload); } - public bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) + public override bool CanExecuteInteraction(IInteractor interactor = null, IInteractable interactable = null, ScriptableObject payload = null) { return TryGetSolver(interactable, out var solver) && solver.CanExecuteInteractionSubsystem(interactor, interactable, payload); } - public bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) + public override bool CanSolveInteraction(IInteractor interactor, IInteractable interactable) { if (interactable is IInteractionSubsystemOwner subsystemOwner) { diff --git a/Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Event/Solvers/RestaurantSubsystemSolver.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Solvers/RestaurantSubsystemSolver.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta new file mode 100644 index 000000000..a34a4cf35 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 889bc878e70343cab7416f799f767451 +timeCreated: 1756798128 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs new file mode 100644 index 000000000..5fef5d7d1 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs @@ -0,0 +1,9 @@ +using UnityEngine; + +namespace DDD.Restaurant +{ + public abstract class InteractionSubsystemBase : MonoBehaviour, ICharacterActionStateProvider + { + public abstract CharacterActionState GetCurrentActionState(); + } +} \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta new file mode 100644 index 000000000..423610044 --- /dev/null +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystemBase.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d9f52d1cd4bd4917a884b6e3bc1152e7 +timeCreated: 1756798490 \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs similarity index 76% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs index 0319b8a81..c997d357a 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [Flags] public enum RestaurantCookType : uint @@ -9,7 +9,7 @@ public enum RestaurantCookType : uint StartCooking = 0, } - public class InteractionSubsystem_Cook : MonoBehaviour, IInteractionSubsystemObject + public class InteractionSubsystem_Cook : InteractionSubsystemBase, IInteractionSubsystemObject { [SerializeField] protected RestaurantCookType _cookType = RestaurantCookType.StartCooking; @@ -42,5 +42,10 @@ public string GetCurrentSubsystemTypeName() { return _cookType.ToString(); } + + public override CharacterActionState GetCurrentActionState() + { + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Cook.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Cook.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs similarity index 78% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs index 167d6bddd..7c61473eb 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs @@ -1,7 +1,7 @@ using System; using UnityEngine; -namespace DDD +namespace DDD.Restaurant { [Flags] public enum RestaurantManagementType : uint @@ -10,7 +10,7 @@ public enum RestaurantManagementType : uint RunRestaurant = 1, } - public class InteractionSubsystem_Management : MonoBehaviour, IInteractionSubsystemObject + public class InteractionSubsystem_Management : InteractionSubsystemBase, IInteractionSubsystemObject { [SerializeField] protected RestaurantManagementType _managementType = RestaurantManagementType.OpenManagementUi; @@ -48,5 +48,10 @@ public ScriptableObject GetPayload() { return null; } + + public override CharacterActionState GetCurrentActionState() + { + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Management.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Management.cs.meta diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs similarity index 90% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs index c60ffa1a4..78fa39b67 100644 --- a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs +++ b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs @@ -47,7 +47,7 @@ public interface IRestaurantOrderObject // TODO : 도중에 이탈할 경우, 순차적으로 다음 페이즈로 넘어가는 게 아니라 바로 Wait, Dirty로 전이시킬 필요가 있음 - public class InteractionSubsystem_Order : MonoBehaviour, IInteractionSubsystemObject, IRestaurantOrderObject, IEventHandler + public class InteractionSubsystem_Order : InteractionSubsystemBase, IInteractionSubsystemObject, IRestaurantOrderObject, IEventHandler { [SerializeField] private RestaurantOrderType _currentRestaurantOrderType = RestaurantOrderType.Wait; [SerializeField] private RestaurantOrderObjectState _orderObjectState = new(); @@ -140,5 +140,15 @@ private void OnDestroy() { EventBus.Unregister(this); } + + public override CharacterActionState GetCurrentActionState() + { + if (_currentRestaurantOrderType == RestaurantOrderType.Dirty) + { + return CharacterActionState.CleaningTable; + } + + return CharacterActionState.None; + } } } \ No newline at end of file diff --git a/Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs.meta b/Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs.meta similarity index 100% rename from Assets/_DDD/_Scripts/Restaurant/Environment/Interactions/InteractionSubsystem_Order.cs.meta rename to Assets/_DDD/_Scripts/Restaurant/Interactions/Subsystems/InteractionSubsystem_Order.cs.meta