using System.Collections.Generic; using Godot; [EffectFragment("AreaTrigger", "")] public class Eff_AreaTrigger : EffectFragment { private Prop5003Area _areaNode; private List<Weapon> _weaponList = new List<Weapon>(); public override void Ready() { _areaNode = ResourceManager.LoadAndInstantiate<Prop5003Area>(ResourcePath.prefab_prop_activeComp_Prop5003_Area_tscn); _areaNode.BodyEntered += OnBodyEntered; _areaNode.BodyExited += OnBodyExited; AddChild(_areaNode); } public override void OnDestroy() { _areaNode.QueueFree(); } public override void OnUse() { _areaNode.PlayEffect(0, 250, 6); } public override void Process(float delta) { for (var i = 0; i < _weaponList.Count; i++) { var weapon = _weaponList[i]; if (weapon.Master != null) { _weaponList.RemoveAt(i--); continue; } weapon.Trigger(Role, false); } } public override void OnPickUpItem() { RemoveChild(_areaNode); Role.AnimatedSprite.AddChild(_areaNode); } public override void OnRemoveItem() { Role.AnimatedSprite.RemoveChild(_areaNode); AddChild(_areaNode); } private void OnBodyEntered(Node2D node) { if (node is Weapon weapon && weapon.Master == null) { if (!_weaponList.Contains(weapon)) { _weaponList.Add(weapon); } } } private void OnBodyExited(Node2D node) { if (node is Weapon weapon && weapon.Master == null) { _weaponList.Remove(weapon); } } }