TurnBasedStrategyCourse/Assets/Scripts/Actions/BaseAction.cs

38 lines
1.3 KiB
C#

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<Unit>();
public abstract string GetActionName();
public abstract void TakeAction(GridPosition gridPosition, Action onActionComplete);
public virtual bool IsValidActionGridPosition(GridPosition gridPosition) => GetValidActionGridPositionList().Contains(gridPosition);
public abstract List<GridPosition> 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);
}
}
}