feat: Add right hand/foot editor options, Flintstones Water Buffalo Lodge hat, hide controls in world editor, and easy main menu sound toggle
checkpoint / checkpoint (push) Successful in 6m19s
checkpoint / checkpoint (push) Successful in 6m19s
This commit is contained in:
@@ -0,0 +1,147 @@
|
||||
extends SceneTree
|
||||
## Smoke test verifying:
|
||||
## 1. Character editor has right_hand and right_foot options.
|
||||
## 2. Water Buffalo Lodge Hat (hair_waterbuffalo_01) exists, resolves, and loads.
|
||||
## 3. In world editor / build mode, controls_pill is hidden.
|
||||
## 4. Main menu sound toggle is accessible when logged out and responds to 'M' key.
|
||||
|
||||
var passed := 0
|
||||
var failed := 0
|
||||
|
||||
func _initialize() -> void:
|
||||
_run()
|
||||
|
||||
func _check(desc: String, cond: bool) -> bool:
|
||||
if cond:
|
||||
print(" PASS: ", desc)
|
||||
passed += 1
|
||||
else:
|
||||
printerr(" FAIL: ", desc)
|
||||
failed += 1
|
||||
return cond
|
||||
|
||||
func _run() -> void:
|
||||
await process_frame
|
||||
print("SMOKE: Starting Editor Controls, Water Buffalo Hat & Sound verification...")
|
||||
|
||||
# --- 1. Water Buffalo Hat & Character Editor Slots ---
|
||||
var AvatarCatalogScript = preload("res://scripts/avatar/avatar_catalog.gd")
|
||||
var catalog = AvatarCatalogScript.new()
|
||||
var cat_err = catalog.load_catalog()
|
||||
_check("Catalog loads successfully", cat_err == OK)
|
||||
|
||||
var hat = catalog.resolve("hair_waterbuffalo_01")
|
||||
_check("hair_waterbuffalo_01 exists in catalog", not hat.is_empty())
|
||||
_check("hair_waterbuffalo_01 slot is 'hair'", hat.get("slot", "") == "hair")
|
||||
_check("hair_waterbuffalo_01 mount_bone is 'HeadTop'", hat.get("mount_bone", "") == "HeadTop")
|
||||
_check("hair_waterbuffalo_01 display_name is 'Water Buffalo Lodge Hat'", hat.get("display_name", "") == "Water Buffalo Lodge Hat")
|
||||
|
||||
var AvatarCustomizationUIScript = preload("res://scripts/avatar/avatar_customization_ui.gd")
|
||||
var ui = AvatarCustomizationUIScript.new()
|
||||
root.add_child(ui)
|
||||
await process_frame
|
||||
await process_frame
|
||||
|
||||
var clothing_slots: Array = ui.CATEGORIES[1]["slots"]
|
||||
_check("Clothing category contains 'right_hand'", clothing_slots.has("right_hand"))
|
||||
_check("Clothing category contains 'right_foot'", clothing_slots.has("right_foot"))
|
||||
|
||||
ui._select_slot("right_hand")
|
||||
await process_frame
|
||||
var right_hand_btn = ui.find_child("Item_right_hand_glove_01", true, false)
|
||||
_check("Item_right_hand_glove_01 exists in ItemList", right_hand_btn != null)
|
||||
|
||||
ui._select_slot("right_foot")
|
||||
await process_frame
|
||||
var right_foot_btn = ui.find_child("Item_right_foot_boot_01", true, false)
|
||||
_check("Item_right_foot_boot_01 exists in ItemList", right_foot_btn != null)
|
||||
|
||||
ui._select_slot("hair")
|
||||
await process_frame
|
||||
var hat_btn = ui.find_child("Item_hair_waterbuffalo_01", true, false)
|
||||
_check("Item_hair_waterbuffalo_01 exists in ItemList", hat_btn != null)
|
||||
|
||||
# Equip water buffalo hat
|
||||
ui._on_equip_pressed("hair_waterbuffalo_01")
|
||||
await process_frame
|
||||
_check("Water Buffalo Hat equipped in loadout", ui.loadout.get_equipment("hair") == "hair_waterbuffalo_01")
|
||||
|
||||
ui.queue_free()
|
||||
await process_frame
|
||||
|
||||
# --- 2. Main Menu Sound Controls & Keyboard 'M' ---
|
||||
var audio_mgr = root.get_node_or_null("AudioManager")
|
||||
_check("AudioManager autoload exists", audio_mgr != null)
|
||||
if audio_mgr:
|
||||
audio_mgr.set_sound_enabled(true, false)
|
||||
|
||||
var main_menu_scene = load("res://scenes/main_menu.tscn")
|
||||
var menu = main_menu_scene.instantiate()
|
||||
root.add_child(menu)
|
||||
await process_frame
|
||||
|
||||
var sound_btn = menu.find_child("SoundButton", true, false) as Button
|
||||
_check("SoundButton exists on MainMenu", sound_btn != null)
|
||||
var auth_sound_btn = menu.find_child("AuthSoundButton", true, false) as Button
|
||||
_check("AuthSoundButton exists in AuthButtonsRow", auth_sound_btn != null)
|
||||
var panel_sound_btn = menu.find_child("PanelSoundButton", true, false) as Button
|
||||
_check("PanelSoundButton exists in AuthPanel", panel_sound_btn != null)
|
||||
|
||||
_check("SoundButton text contains 'Sound: ON'", sound_btn != null and sound_btn.text.contains("Sound: ON"))
|
||||
_check("AuthSoundButton text contains 'Sound: ON'", auth_sound_btn != null and auth_sound_btn.text.contains("Sound: ON"))
|
||||
|
||||
# Test 'M' key shortcut
|
||||
var key_ev = InputEventKey.new()
|
||||
key_ev.pressed = true
|
||||
key_ev.keycode = KEY_M
|
||||
menu._unhandled_input(key_ev)
|
||||
await process_frame
|
||||
|
||||
_check("Pressing 'M' toggles sound OFF", audio_mgr != null and not audio_mgr.is_sound_enabled())
|
||||
_check("SoundButton text updated to 'Sound: OFF'", sound_btn != null and sound_btn.text.contains("Sound: OFF"))
|
||||
_check("AuthSoundButton text updated to 'Sound: OFF'", auth_sound_btn != null and auth_sound_btn.text.contains("Sound: OFF"))
|
||||
|
||||
# Toggle back ON with AuthSoundButton
|
||||
if auth_sound_btn != null:
|
||||
auth_sound_btn.emit_signal("pressed")
|
||||
await process_frame
|
||||
_check("AuthSoundButton click toggles sound ON", audio_mgr != null and audio_mgr.is_sound_enabled())
|
||||
_check("SoundButton text restored to 'Sound: ON'", sound_btn != null and sound_btn.text.contains("Sound: ON"))
|
||||
|
||||
menu.queue_free()
|
||||
await process_frame
|
||||
|
||||
# --- 3. World Editor Controls Banner Hiding ---
|
||||
var game_scene = load("res://scenes/game.tscn")
|
||||
_check("game.tscn loads successfully", game_scene != null)
|
||||
if game_scene == null:
|
||||
_finish()
|
||||
return
|
||||
var game = game_scene.instantiate()
|
||||
root.add_child(game)
|
||||
await process_frame
|
||||
|
||||
var pill = game.find_child("ControlsPill", true, false) as Control
|
||||
_check("ControlsPill exists in game HUD", pill != null)
|
||||
_check("ControlsPill starts visible during regular play", pill != null and pill.visible)
|
||||
|
||||
# Open build mode
|
||||
game._open_build_mode()
|
||||
await process_frame
|
||||
_check("ControlsPill is HIDDEN when in build mode", pill != null and not pill.visible)
|
||||
|
||||
# Close build mode
|
||||
game._close_build_mode()
|
||||
await process_frame
|
||||
_check("ControlsPill is RESTORED when exiting build mode", pill != null and pill.visible)
|
||||
|
||||
game.queue_free()
|
||||
await process_frame
|
||||
|
||||
print("\n=== SMOKE RESULT: %d/%d passed ===" % [passed, passed + failed])
|
||||
quit(0 if failed == 0 else 1)
|
||||
|
||||
|
||||
func _finish() -> void:
|
||||
print("\n=== SMOKE RESULT: %d/%d passed ===" % [passed, passed + failed])
|
||||
quit(0 if failed == 0 else 1)
|
||||
Reference in New Issue
Block a user