using System; using System.Collections.Generic; using Grid; using UnityEngine; namespace Actions { public abstract class BaseAction : MonoBehaviour { protected bool IsActive; private Action onActionComplete; public Unit Unit { get; private set; } public static event EventHandler OnAnyActionStarted; public static event EventHandler OnAnyActionEnded; protected virtual void Awake() => Unit = GetComponent(); public abstract string GetActionName(); public abstract void TakeAction(GridPosition gridPosition, Action onActionComplete); public virtual bool IsValidActionGridPosition(GridPosition gridPosition) => GetValidActionGridPositionList().Contains(gridPosition); public abstract List GetValidActionGridPositionList(); public virtual int GetActionPointsCost() => 1; protected void ActionStart(Action actionComplete) { IsActive = true; onActionComplete = actionComplete; OnAnyActionStarted?.Invoke(this, EventArgs.Empty); } protected void ActionComplete() { IsActive = false; onActionComplete(); OnAnyActionEnded?.Invoke(this, EventArgs.Empty); } } }