control.gui_script 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. -- Update button visual state
  2. local function update_button_visual(node, pressed)
  3. if pressed then
  4. -- Set pressed color: #6680e6
  5. gui.set_color(node, vmath.vector4(0.4, 0.5, 0.9, 1.0))
  6. else
  7. -- Set default color: #4d66cc
  8. gui.set_color(node, vmath.vector4(0.3, 0.4, 0.8, 1.0))
  9. end
  10. end
  11. function init(self)
  12. -- Get node references
  13. self.idle_node = gui.get_node("idle")
  14. self.run_node = gui.get_node("run")
  15. self.turn_around_node = gui.get_node("turn_around")
  16. self.jump_node = gui.get_node("jump")
  17. self.attack_node = gui.get_node("attack")
  18. self.crouch_node = gui.get_node("crouch")
  19. -- Start with idle highlighted (default state)
  20. update_button_visual(self.idle_node, true)
  21. end
  22. function on_message(self, message_id, message)
  23. -- Handle animation state changes
  24. if message_id == hash("animation_state_changed") then
  25. -- Reset all buttons to unpressed state
  26. update_button_visual(self.idle_node, false)
  27. update_button_visual(self.run_node, false)
  28. update_button_visual(self.turn_around_node, false)
  29. update_button_visual(self.jump_node, false)
  30. update_button_visual(self.attack_node, false)
  31. update_button_visual(self.crouch_node, false)
  32. -- Get state name
  33. local state = message.state
  34. -- Highlight the current state button
  35. if state:find("idle") then
  36. update_button_visual(self.idle_node, true)
  37. end
  38. if state:find("run") then
  39. update_button_visual(self.run_node, true)
  40. end
  41. if state:find("turn_around") then
  42. update_button_visual(self.turn_around_node, true)
  43. end
  44. if state:find("jump") then
  45. update_button_visual(self.jump_node, true)
  46. end
  47. if state:find("attack") then
  48. update_button_visual(self.attack_node, true)
  49. end
  50. -- Highlight crouch button for crouching states
  51. if state:find("^crouching") or state == "to_crouch" then
  52. update_button_visual(self.crouch_node, true)
  53. end
  54. end
  55. end