From e9b92055146a34bedfab07b923d0ddd3a8263683 Mon Sep 17 00:00:00 2001 From: iisaev Date: Fri, 16 Oct 2026 16:18:22 +0000 Subject: [PATCH] upd: sync local changes Co-Authored-By: Claude Opus 5.5 --- collections/dev_tools.json | 1 + locale/ui_en.properties | 2 +- locale/ui_ru.properties | 2 +- manifest.json | 4 ++-- src/CatalogExport/CatalogExportToolProvider.cs | 1 + src/CatalogExport/CatalogExportWindow.cs | 1 + .../InteractiveEditorToolProvider.cs | 1 + src/InteractiveEditor/InteractiveEditorWindow.cs | 9 ++++++++- src/LightEditor/LightEditorController.cs | 2 +- src/LightEditor/LightEditorHandle.cs | 2 +- src/LightEditor/LightEditorToolProvider.cs | 1 + src/LightEditor/LightEditorWindow.cs | 3 ++- src/MapEditor/MapEditorCanvas.cs | 2 +- src/MapEditor/MapEditorController.cs | 2 +- src/MapEditor/MapEditorToolProvider.cs | 1 + src/MapEditor/MapEditorWindow.cs | 2 ++ src/ScenarioEditor/ScenarioEditTabs.cs | 12 ++++++++++++ src/ScenarioEditor/ScenarioEditorToolProvider.cs | 1 + src/ScenarioEditor/ScenarioEditorWindow.cs | 10 +++++++++- src/ScenarioEditor/ScenarioFileTreePanel.cs | 2 ++ src/ScenarioEditor/ScenarioGraphView.cs | 3 +++ src/ScenarioEditor/ScenarioInfoPanel.cs | 3 +++ src/ScenarioEditor/ScenarioThumbnailPanel.cs | 3 +++ src/SceneBuilder/InspectorBoolField.cs | 1 + src/SceneBuilder/InspectorColorField.cs | 1 + src/SceneBuilder/InspectorEnumField.cs | 1 + src/SceneBuilder/InspectorNumericField.cs | 1 + src/SceneBuilder/InspectorPanel.cs | 1 + src/SceneBuilder/InspectorTextField.cs | 1 + src/SceneBuilder/InspectorVector2Field.cs | 1 + src/SceneBuilder/SceneBuilderController.cs | 2 ++ src/SceneBuilder/SceneBuilderToolProvider.cs | 1 + src/SceneBuilder/SceneBuilderWindow.cs | 1 + src/SceneBuilder/SelectionOverlay.cs | 1 + src/SceneBuilder/TscnLiteralReader.cs | 5 +++++ src/Services/MapFileService.cs | 2 +- src/Services/ScenarioFileService.cs | 2 ++ src/Services/ScenarioGraphData.cs | 4 ++++ src/Services/ScenarioSyntaxService.cs | 1 + 39 files changed, 84 insertions(+), 12 deletions(-) diff --git a/collections/dev_tools.json b/collections/dev_tools.json index a6fe423..b711aea 100644 --- a/collections/dev_tools.json +++ b/collections/dev_tools.json @@ -1,5 +1,6 @@ { "id": "dev_tools", + "kind": "toolset", "name": "Developer Tools", "author": "ct", "version": "1.0.0", diff --git a/locale/ui_en.properties b/locale/ui_en.properties index 15db9a0..aaa0d9a 100644 --- a/locale/ui_en.properties +++ b/locale/ui_en.properties @@ -1,5 +1,5 @@ mod_tools_name = Tools -mod_tools_desc = Development tools +mod_tools_desc = Developer toolbox: scenario graph editor, map editor with zones, scene builder with inspector, interactive and light editors, and the mod catalog export window. tools/light_editor/title = Light Editor tools/light_editor/background = Background diff --git a/locale/ui_ru.properties b/locale/ui_ru.properties index 32c7836..634ccba 100644 --- a/locale/ui_ru.properties +++ b/locale/ui_ru.properties @@ -1,6 +1,6 @@ # Русская локализация для инструментов разработки mod_tools_name = Инструменты -mod_tools_desc = Инструменты разработчика +mod_tools_desc = Инструменты разработчика: редактор сценариев (граф), редактор карты с зонами, конструктор сцен с инспектором, редакторы интерактива и света, экспорт каталога модов. tools/light_editor/title = Редактор освещения tools/light_editor/background = Фон diff --git a/manifest.json b/manifest.json index c2f2b18..951300e 100644 --- a/manifest.json +++ b/manifest.json @@ -3,10 +3,10 @@ "name": "Tools", "version": "1.0.0", "author": "ct", - "description": "Development tools", + "description": "Developer toolbox of ToolBox windows: scenario graph editor, map editor with zones, scene builder with inspector, interactive and light editors, and the mod catalog export window.", "category": "tools, editor", "sources": [ "src/**/*.cs" ], - "depends": ["visual_novel_core>=1"] + "depends": ["visual_novel_core>=1", "dialog_base>=1", "interactive_base>=1", "time_base>=1", "map_base>=1", "interface>=1"] } diff --git a/src/CatalogExport/CatalogExportToolProvider.cs b/src/CatalogExport/CatalogExportToolProvider.cs index 1796877..fa45343 100644 --- a/src/CatalogExport/CatalogExportToolProvider.cs +++ b/src/CatalogExport/CatalogExportToolProvider.cs @@ -1,6 +1,7 @@ using Cthangover.Core.UI.Tool; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.CatalogExport { /// diff --git a/src/CatalogExport/CatalogExportWindow.cs b/src/CatalogExport/CatalogExportWindow.cs index c009ad9..932f0f7 100644 --- a/src/CatalogExport/CatalogExportWindow.cs +++ b/src/CatalogExport/CatalogExportWindow.cs @@ -8,6 +8,7 @@ using Cthangover.Core.UI.Tool; using Cthangover.Core.Utils; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.CatalogExport { /// diff --git a/src/InteractiveEditor/InteractiveEditorToolProvider.cs b/src/InteractiveEditor/InteractiveEditorToolProvider.cs index b0a6ab0..df60944 100644 --- a/src/InteractiveEditor/InteractiveEditorToolProvider.cs +++ b/src/InteractiveEditor/InteractiveEditorToolProvider.cs @@ -1,6 +1,7 @@ using Cthangover.Core.UI.Tool; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Tools.InteractiveEditor { /// diff --git a/src/InteractiveEditor/InteractiveEditorWindow.cs b/src/InteractiveEditor/InteractiveEditorWindow.cs index 7c7ead4..a3bc352 100644 --- a/src/InteractiveEditor/InteractiveEditorWindow.cs +++ b/src/InteractiveEditor/InteractiveEditorWindow.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using Cthangover.Core.Interactive; using Cthangover.Core.Mods; @@ -10,8 +10,15 @@ using Cthangover.Core.Utils; using Cthangover.Tools.Services; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Tools.InteractiveEditor { + /// + /// Tool window for creating and editing interactive object definitions: + /// renders the selected background with draggable collider handles + /// (rect, circle, polygon), edits the definition's fields, and writes the + /// resulting JSON back into a mod directory. + /// public partial class InteractiveEditorWindow : ToolWindow { private static readonly Color _rectColor = UiTokens.Alpha(UiTokens.Success, 0.6f); diff --git a/src/LightEditor/LightEditorController.cs b/src/LightEditor/LightEditorController.cs index 28919aa..dca472a 100644 --- a/src/LightEditor/LightEditorController.cs +++ b/src/LightEditor/LightEditorController.cs @@ -2,7 +2,7 @@ using System.Collections.Generic; using System.Text.Json; using Cthangover.Core.Mods; using Cthangover.Core.Mods.Resolvers; -using Cthangover.Core.UI.Lights; +using Cthangover.Mods.Time; using Cthangover.Core.UI.Theming; using Godot; diff --git a/src/LightEditor/LightEditorHandle.cs b/src/LightEditor/LightEditorHandle.cs index 8c95884..97752dd 100644 --- a/src/LightEditor/LightEditorHandle.cs +++ b/src/LightEditor/LightEditorHandle.cs @@ -1,4 +1,4 @@ -using Cthangover.Core.UI.Lights; +using Cthangover.Mods.Time; using Godot; namespace Cthangover.Core.UI.Tool.LightEditor diff --git a/src/LightEditor/LightEditorToolProvider.cs b/src/LightEditor/LightEditorToolProvider.cs index fa2d6e2..c87b495 100644 --- a/src/LightEditor/LightEditorToolProvider.cs +++ b/src/LightEditor/LightEditorToolProvider.cs @@ -1,6 +1,7 @@ using Cthangover.Core.UI.Tool; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.LightEditor { /// Registers the light editor as a tool window. Creates instances. diff --git a/src/LightEditor/LightEditorWindow.cs b/src/LightEditor/LightEditorWindow.cs index 6cdd0e4..70644e1 100644 --- a/src/LightEditor/LightEditorWindow.cs +++ b/src/LightEditor/LightEditorWindow.cs @@ -2,12 +2,13 @@ using System; using System.Collections.Generic; using System.Text.Json; using Cthangover.Core.Factories.Impls; -using Cthangover.Core.UI.Lights; +using Cthangover.Mods.Time; using Cthangover.Core.UI.Theming; using Cthangover.Core.Utils; using Cthangover.Tools.Services; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.LightEditor { /// diff --git a/src/MapEditor/MapEditorCanvas.cs b/src/MapEditor/MapEditorCanvas.cs index d452e5f..c3b06c3 100644 --- a/src/MapEditor/MapEditorCanvas.cs +++ b/src/MapEditor/MapEditorCanvas.cs @@ -2,7 +2,7 @@ using System; using System.Collections.Generic; using Cthangover.Core.Mods.Resolvers; using Cthangover.Core.UI.Theming; -using Cthangover.Core.UI.Tool; +using Cthangover.Mods.Map; using Godot; namespace Cthangover.Tools.MapEditor diff --git a/src/MapEditor/MapEditorController.cs b/src/MapEditor/MapEditorController.cs index 0015634..2a07147 100644 --- a/src/MapEditor/MapEditorController.cs +++ b/src/MapEditor/MapEditorController.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Cthangover.Core.UI.Tool; +using Cthangover.Mods.Map; using Cthangover.Tools.Services; using Godot; diff --git a/src/MapEditor/MapEditorToolProvider.cs b/src/MapEditor/MapEditorToolProvider.cs index c86f503..5a0c295 100644 --- a/src/MapEditor/MapEditorToolProvider.cs +++ b/src/MapEditor/MapEditorToolProvider.cs @@ -1,6 +1,7 @@ using Cthangover.Core.UI.Tool; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Tools.MapEditor { /// diff --git a/src/MapEditor/MapEditorWindow.cs b/src/MapEditor/MapEditorWindow.cs index 86fda3b..bb657f4 100644 --- a/src/MapEditor/MapEditorWindow.cs +++ b/src/MapEditor/MapEditorWindow.cs @@ -8,11 +8,13 @@ using Cthangover.Core.Scenes; using Cthangover.Core.Settings; using Cthangover.Core.UI; using Cthangover.Core.UI.Theming; +using Cthangover.Mods.Map; using Cthangover.Core.UI.Tool; using Cthangover.Core.Utils; using Cthangover.Tools.Services; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Tools.MapEditor { /// diff --git a/src/ScenarioEditor/ScenarioEditTabs.cs b/src/ScenarioEditor/ScenarioEditTabs.cs index 82dd9a0..be4e2f7 100644 --- a/src/ScenarioEditor/ScenarioEditTabs.cs +++ b/src/ScenarioEditor/ScenarioEditTabs.cs @@ -8,6 +8,7 @@ using Godot; namespace Cthangover.Core.UI.Tool.ScenarioEditor { + /// State of one open scenario file tab: identity, saved text and dirty flag. public sealed class TabData { public string Key; @@ -18,6 +19,11 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor public bool IsDirty; } + /// + /// Tabbed editor area of the scenario editor: a permanent graph tab plus + /// one text tab per opened .scenario file, with dirty tracking and a + /// monospace syntax-highlighted code editor. + /// public partial class ScenarioEditTabs : VBoxContainer { private const int GraphTabIndex = 0; @@ -79,6 +85,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor AddChild(_graphView); } + /// Opens the scenario in a new tab, or just activates its existing tab. public void OpenFile(string key) { for (int i = 0; i < _tabs.Count; i++) @@ -123,6 +130,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor } } + /// Marks the active tab clean, remembering the editor text as the saved baseline. public void SaveCurrentFile() { if (_activeTabIndex < 0 || _activeTabIndex >= _tabs.Count) @@ -138,6 +146,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor } } + /// Replaces the editor text without firing the text-changed handler. public void SetTextSilent(string text) { _suppressTextChanged = true; @@ -145,6 +154,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor _suppressTextChanged = false; } + /// Switches to the graph tab when no file tabs are open. public void SetViewToGraph() { if (_tabs.Count > 0) @@ -156,6 +166,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor GraphTabSelected?.Invoke(); } + /// Rebuilds the graph from the current scenario files, if the graph tab is visible. public void RefreshGraph() { if (_graphView.Visible) @@ -165,6 +176,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor } } + /// Returns false when any tab still has unsaved changes. public bool ConfirmCloseAll() { for (int i = _tabs.Count - 1; i >= 0; i--) diff --git a/src/ScenarioEditor/ScenarioEditorToolProvider.cs b/src/ScenarioEditor/ScenarioEditorToolProvider.cs index ddfa7fb..a0b13a9 100644 --- a/src/ScenarioEditor/ScenarioEditorToolProvider.cs +++ b/src/ScenarioEditor/ScenarioEditorToolProvider.cs @@ -1,6 +1,7 @@ using Cthangover.Core.UI.Tool; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.ScenarioEditor { /// Registers the scenario editor as a tool window. Creates instances. diff --git a/src/ScenarioEditor/ScenarioEditorWindow.cs b/src/ScenarioEditor/ScenarioEditorWindow.cs index 050c211..ede46fb 100644 --- a/src/ScenarioEditor/ScenarioEditorWindow.cs +++ b/src/ScenarioEditor/ScenarioEditorWindow.cs @@ -1,12 +1,18 @@ -using System; +using System; using Cthangover.Core.Scenes; using Cthangover.Core.UI.Theming; using Cthangover.Core.Utils; using Cthangover.Tools.Services; using Godot; +using Cthangover.Mods.Interface.Tool; namespace Cthangover.Core.UI.Tool.ScenarioEditor { + /// + /// Tool window hosting the scenario editor: a file tree of every mod's + /// .scenario files, tabbed text/graph editors, metadata and thumbnail + /// panels, plus a play-test mode that runs the current scenario in-game. + /// public partial class ScenarioEditorWindow : ToolWindow { private Control _editLayout; @@ -32,6 +38,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor BuildUI(); } + /// Opens with the graph view so the editor starts on the cross-scene map. public override void _Ready() { _editTabs.SetViewToGraph(); @@ -41,6 +48,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor { } + /// Returns from play-test mode as soon as the in-game test play ends. public override void _Process(double delta) { if (_playActive && !SceneManager.IsTestPlayActive) diff --git a/src/ScenarioEditor/ScenarioFileTreePanel.cs b/src/ScenarioEditor/ScenarioFileTreePanel.cs index 8d68d16..88a1f83 100644 --- a/src/ScenarioEditor/ScenarioFileTreePanel.cs +++ b/src/ScenarioEditor/ScenarioFileTreePanel.cs @@ -6,6 +6,7 @@ using Godot; namespace Cthangover.Core.UI.Tool.ScenarioEditor { + /// Left-hand tree of every mod's scenario files, grouped by mod and subdirectory; raises on picks. public partial class ScenarioFileTreePanel : VBoxContainer { private Tree _fileTree; @@ -70,6 +71,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor return item.GetInstanceId().ToString(); } + /// Programmatically selects the tree row for a scenario key (no selection event). public void SelectFile(string key) { if (!_keyToTreeItem.TryGetValue(key, out var item)) diff --git a/src/ScenarioEditor/ScenarioGraphView.cs b/src/ScenarioEditor/ScenarioGraphView.cs index 45b5e9a..58ce70e 100644 --- a/src/ScenarioEditor/ScenarioGraphView.cs +++ b/src/ScenarioEditor/ScenarioGraphView.cs @@ -5,8 +5,10 @@ using Cthangover.Core.UI.Theming; using Cthangover.Tools.Services; using Godot; +using Cthangover.Mods.Interface.Theming; namespace Cthangover.Core.UI.Tool.ScenarioEditor { + /// Cross-scene graph of all scenario files: a GraphEdit of scene nodes linked by switch targets, with a detail panel for the selected scenario. public partial class ScenarioGraphView : HSplitContainer { private GraphEdit _graph; @@ -60,6 +62,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor panel.AddChild(_infoLabel); } + /// Rebuilds the graph nodes and edges, preserving the nodes' saved canvas positions. public void Populate(SceneGraphData data) { var savedPositions = SaveNodePositions(); diff --git a/src/ScenarioEditor/ScenarioInfoPanel.cs b/src/ScenarioEditor/ScenarioInfoPanel.cs index 20a696c..ae0f64b 100644 --- a/src/ScenarioEditor/ScenarioInfoPanel.cs +++ b/src/ScenarioEditor/ScenarioInfoPanel.cs @@ -4,6 +4,7 @@ using Godot; namespace Cthangover.Core.UI.Tool.ScenarioEditor { + /// Read-only metadata panel for the scenario in the active text tab: scene, priority, condition, switch targets, locale keys and quest references. public partial class ScenarioInfoPanel : VBoxContainer { private Label _infoScene; @@ -30,6 +31,7 @@ namespace Cthangover.Core.UI.Tool.ScenarioEditor _infoQuestRefs = GetNode