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