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);
}
}