using Godot; using System; using System.Collections.Generic; using System.Linq; public partial class PlayerController : TurnController { public EnemyController _enemyController; public PackedScene _commanderScene = GD.Load("res://Commander.tscn"); public List _towers = new(); public override void _Ready() { base._Ready(); } 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 = 8) { Tower tower = GetNode("Tower1"); Vector2 towerPositionCorrection = tower._offset.Position; float spaceBetweenTowers = _playArea._map._sizeInPixels.X / (TOWER_COUNT - 1); tower.GlobalPosition = _playArea._map.GlobalPosition - _playArea._map._sizeInPixels / 2 + 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.Where(t=> t._commander != null).ToList().ForEach(t=>t._commander._actions = t._commander._actionsMax); } }