diff --git a/scripts/CSharp/Common/Fight/FightHappening.cs b/scripts/CSharp/Common/Fight/FightHappening.cs index 328710c..9d6dbda 100644 --- a/scripts/CSharp/Common/Fight/FightHappening.cs +++ b/scripts/CSharp/Common/Fight/FightHappening.cs @@ -307,6 +307,11 @@ public partial class FightHappening : Node HappeningData.enemyFighterFormation.SetFighterAtPosition(emptySlotIndex, fighter); HappeningData.fighterTurn.AddAsLast(fighter); } + + if (GD.RandRange(0, 2) != 0) // 2/3 chance for vesna to start + { + HappeningData.fighterTurn.SpinBack(); + } } private void ExecuteNextFighter() diff --git a/scripts/CSharp/Common/Fight/FighterTurn.cs b/scripts/CSharp/Common/Fight/FighterTurn.cs index 198afa5..956a47b 100644 --- a/scripts/CSharp/Common/Fight/FighterTurn.cs +++ b/scripts/CSharp/Common/Fight/FighterTurn.cs @@ -99,6 +99,23 @@ public class FighterTurn : IEnumerable return false; } + /// + /// Sets the current one back + /// This is an expensive operation, because the entire data structure needs to be circled + /// + public void SpinBack() + { + if (_currentNode == null) return; + + var node = _currentNode; + while (node.next != _currentNode) + { + node = node.next; + } + + _currentNode = node; + } + public IEnumerator GetEnumerator() { if (_currentNode == null) return Enumerable.Empty().GetEnumerator();