using Cirno.Scripts.Resources; using Godot; using Godot.Collections; namespace Cirno.Scripts.Actors; public partial class Boss : Enemy { [Export] private Array Phases; private int currentPhaseIndex = 0; private GameManager _gameManager; private Vector2 _homePosition; public Vector2 HomePosition => _homePosition; public GameManager GameManager => _gameManager; private BossPhase CurrentPhase => Phases[currentPhaseIndex]; public override void _Ready() { base._Ready(); _gameManager = GetNode("/root/GameScene"); _homePosition = this.GlobalPosition; StartPhase(CurrentPhase); } public override void _Process(double delta) { base._Process(delta); CurrentPhase.UpdatePhase(delta); if (_currentHealth <= CurrentPhase.Threshold && currentPhaseIndex + 1 < Phases.Count) { currentPhaseIndex++; StartPhase(CurrentPhase); } } private void StartPhase(BossPhase phase) { phase.Start(this); } public void TakeDamage(int amount) { _currentHealth -= amount; } }