using Godot; /// <summary> /// 过道迷雾区域碰撞器, 用于检测玩家是否进入过道 /// </summary> public partial class AisleFogArea : Area2D, IDestroy { public bool IsDestroyed { get; private set; } /// <summary> /// 所属连接的门 (起始门) /// </summary> public RoomDoorInfo RoomDoorInfo { get; private set; } private bool _init = false; private RectangleShape2D _shape; /// <summary> /// 根据矩形区域初始化归属区域 /// </summary> public void Init(RoomDoorInfo doorInfo, Rect2I rect2) { if (_init) { return; } _init = true; RoomDoorInfo = doorInfo; var collisionShape = new CollisionShape2D(); collisionShape.GlobalPosition = rect2.Position + rect2.Size / 2; var shape = new RectangleShape2D(); _shape = shape; shape.Size = rect2.Size; collisionShape.Shape = shape; AddChild(collisionShape); _Init(); } private void _Init() { Monitoring = true; Monitorable = false; CollisionLayer = PhysicsLayer.None; CollisionMask = PhysicsLayer.Player; BodyEntered += OnBodyEntered; //BodyExited += OnBodyExited; } public void Destroy() { if (IsDestroyed) { return; } IsDestroyed = true; QueueFree(); } private void OnBodyEntered(Node2D body) { if (body == Player.Current) { //注意需要延时调用 CallDeferred(nameof(InsertItem)); } } // private void OnBodyExited(Node2D body) // { // if (body == Player.Current) // { // //注意需要延时调用 // CallDeferred(nameof(LeavePlayer)); // } // } private void InsertItem() { //GD.Print("玩家进入过道"); //RoomDoorInfo.ClearFog(); FogMaskHandler.RefreshAisleFog(RoomDoorInfo); } // private void LeavePlayer() // { // //GD.Print("玩家离开过道"); // //RoomDoorInfo.DarkFog(); // } }