using Cirno.Scripts.Actors; using Cirno.Scripts.Components; using Cirno.Scripts.Resources; using Godot; namespace Cirno.Scripts.AttackPatterns; [GlobalClass] public partial class SpiralPattern : AttackPattern { [Export] public PackedScene BulletScene; [Export] private float bulletSpeed = 5f; [Export] private int bulletCount = 16; [Export] private float rotationSpeed = 0f; [Export] private float _rotationOffset = 0f; [Export] private float duration = 5f; [Export] private float burstInterval = 0.5f; [Export] private float spread = 360f; [Export] private BulletOwner owner = BulletOwner.Enemy; [Export] private Resource _modifier; private double timer; private double burstTimer; private BulletSpawner spawner; public override void Start(Boss boss) { Boss = boss; timer = 0; burstTimer = burstInterval; // start immediately spawner = boss.GetNode("BulletSpawner"); } public override void UpdatePattern(double delta) { timer += delta; burstTimer += delta; if (timer < duration && burstTimer >= burstInterval) { float angleOffset = (float)(rotationSpeed * timer); spawner.SpawnBullet(new BulletInfo() { Position = Boss.GlobalPosition, Direction = Vector2.Right, Speed = bulletSpeed, Owner = owner, BulletCount = bulletCount, Spread = spread, BulletScene = BulletScene, RotationOffset = _rotationOffset, Modifier = _modifier as IBulletModifier, }); // spawner.SpawnSpiralPattern(Boss.GlobalPosition, bulletSpeed, owner, bulletCount, rotationSpeed, timer, spread, BulletScene); burstTimer = 0; } } public override bool IsComplete() { return timer >= duration; } }