docs(plan): Task4 补两条约束——不做热重载 + inverse 的 hard 语义相反需在 UI 体现
remove_modifiers_from 在无命中时提前返回,不是强制重新同步原语,故热重载不能 指望它;本页与其它设计器页一致,保存后提示重启生效即可。 inverse 下 hard 是下限、0 表示钳到 0,与 hybrid/add_int 的「0 = 不钳制」相反, 设计师填 0 期待「不限制」会得到相反结果,提示文案需体现。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -454,6 +454,10 @@ EOF
|
|||||||
- Modify: `addons/game_designer/designer_panel.gd`(`_init()` 里 `_add_tab` 注册)
|
- Modify: `addons/game_designer/designer_panel.gd`(`_init()` 里 `_add_tab` 注册)
|
||||||
|
|
||||||
> 按 CLAUDE.md「新增分页 3 步」:`@tool extends VBoxContainer` 标签脚本(复用 `designer_ui.gd`)→ `designer_panel.gd` 的 `_init()` 里 `_add_tab(...)` → 对应加载。控件一律经 `UI.spin/opt/btn/header/status_label/load_json/save_json` 创建,**不要**自建裸控件。标签「中文 English」双语序。`combine` 下拉**存 key 不存显示串**。
|
> 按 CLAUDE.md「新增分页 3 步」:`@tool extends VBoxContainer` 标签脚本(复用 `designer_ui.gd`)→ `designer_panel.gd` 的 `_init()` 里 `_add_tab(...)` → 对应加载。控件一律经 `UI.spin/opt/btn/header/status_label/load_json/save_json` 创建,**不要**自建裸控件。标签「中文 English」双语序。`combine` 下拉**存 key 不存显示串**。
|
||||||
|
>
|
||||||
|
> **不要做热重载**(Task 2 评审前瞻提醒):本页只编辑并保存 JSON,**不**尝试让运行中的 `PlayerStats` 立即生效 —— 与其它设计器页一致(保存后提示「重启 F5 生效」)。若日后真要加热重载,注意 `remove_modifiers_from` **不是**强制重新同步的原语(无命中时提前返回),必须自己调 `_load_attr_definitions()` + `_recompute_attrs()`。
|
||||||
|
>
|
||||||
|
> **`inverse` 的 `hard` 语义与其它两种相反**(Task 1 实现者发现):`hybrid`/`add_int` 下 `hard=0` 表示「不钳制」,而 `inverse` 下 `hard` 是**下限**、`0` 表示「钳到 0」。设计器里编辑 `hard` 时应在提示文案中体现这个差异,否则设计师给 `inverse` 属性填 0 期待「不限制」会得到相反结果。
|
||||||
|
|
||||||
- [ ] **Step 1: 实现 `attribute_tab.gd`**
|
- [ ] **Step 1: 实现 `attribute_tab.gd`**
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user