valueslider.gd 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. extends VBoxContainer
  2. @onready var window := $BreakFileMaker
  3. @onready var editor := window.get_node("AutomationEditor")
  4. signal meta_changed
  5. #Called when the node enters the scene tree for the first time.
  6. func _ready() -> void:
  7. #$HSplitContainer/ValueLabel.text = str($HSplitContainer/HSlider.value) # initial value
  8. $HSplitContainer/LineEdit.text = str($HSplitContainer/HSlider.value) # initial value
  9. $BreakFileMaker.hide()
  10. editor.connect("automation_updated", Callable(self, "_on_automation_data_received"))
  11. func _on_h_slider_value_changed(value: float) -> void:
  12. #$HSplitContainer/ValueLabel.text = str(value)
  13. $HSplitContainer/LineEdit.text = str(value)
  14. func _on_line_edit_text_submitted(new_text: String) -> void:
  15. #check if input from text box is a valid number for the slider if not choose an appropriate value and set that
  16. if new_text.is_valid_float():
  17. var new_val = new_text.to_float()
  18. if new_val > $HSplitContainer/HSlider.max_value:
  19. $HSplitContainer/HSlider.value = $HSplitContainer/HSlider.max_value
  20. elif new_val < $HSplitContainer/HSlider.min_value:
  21. $HSplitContainer/HSlider.value = $HSplitContainer/HSlider.min_value
  22. else:
  23. $HSplitContainer/HSlider.set_value_no_signal(new_val)
  24. else:
  25. $HSplitContainer/LineEdit.text = str($HSplitContainer/HSlider.value)
  26. func _on_line_edit_focus_exited() -> void:
  27. #check if input from text box is a valid number for the slider if not choose and appropriate value and set that
  28. if $HSplitContainer/LineEdit.text.is_valid_float():
  29. var new_val = $HSplitContainer/LineEdit.text.to_float()
  30. if new_val > $HSplitContainer/HSlider.max_value:
  31. $HSplitContainer/HSlider.value = $HSplitContainer/HSlider.max_value
  32. elif new_val < $HSplitContainer/HSlider.min_value:
  33. $HSplitContainer/HSlider.value = $HSplitContainer/HSlider.min_value
  34. else:
  35. $HSplitContainer/HSlider.set_value_no_signal(new_val)
  36. else:
  37. $HSplitContainer/LineEdit.text = str($HSplitContainer/HSlider.value)
  38. #check for right click
  39. func _on_h_slider_gui_input(event: InputEvent) -> void:
  40. if $HSplitContainer/HSlider.get_meta("brk"): #check if slider can take a break file
  41. if $HSplitContainer/HSlider.has_meta("brk_data"): #check if it already has break data and set menu correctly (used when loading files)
  42. $HSplitContainer/HSlider/PopupMenu.set_item_text(0, "Edit Automation")
  43. if $HSplitContainer/HSlider/PopupMenu.get_item_count() <= 1: #if it has automation data but no remove button, add it
  44. $HSplitContainer/HSlider/PopupMenu.add_item("Remove Automation", 1)
  45. $HSplitContainer/HSlider/PopupMenu.set_item_disabled(0, false)
  46. else: #if it can't take automation data updata menu to let user know
  47. $HSplitContainer/HSlider/PopupMenu.set_item_disabled(0, true)
  48. $HSplitContainer/HSlider/PopupMenu.set_item_text(0, "Automation is not available for this parameter")
  49. if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_RIGHT and event.pressed:
  50. var local_pos = DisplayServer.mouse_get_position()
  51. # Show popup at global mouse position
  52. $HSplitContainer/HSlider/PopupMenu.popup()
  53. $HSplitContainer/HSlider/PopupMenu.set_position(local_pos)
  54. # Prevent default context menu or input propagation if needed
  55. accept_event()
  56. func _on_popup_menu_index_pressed(index: int) -> void:
  57. match index:
  58. 0:
  59. $BreakFileMaker.position = DisplayServer.mouse_get_position()
  60. $BreakFileMaker.show()
  61. if $HSplitContainer/HSlider.has_meta("brk_data"):
  62. $BreakFileMaker/AutomationEditor.read_automation($HSplitContainer/HSlider.get_meta("brk_data"))
  63. 1:
  64. $HSplitContainer/HSlider.set_meta("brk_data", null)
  65. $BreakFileMaker/AutomationEditor.reset_automation()
  66. $HSplitContainer/HSlider.editable = true
  67. $HSplitContainer/HSlider/PopupMenu.set_item_text(0, "Add Automation")
  68. $HSplitContainer/HSlider/PopupMenu.remove_item(1)
  69. _on_meta_changed()
  70. func _on_automation_data_received(data):
  71. $HSplitContainer/HSlider.set_meta("brk_data", data)
  72. $HSplitContainer/HSlider.editable = false
  73. $HSplitContainer/HSlider/PopupMenu.set_item_text(0, "Edit Automation")
  74. if $HSplitContainer/HSlider/PopupMenu.get_item_count() <= 1:
  75. $HSplitContainer/HSlider/PopupMenu.add_item("Remove Automation", 1)
  76. _on_meta_changed()
  77. func _on_save_automation_button_down() -> void:
  78. $BreakFileMaker.hide()
  79. func _on_save_automation_2_button_down() -> void:
  80. $BreakFileMaker.hide()
  81. func _on_break_file_maker_close_requested() -> void:
  82. $BreakFileMaker.hide()
  83. func _on_meta_changed():
  84. emit_signal("meta_changed")