🐛 Fixed fighters keep fighting at 0 hp #24
Merged
Jonathan
merged 1 commits from bug/enemy_die into develop 2 months ago
@ -1,9 +1,12 @@
|
|||||||||||||
using System;
|
using System;
|
||||||||||||
|
using System.Collections;
|
||||||||||||
|
using System.Collections.Generic;
|
||||||||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||||||||
|
using System.Linq;
|
||||||||||||
|
|
||||||||||||
namespace Babushka.scripts.CSharp.Common.Fight;
|
namespace Babushka.scripts.CSharp.Common.Fight;
|
||||||||||||
|
|
||||||||||||
public class FighterTurn
|
public class FighterTurn : IEnumerable<FightWorld.Fighter>
|
||||||||||||
{
|
{
|
||||||||||||
private class Node
|
private class Node
|
||||||||||||
{
|
{
|
||||||||||||
@ -13,7 +16,8 @@ public class FighterTurn
|
|||||||||||||
|
|
||||||||||||
private Node? _currentNode;
|
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()
|
public void Next()
|
||||||||||||
{
|
{
|
||||||||||||
@ -94,4 +98,26 @@ public class FighterTurn
|
|||||||||||||
|
|
||||||||||||
return false;
|
return false;
|
||||||||||||
}
|
}
|
||||||||||||
|
|
||||||||||||
|
public IEnumerator<FightWorld.Fighter> GetEnumerator()
|
||||||||||||
|
{
|
||||||||||||
|
if (_currentNode == null) return Enumerable.Empty<FightWorld.Fighter>().GetEnumerator();
|
||||||||||||
|
kziolkowski
commented 2 months ago
Review
Sehe ich da was falsch oder ist das ein Loop? Wenn currentnode == null, dann wird Enumerable.GetEnumerator ( Zeile 119) und darin dann wieder GetEnumerator (Zeile 102) aufgerufen und so weiter. Oder ist das noch ein anderer Overload, der da aufgerufen wird? Again, ich gehe schon davon aus, dass du das getestet hast und ich da irgendwas übersehe, aber ich frage lieber zur Sicherheit immer nach.
Jonathan
commented 2 months ago
Review
Hier wird |
|||||||||||||
|
|
||||||||||||
|
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();
|
||||||||||||
|
}
|
||||||||||||
}
|
}
|
||||||||||||
Loading…
Reference in new issue
Ich gehe zwar davon aus, dass du das getestet hast und es keine Fehler wirft, aber zur Sicherheit, weil ich mich gewundert habe: Wenn fighterTurn ein IEnumerable ist und du in der foreach-Schleife etwas daraus entfernst, kann das nicht zu exceptions führen? Hätte ich jetzt erwartet.
Ist auch oft so. Deshalb habe ich
GetEnumeratorso implementiert, dass er erst eineListaus den Einträgen erstellt und dann den Enumerator der Liste zurückgibt