palette_param_panel.gd 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. extends PanelContainer
  2. signal action(index: int, action: String)
  3. signal value_change(index: int, data: Dictionary)
  4. @onready var index_button: Button = $HBoxContainer/VBoxContainer/IndexButton
  5. @onready var up_button: Button = $HBoxContainer/VBoxContainer/UpButton
  6. @onready var down_button: Button = $HBoxContainer/VBoxContainer/DownButton
  7. @onready var remove_button: Button = $HBoxContainer/VBoxContainer/RemoveButton
  8. @onready var assets_combo: OptionButton = $HBoxContainer/GridContainer/AssetsCombo
  9. @onready var basic_color_picker: ColorPickerButton = $HBoxContainer/GridContainer/BasicColorPicker
  10. @onready var tolerance_slider: HSlider = $HBoxContainer/GridContainer/HBoxContainer/ToleranceSlider
  11. @onready var tolerance_spin_box: SpinBox = $HBoxContainer/GridContainer/HBoxContainer/ToleranceSpinBox
  12. @onready var modulate_color_picker: ColorPickerButton = $HBoxContainer/GridContainer/ModulateColorPicker
  13. @onready var blend_mode_combo: OptionButton = $HBoxContainer/GridContainer/BlendModeCombo
  14. var _block_signal;
  15. var palette_index = -1
  16. var assets_index = {}
  17. func _ready() -> void:
  18. _block_signal = false;
  19. up_button.pressed.connect(_on_up_button_pressed)
  20. down_button.pressed.connect(_on_down_button_pressed)
  21. remove_button.pressed.connect(_on_remove_button_pressed)
  22. assets_combo.item_selected.connect(_on_assets_changed)
  23. basic_color_picker.color_changed.connect(_on_basic_color_changed)
  24. tolerance_slider.value_changed.connect(_on_tolerance_changed)
  25. tolerance_spin_box.value_changed.connect(_on_tolerance_changed)
  26. modulate_color_picker.color_changed.connect(_on_modulate_color_changed)
  27. blend_mode_combo.item_selected.connect(_on_blend_mode_changed)
  28. reset_parameters()
  29. func setup_data(index, assets, is_first: bool, is_final: bool):
  30. palette_index = index
  31. index_button.text = "%02d" % (index + 1)
  32. assets_combo.clear()
  33. assets_index.clear()
  34. for key in assets:
  35. var assets_id = int(key) + 1
  36. assets_combo.add_item("%d - %s" % [key, assets[key]], assets_id)
  37. assets_index[assets_id] = assets_index.size()
  38. up_button.disabled = true if is_first else false
  39. down_button.disabled = true if is_final else false
  40. func reset_parameters():
  41. set_block_signal(true)
  42. assets_combo.selected = 0
  43. basic_color_picker.color = Color.WHITE
  44. modulate_color_picker.color = Color.WHITE
  45. tolerance_slider.value = 1.0
  46. tolerance_spin_box.value = 1.0
  47. blend_mode_combo.selected = 0
  48. set_block_signal(false)
  49. _value_change()
  50. func load_parameters(asset_selected, basic_color, tolerance, modulate_color, blend_mode):
  51. set_block_signal(true)
  52. assets_combo.selected = assets_index[int(asset_selected + 1)]
  53. basic_color_picker.color = basic_color
  54. modulate_color_picker.color = modulate_color
  55. tolerance_slider.value = tolerance
  56. tolerance_spin_box.value = tolerance
  57. blend_mode_combo.selected = blend_mode_combo.get_item_index(blend_mode)
  58. set_block_signal(false)
  59. func get_paramters():
  60. return {
  61. "ElementIndex": int(assets_combo.get_item_id(assets_combo.selected) - 1),
  62. "Tolerance": tolerance_spin_box.value,
  63. "BlendMode": blend_mode_combo.get_item_id(blend_mode_combo.selected),
  64. "BasicColor": {
  65. "R": basic_color_picker.color.r,
  66. "G": basic_color_picker.color.g,
  67. "B": basic_color_picker.color.b,
  68. "A": basic_color_picker.color.a,
  69. },
  70. "ModulateColor": {
  71. "R": modulate_color_picker.color.r,
  72. "G": modulate_color_picker.color.g,
  73. "B": modulate_color_picker.color.b,
  74. "A": modulate_color_picker.color.a,
  75. },
  76. }
  77. func set_block_signal(block_signal: bool):
  78. _block_signal = block_signal;
  79. func set_selected(_selected: bool):
  80. grab_focus()
  81. func _on_up_button_pressed():
  82. action.emit(palette_index, "UP")
  83. func _on_down_button_pressed():
  84. action.emit(palette_index, "DOWN")
  85. func _on_remove_button_pressed():
  86. action.emit(palette_index, "REMOVE")
  87. func _value_change():
  88. if _block_signal:
  89. return
  90. value_change.emit(palette_index, get_paramters())
  91. func _on_assets_changed(_index: int):
  92. _value_change()
  93. func _on_basic_color_changed(_color: Color):
  94. _value_change()
  95. func _on_modulate_color_changed(_color: Color):
  96. _value_change()
  97. func _on_tolerance_changed(value: float):
  98. tolerance_slider.value = value
  99. tolerance_spin_box.value = value
  100. _value_change()
  101. func _on_blend_mode_changed(_index: int):
  102. _value_change()