using System; using System.Collections.Generic; using UnityEngine; namespace DDD.Restaurant { public static class RestaurantInteractionEventSolvers { public static Dictionary TypeToSolver = new() { { InteractionType.RestaurantManagement, typeof(RestaurantManagementSolver) }, { InteractionType.RestaurantOrder, typeof(RestaurantOrderSolver) }, { InteractionType.RestaurantCook, typeof(RestaurantCookSolver) } }; public static Dictionary TypeToPlayerSolver = new() { { InteractionType.RestaurantOrder, typeof(RestaurantOrderPlayerSolver) }, }; } public class RestaurantInteractionEvent : RestaurantEventBase { protected override bool EventSolve(GameObject causer, GameObject target, InteractionType interactionType, ScriptableObject payload) { if (!RestaurantInteractionEventSolvers.TypeToSolver.TryGetValue(interactionType, out var solverType)) { return false; } Component solverComponent = causer.GetComponent(solverType); IInteractionSolver solver = solverComponent as IInteractionSolver; IInteractor interactor = causer.GetComponent(); IInteractable interactable = target.GetComponent(); // Cast solverComponent to IInteractable if (solver is not null && interactor is not null) { bool canExecute = solver.CanExecuteInteraction(interactor, interactable, payload); if (canExecute) { return solver.ExecuteInteraction(interactor, interactable, payload); } return false; } // Should not reach here! Debug.Assert(false, "Solver Component or Interactor is null"); return false; } } }