72 lines
2.1 KiB
C#
72 lines
2.1 KiB
C#
using Godot;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
|
|
public partial class PlayerController : TurnController
|
|
{
|
|
[Signal]
|
|
public delegate void DeathEventHandler(PlayerController THIS);
|
|
public bool _dead = false;
|
|
public int _health, _healthMax = 100, _gold = 0;
|
|
public PegController _pegController;
|
|
public PackedScene _commanderScene = GD.Load<PackedScene>("res://Commander.tscn");
|
|
public List<Tower> _towers = new();
|
|
|
|
public override void _Ready()
|
|
{
|
|
_health = _healthMax;
|
|
base._Ready();
|
|
}
|
|
|
|
public void ChangeHealth(int DAMAGE, Node IMPETUS = null)
|
|
{
|
|
_health += DAMAGE;
|
|
_health = Math.Clamp(_health, 0, _healthMax);
|
|
if (_health == 0 && !_dead)
|
|
{
|
|
_dead = !_dead;
|
|
GD.Print("YOU DIED");
|
|
EmitSignal(SignalName.Death, this);
|
|
}
|
|
}
|
|
|
|
public void CheckForTurnEnd()
|
|
{
|
|
if (_towers.Where(t => t._commander != null).ToList().All(t=>t._commander._actions == 0))
|
|
{
|
|
EmitSignal(SignalName.TurnDone);
|
|
}
|
|
}
|
|
|
|
public void SetUpTowers(int TOWER_COUNT = 5)
|
|
{
|
|
Tower tower = GetNode<Tower>("Tower1");
|
|
Vector2 towerPositionCorrection = tower._offset.Position;
|
|
float spaceBetweenTowers = _playArea._map._sizeInPixels.X / (TOWER_COUNT - 1);
|
|
tower.GlobalPosition = _playArea._map.GlobalPosition + towerPositionCorrection;
|
|
|
|
_towers.Add(tower);
|
|
for (int i = 1; i < TOWER_COUNT; i++)
|
|
{
|
|
Tower newTower = (Tower)tower.Duplicate();
|
|
newTower.GlobalPosition += new Vector2(spaceBetweenTowers * i - towerPositionCorrection.X * i / (TOWER_COUNT - 1) * 2, 0);
|
|
_towers.Add(newTower);
|
|
AddChild(newTower);
|
|
}
|
|
|
|
Commander newCommander = _commanderScene.Instantiate<Commander>();
|
|
newCommander._playerController = this;
|
|
newCommander.ActionsUp += CheckForTurnEnd;
|
|
_towers[3]._commander = newCommander;
|
|
_towers[3].AddChild(newCommander);
|
|
}
|
|
|
|
public override void StartTurn()
|
|
{
|
|
_towers.ForEach(t => t.StartTurn());
|
|
}
|
|
|
|
}
|