using Cirno.Scripts.Components.FSM; using Cirno.Scripts.Components.FSM.Player; using Cirno.Scripts.Controllers; using Godot; namespace Cirno.Scripts.Resources.ItemEffects; [GlobalClass] [Tool] public partial class SpiderbombEffectResource : ItemEffectResource { public override IITemEffectMachine Execute(PlayerFSMItemUseModule parent, LootItem item) { return new SpiderbombEffectmachine(this, parent, item).Execute(); } public class SpiderbombEffectmachine(SpiderbombEffectResource resource, PlayerFSMItemUseModule parent, LootItem item) : IITemEffectMachine { public IITemEffectMachine Execute() { var bullet = PoolingManager.Instance.SpawnBullet(item.WeaponData.BulletData); bullet.GlobalPosition = parent.Machine.MainObject.GlobalPosition; //var bullet = parent.CreateChildOf(GameManager.Instance.BulletsContainer, item.WeaponData.BulletData.BulletScene, parent.GlobalPosition); var bulletData = item.WeaponData.MakeBullet(parent.Machine.MainObject.GlobalPosition); bullet.Initialize(bulletData); bullet.SetDirection(parent.FacingDirection); bullet.RotateSpriteDegrees(-90); //bullet.SetDirection(_facingDirection); bullet.Speed = item.WeaponData.BulletData.BulletSpeed; parent.Machine.SetState(PlayerState.Controlling); //RequestMovementDisable(true); // set camera GameManager.Instance.CameraTargetObject(bullet); // set event destroy bullet.OnDestroy += () => { GameManager.Instance.CameraTargetPlayer(); parent.Machine.SetState(PlayerState.Active); //RequestMovementDisable(false); }; return this; } } }