Files
peggle-roguelike/PlayerController.cs

81 lines
2.3 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 Bucket _bucket;
public override void _Ready()
{
_health = _healthMax;
base._Ready();
_bucket = GetNode<Bucket>("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<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());
}
}