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:
+54
-12
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user