cirnogodot/Scripts/Resources/PatternGroup.cs

59 lines
1.7 KiB
C#
Raw Normal View History

2025-02-05 19:41:49 +01:00
using Godot;
using System.Collections.Generic;
using Cirno.Scripts.Actors;
2025-03-15 17:17:30 +01:00
using Cirno.Scripts.AttackPatterns;
2025-02-05 19:41:49 +01:00
using Godot.Collections;
namespace Cirno.Scripts.Resources;
[GlobalClass]
public partial class PatternGroup : AttackPattern
{
[Export] private Array<AttackPattern> patterns;
2025-03-15 17:17:30 +01:00
public override IPatternMachine MakeMachine(Node2D parent)
2025-02-05 19:41:49 +01:00
{
2025-03-15 17:17:30 +01:00
return new PatternGroupMachine(this, parent);
2025-02-05 19:41:49 +01:00
}
2025-03-24 11:33:55 +01:00
public class PatternGroupMachine(PatternGroup patternGroup, Node2D parent) : IPatternMachine
2025-02-05 19:41:49 +01:00
{
2025-03-15 17:17:30 +01:00
public Node2D Parent => parent;
2025-03-24 11:33:55 +01:00
private int _currentPatternIndex = 0;
private AttackPattern CurrentPattern => patternGroup.patterns[_currentPatternIndex];
2025-03-15 17:17:30 +01:00
IPatternMachine _patternMachine;
public void Start()
2025-02-05 19:41:49 +01:00
{
2025-03-24 11:33:55 +01:00
_currentPatternIndex = 0;
_patternMachine = CurrentPattern.MakeMachine(parent);
2025-03-15 17:17:30 +01:00
_patternMachine.Start();
}
2025-02-05 19:41:49 +01:00
2025-03-15 17:17:30 +01:00
public void UpdatePattern(double delta)
{
2025-03-24 11:33:55 +01:00
if (_currentPatternIndex < patternGroup.patterns.Count)
2025-02-05 19:41:49 +01:00
{
2025-03-15 17:17:30 +01:00
_patternMachine.UpdatePattern(delta);
2025-03-24 11:33:55 +01:00
if (!CurrentPattern.WaitForCompletion || _patternMachine.IsComplete())
2025-02-05 19:41:49 +01:00
{
2025-03-24 11:33:55 +01:00
_currentPatternIndex++;
if (_currentPatternIndex < patternGroup.patterns.Count)
2025-03-15 17:17:30 +01:00
{
2025-03-24 11:33:55 +01:00
_patternMachine = CurrentPattern.MakeMachine(parent);
2025-03-15 17:17:30 +01:00
_patternMachine.Start();
}
2025-02-05 19:41:49 +01:00
}
}
}
2025-03-15 17:17:30 +01:00
public bool IsComplete()
{
2025-03-24 11:33:55 +01:00
return _currentPatternIndex >= patternGroup.patterns.Count;
2025-03-15 17:17:30 +01:00
}
2025-02-05 19:41:49 +01:00
}
}