using System; using System.Collections.Generic; using Grid; using UnityEngine; namespace Actions { public abstract class BaseAction : MonoBehaviour { protected bool IsActive; private Action onActionComplete; protected Unit Unit; 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; } protected void ActionComplete() { IsActive = false; onActionComplete(); } } }