/// <Summary> /// Execute events according to event type. /// </Summary> /// <param name="eventParts">The event parts to execute.</param> /// <param name="eventPos">The position of event.</param> public void EventExecuter(AriadneEventParts eventParts, Vector2Int eventPos) { AriadneEventStrategyFactory factory = gameController.GetComponent <AriadneEventStrategyFactory>(); IAriadneEventStrategy iEventExecuter = factory.GetEventExecuter(eventParts.eventCategory); iEventExecuter.ExecuteEvent(gameController, eventPos, eventParts); }
/// <Summary> /// Returns IAriadneEventStrategy component that corresponds to the event category. /// </Summary> /// <param name="eventCategory">The event category to execute.</param> public IAriadneEventStrategy GetEventExecuter(AriadneEventCategory eventCategory) { Component component = (Component)gameObject.GetComponent <IAriadneEventStrategy>(); if (component != null) { Destroy(component); } IAriadneEventStrategy iStrategy = null; switch (eventCategory) { case AriadneEventCategory.None: iStrategy = gameObject.AddComponent <EventNone>(); break; case AriadneEventCategory.Door: iStrategy = gameObject.AddComponent <EventDoor>(); break; case AriadneEventCategory.LockedDoor: iStrategy = gameObject.AddComponent <EventLockedDoor>(); break; case AriadneEventCategory.MovePosition: iStrategy = gameObject.AddComponent <EventMovePosition>(); break; case AriadneEventCategory.Treasure: iStrategy = gameObject.AddComponent <EventTreasure>(); break; case AriadneEventCategory.Messenger: iStrategy = gameObject.AddComponent <EventMessenger>(); break; case AriadneEventCategory.ExitPosition: iStrategy = gameObject.AddComponent <EventExitDungeon>(); break; } return(iStrategy); }