From 81dd30450422734ab6047d6ffdbd4a004f1258f3 Mon Sep 17 00:00:00 2001 From: ben_singer Date: Tue, 26 Nov 2024 16:53:59 +0000 Subject: [PATCH 1/2] Added visual frames --- .nuget/README.md | 1 + .../Everglades/Rooms/ForestEntrance.cs | 14 +- .../Visuals/ForestEntranceVisualFrame.cs | 110 ++++++ .../Assets/Regions/Hub/Rooms/Clearing.cs | 3 +- NetAF.Examples/Program.cs | 1 + .../Extensions/StringExtensions_Tests.cs | 10 + .../Logic/Modes/DirectRenderMode_Tests.cs | 30 ++ .../Rendering/Console/AnsiColor_Tests.cs | 53 +++ NetAF.Tests/Rendering/Console/Ansi_Tests.cs | 60 ++++ .../ConsoleAboutFrameBuilder_Tests.cs | 6 +- .../ConsoleCommandListFrameBuilder_Tests.cs | 6 +- .../ConsoleCompletionFrameBuilder_Tests.cs | 6 +- .../ConsoleConversationFrameBuilder_Tests.cs | 6 +- .../ConsoleGameOverFrameBuilder_Tests.cs | 6 +- .../ConsoleHelpFrameBuilder_Tests.cs | 6 +- .../ConsoleReactionFrameBuilder_Tests.cs | 6 +- .../ConsoleRegionMapBuilder_Tests.cs | 6 +- .../ConsoleRegionMapFrameBuilder_Tests.cs | 6 +- .../ConsoleRoomMapBuilder_Tests.cs | 6 +- .../ConsoleSceneFrameBuilder_Tests.cs | 6 +- .../ConsoleTitleFrameBuilder_Tests.cs | 6 +- .../ConsoleVisualFrameBuilder_Tests.cs | 23 ++ .../GridStringBuilder_Tests.cs | 5 +- .../Rendering/Console/GridTextFrame_Tests.cs | 46 +++ .../Console/GridVisualBuilder_Tests.cs | 179 ++++++++++ .../Console/GridVisualFrame_Tests.cs | 33 ++ .../TextWriterPresenter_Tests.cs | 4 +- .../Rendering/Console/Texture_Tests.cs | 109 ++++++ .../FrameBuilders/SceneHelper_Tests.cs | 1 - .../Rendering/Frames/GridTextFrame_Tests.cs | 99 ------ NetAF.Tests/TestConsoleAdapter.cs | 2 +- NetAF/Adapters/IIOAdapter.cs | 2 +- NetAF/Adapters/SystemConsoleAdapter.cs | 5 +- NetAF/Assets/ExaminableObject.cs | 4 +- NetAF/Assets/Examination.cs | 18 + NetAF/Assets/ExaminationCallback.cs | 6 +- NetAF/Assets/ExaminationResult.cs | 18 - NetAF/Assets/IExaminable.cs | 4 +- NetAF/Assets/Interaction.cs | 13 +- NetAF/Assets/Locations/Overworld.cs | 4 +- NetAF/Assets/Locations/Region.cs | 4 +- NetAF/Assets/Locations/Room.cs | 4 +- NetAF/Assets/Result.cs | 29 -- NetAF/Commands/Persistence/Load.cs | 2 +- NetAF/Commands/Persistence/Save.cs | 2 +- NetAF/Extensions/StringExtensions.cs | 13 +- .../CustomCommandInterpreter.cs | 4 +- NetAF/Logic/Modes/DirectRenderMode.cs | 35 ++ NetAF/Logic/Modes/RegionMapMode.cs | 2 +- NetAF/Rendering/Console/Ansi.cs | 92 +++++ NetAF/Rendering/Console/AnsiColor.cs | 181 ++++++++++ .../ConsoleAboutFrameBuilder.cs | 12 +- .../ConsoleCommandListFrameBuilder.cs | 6 +- .../ConsoleCompletionFrameBuilder.cs | 12 +- .../ConsoleConversationFrameBuilder.cs | 12 +- .../ConsoleGameOverFrameBuilder.cs | 12 +- .../FrameBuilders}/ConsoleHelpFrameBuilder.cs | 6 +- .../ConsoleReactionFrameBuilder.cs | 14 +- .../FrameBuilders}/ConsoleRegionMapBuilder.cs | 5 +- .../ConsoleRegionMapFrameBuilder.cs | 16 +- .../FrameBuilders}/ConsoleRoomMapBuilder.cs | 3 +- .../ConsoleSceneFrameBuilder.cs | 30 +- .../ConsoleTitleFrameBuilder.cs | 12 +- .../ConsoleVisualFrameBuilder.cs | 79 +++++ .../GridStringBuilder.cs | 5 +- .../{Frames => Console}/GridTextFrame.cs | 82 +---- NetAF/Rendering/Console/GridVisualBuilder.cs | 320 ++++++++++++++++++ NetAF/Rendering/Console/GridVisualFrame.cs | 171 ++++++++++ .../TextWriterPresenter.cs | 2 +- NetAF/Rendering/Console/Texture.cs | 113 +++++++ .../FrameBuilders/Console/AnsiColor.cs | 77 ----- .../FrameBuilders/FrameBuilderCollections.cs | 3 +- .../FrameBuilders/IAboutFrameBuilder.cs | 1 - .../FrameBuilders/ICommandListFrameBuilder.cs | 1 - .../FrameBuilders/ICompletionFrameBuilder.cs | 1 - .../IConversationFrameBuilder.cs | 1 - .../FrameBuilders/IGameOverFrameBuilder.cs | 1 - .../FrameBuilders/IHelpFrameBuilder.cs | 1 - .../FrameBuilders/IReactionFrameBuilder.cs | 1 - .../FrameBuilders/IRegionMapFrameBuilder.cs | 1 - .../FrameBuilders/ISceneFrameBuilder.cs | 1 - .../FrameBuilders/ITitleFrameBuilder.cs | 1 - .../FrameBuilders/IVisualFrameBuilder.cs | 20 ++ NetAF/Rendering/{Frames => }/IFrame.cs | 4 +- .../{Presenters => }/IFramePresenter.cs | 2 +- README.md | 1 + docs/docfx/docs/frame-builders.md | 1 + 87 files changed, 1844 insertions(+), 483 deletions(-) create mode 100644 NetAF.Examples/Assets/Regions/Everglades/Visuals/ForestEntranceVisualFrame.cs create mode 100644 NetAF.Tests/Logic/Modes/DirectRenderMode_Tests.cs create mode 100644 NetAF.Tests/Rendering/Console/AnsiColor_Tests.cs create mode 100644 NetAF.Tests/Rendering/Console/Ansi_Tests.cs rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleAboutFrameBuilder_Tests.cs (84%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleCommandListFrameBuilder_Tests.cs (81%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleCompletionFrameBuilder_Tests.cs (80%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleConversationFrameBuilder_Tests.cs (95%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleGameOverFrameBuilder_Tests.cs (80%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleHelpFrameBuilder_Tests.cs (88%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleReactionFrameBuilder_Tests.cs (88%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRegionMapBuilder_Tests.cs (87%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRegionMapFrameBuilder_Tests.cs (94%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRoomMapBuilder_Tests.cs (97%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleSceneFrameBuilder_Tests.cs (98%) rename NetAF.Tests/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleTitleFrameBuilder_Tests.cs (80%) create mode 100644 NetAF.Tests/Rendering/Console/FrameBuilders/ConsoleVisualFrameBuilder_Tests.cs rename NetAF.Tests/Rendering/{FrameBuilders => Console}/GridStringBuilder_Tests.cs (96%) create mode 100644 NetAF.Tests/Rendering/Console/GridTextFrame_Tests.cs create mode 100644 NetAF.Tests/Rendering/Console/GridVisualBuilder_Tests.cs create mode 100644 NetAF.Tests/Rendering/Console/GridVisualFrame_Tests.cs rename NetAF.Tests/Rendering/{Presenters => Console}/TextWriterPresenter_Tests.cs (91%) create mode 100644 NetAF.Tests/Rendering/Console/Texture_Tests.cs delete mode 100644 NetAF.Tests/Rendering/Frames/GridTextFrame_Tests.cs create mode 100644 NetAF/Assets/Examination.cs delete mode 100644 NetAF/Assets/ExaminationResult.cs delete mode 100644 NetAF/Assets/Result.cs create mode 100644 NetAF/Logic/Modes/DirectRenderMode.cs create mode 100644 NetAF/Rendering/Console/Ansi.cs create mode 100644 NetAF/Rendering/Console/AnsiColor.cs rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleAboutFrameBuilder.cs (91%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleCommandListFrameBuilder.cs (95%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleCompletionFrameBuilder.cs (88%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleConversationFrameBuilder.cs (96%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleGameOverFrameBuilder.cs (88%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleHelpFrameBuilder.cs (95%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleReactionFrameBuilder.cs (90%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRegionMapBuilder.cs (99%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRegionMapFrameBuilder.cs (93%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleRoomMapBuilder.cs (99%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleSceneFrameBuilder.cs (86%) rename NetAF/Rendering/{FrameBuilders/Console => Console/FrameBuilders}/ConsoleTitleFrameBuilder.cs (88%) create mode 100644 NetAF/Rendering/Console/FrameBuilders/ConsoleVisualFrameBuilder.cs rename NetAF/Rendering/{FrameBuilders => Console}/GridStringBuilder.cs (98%) rename NetAF/Rendering/{Frames => Console}/GridTextFrame.cs (52%) create mode 100644 NetAF/Rendering/Console/GridVisualBuilder.cs create mode 100644 NetAF/Rendering/Console/GridVisualFrame.cs rename NetAF/Rendering/{Presenters => Console}/TextWriterPresenter.cs (97%) create mode 100644 NetAF/Rendering/Console/Texture.cs delete mode 100644 NetAF/Rendering/FrameBuilders/Console/AnsiColor.cs create mode 100644 NetAF/Rendering/FrameBuilders/IVisualFrameBuilder.cs rename NetAF/Rendering/{Frames => }/IFrame.cs (91%) rename NetAF/Rendering/{Presenters => }/IFramePresenter.cs (92%) diff --git a/.nuget/README.md b/.nuget/README.md index 35a21d56..03a91c98 100644 --- a/.nuget/README.md +++ b/.nuget/README.md @@ -91,6 +91,7 @@ NetAF provides frames for rendering the various game screens. These are fully ex * Game over frame. * Transition frame. * Conversation frame. + * Visual frame. ### Maps Maps are automatically generated for regions and rooms, and can be viewed with the **map** command: diff --git a/NetAF.Examples/Assets/Regions/Everglades/Rooms/ForestEntrance.cs b/NetAF.Examples/Assets/Regions/Everglades/Rooms/ForestEntrance.cs index 6a6fc338..ece53efb 100644 --- a/NetAF.Examples/Assets/Regions/Everglades/Rooms/ForestEntrance.cs +++ b/NetAF.Examples/Assets/Regions/Everglades/Rooms/ForestEntrance.cs @@ -1,4 +1,7 @@ using NetAF.Assets.Locations; +using NetAF.Commands; +using NetAF.Examples.Assets.Regions.Everglades.Visuals; +using NetAF.Logic.Modes; using NetAF.Utilities; namespace NetAF.Examples.Assets.Regions.Everglades.Rooms @@ -20,7 +23,16 @@ internal class ForestEntrance : IAssetTemplate /// The asset. public Room Instantiate() { - return new(Name, Description, [new Exit(Direction.North)]); + return new(Name, Description, [new Exit(Direction.North)], commands: + [ + new(new("Look", "Look around the area."), true, true, (g, a) => + { + var frame = new ForestEntranceVisualFrame(Name, g.Configuration.DisplaySize).Instantiate(); + g.ChangeMode(new DirectRenderMode(frame)); + return new(ReactionResult.GameModeChanged, string.Empty); + }) + ]); + } #endregion diff --git a/NetAF.Examples/Assets/Regions/Everglades/Visuals/ForestEntranceVisualFrame.cs b/NetAF.Examples/Assets/Regions/Everglades/Visuals/ForestEntranceVisualFrame.cs new file mode 100644 index 00000000..b0844db5 --- /dev/null +++ b/NetAF.Examples/Assets/Regions/Everglades/Visuals/ForestEntranceVisualFrame.cs @@ -0,0 +1,110 @@ +using NetAF.Assets; +using NetAF.Extensions; +using NetAF.Rendering; +using NetAF.Rendering.Console; +using NetAF.Rendering.Console.FrameBuilders; +using NetAF.Utilities; + +namespace NetAF.Examples.Assets.Regions.Everglades.Visuals +{ + internal class ForestEntranceVisualFrame(string name, Size size) : IAssetTemplate