From 75c9d51cd0f86fc9aca04e4c751bfa916028570c Mon Sep 17 00:00:00 2001 From: iisaev Date: Sun, 18 Oct 2026 19:00:29 +0200 Subject: [PATCH] Mod naming rule and engine UI in engine mods Mods are renamed by role (shell2d_base, menu_base, ui_base, live2d_base, editor_tools, cthangover_story, cthangover_murakami, cthangover_party) and every reference follows. Engine UI prefabs (dialog, answers, message, game menu, inventory, map, skills) and their panel entries moved out of the story mod into the subsystem mods; the card_novel and vn_starter_novel collections are removed. --- manifest.json | 16 +- scenes/ui/inventory_item.tscn | 10 ++ scenes/ui/inventory_panel.tscn | 152 ++++++++++++++++++ test_suites/inventory/manifest.json | 2 +- .../inventory/src/InventoryTestDriverNode.cs | 2 +- 5 files changed, 179 insertions(+), 3 deletions(-) create mode 100644 scenes/ui/inventory_item.tscn create mode 100644 scenes/ui/inventory_panel.tscn diff --git a/manifest.json b/manifest.json index 3bcb875..293d5ca 100644 --- a/manifest.json +++ b/manifest.json @@ -8,8 +8,22 @@ "sources": [ "src/**/*.cs" ], - "depends": ["base2d>=1", "interface>=1"], + "depends": ["shell2d_base>=1", "ui_base>=1"], "test_suites": [ {"id": "inventory", "activate": ["--itest=inventory"]} + ], + "ui": [ + { + "id": "inventory", + "kind": "panel", + "slot": "ModBeforeUIPanel", + "scene_path": "scenes/ui/inventory_panel.tscn", + "button": { + "icon": "bag", + "locale": "ui/inventory/title", + "index": 20 + }, + "priority": 10 + } ] } diff --git a/scenes/ui/inventory_item.tscn b/scenes/ui/inventory_item.tscn new file mode 100644 index 0000000..60f5ca5 --- /dev/null +++ b/scenes/ui/inventory_item.tscn @@ -0,0 +1,10 @@ +[gd_scene format=3] + +[ext_resource type="Script" path="res://mods/items_base/src/ui/InventoryItemBehaviour.cs" id="1"] + +[node name="InventoryItem" type="Control"] +layout_mode = 3 +anchors_preset = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +script = ExtResource("1") diff --git a/scenes/ui/inventory_panel.tscn b/scenes/ui/inventory_panel.tscn new file mode 100644 index 0000000..a31a6e9 --- /dev/null +++ b/scenes/ui/inventory_panel.tscn @@ -0,0 +1,152 @@ +[gd_scene format=3] + +[ext_resource type="Script" path="res://mods/items_base/src/ui/InventoryPanelBehaviour.cs" id="1_script"] + +[node name="InventoryPanel" type="Control"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 +script = ExtResource("1_script") + +[node name="Backdrop" type="ColorRect" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Panel" type="Panel" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 40.0 +offset_top = 78.0 +offset_right = -40.0 +offset_bottom = -30.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 1 + +[node name="Margin" type="MarginContainer" parent="Panel"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 24 +theme_override_constants/margin_top = 16 +theme_override_constants/margin_right = 24 +theme_override_constants/margin_bottom = 14 +mouse_filter = 1 + +[node name="Root" type="VBoxContainer" parent="Panel/Margin"] +layout_mode = 2 +theme_override_constants/separation = 12 +mouse_filter = 1 + +[node name="Header" type="HBoxContainer" parent="Panel/Margin/Root"] +layout_mode = 2 +theme_override_constants/separation = 18 + +[node name="Title" type="Label" parent="Panel/Margin/Root/Header"] +layout_mode = 2 +theme_override_font_sizes/font_size = 24 + +[node name="Tabs" type="HBoxContainer" parent="Panel/Margin/Root/Header"] +layout_mode = 2 +theme_override_constants/separation = 6 + +[node name="HeaderSpacer" type="Control" parent="Panel/Margin/Root/Header"] +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 2 + +[node name="ApBox" type="HBoxContainer" parent="Panel/Margin/Root/Header"] +visible = false +layout_mode = 2 +theme_override_constants/separation = 8 + +[node name="ApLabel" type="Label" parent="Panel/Margin/Root/Header/ApBox"] +layout_mode = 2 +theme_override_font_sizes/font_size = 11 + +[node name="ApPips" type="HBoxContainer" parent="Panel/Margin/Root/Header/ApBox"] +layout_mode = 2 +theme_override_constants/separation = 5 + +[node name="CloseButton" type="Button" parent="Panel/Margin/Root/Header"] +custom_minimum_size = Vector2(38, 38) +layout_mode = 2 +focus_mode = 0 +text = "✕" + +[node name="Rule" type="Panel" parent="Panel/Margin/Root"] +custom_minimum_size = Vector2(0, 1) +layout_mode = 2 +mouse_filter = 2 + +[node name="Toolbar" type="HBoxContainer" parent="Panel/Margin/Root"] +layout_mode = 2 +theme_override_constants/separation = 10 + +[node name="Search" type="LineEdit" parent="Panel/Margin/Root/Toolbar"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_font_sizes/font_size = 13 + +[node name="SortOption" type="OptionButton" parent="Panel/Margin/Root/Toolbar"] +layout_mode = 2 +theme_override_font_sizes/font_size = 13 + +[node name="Body" type="HBoxContainer" parent="Panel/Margin/Root"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/separation = 14 + +[node name="Left" type="VBoxContainer" parent="Panel/Margin/Root/Body"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 10 + +[node name="GridScroll" type="ScrollContainer" parent="Panel/Margin/Root/Body/Left"] +layout_mode = 2 +size_flags_vertical = 3 +horizontal_scroll_mode = 0 + +[node name="GridContent" type="Control" parent="Panel/Margin/Root/Body/Left/GridScroll"] +layout_mode = 2 +size_flags_horizontal = 3 +mouse_filter = 0 + +[node name="GridFooter" type="HBoxContainer" parent="Panel/Margin/Root/Body/Left"] +layout_mode = 2 +theme_override_constants/separation = 16 + +[node name="ShownLabel" type="Label" parent="Panel/Margin/Root/Body/Left/GridFooter"] +layout_mode = 2 +theme_override_font_sizes/font_size = 12 + +[node name="HintLabel" type="Label" parent="Panel/Margin/Root/Body/Left/GridFooter"] +layout_mode = 2 +theme_override_font_sizes/font_size = 12 + +[node name="Right" type="PanelContainer" parent="Panel/Margin/Root/Body"] +custom_minimum_size = Vector2(430, 0) +layout_mode = 2 + +[node name="PassportScroll" type="ScrollContainer" parent="Panel/Margin/Root/Body/Right"] +layout_mode = 2 +horizontal_scroll_mode = 0 + +[node name="Passport" type="VBoxContainer" parent="Panel/Margin/Root/Body/Right/PassportScroll"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 14 diff --git a/test_suites/inventory/manifest.json b/test_suites/inventory/manifest.json index 2bdc715..d46d190 100644 --- a/test_suites/inventory/manifest.json +++ b/test_suites/inventory/manifest.json @@ -5,6 +5,6 @@ "src/*.cs" ], "depends": [ - "visual_novel_core>=1" + "cthangover_story>=1" ] } diff --git a/test_suites/inventory/src/InventoryTestDriverNode.cs b/test_suites/inventory/src/InventoryTestDriverNode.cs index afb1c46..6875adf 100644 --- a/test_suites/inventory/src/InventoryTestDriverNode.cs +++ b/test_suites/inventory/src/InventoryTestDriverNode.cs @@ -100,7 +100,7 @@ namespace Mods.InventoryTest return; } - // Шаг 1: UI-запись инвентаря зарегистрирована модом visual_novel_core. + // Шаг 1: UI-запись инвентаря зарегистрирована модом cthangover_story. if (step == 1) { Check("entry registered", () =>