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("res://Commander.tscn"); public List _towers = new(); public Bucket _bucket; public override void _Ready() { _health = _healthMax; base._Ready(); _bucket = GetNode("Bucket"); } public override void _Process(double delta) { base._Process(delta); _bucket.Move(); } 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("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(); newCommander._playerController = this; newCommander.ActionsUp += CheckForTurnEnd; _towers[3]._commander = newCommander; _towers[3].AddChild(newCommander); } public override void StartTurn() { _towers.ForEach(t => t.StartTurn()); } }