using System.Threading.Tasks; using PhoenixLib.Events; using WingsEmu.Game.Items; using WingsEmu.Game.Maps; using WingsEmu.Game.Triggers; namespace WingsEmu.Game.Raids; public sealed class ButtonMapItem : MapItem, IEventTriggerContainer { private readonly IEventTriggerContainer _eventTriggerContainer; /// /// /// /// /// /// /// /// Initial state of the button, when switching to this state it won't trigger the /// 'switchedToNonDefaultState' /// /// Map instance in which the button has been added /// /// public ButtonMapItem(short x, short y, int deactivatedStateVNum, int activatedStateVNum, bool activatedState, IMapInstance mapInstance, IAsyncEventPipeline asyncEventPipeline, bool? onlyOnce = null, bool isObjective = false, bool isQuest = false, int? customDanceDuration = null) : base(x, y, isQuest, mapInstance) { DeactivatedStateVNum = deactivatedStateVNum; ActivatedStateVNum = activatedStateVNum; DefaultState = activatedState; State = DefaultState; IsObjective = isObjective; ItemVNum = State ? ActivatedStateVNum : DeactivatedStateVNum; _eventTriggerContainer = new EventTriggerContainer(asyncEventPipeline); CustomDanceDuration = customDanceDuration; Amount = 1; CreatedDate = null; CanBeMovedOnlyOnce = onlyOnce; } public bool AlreadyMoved { get; set; } public bool IsObjective { get; } public int DeactivatedStateVNum { get; } public int ActivatedStateVNum { get; } public bool DefaultState { get; } public bool State { get; set; } public bool? CanBeMovedOnlyOnce { get; set; } public bool NonDefaultState => State != DefaultState; public int? CustomDanceDuration { get; set; } public void AddEvent(string key, IAsyncEvent notification, bool removedOnTrigger = false) => _eventTriggerContainer.AddEvent(key, notification, removedOnTrigger); public Task TriggerEvents(string key) => _eventTriggerContainer.TriggerEvents(key); public override GameItemInstance GetItemInstance() => ItemInstance; }