From acb1119b2a412399d82474505fc8a8415b08db2a Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 22 Mar 2026 18:21:50 +0100 Subject: [PATCH] fix(client): add explicit type annotations for GDScript strict mode Dictionary.get() returns Variant, which fails GDScript's strict type inference (warnings-as-errors). Add explicit type casts on all dictionary access in clothing and accessory tab code. Co-Authored-By: Claude Opus 4.6 --- client/ui/character_creation.gd | 50 ++++++++++++++++----------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/client/ui/character_creation.gd b/client/ui/character_creation.gd index cb3655522..0c64ef65e 100644 --- a/client/ui/character_creation.gd +++ b/client/ui/character_creation.gd @@ -593,7 +593,7 @@ func _build_clothing_tab(tab: Control) -> void: vbox.add_child(slot_row) _clothing_slot_btns.clear() for i in CLOTHING_SLOTS.size(): - var slot := CLOTHING_SLOTS[i] + var slot: String = CLOTHING_SLOTS[i] var btn := _make_slot_btn(CLOTHING_SLOT_LABELS[i]) btn.pressed.connect(_on_clothing_slot_selected.bind(slot)) slot_row.add_child(btn) @@ -667,11 +667,11 @@ func _rebuild_clothing_color_dock(container: Control) -> void: row.add_theme_constant_override("separation", 8) container.add_child(row) - var item_id := _descriptor.clothing_slots.get(_active_clothing_slot, "") - var tints: Array = _descriptor.clothing_tints.get(item_id, []) if not item_id.is_empty() else [] - var primary: Color = tints[0] if tints.size() > 0 else Color(0.7, 0.65, 0.6) - var secondary: Color = tints[1] if tints.size() > 1 else _derive_secondary(primary) - var accent: Color = tints[2] if tints.size() > 2 else _derive_accent(primary) + var item_id: String = str(_descriptor.clothing_slots.get(_active_clothing_slot, "")) + var tints: Array = _descriptor.clothing_tints.get(item_id, []) as Array if not item_id.is_empty() else [] as Array + var primary: Color = tints[0] as Color if tints.size() > 0 else Color(0.7, 0.65, 0.6) + var secondary: Color = tints[1] as Color if tints.size() > 1 else _derive_secondary(primary) + var accent: Color = tints[2] as Color if tints.size() > 2 else _derive_accent(primary) var p_swatch := _make_color_swatch(primary, "Primary", func(c): _on_clothing_primary_changed(c)) @@ -704,10 +704,10 @@ func _on_clothing_item_selected(slot: String, item_id: String) -> void: func _on_clothing_primary_changed(color: Color) -> void: - var item_id := _descriptor.clothing_slots.get(_active_clothing_slot, "") + var item_id: String = str(_descriptor.clothing_slots.get(_active_clothing_slot, "")) if item_id.is_empty(): return - var tints: Array = _descriptor.clothing_tints.get(item_id, []) + var tints: Array = _descriptor.clothing_tints.get(item_id, []) as Array if tints.is_empty(): tints = [color] else: @@ -720,9 +720,9 @@ func _on_clothing_primary_changed(color: Color) -> void: func _on_clothing_secondary_changed(color: Color) -> void: _clothing_secondary_auto[_active_clothing_slot] = false - var item_id := _descriptor.clothing_slots.get(_active_clothing_slot, "") + var item_id: String = str(_descriptor.clothing_slots.get(_active_clothing_slot, "")) if not item_id.is_empty(): - var tints: Array = _descriptor.clothing_tints.get(item_id, [Color(0.7, 0.65, 0.6)]) + var tints: Array = _descriptor.clothing_tints.get(item_id, [Color(0.7, 0.65, 0.6)]) as Array while tints.size() < 2: tints.append(color) tints[1] = color @@ -732,9 +732,9 @@ func _on_clothing_secondary_changed(color: Color) -> void: func _on_clothing_accent_changed(color: Color) -> void: _clothing_accent_auto[_active_clothing_slot] = false - var item_id := _descriptor.clothing_slots.get(_active_clothing_slot, "") + var item_id: String = str(_descriptor.clothing_slots.get(_active_clothing_slot, "")) if not item_id.is_empty(): - var tints: Array = _descriptor.clothing_tints.get(item_id, [Color(0.7, 0.65, 0.6)]) + var tints: Array = _descriptor.clothing_tints.get(item_id, [Color(0.7, 0.65, 0.6)]) as Array while tints.size() < 3: tints.append(color) tints[2] = color @@ -744,13 +744,13 @@ func _on_clothing_accent_changed(color: Color) -> void: func _update_clothing_slot_btns() -> void: for i in CLOTHING_SLOTS.size(): - var selected := CLOTHING_SLOTS[i] == _active_clothing_slot + var selected: bool = CLOTHING_SLOTS[i] == _active_clothing_slot _set_item_selected(_clothing_slot_btns[i], selected) func _update_clothing_item_btns() -> void: - for slot in _clothing_item_btns: - var active_item := _descriptor.clothing_slots.get(slot, "") + for slot: String in _clothing_item_btns: + var active_item: String = str(_descriptor.clothing_slots.get(slot, "")) for item_id in _clothing_item_btns[slot]: _set_item_selected(_clothing_item_btns[slot][item_id], item_id == active_item) @@ -769,7 +769,7 @@ func _build_accessories_tab(tab: Control) -> void: vbox.add_child(slot_flow) _accessory_slot_btns.clear() for i in ACCESSORY_SLOTS.size(): - var slot := ACCESSORY_SLOTS[i] + var slot: String = ACCESSORY_SLOTS[i] var btn := _make_slot_btn(ACCESSORY_SLOT_LABELS[i]) btn.pressed.connect(_on_accessory_slot_selected.bind(slot)) slot_flow.add_child(btn) @@ -837,9 +837,9 @@ func _rebuild_accessory_color_dock(container: Control) -> void: row.add_theme_constant_override("separation", 8) container.add_child(row) - var item_id := _descriptor.accessory_slots.get(_active_accessory_slot, "") - var tints_arr: Array = _descriptor.accessory_tints.get(item_id, []) if not item_id.is_empty() else [] - var primary: Color = tints_arr[0] if not tints_arr.is_empty() else Color.WHITE + var item_id: String = str(_descriptor.accessory_slots.get(_active_accessory_slot, "")) + var tints_arr: Array = _descriptor.accessory_tints.get(item_id, []) as Array if not item_id.is_empty() else [] as Array + var primary: Color = tints_arr[0] as Color if not tints_arr.is_empty() else Color.WHITE var secondary: Color = _derive_secondary(primary) var p_swatch := _make_color_swatch(primary, "Primary", @@ -864,9 +864,9 @@ func _on_accessory_item_selected(slot: String, item_id: String) -> void: func _on_accessory_primary_changed(color: Color) -> void: - var item_id := _descriptor.accessory_slots.get(_active_accessory_slot, "") + var item_id: String = str(_descriptor.accessory_slots.get(_active_accessory_slot, "")) if not item_id.is_empty(): - var existing: Array = _descriptor.accessory_tints.get(item_id, []) + var existing: Array = _descriptor.accessory_tints.get(item_id, []) as Array if existing.is_empty(): existing = [color] else: @@ -877,9 +877,9 @@ func _on_accessory_primary_changed(color: Color) -> void: func _on_accessory_secondary_changed(color: Color) -> void: _accessory_secondary_auto[_active_accessory_slot] = false - var item_id := _descriptor.accessory_slots.get(_active_accessory_slot, "") + var item_id: String = str(_descriptor.accessory_slots.get(_active_accessory_slot, "")) if not item_id.is_empty(): - var tints: Array = _descriptor.accessory_tints.get(item_id, [Color.WHITE]) + var tints: Array = _descriptor.accessory_tints.get(item_id, [Color.WHITE]) as Array while tints.size() < 2: tints.append(color) tints[1] = color @@ -893,8 +893,8 @@ func _update_accessory_slot_btns() -> void: func _update_accessory_item_btns() -> void: - for slot in _accessory_item_btns: - var active_item := _descriptor.accessory_slots.get(slot, "") + for slot: String in _accessory_item_btns: + var active_item: String = str(_descriptor.accessory_slots.get(slot, "")) for item_id in _accessory_item_btns[slot]: _set_item_selected(_accessory_item_btns[slot][item_id], item_id == active_item)