diff --git a/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs b/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs index 09ca317..e2061fb 100644 --- a/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs +++ b/DungeonShooting_Godot/src/framework/map/fog/FogMask.cs @@ -6,7 +6,7 @@ /// /// 迷雾遮罩 /// -public partial class FogMask : PointLight2D, IDestroy +public partial class FogMask : FogMaskBase { /// /// 迷雾宽度 @@ -16,12 +16,7 @@ /// 迷雾高度 /// public int FogHeight { get; private set; } - /// - /// 迷雾透明度值, 这个值在调用 TransitionAlpha() 时改变, 用于透明度判断 - /// - public float TargetAlpha { get; private set; } - public bool IsDestroyed { get; private set; } private bool _init = false; private static Image _leftTransition; @@ -40,8 +35,7 @@ private static Image _inRightDownTransition; private static bool _initSprite = false; - - private long _cid = -1; + private static void InitSprite() { if (_initSprite) @@ -111,48 +105,7 @@ Color = c; TargetAlpha = alpha; } - - /// - /// 使颜色的 alpha 通道过渡到指定的值 - /// - /// 透明度值 - /// 过渡时间 - public void TransitionAlpha(float targetAlpha, float time) - { - TargetAlpha = targetAlpha; - if (_cid >= 0) - { - World.Current.StopCoroutine(_cid); - } - - _cid = World.Current.StartCoroutine(RunTransitionAlpha(targetAlpha, time)); - } - - private IEnumerator RunTransitionAlpha(float targetAlpha, float time) - { - var originColor = Color; - var a = originColor.A; - var delta = Mathf.Abs(a - targetAlpha) / time; - while (Math.Abs(a - targetAlpha) > 0.001f) - { - a = Mathf.MoveToward(a, targetAlpha, delta * (float)World.Current.GetProcessDeltaTime()); - Color = new Color(1, 1, 1, a); - yield return null; - } - _cid = -1; - } - public void Destroy() - { - if (IsDestroyed) - { - return; - } - - IsDestroyed = true; - QueueFree(); - } - private void HandlerTransition(Vector2I position, Vector2I size, Image image) { var tileMap = GameApplication.Instance.World.TileRoot; diff --git a/DungeonShooting_Godot/src/framework/map/fog/FogMaskBase.cs b/DungeonShooting_Godot/src/framework/map/fog/FogMaskBase.cs new file mode 100644 index 0000000..fe1124f --- /dev/null +++ b/DungeonShooting_Godot/src/framework/map/fog/FogMaskBase.cs @@ -0,0 +1,88 @@ + +using System; +using System.Collections; +using Godot; + +public partial class FogMaskBase : PointLight2D, IDestroy +{ + public bool IsDestroyed { get; private set; } + + /// + /// 是否探索过迷雾 + /// + public bool IsExplored { get; private set; } + + /// + /// 迷雾透明度值, 这个值在调用 TransitionAlpha() 时改变, 用于透明度判断 + /// + public float TargetAlpha { get; protected set; } + + private long _cid = -1; + + /// + /// 使颜色的 alpha 通道过渡到指定的值 + /// + /// 透明度值 + /// 过渡时间 + public void TransitionAlpha(float targetAlpha, float time) + { + TargetAlpha = targetAlpha; + if (targetAlpha > 0) + { + IsExplored = true; + } + if (_cid >= 0) + { + World.Current.StopCoroutine(_cid); + } + + _cid = World.Current.StartCoroutine(RunTransitionAlpha(targetAlpha, time, false)); + } + + /// + /// 使颜色的 alpha 通道过渡到 0, 然后隐藏该 Fog + /// + /// 过渡时间 + public void TransitionToHide(float time) + { + TargetAlpha = 0; + if (Visible) + { + if (_cid >= 0) + { + World.Current.StopCoroutine(_cid); + } + + _cid = World.Current.StartCoroutine(RunTransitionAlpha(TargetAlpha, time, true)); + } + } + + private IEnumerator RunTransitionAlpha(float targetAlpha, float time, bool hide) + { + var originColor = Color; + var a = originColor.A; + var delta = Mathf.Abs(a - targetAlpha) / time; + while (Math.Abs(a - targetAlpha) > 0.001f) + { + a = Mathf.MoveToward(a, targetAlpha, delta * (float)World.Current.GetProcessDeltaTime()); + Color = new Color(1, 1, 1, a); + yield return null; + } + _cid = -1; + if (hide) + { + this.SetActive(false); + } + } + + public void Destroy() + { + if (IsDestroyed) + { + return; + } + + IsDestroyed = true; + QueueFree(); + } +} \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs b/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs index fe51f87..104fd66 100644 --- a/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs +++ b/DungeonShooting_Godot/src/framework/map/fog/PreviewFogMask.cs @@ -6,15 +6,13 @@ /// /// 绑定在门上的预览迷雾 /// -public partial class PreviewFogMask : PointLight2D, IDestroy +public partial class PreviewFogMask : FogMaskBase { public enum PreviewFogType { Aisle, Room } - - public bool IsDestroyed { get; private set; } private static bool _initTexture; private static Texture2D _previewAisle; @@ -29,16 +27,11 @@ /// 迷雾类型 /// public PreviewFogType FogType { get; private set; } - - /// - /// 迷雾透明度值, 这个值在调用 TransitionAlpha() 时改变, 用于透明度判断 - /// - public float TargetAlpha { get; private set; } - private float _previewAisleAngle; - private float _previewRoomAngle; - private Vector2 _previewAislePosition; - private Vector2 _previewRoomPosition; + // private float _previewAisleAngle; + // private float _previewRoomAngle; + // private Vector2 _previewAislePosition; + // private Vector2 _previewRoomPosition; private long _cid; private static void InitTexture() @@ -56,128 +49,72 @@ /// /// 初始化迷雾 /// - public void Init(RoomDoorInfo doorInfo) + public void Init(RoomDoorInfo doorInfo, PreviewFogType fogType) { InitTexture(); DoorInfo = doorInfo; + FogType = fogType; + var globalPosition = doorInfo.Door.GlobalPosition; if (doorInfo.Direction == DoorDirection.E) { - _previewAislePosition = doorInfo.Door.GlobalPosition + new Vector2(GameConfig.TileCellSize, 0); - _previewAisleAngle = 90; - - _previewRoomPosition = doorInfo.Door.GlobalPosition + new Vector2(-GameConfig.TileCellSize, 0); - _previewRoomAngle = 270; + if (fogType == PreviewFogType.Aisle) + { + Texture = _previewAisle; + Position = globalPosition + new Vector2(GameConfig.TileCellSize, 0); + RotationDegrees = 90; + } + else + { + Texture = _previewRoom; + Position = globalPosition + new Vector2(-GameConfig.TileCellSize, 0); + RotationDegrees = 270; + } } else if (doorInfo.Direction == DoorDirection.W) { - _previewAislePosition = doorInfo.Door.GlobalPosition + new Vector2(-GameConfig.TileCellSize, 0); - _previewAisleAngle = 270; - - _previewRoomPosition = doorInfo.Door.GlobalPosition + new Vector2(GameConfig.TileCellSize, 0); - _previewRoomAngle = 90; + if (fogType == PreviewFogType.Aisle) + { + Texture = _previewAisle; + Position = globalPosition + new Vector2(-GameConfig.TileCellSize, 0); + RotationDegrees = 270; + } + else + { + Texture = _previewRoom; + Position = globalPosition + new Vector2(GameConfig.TileCellSize, 0); + RotationDegrees = 90; + } } else if (doorInfo.Direction == DoorDirection.N) { - _previewAislePosition = doorInfo.Door.GlobalPosition + new Vector2(0, -GameConfig.TileCellSize); - _previewAisleAngle = 0; - - _previewRoomPosition = doorInfo.Door.GlobalPosition + new Vector2(0, GameConfig.TileCellSize); - _previewRoomAngle = 180; + if (fogType == PreviewFogType.Aisle) + { + Texture = _previewAisle; + Position = globalPosition + new Vector2(0, -GameConfig.TileCellSize); + RotationDegrees = 0; + } + else + { + Texture = _previewRoom; + Position = globalPosition + new Vector2(0, GameConfig.TileCellSize); + RotationDegrees = 180; + } } else if (doorInfo.Direction == DoorDirection.S) { - _previewAislePosition = doorInfo.Door.GlobalPosition; - _previewAisleAngle = 180; - - _previewRoomPosition = doorInfo.Door.GlobalPosition + new Vector2(0, -GameConfig.TileCellSize * 2); - _previewRoomAngle = 0; + if (fogType == PreviewFogType.Aisle) + { + Texture = _previewAisle; + Position = globalPosition; + RotationDegrees = 180; + } + else + { + Texture = _previewRoom; + Position = globalPosition + new Vector2(0, -GameConfig.TileCellSize * 2); + RotationDegrees = 0; + } } - - RefreshPreviewFogType(PreviewFogType.Aisle); - } - - /// - /// 使颜色的 alpha 通道过渡到指定的值 - /// - /// 透明度值 - /// 过渡时间 - public void TransitionAlpha(float targetAlpha, float time) - { - TargetAlpha = targetAlpha; - if (_cid >= 0) - { - World.Current.StopCoroutine(_cid); - } - - _cid = World.Current.StartCoroutine(RunTransitionAlpha(targetAlpha, time, false)); - } - - public void TransitionToHide(float time) - { - TargetAlpha = 0; - if (_cid >= 0) - { - World.Current.StopCoroutine(_cid); - } - - _cid = World.Current.StartCoroutine(RunTransitionAlpha(TargetAlpha, time, true)); - } - - private IEnumerator RunTransitionAlpha(float targetAlpha, float time, bool hide) - { - var originColor = Color; - var a = originColor.A; - var delta = Mathf.Abs(a - targetAlpha) / time; - while (Math.Abs(a - targetAlpha) > 0.001f) - { - a = Mathf.MoveToward(a, targetAlpha, delta * (float)World.Current.GetProcessDeltaTime()); - Color = new Color(1, 1, 1, a); - yield return null; - } - _cid = -1; - if (hide) - { - this.SetActive(false); - } - } - - /// - /// 更新预览迷雾类型 - /// - public void SetPreviewFogType(PreviewFogType fogType) - { - if (FogType != fogType) - { - RefreshPreviewFogType(fogType); - } - } - - private void RefreshPreviewFogType(PreviewFogType fogType) - { - FogType = fogType; - if (fogType == PreviewFogType.Aisle) - { - Texture = _previewAisle; - Position = _previewAislePosition; - RotationDegrees = _previewAisleAngle; - } - else - { - Texture = _previewRoom; - Position = _previewRoomPosition; - RotationDegrees = _previewRoomAngle; - } - } - - public void Destroy() - { - if (IsDestroyed) - { - return; - } - - IsDestroyed = true; - QueueFree(); } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs index cdf06f7..73398a6 100644 --- a/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/room/RoomDoorInfo.cs @@ -62,7 +62,7 @@ /// /// 过道的迷雾 /// - public FogMask FogMask; + public FogMask AisleFogMask; /// /// 过道迷雾区域 @@ -70,9 +70,14 @@ public AisleFogArea AisleFogArea; /// - /// 门区域预览迷雾 + /// 门区域预览房间迷雾 /// - public PreviewFogMask PreviewFogMask; + public PreviewFogMask PreviewRoomFogMask; + + /// + /// 门区域预览过道迷雾 + /// + public PreviewFogMask PreviewAisleFogMask; /// /// 当前门连接的过道是否探索过 @@ -237,15 +242,25 @@ } IsDestroyed = true; - if (FogMask != null) + if (AisleFogMask != null) { - FogMask.Destroy(); + AisleFogMask.Destroy(); } if (AisleFogArea != null) { AisleFogArea.Destroy(); } + + if (PreviewRoomFogMask != null) + { + PreviewRoomFogMask.Destroy(); + } + + if (PreviewAisleFogMask != null) + { + PreviewAisleFogMask.Destroy(); + } } /// @@ -255,9 +270,9 @@ { IsExplored = true; ConnectDoor.IsExplored = true; - if (FogMask != null && Math.Abs(FogMask.Color.A - 1f) > 0.001f) + if (AisleFogMask != null && Math.Abs(AisleFogMask.Color.A - 1f) > 0.001f) { - FogMask.TransitionAlpha(1, GameConfig.FogTransitionTime); + AisleFogMask.TransitionAlpha(1, GameConfig.FogTransitionTime); RefreshPreviewFog(1); } } @@ -269,9 +284,9 @@ { IsExplored = true; ConnectDoor.IsExplored = true; - if (FogMask != null && Math.Abs(FogMask.Color.A - GameConfig.DarkFogAlpha) > 0.001f) + if (AisleFogMask != null && Math.Abs(AisleFogMask.Color.A - GameConfig.DarkFogAlpha) > 0.001f) { - FogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + AisleFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); RefreshPreviewFog(GameConfig.DarkFogAlpha); } } @@ -282,48 +297,50 @@ /// 过道迷雾透明度 public void RefreshPreviewFog(float aisleFogAlpha) { - var room1Alpha = RoomInfo.FogMask.TargetAlpha; - var room2Alpha = ConnectDoor.RoomInfo.FogMask.TargetAlpha; + var room1Alpha = RoomInfo.RoomFogMask.TargetAlpha; + var room2Alpha = ConnectDoor.RoomInfo.RoomFogMask.TargetAlpha; //GD.Print($"aisleFogAlpha: {aisleFogAlpha}, room1Alpha: {room1Alpha}, room2Alpha{room2Alpha}"); if ((aisleFogAlpha < 1 && room1Alpha < 1) || Math.Abs(aisleFogAlpha - room1Alpha) < 0.001f) //隐藏预览 { - PreviewFogMask.TransitionToHide(GameConfig.FogTransitionTime); + PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); + PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); } else if (aisleFogAlpha >= 1) //预览房间 { - PreviewFogMask.SetActive(true); - PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Room); + PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); + PreviewRoomFogMask.SetActive(true); //播放过渡动画 var targetAlpha = 1 - room1Alpha; - PreviewFogMask.Color = new Color(1, 1, 1, 0); - PreviewFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); + PreviewRoomFogMask.Color = new Color(1, 1, 1, 0); + PreviewRoomFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); } else if (room1Alpha >= 1) //预览过道 { - PreviewFogMask.SetActive(true); - PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Aisle); + PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); + PreviewAisleFogMask.SetActive(true); } if ((aisleFogAlpha < 1 && room2Alpha < 1) || Math.Abs(aisleFogAlpha - room2Alpha) < 0.001f) //隐藏预览 { - ConnectDoor.PreviewFogMask.TransitionToHide(GameConfig.FogTransitionTime); + ConnectDoor.PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); + ConnectDoor.PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); } else if (aisleFogAlpha >= 1) //预览房间 { - ConnectDoor.PreviewFogMask.SetActive(true); - ConnectDoor.PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Room); + ConnectDoor.PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); + ConnectDoor.PreviewRoomFogMask.SetActive(true); //播放过渡动画, 这里有问题 var targetAlpha = 1 - room2Alpha; - ConnectDoor.PreviewFogMask.Color = new Color(1, 1, 1, 0); - ConnectDoor.PreviewFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); + ConnectDoor.PreviewRoomFogMask.Color = new Color(1, 1, 1, 0); + ConnectDoor.PreviewRoomFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); } else if (room2Alpha >= 1) //预览过道 { - ConnectDoor.PreviewFogMask.SetActive(true); - ConnectDoor.PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Aisle); + ConnectDoor.PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); + ConnectDoor.PreviewAisleFogMask.SetActive(true); } } } \ No newline at end of file diff --git a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs index cf6f2bc..9f1a66d 100644 --- a/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs +++ b/DungeonShooting_Godot/src/framework/map/room/RoomInfo.cs @@ -83,7 +83,7 @@ /// /// 房间迷雾 /// - public FogMask FogMask; + public FogMask RoomFogMask; /// /// 房间算上连接通道所占用的区域 @@ -298,9 +298,9 @@ } //销毁迷雾 - if (FogMask != null) + if (RoomFogMask != null) { - FogMask.Destroy(); + RoomFogMask.Destroy(); } //销毁所属区域对象 @@ -432,22 +432,22 @@ /// public void ClearFog() { - if (FogMask != null && Math.Abs(FogMask.Color.A - 1) > 0.001f) + if (RoomFogMask != null && Math.Abs(RoomFogMask.Color.A - 1) > 0.001f) { - FogMask.TransitionAlpha(1, GameConfig.FogTransitionTime); + RoomFogMask.TransitionAlpha(1, GameConfig.FogTransitionTime); RefreshPreviewFog(1); } } /// - /// 将迷雾变暗 + /// 将迷雾变暗, nextRoom: 下一个房间 /// - public void DarkFog() + public void DarkFog(RoomInfo nextRoom = null) { - if (FogMask != null && Math.Abs(FogMask.Color.A - GameConfig.DarkFogAlpha) > 0.001f) + if (RoomFogMask != null && Math.Abs(RoomFogMask.Color.A - GameConfig.DarkFogAlpha) > 0.001f) { - FogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); - RefreshPreviewFog(GameConfig.DarkFogAlpha); + RoomFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + RefreshPreviewFog(GameConfig.DarkFogAlpha, nextRoom); } } @@ -457,34 +457,69 @@ /// 当前房间的迷雾透明度 public void RefreshPreviewFog(float roomFogAlpha) { + RefreshPreviewFog(roomFogAlpha, null); + } + + private void RefreshPreviewFog(float roomFogAlpha, RoomInfo nextRoom) + { + var isToDark = Math.Abs(roomFogAlpha - GameConfig.DarkFogAlpha) < 0.001f && nextRoom != null; //预览迷雾 foreach (var roomDoorInfo in Doors) { - var aisleAlpha = roomDoorInfo.FogMask.TargetAlpha; - if ((roomFogAlpha < 1 && aisleAlpha < 1) || Math.Abs(roomFogAlpha - aisleAlpha) < 0.001f) //隐藏预览 + if (isToDark && roomDoorInfo.ConnectDoor.RoomInfo != nextRoom && roomDoorInfo.AisleFogMask.IsExplored) { - roomDoorInfo.PreviewFogMask.TransitionToHide(GameConfig.FogTransitionTime); + //roomDoorInfo.AisleFogMask.Color = Colors.Red; + if (roomDoorInfo.PreviewAisleFogMask.TargetAlpha > GameConfig.DarkFogAlpha) + { + roomDoorInfo.PreviewAisleFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + } + if (roomDoorInfo.PreviewRoomFogMask.TargetAlpha > GameConfig.DarkFogAlpha) + { + roomDoorInfo.PreviewRoomFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + } + var connectDoor = roomDoorInfo.ConnectDoor; + if (connectDoor.PreviewAisleFogMask != null && connectDoor.PreviewAisleFogMask.TargetAlpha > GameConfig.DarkFogAlpha) + { + connectDoor.PreviewAisleFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + } + if (connectDoor.PreviewRoomFogMask != null && connectDoor.PreviewRoomFogMask.TargetAlpha > GameConfig.DarkFogAlpha) + { + connectDoor.PreviewRoomFogMask.TransitionAlpha(GameConfig.DarkFogAlpha, GameConfig.FogTransitionTime); + } } - else if (aisleAlpha >= 1) //预览房间 + else { - roomDoorInfo.PreviewFogMask.SetActive(true); - roomDoorInfo.PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Room); + var aisleAlpha = roomDoorInfo.AisleFogMask.TargetAlpha; + if (aisleAlpha < 1 && roomDoorInfo.AisleFogMask.IsExplored) + { + roomDoorInfo.AisleFogMask.TransitionAlpha(1, GameConfig.FogTransitionTime); + aisleAlpha = 1; + } + if ((roomFogAlpha < 1 && aisleAlpha < 1) || Math.Abs(roomFogAlpha - aisleAlpha) < 0.001f) //隐藏预览 + { + roomDoorInfo.PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); + roomDoorInfo.PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); + } + else if (aisleAlpha >= 1) //预览房间 + { + roomDoorInfo.PreviewAisleFogMask.TransitionToHide(GameConfig.FogTransitionTime); + roomDoorInfo.PreviewRoomFogMask.SetActive(true); - //播放过渡动画 - var targetAlpha = 1 - roomFogAlpha; - roomDoorInfo.PreviewFogMask.Color = new Color(1, 1, 1, 0); - roomDoorInfo.PreviewFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); - } - else if (roomFogAlpha >= 1) //预览过道 - { - roomDoorInfo.PreviewFogMask.SetActive(true); - roomDoorInfo.PreviewFogMask.SetPreviewFogType(PreviewFogMask.PreviewFogType.Aisle); + //播放过渡动画 + var targetAlpha = 1 - roomFogAlpha; + roomDoorInfo.PreviewRoomFogMask.Color = new Color(1, 1, 1, 0); + roomDoorInfo.PreviewRoomFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); + } + else if (roomFogAlpha >= 1) //预览过道 + { + roomDoorInfo.PreviewRoomFogMask.TransitionToHide(GameConfig.FogTransitionTime); + roomDoorInfo.PreviewAisleFogMask.SetActive(true); - //播放过渡动画 - var targetAlpha = 1 - aisleAlpha; - //GD.Print("targetAlpha: " + targetAlpha); - roomDoorInfo.PreviewFogMask.Color = new Color(1, 1, 1, 0.2f); - roomDoorInfo.PreviewFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); + //播放过渡动画 + var targetAlpha = 1 - aisleAlpha; + roomDoorInfo.PreviewAisleFogMask.Color = new Color(1, 1, 1, 0.2f); + roomDoorInfo.PreviewAisleFogMask.TransitionAlpha(targetAlpha, GameConfig.FogTransitionTime); + } } } } diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs index f38af41..3953932 100644 --- a/DungeonShooting_Godot/src/game/GameApplication.cs +++ b/DungeonShooting_Godot/src/game/GameApplication.cs @@ -96,7 +96,7 @@ DungeonConfig = new DungeonConfig(); DungeonConfig.GroupName = RoomConfig.FirstOrDefault().Key; - DungeonConfig.RoomCount = 1; + DungeonConfig.RoomCount = 20; } public override void _EnterTree() diff --git a/DungeonShooting_Godot/src/game/room/DungeonManager.cs b/DungeonShooting_Godot/src/game/room/DungeonManager.cs index 239ade2..0cc3ee0 100644 --- a/DungeonShooting_Godot/src/game/room/DungeonManager.cs +++ b/DungeonShooting_Godot/src/game/room/DungeonManager.cs @@ -444,7 +444,7 @@ roomFog.InitFog(roomInfo.Position, roomInfo.Size, alpha); World.FogMaskRoot.AddChild(roomFog); - roomInfo.FogMask = roomFog; + roomInfo.RoomFogMask = roomFog; //生成通道迷雾 foreach (var roomDoorInfo in roomInfo.Doors) @@ -516,8 +516,8 @@ var aisleFog = new FogMask(); aisleFog.InitFog(calcRect.Position, calcRect.Size); World.FogMaskRoot.AddChild(aisleFog); - roomDoorInfo.FogMask = aisleFog; - roomDoorInfo.ConnectDoor.FogMask = aisleFog; + roomDoorInfo.AisleFogMask = aisleFog; + roomDoorInfo.ConnectDoor.AisleFogMask = aisleFog; //过道迷雾区域 var fogArea = new AisleFogArea(); @@ -533,12 +533,17 @@ } //预览迷雾区域 - var previewFog = new PreviewFogMask(); - roomDoorInfo.PreviewFogMask = previewFog; - previewFog.Init(roomDoorInfo); - previewFog.SetPreviewFogType(PreviewFogMask.PreviewFogType.Room); - previewFog.SetActive(false); - World.FogMaskRoot.AddChild(previewFog); + var previewRoomFog = new PreviewFogMask(); + roomDoorInfo.PreviewRoomFogMask = previewRoomFog; + previewRoomFog.Init(roomDoorInfo, PreviewFogMask.PreviewFogType.Room); + previewRoomFog.SetActive(false); + World.FogMaskRoot.AddChild(previewRoomFog); + + var previewAisleFog = new PreviewFogMask(); + roomDoorInfo.PreviewAisleFogMask = previewAisleFog; + previewAisleFog.Init(roomDoorInfo, PreviewFogMask.PreviewFogType.Aisle); + previewAisleFog.SetActive(false); + World.FogMaskRoot.AddChild(previewAisleFog); } //刷新预览迷雾 @@ -583,7 +588,7 @@ if (!_affiliationAreaFlag.IsDestroyed) { //上一个房间变暗 - _affiliationAreaFlag.RoomInfo.DarkFog(); + _affiliationAreaFlag.RoomInfo.DarkFog(roomInfo); } }