From a9afe94ebc06154888c8e48f8e314dcb514ec0a4 Mon Sep 17 00:00:00 2001 From: hzhang Date: Tue, 30 Jul 2024 17:59:52 +0100 Subject: [PATCH] Bracket System & Godot Upgrade To 4.3 RC1 --- src/Hermeteus/EBracketRouter.cs | 16 ++++++++++++++++ src/Hermeteus/IBracketStory.cs | 3 +++ src/Hermeteus/IBracketTalk.cs | 1 + src/Hermeteus/IInstructionAgent.cs | 13 +++++++++++++ src/Hermeteus/Processors/IBracketProcessor.cs | 7 ++++--- src/Scenes/IRootScene.cs | 4 ++-- src/UIElements/IInstructionHint.cs | 9 --------- src/UIElements/Layers/IInstructionLayer.cs | 13 +++++++++++++ 8 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 src/Hermeteus/EBracketRouter.cs create mode 100644 src/Hermeteus/IInstructionAgent.cs delete mode 100644 src/UIElements/IInstructionHint.cs create mode 100644 src/UIElements/Layers/IInstructionLayer.cs diff --git a/src/Hermeteus/EBracketRouter.cs b/src/Hermeteus/EBracketRouter.cs new file mode 100644 index 0000000..5dd4427 --- /dev/null +++ b/src/Hermeteus/EBracketRouter.cs @@ -0,0 +1,16 @@ +namespace Nocturnis.Hermeteus; + +public static class EBracketRouter +{ + public static IBracketRouter RouteAndSkip(this IBracketRouter router) + { + IBracketRouter pr = router.Route(); + while (pr is IBracketTalk { CanSkip: true } prt) + { + prt.Finished = true; + pr = pr.RouteAndSkip(); + } + return pr; + } +} + diff --git a/src/Hermeteus/IBracketStory.cs b/src/Hermeteus/IBracketStory.cs index f75904a..8c2e36e 100644 --- a/src/Hermeteus/IBracketStory.cs +++ b/src/Hermeteus/IBracketStory.cs @@ -1,3 +1,4 @@ +using Nocturnis.Hermeteus.Processors; using Skeleton.DataStructure.Tree; namespace Nocturnis.Hermeteus; @@ -6,4 +7,6 @@ public interface IBracketStory : IBracketRouter { IBracketChapter CurrentChapter { get; set; } IBracketChapter[] Children { get; set; } + IBracketRouter CurrentRouter { get; set; } + bool Process(IBracketProcessor processor); } diff --git a/src/Hermeteus/IBracketTalk.cs b/src/Hermeteus/IBracketTalk.cs index 91d2dcc..2a3bcb7 100644 --- a/src/Hermeteus/IBracketTalk.cs +++ b/src/Hermeteus/IBracketTalk.cs @@ -14,4 +14,5 @@ public interface IBracketTalk : IBracketRouter HashSet Conditions { get; set; } Vector2[] ArrowMarkers { get; set; } bool Finished { get; set; } + bool CanSkip { get; set; } } diff --git a/src/Hermeteus/IInstructionAgent.cs b/src/Hermeteus/IInstructionAgent.cs new file mode 100644 index 0000000..ae43c8c --- /dev/null +++ b/src/Hermeteus/IInstructionAgent.cs @@ -0,0 +1,13 @@ +using Godot; +using Nocturnis.UIElements.Layers; + +namespace Nocturnis.Hermeteus; + +public interface IInstructionAgent : INodeInterface +{ + void Load(string content, Action callBack); + void Clean(Action callBack); + void LoadArrows(Vector2[] ends); + void CleanArrows(); + void Init(IInstructionLayer insLayer); +} \ No newline at end of file diff --git a/src/Hermeteus/Processors/IBracketProcessor.cs b/src/Hermeteus/Processors/IBracketProcessor.cs index a188c28..7464022 100644 --- a/src/Hermeteus/Processors/IBracketProcessor.cs +++ b/src/Hermeteus/Processors/IBracketProcessor.cs @@ -4,13 +4,14 @@ namespace Nocturnis.Hermeteus.Processors; public interface IBracketProcessor { - IInstructionHint Bra { get; } - IInstructionHint Ket { get; } + IInstructionAgent Bra { get; set; } + IInstructionAgent Ket { get; set; } void BraCallback(); void KetCallback(); bool BraFinished { get; set; } bool KetFinished { get; set; } double BracketEsc { get; set; } string Status { get; set; } - void Process(double delta); + void Init(IInstructionAgent bra, IInstructionAgent pointer, IInstructionAgent ket); + void SyncLoad(IBracketTalk talk); } diff --git a/src/Scenes/IRootScene.cs b/src/Scenes/IRootScene.cs index c3f7601..a68c49e 100644 --- a/src/Scenes/IRootScene.cs +++ b/src/Scenes/IRootScene.cs @@ -1,4 +1,5 @@ using Godot; +using Nocturnis.Hermeteus; using Nocturnis.UIElements; using Nocturnis.UIElements.Layers; @@ -10,6 +11,5 @@ public interface IRootScene IKeyListener KeyListener { get; set; } TextureButton EngineSwitch { get; set; } IWindowLayer WindowLayer { get; set; } - IInstructionHint Bra { get; set; } - IInstructionHint Ket { get; set; } + IInstructionLayer InstructionLayer { get; set; } } \ No newline at end of file diff --git a/src/UIElements/IInstructionHint.cs b/src/UIElements/IInstructionHint.cs deleted file mode 100644 index 4c344de..0000000 --- a/src/UIElements/IInstructionHint.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Nocturnis.UIElements; - -public interface IInstructionHint : INodeInterface -{ - void Load(string content); - void Load(string content, Action callBack); - void Clean(); - void Clean(Action callBack); -} \ No newline at end of file diff --git a/src/UIElements/Layers/IInstructionLayer.cs b/src/UIElements/Layers/IInstructionLayer.cs new file mode 100644 index 0000000..a42028a --- /dev/null +++ b/src/UIElements/Layers/IInstructionLayer.cs @@ -0,0 +1,13 @@ +using Nocturnis.Hermeteus; +using Nocturnis.Hermeteus.Processors; + +namespace Nocturnis.UIElements.Layers; + +public interface IInstructionLayer : INodeInterface +{ + IInstructionAgent Bra { get; set; } + IInstructionAgent Pointer { get; set; } + IInstructionAgent Ket { get; set; } + IBracketProcessor Processor { get; set; } + void Init(); +}