38 lines
1.3 KiB
C#
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);
|
|
}
|
|
}
|
|
} |