68 lines
2.4 KiB
GDScript
68 lines
2.4 KiB
GDScript
extends EditorProperty
|
|
|
|
signal mouse_released
|
|
|
|
const CustomPalette := preload("res://addons/PaletteTools/Scripts/custom_picker.gd")
|
|
|
|
var property_control: Control
|
|
var updating := false
|
|
var custom_palette: CustomPalette
|
|
|
|
|
|
func _init(cust_palette: CustomPalette, obj: Object, named = null) -> void:
|
|
property_control = load("res://addons/PaletteTools/Scenes/custom_palette.tscn").instantiate()
|
|
custom_palette = cust_palette
|
|
if named and obj[named]:
|
|
property_control.color = obj[named]
|
|
else:
|
|
property_control.color = Color.BLACK
|
|
add_child(property_control)
|
|
add_focusable(property_control)
|
|
property_control.get_child(0).pressed.connect(_on_button_pressed)
|
|
resource_selected.connect(resource_prop)
|
|
|
|
|
|
func resource_prop(path: String, prop: Resource) -> void:
|
|
if prop.get(path):
|
|
var p := prop.get(path)
|
|
if p is Vector4:
|
|
property_control.color = Color(p.x, p.y, p.z, p.w)
|
|
else:
|
|
property_control.color = p
|
|
else:
|
|
property_control.color = Color.WHITE
|
|
|
|
|
|
func _on_button_pressed() -> void:
|
|
if not custom_palette:
|
|
push_warning(
|
|
'Error in Palette Tools addon: If the "Palette Tools" addon was just activated, '
|
|
+ "please select a different node before trying to edit color properties of this one. "
|
|
+ "This error happens becuase the inspector was loaded before the addon. If you didn't "
|
|
+ "just activate the addon or start the Godot editor, you can try turning the addon "
|
|
+ "on and off. If the problem persists, you may need to disable the addon. If this happens, "
|
|
+ "please report any relevant info so a fix can be made. Thanks!"
|
|
)
|
|
return
|
|
custom_palette.popup(Rect2(get_global_mouse_position() - Vector2(size.x, (size.y * 20)), size))
|
|
custom_palette.color_picker.color = get_edited_object()[get_edited_property()]
|
|
custom_palette.popup_hide.connect(cust_palette_closed, CONNECT_ONE_SHOT)
|
|
custom_palette.color_picker.color_changed.connect(cust_palette_changed)
|
|
|
|
|
|
func cust_palette_changed(new_color: Color) -> void:
|
|
property_control.color = new_color
|
|
|
|
|
|
func cust_palette_closed() -> void:
|
|
custom_palette.color_picker.color_changed.disconnect(cust_palette_changed)
|
|
property_control.color = custom_palette.color_picker.color
|
|
emit_changed(get_edited_property(), property_control.color)
|
|
|
|
|
|
func _update_property() -> void:
|
|
if get_edited_object() and get_edited_object()[get_edited_property()]:
|
|
property_control.color = get_edited_object()[get_edited_property()]
|
|
else:
|
|
property_control.color = Color.BLACK
|