diff --git a/addons/game_designer/core_tab.gd b/addons/game_designer/core_tab.gd index 640fc32..698a07c 100644 --- a/addons/game_designer/core_tab.gd +++ b/addons/game_designer/core_tab.gd @@ -22,7 +22,7 @@ var _mana_leech: SpinBox var _feat: OptionButton var _rows: SpinBox var _cols: SpinBox -var _edges: TextEdit +var _edges var _status: Label func _ready() -> void: @@ -49,9 +49,11 @@ func _ready() -> void: _rows = _row("矩阵行(MATRIX)", UI.spin(1, 8, 1, 1)) _cols = _row("矩阵列(MATRIX)", UI.spin(1, 16, 1, 5)) add_child(Label.new()) - var el := Label.new(); el.text = "电路边(CIRCUIT,JSON)"; add_child(el) - _edges = TextEdit.new(); _edges.custom_minimum_size = Vector2(0, 50) - _edges.placeholder_text = '[{"from":0,"to":1},{"from":0,"to":2}]' + var el := Label.new(); el.text = "电路边(CIRCUIT,from → to)"; add_child(el) + _edges = preload("res://addons/game_designer/tuple_list_editor.gd").new() + _edges.setup([ + {"label": "from", "min": 0, "max": 63, "step": 1, "int": true}, + {"label": "→ to", "min": 0, "max": 63, "step": 1, "int": true}], "➕ 加边") add_child(_edges) add_child(HSeparator.new()) var srow := HBoxContainer.new(); add_child(srow) @@ -93,15 +95,18 @@ func _on_select(idx: int) -> void: _feat.selected = int(d.get("feature_tags", 0)) _rows.value = float(d.get("grid_rows", 1)) _cols.value = float(d.get("grid_cols", 5)) - _edges.text = JSON.stringify(d.get("edges", [])) + var erows := [] + for e in d.get("edges", []): + erows.append([int(e.get("from", 0)), int(e.get("to", 0))]) + _edges.set_values(erows) func _on_apply() -> void: var cid: String = _id.text.strip_edges() if cid == "": UI.set_status(_status, "✗ ID 不能为空", true); return - var edges = JSON.parse_string(_edges.text) if _edges.text.strip_edges() != "" else [] - if not (edges is Array): - edges = [] + var edges := [] + for r in _edges.get_values(): + edges.append({"from": r[0], "to": r[1]}) if _cur != "" and _cur != cid and _data.has(_cur): _data.erase(_cur) _data[cid] = {