🐛 Fixed fighters keep fighting at 0 hp
This commit is contained in:
@@ -192,6 +192,8 @@ public partial class FightHappening : Node
|
||||
HappeningData.actionStaging = null;
|
||||
HappeningData.fightersEnterStaging = null;
|
||||
|
||||
RemoveDeadFighters();
|
||||
|
||||
if (!FightWorld.Instance.allyFighters.IsAlive())
|
||||
{
|
||||
ChangeState(FightState.EnemyWin);
|
||||
@@ -345,6 +347,17 @@ public partial class FightHappening : Node
|
||||
vesnaFighter.health = vesnaFighter.maxHealth;
|
||||
GD.Print("Vesna has been revived. This is for the current prototype only");
|
||||
}
|
||||
|
||||
private void RemoveDeadFighters()
|
||||
{
|
||||
foreach (var f in HappeningData.fighterTurn)
|
||||
{
|
||||
if (f.IsDead())
|
||||
{
|
||||
HappeningData.fighterTurn.Remove(f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endregion // Game Logic
|
||||
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
|
||||
namespace Babushka.scripts.CSharp.Common.Fight;
|
||||
|
||||
public class FighterTurn
|
||||
public class FighterTurn : IEnumerable<FightWorld.Fighter>
|
||||
{
|
||||
private class Node
|
||||
{
|
||||
@@ -13,7 +16,8 @@ public class FighterTurn
|
||||
|
||||
private Node? _currentNode;
|
||||
|
||||
public FightWorld.Fighter Current => _currentNode?.fighter ?? throw new InvalidOperationException("No current fighter");
|
||||
public FightWorld.Fighter Current =>
|
||||
_currentNode?.fighter ?? throw new InvalidOperationException("No current fighter");
|
||||
|
||||
public void Next()
|
||||
{
|
||||
@@ -84,7 +88,7 @@ public class FighterTurn
|
||||
{
|
||||
// if removing current, keep current
|
||||
// it will be implicitly deleted by loss of reference on the next Next() call
|
||||
|
||||
|
||||
node.next = node.next.next;
|
||||
return true;
|
||||
}
|
||||
@@ -94,4 +98,26 @@ public class FighterTurn
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public IEnumerator<FightWorld.Fighter> GetEnumerator()
|
||||
{
|
||||
if (_currentNode == null) return Enumerable.Empty<FightWorld.Fighter>().GetEnumerator();
|
||||
|
||||
var list = new List<FightWorld.Fighter>();
|
||||
var n = _currentNode;
|
||||
while (true)
|
||||
{
|
||||
list.Add(n.fighter);
|
||||
if (n.next == _currentNode)
|
||||
break;
|
||||
n = n.next;
|
||||
}
|
||||
|
||||
return list.GetEnumerator();
|
||||
}
|
||||
|
||||
IEnumerator IEnumerable.GetEnumerator()
|
||||
{
|
||||
return GetEnumerator();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user