按 CLAUDE.md 编辑器插件规范:控件经 designer_ui 工厂创建、标签中英双语中文在前、 combine 下拉存 key 不存显示串、_save 合并式写回防丢键、UI 在 _ready 而非 _init 构建。 另修:SpinBox 按 step 吸附会引入双精度噪声(0.01 → 0.00999999999476), 直接写回会把噪声固化进 JSON;_collect 用 snappedf(v, 1e-6) 抹平, 使「不改任何值就保存」得到逐位一致的 attributes.json。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
1.4 KiB
GDScript
29 lines
1.4 KiB
GDScript
## 游戏设计器主面板 — TabContainer 整合 法术/敌人/波次/Core/平衡 五个编辑器
|
||
@tool
|
||
extends Control
|
||
|
||
func _init() -> void:
|
||
custom_minimum_size = Vector2(0, 320)
|
||
var tabs := TabContainer.new()
|
||
tabs.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT)
|
||
add_child(tabs)
|
||
|
||
# 法术(字段化表单 tab)
|
||
_add_tab(tabs, "✨ 法术", preload("res://addons/game_designer/spell_tab.gd").new())
|
||
_add_tab(tabs, "👾 敌人", preload("res://addons/game_designer/enemy_tab.gd").new())
|
||
_add_tab(tabs, "🌊 波次", preload("res://addons/game_designer/wave_tab.gd").new())
|
||
_add_tab(tabs, "🪄 Core", preload("res://addons/game_designer/core_tab.gd").new())
|
||
_add_tab(tabs, "🔮 共鸣", preload("res://addons/game_designer/resonance_tab.gd").new())
|
||
_add_tab(tabs, "🔥 状态", preload("res://addons/game_designer/status_tab.gd").new())
|
||
_add_tab(tabs, "👑 Boss", preload("res://addons/game_designer/boss_tab.gd").new())
|
||
_add_tab(tabs, "⚖ 平衡", preload("res://addons/game_designer/balance_tab.gd").new())
|
||
_add_tab(tabs, "📊 属性", preload("res://addons/game_designer/attribute_tab.gd").new())
|
||
|
||
func _add_tab(tabs: TabContainer, title: String, content: Control) -> void:
|
||
var scroll := ScrollContainer.new()
|
||
scroll.name = title
|
||
scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED
|
||
content.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||
scroll.add_child(content)
|
||
tabs.add_child(scroll)
|