using System.Collections.Generic; using System.ComponentModel; using System.Linq; using Godot; using Godot.Bridge; using Godot.NativeInterop; [ScriptPath("res://Scripts/Bullets/StaplerBehavior.cs")] public partial class StaplerBehavior : Node { [Export(PropertyHint.None, "")] private PackedScene staple; [Export(PropertyHint.None, "")] private Entity entity; [Export(PropertyHint.None, "")] private int[] exceptions; private bool doing; private float cd; private const float defaultTime = 80f; public override void _EnterTree() { if (BattleDR.current == null) { QueueFree(); } else { entity = GetParent(); } } public override void _Process(double delta) { if (entity.battleData.skipAttack) { base.ProcessMode = ProcessModeEnum.Disabled; return; } if (BattleDR.current?.activeBoard?.caller?.entity != entity) { BattleDR current = BattleDR.current; if (current != null && current.activeBoard?.timer > 20f) { BattleDR current2 = BattleDR.current; if (current2 != null && current2.activeBoard.IsInsideTree()) { if (exceptions != null && exceptions.Contains(BattleDR.current.activeBoard.id)) { return; } if (cd > 0f) { entity.Modulate = Main.colorWhite; cd -= Main.deltaTime; if (cd <= 50f && !doing) { doing = true; MoveAhead obj = (MoveAhead)BattleDR.NewBullet(in staple, entity.GlobalPosition + new Vector2(-20f, -10f), BattleDR.current.activeBoard); obj.LookAt(BattleDR.current.soul.GlobalPosition); obj.speed = obj.GlobalPosition.DirectionTo(BattleDR.current.soul.GlobalPosition) * 0.75f; obj.RotationDegrees -= 90f; Audio.PlaySound("snd_switchpull_n.wav", 1f, 1.1f); } } else { cd = 80f; doing = false; Audio.PlaySound("snd_noise.wav", 1f, 0.9f); entity.anim.Play("Shoot"); } return; } } } cd = 0f; } }