TurnBasedStrategyCourse/Assets/Scripts/Unit.cs

54 lines
1.9 KiB
C#

using System;
using Actions;
using Grid;
using UnityEngine;
public class Unit : MonoBehaviour {
private const int ACTION_POINTS_MAX = 2;
public GridPosition GridPosition { get; private set; }
public MoveAction MoveAction { get; private set; }
public SpinAction SpinAction { get; private set; }
public BaseAction[] BaseActionArray { get; private set; }
public int ActionPoints { get; private set; } = ACTION_POINTS_MAX;
private void Awake() {
MoveAction = GetComponent<MoveAction>();
SpinAction = GetComponent<SpinAction>();
BaseActionArray = GetComponents<BaseAction>();
}
private void Start() {
GridPosition = LevelGrid.Instance.GetGridPosition(transform.position);
LevelGrid.Instance.AddUnitAtGridPosition(GridPosition, this);
TurnSystem.Instance.OnTurnChanged += TurnSystem_OnTurnChanged;
}
private void Update() {
GridPosition newGridPosition = LevelGrid.Instance.GetGridPosition(transform.position);
if (newGridPosition == GridPosition) return;
LevelGrid.Instance.UnitMovedGridPosition(this, GridPosition, newGridPosition);
GridPosition = newGridPosition;
}
public static event EventHandler OnAnyActionPointsChanged;
private void TurnSystem_OnTurnChanged(object sender, EventArgs e) {
ActionPoints = ACTION_POINTS_MAX;
OnAnyActionPointsChanged?.Invoke(this, EventArgs.Empty);
}
public bool TrySpendActionPointsToTakeAction(BaseAction baseAction) {
if (!CanSpendActionPointsToTakeAction(baseAction)) return false;
SpendActionPoints(baseAction.GetActionPointsCost());
return true;
}
private bool CanSpendActionPointsToTakeAction(BaseAction baseAction) => ActionPoints >= baseAction.GetActionPointsCost();
private void SpendActionPoints(int amount) {
ActionPoints -= amount;
OnAnyActionPointsChanged?.Invoke(this, EventArgs.Empty);
}
}