using Godot; using System.Collections.Generic; using Cirno.Scripts.Actors; using Cirno.Scripts.AttackPatterns; using Godot.Collections; namespace Cirno.Scripts.Resources; [GlobalClass] public partial class PatternGroup : AttackPattern { [Export] private Array patterns; public override IPatternMachine MakeMachine(Node2D parent) { return new PatternGroupMachine(this, parent); } public class PatternGroupMachine(PatternGroup pattern, Node2D parent) : IPatternMachine { public Node2D Parent => parent; private int currentPatternIndex = 0; IPatternMachine _patternMachine; public void Start() { currentPatternIndex = 0; _patternMachine = pattern.patterns[currentPatternIndex].MakeMachine(parent); _patternMachine.Start(); } public void UpdatePattern(double delta) { if (currentPatternIndex < pattern.patterns.Count) { _patternMachine.UpdatePattern(delta); if (!pattern.patterns[currentPatternIndex].WaitForCompletion || _patternMachine.IsComplete()) { currentPatternIndex++; if (currentPatternIndex < pattern.patterns.Count) { _patternMachine.Start(); } } } } public bool IsComplete() { return currentPatternIndex >= pattern.patterns.Count; } } }