diff --git a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
index 5bbbe0f..743c5a8 100644
--- a/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
+++ b/DungeonShooting_Godot/src/framework/activity/ActivityObject.cs
@@ -10,7 +10,7 @@
/// ActivityObject 使用的时候代码和场景分离的设计模式, 所以创建时必须指定模板场景路径, 这样做的好处是一个模板场景可以用在多个代码类上, 同样一个代码类也可以指定不同的目模板场景,
/// ActivityObject 子类实例化请不要直接使用 new, 而用该在类上标上 [Tool], 并在 ActivityObject.xlsx 配置文件中注册物体, 导出配置表后使用 ActivityObject.Create(id) 来创建实例.
///
-public abstract partial class ActivityObject : CharacterBody2D, IDestroy
+public abstract partial class ActivityObject : CharacterBody2D, IDestroy, ICoroutine
{
///
/// 是否是调试模式
@@ -1405,26 +1405,17 @@
_playHit = true;
_playHitSchedule = 0;
}
-
- ///
- /// 开启一个协程, 返回协程 id, 协程是在普通帧执行的, 支持: 协程嵌套, WaitForSeconds, WaitForFixedProcess, Task, SignalAwaiter
- ///
+
public long StartCoroutine(IEnumerator able)
{
return ProxyCoroutineHandler.ProxyStartCoroutine(ref _coroutineList, able);
}
-
- ///
- /// 根据协程 id 停止协程
- ///
+
public void StopCoroutine(long coroutineId)
{
ProxyCoroutineHandler.ProxyStopCoroutine(ref _coroutineList, coroutineId);
}
- ///
- /// 停止所有协程
- ///
public void StopAllCoroutine()
{
ProxyCoroutineHandler.ProxyStopAllCoroutine(ref _coroutineList);
diff --git a/DungeonShooting_Godot/src/framework/coroutine/ICoroutine.cs b/DungeonShooting_Godot/src/framework/coroutine/ICoroutine.cs
new file mode 100644
index 0000000..4f57206
--- /dev/null
+++ b/DungeonShooting_Godot/src/framework/coroutine/ICoroutine.cs
@@ -0,0 +1,23 @@
+
+using System.Collections;
+
+///
+/// 协程基础功能接口
+///
+public interface ICoroutine
+{
+ ///
+ /// 开启一个协程, 返回协程 id, 协程是在普通帧执行的, 支持: 协程嵌套, WaitForSeconds, WaitForFixedProcess, Task, SignalAwaiter
+ ///
+ public long StartCoroutine(IEnumerator able);
+
+ ///
+ /// 根据协程 id 停止协程
+ ///
+ public void StopCoroutine(long coroutineId);
+
+ ///
+ /// 停止所有协程
+ ///
+ public void StopAllCoroutine();
+}
\ No newline at end of file
diff --git a/DungeonShooting_Godot/src/framework/ui/UiBase.cs b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
index 614cbef..401fa06 100644
--- a/DungeonShooting_Godot/src/framework/ui/UiBase.cs
+++ b/DungeonShooting_Godot/src/framework/ui/UiBase.cs
@@ -7,7 +7,7 @@
/// Ui 基类
///
[Tool]
-public abstract partial class UiBase : Control
+public abstract partial class UiBase : Control, ICoroutine
{
///
/// 当前 UI 所属层级
@@ -172,6 +172,10 @@
public sealed override void _Process(double delta)
{
+ if (!IsOpen)
+ {
+ return;
+ }
var newDelta = (float)delta;
Process(newDelta);
@@ -221,26 +225,17 @@
_nestedUiSet.Remove(uiBase);
}
}
-
- ///
- /// 开启一个协程, 返回协程 id, 协程是在普通帧执行的, 支持: 协程嵌套, WaitForSeconds, WaitForFixedProcess, Task, SignalAwaiter
- ///
+
public long StartCoroutine(IEnumerator able)
{
return ProxyCoroutineHandler.ProxyStartCoroutine(ref _coroutineList, able);
}
-
- ///
- /// 根据协程 id 停止协程
- ///
+
public void StopCoroutine(long coroutineId)
{
ProxyCoroutineHandler.ProxyStopCoroutine(ref _coroutineList, coroutineId);
}
- ///
- /// 停止所有协程
- ///
public void StopAllCoroutine()
{
ProxyCoroutineHandler.ProxyStopAllCoroutine(ref _coroutineList);
diff --git a/DungeonShooting_Godot/src/game/GameApplication.cs b/DungeonShooting_Godot/src/game/GameApplication.cs
index bf1cfa8..b542aa5 100644
--- a/DungeonShooting_Godot/src/game/GameApplication.cs
+++ b/DungeonShooting_Godot/src/game/GameApplication.cs
@@ -7,7 +7,7 @@
using Godot;
using UI.BottomTips;
-public partial class GameApplication : Node2D
+public partial class GameApplication : Node2D, ICoroutine
{
public static GameApplication Instance { get; private set; }
@@ -199,25 +199,16 @@
return (viewPos - (GameCamera.Main.GlobalPosition + GameCamera.Main.Offset) + (ViewportSize / 2)) * PixelScale;
}
- ///
- /// 开启一个协程, 返回协程 id, 协程是在普通帧执行的, 支持: 协程嵌套, WaitForSeconds, WaitForFixedProcess, Task, SignalAwaiter
- ///
public long StartCoroutine(IEnumerator able)
{
return ProxyCoroutineHandler.ProxyStartCoroutine(ref _coroutineList, able);
}
-
- ///
- /// 根据协程 id 停止协程
- ///
+
public void StopCoroutine(long coroutineId)
{
ProxyCoroutineHandler.ProxyStopCoroutine(ref _coroutineList, coroutineId);
}
-
- ///
- /// 停止所有协程
- ///
+
public void StopAllCoroutine()
{
ProxyCoroutineHandler.ProxyStopAllCoroutine(ref _coroutineList);