added some more signals for attack hit, enemy and player controllers turn done, commander enemy death, better enemy movement and turn changing, implemented an rng, added functions to grid and gridmarkers to allow for easier searching of markers, more logic for if a tower commander has actions

This commit is contained in:
2026-06-01 02:28:45 -04:00
parent facb2e227e
commit dd14a8da40
13 changed files with 138 additions and 60 deletions
+54 -12
View File
@@ -1,28 +1,70 @@
using Godot;
using System;
using System.Collections.Generic;
using System.Linq;
public partial class EnemyController : TurnController
{
public PackedScene _enemyScene = GD.Load<PackedScene>("res://Enemy.tscn");
public List<Enemy> _enemies = new();
public void AddEnemy()
public PlayerController _playerController;
public void AddEnemies(int ENEMY_COUNT = 1)
{
Enemy newEnemy = _enemyScene.Instantiate<Enemy>();
// newEnemy.PlaceOrMove(_grid._gridMarkers.Last()[_rng.Next(_grid._gridMarkers.Last().Count)]);
// newEnemy._commander = _commander;
// newEnemy._grid = _grid;
_enemies.Add(newEnemy);
AddChild(newEnemy);
}
public override void StartTurn()
{
for (int i = 0; i < ENEMY_COUNT; i++)
{
Enemy newEnemy = _enemyScene.Instantiate<Enemy>();
newEnemy.Death += RemoveEnemy;
List<GridMarker> lastRow = _grid._gridMarkers.Last();
List<GridMarker> unoccupiedMarkers = [.. lastRow.Where(m => m._occupant == null).Cast<GridMarker>()];
GridMarker randomMarker = unoccupiedMarkers[Globals._rng.Next(unoccupiedMarkers.Count)];
WarpEnemy(newEnemy, randomMarker);
_enemies.Add(newEnemy);
AddChild(newEnemy);
}
}
public void Initiate()
{
AddEnemies(3);
}
public void MoveEnemy(Enemy ENEMY)
{
ENEMY._gridMarker = _grid.GetMarkerByAddress((Vector2I)(ENEMY._gridMarker._address + ENEMY._speed));
Tween tween = CreateTween();
tween.TweenProperty(ENEMY, "global_position", ENEMY._gridMarker.GlobalPosition, 1.0f);
}
public void MoveEnemies(List<Enemy> ENEMIES = null)
{
ENEMIES ??= _enemies;
Tween tween = CreateTween();
tween.SetParallel();
for (int i = 0; i < ENEMIES.Count; i++)
{
ENEMIES[i]._gridMarker = _grid.GetMarkerByAddress((Vector2I)(ENEMIES[i]._gridMarker._address + ENEMIES[i]._speed));
tween.TweenProperty(ENEMIES[i], "global_position", ENEMIES[i]._gridMarker.GlobalPosition, 0.4f);
}
tween.TweenCallback(Callable.From(() => EmitSignal(SignalName.TurnDone)));
}
public void RemoveEnemy(Enemy ENEMY_TO_REMOVE)
{
_enemies.Remove(ENEMY_TO_REMOVE);
ENEMY_TO_REMOVE.QueueFree();
}
public override void StartTurn()
{
AddEnemies();
MoveEnemies();
}
public void WarpEnemy(Enemy ENEMY, GridMarker DESTINATION_MARKER)
{
ENEMY._gridMarker = DESTINATION_MARKER;
ENEMY.GlobalPosition = DESTINATION_MARKER.GlobalPosition;
}
}