using System.Collections.Generic; using Assets.Scripts.Actions; using UnityEngine; namespace Actions { /// /// AcrionManagaer managing Actions. /// ActionHandler implement either NextDayActionHandler or ClickActionHandler and have to be added to the matching list in the instatiationmethod /// public class ActionManager { #region Singleton private static ActionManager _instance; public static ActionManager Instance { get { if(_instance == null) { _instance = new ActionManager(); } return _instance; } } #endregion private List _clickActionHandlers; private List _nextDayActionHandlers; private ActionManager() { _clickActionHandlers = new List(); _nextDayActionHandlers = new List(); instantiateClickActionHandlers(); instantiateNextDayActionHandlers(); } /// /// NextDayActionHandlers to be instatiated and added to the corresponding List /// private void instantiateNextDayActionHandlers() { _nextDayActionHandlers.Add(new FarmlandTileNextDayActionHandler()); } /// /// ClickActionHandlers to be instatiated and added to the corresponding List /// private void instantiateClickActionHandlers() { _clickActionHandlers.Add(new GrassTileClickHoeActionHandler()); _clickActionHandlers.Add(new GrassTileClickShovelActionHandler()); _clickActionHandlers.Add(new GrassTileClickFenceActionHandler()); _clickActionHandlers.Add(new FarmlandTileClickShovelActionHandler()); _clickActionHandlers.Add(new FarmlandTileClickScytheActionHandler()); _clickActionHandlers.Add(new FarmlandTileClickWateringCanActionHandler()); _clickActionHandlers.Add(new FarmlandTileClickWheatSeedsActionHandler()); _clickActionHandlers.Add(new WaterTileClickShovelActionHandler()); _clickActionHandlers.Add(new WaterTileClickFishingRodActionHandler()); _clickActionHandlers.Add(new CowAnimalClickActionHandler()); } /// /// Used to Invoke ClickActions, all ClickActionHandlers in ClickActionHandlers list are iterated through, /// only one will be invoked per method call /// /// The affected gameObject /// the current tool public void ClickAction(GameObject gameObject, UsableItem usableItem) { foreach (ClickActionHandler actionHandler in _clickActionHandlers) { if(actionHandler.Matches(gameObject, usableItem)) { actionHandler.InvokeAction(gameObject); break; // Ja Herr Professor, Sie sehen richtig. Voller Stolz verwende ich ein break. } } } /// /// Used to Invoke ClickActions, all ClickActionHandlers in ClickActionHandlers list are iterated through, /// only one will be invoked per method call /// /// The affected gameObject /// the current tool public void NextDayAction(GameObject gameObject) { Debug.Log("nextday action"); foreach (NextDayActionHandler actionHandler in _nextDayActionHandlers) { if(actionHandler.Matches(gameObject)) { actionHandler.InvokeAction(gameObject); break; // Gleich noch einmal. Und ich kann nachts immer noch zufrieden schlafen. } } } } }