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 <noreply@anthropic.com>
This commit is contained in:
2026-03-22 18:21:50 +01:00
co-authored by Claude Opus 4.6
parent 145d8fec17
commit acb1119b2a
+25 -25
View File
@@ -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)