feat(resist): 设计器敌人页增元素抗性网格(6×5) + _save 写 resistances(全0省略)

主表下方加 6原型×5元素(火/冰/雷/毒/奥) SpinBox 网格(-0.9~0.9);_save 汇总
非零抗性写入 resistances,全0则省略键。读写往返 MCP 实测 FAILS=0
(读种子 fire0.5/ice-0.5,写非零、零值省略、负值保留)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-24 12:08:11 +08:00
co-authored by Claude Opus 4.8
parent fe1d1f690f
commit a17e3aa2af
+31 -1
View File
@@ -5,6 +5,8 @@ extends VBoxContainer
const UI = preload("res://addons/game_designer/designer_ui.gd")
const PATH = "res://data/enemies.json"
const NAMES = ["杂兵 Basic", "快速 Fast", "护甲 Armored", "精英 Elite", "首领 MiniBoss", "终焉 Boss"]
const ELEM_KEYS = ["fire", "ice", "lightning", "poison", "arcane"]
const ELEM_LABELS = ["火 Fire", "冰 Ice", "雷 Lightning", "毒 Poison", "奥 Arcane"]
var _data: Dictionary = {}
var _rows: Array = [] # [{speed:SpinBox, armor:SpinBox, size:SpinBox, color:ColorPickerButton}]
@@ -35,6 +37,26 @@ func _ready() -> void:
grid.add_child(sp); grid.add_child(ar); grid.add_child(sz); grid.add_child(cp)
_rows.append({"speed": sp, "armor": ar, "size": sz, "color": cp})
add_child(HSeparator.new())
add_child(UI.cell_label("元素抗性 Resistances-0.9~0.9,负=弱点加伤)"))
var rgrid := GridContainer.new()
rgrid.columns = ELEM_KEYS.size() + 1
add_child(rgrid)
var rhead := Label.new(); rhead.text = "原型"; rhead.modulate = Color(0.7, 0.8, 1.0)
rgrid.add_child(rhead)
for el in ELEM_LABELS:
var el_l := Label.new(); el_l.text = el; el_l.modulate = Color(0.7, 0.8, 1.0)
rgrid.add_child(el_l)
for i in 6:
var d2: Dictionary = _data.get(str(i), {})
var res_d: Dictionary = d2.get("resistances", {})
rgrid.add_child(UI.cell_label(NAMES[i]))
var res_spins := {}
for ei in ELEM_KEYS.size():
var ename: String = ELEM_KEYS[ei]
var sp2 := UI.spin(-0.9, 0.9, 0.05, float(res_d.get(ename, 0.0)))
rgrid.add_child(sp2)
res_spins[ename] = sp2
_rows[i]["resist"] = res_spins
add_child(UI.btn("💾 保存 enemies.json", _save))
_status = UI.status_label()
add_child(_status)
@@ -47,13 +69,21 @@ func _save() -> void:
var out: Dictionary = {}
for i in 6:
var r: Dictionary = _rows[i]
out[str(i)] = {
var entry := {
"name": NAMES[i],
"speed": r["speed"].value,
"armor": r["armor"].value,
"size": r["size"].value,
"color": [r["color"].color.r, r["color"].color.g, r["color"].color.b],
}
var rd := {}
for ename in ELEM_KEYS:
var v: float = r["resist"][ename].value
if absf(v) > 0.0001:
rd[ename] = v
if not rd.is_empty():
entry["resistances"] = rd
out[str(i)] = entry
if UI.save_json(PATH, out):
UI.set_status(_status, "💾 已保存(重启游戏 F5 生效)")
else: