[gd_scene load_steps=2 format=3 uid="uid://dw7mnqhgwx03g"] [sub_resource type="CSharpScript" id="CSharpScript_4jeo4"] script/source = "using Godot; using System; using System.Collections.Generic; using System.Reflection.Metadata.Ecma335; public partial class TurnManager : Node { [Signal] public delegate void turnBeginEventHandler(); [Signal] public delegate void turnEndEventHandler(); private Godot.Collections.Array actors = []; private int index = 0; public int TurnCount { get; private set; } = 1; public void Tick() { EmitSignal(SignalName.turnBegin); actors.Clear(); actors = GetTree().GetNodesInGroup(\"TimeSlave\"); index = -1; NextActor(); } private void NextActor() { index++; if (index >= actors.Count) { EndTurn(); return; } Actor currentActor = (Actor) actors[index]; currentActor.Energy += currentActor.Speed; ActorPerformAction(); } private void ActorPerformAction() { Actor currentActor = (Actor) actors[index]; if (currentActor.Energy > 0) { currentActor.PerformAction(); } else { NextActor(); } } public void OnActionEnd() { ActorPerformAction(); } private void EndTurn() { TurnCount++; EmitSignal(SignalName.turnEnd); } } " [node name="TurnManager" type="Node"] script = SubResource("CSharpScript_4jeo4")