147 lines
4.3 KiB
GDScript
147 lines
4.3 KiB
GDScript
@tool
|
|
extends PanelContainer
|
|
class_name SS2D_EdgeInfoPanel
|
|
|
|
signal material_override_toggled(enabled: bool)
|
|
signal render_toggled(enabled: bool)
|
|
signal weld_toggled(enabled: bool)
|
|
signal z_index_changed(value: int)
|
|
signal edge_material_changed(value: SS2D_Material_Edge)
|
|
|
|
var indicies := Vector2i(-1, -1) : set = set_indicies
|
|
var edge_material: SS2D_Material_Edge = null
|
|
var edge_material_selector := FileDialog.new()
|
|
|
|
@onready var idx_label: Label = %IDX
|
|
@onready var material_override_button: Button = %MaterialOverride
|
|
@onready var override_container: Container = %OverrideContainer
|
|
@onready var render_checkbox: CheckBox = %Render
|
|
@onready var weld_checkbox: CheckBox = %Weld
|
|
@onready var z_index_spinbox: SpinBox = %ZIndex
|
|
@onready var set_material_button: Button = %SetMaterial
|
|
@onready var clear_material_button: Button = %ClearMaterial
|
|
@onready var material_status: Label = %MaterialStatus
|
|
|
|
|
|
func _ready() -> void:
|
|
material_override_button.connect("toggled", self._on_toggle_material_override)
|
|
render_checkbox.connect("toggled", self._on_toggle_render)
|
|
weld_checkbox.connect("toggled", self._on_toggle_weld)
|
|
z_index_spinbox.connect("value_changed", self._on_set_z_index)
|
|
set_material_button.connect("pressed", self._on_set_edge_material_pressed)
|
|
clear_material_button.connect("pressed", self._on_set_edge_material_clear_pressed)
|
|
|
|
override_container.hide()
|
|
clear_material_button.hide()
|
|
|
|
edge_material_selector.file_mode = FileDialog.FILE_MODE_OPEN_FILE
|
|
edge_material_selector.dialog_hide_on_ok = true
|
|
edge_material_selector.show_hidden_files = true
|
|
edge_material_selector.mode_overrides_title = false
|
|
edge_material_selector.title = "Select Edge Material"
|
|
edge_material_selector.filters = PackedStringArray(["*.tres"])
|
|
edge_material_selector.connect("file_selected", self._on_set_edge_material_file_selected)
|
|
add_child(edge_material_selector)
|
|
|
|
|
|
func _on_set_edge_material_clear_pressed() -> void:
|
|
set_edge_material(null)
|
|
|
|
|
|
func _on_set_edge_material_pressed() -> void:
|
|
# Update file list
|
|
edge_material_selector.invalidate()
|
|
edge_material_selector.popup_centered_ratio(0.8)
|
|
|
|
|
|
func _on_set_edge_material_file_selected(f: String) -> void:
|
|
var rsc := load(f)
|
|
if not rsc is SS2D_Material_Edge:
|
|
push_error("Selected resource is not an Edge Material! (SS2D_Material_Edge)")
|
|
return
|
|
set_edge_material(rsc)
|
|
|
|
|
|
func set_indicies(t: Vector2i) -> void:
|
|
indicies = t
|
|
idx_label.text = "IDX: %s" % indicies
|
|
|
|
|
|
func set_material_override(enabled: bool) -> void:
|
|
material_override_button.button_pressed = enabled
|
|
_on_toggle_material_override(enabled)
|
|
|
|
|
|
func set_render(enabled: bool, emit: bool = true) -> void:
|
|
render_checkbox.button_pressed = enabled
|
|
if emit:
|
|
_on_toggle_render(enabled)
|
|
|
|
|
|
func set_weld(enabled: bool, emit: bool = true) -> void:
|
|
weld_checkbox.button_pressed = enabled
|
|
if emit:
|
|
_on_toggle_weld(enabled)
|
|
|
|
|
|
func set_edge_material(v: SS2D_Material_Edge, emit: bool = true) -> void:
|
|
edge_material = v
|
|
if v == null:
|
|
material_status.text = "[No Material]"
|
|
clear_material_button.visible = false
|
|
else:
|
|
# Call string function 'get_file()' to get the filepath
|
|
material_status.text = "[%s]" % (v.resource_path).get_file()
|
|
clear_material_button.visible = true
|
|
if emit:
|
|
emit_signal("edge_material_changed", v)
|
|
|
|
|
|
func set_edge_z_index(v: int, emit: bool = true) -> void:
|
|
z_index_spinbox.value = float(v)
|
|
if emit:
|
|
_on_set_z_index(float(v))
|
|
|
|
|
|
func get_render() -> bool:
|
|
return render_checkbox.button_pressed
|
|
|
|
|
|
func get_weld() -> bool:
|
|
return weld_checkbox.button_pressed
|
|
|
|
|
|
func get_edge_z_index() -> int:
|
|
return int(z_index_spinbox.value)
|
|
|
|
|
|
func _on_toggle_material_override(pressed: bool) -> void:
|
|
override_container.visible = pressed
|
|
emit_signal("material_override_toggled", pressed)
|
|
|
|
|
|
func _on_toggle_render(pressed: bool) -> void:
|
|
emit_signal("render_toggled", pressed)
|
|
|
|
|
|
func _on_toggle_weld(pressed: bool) -> void:
|
|
emit_signal("weld_toggled", pressed)
|
|
|
|
|
|
func _on_set_z_index(v: float) -> void:
|
|
emit_signal("z_index_changed", int(v))
|
|
|
|
|
|
func load_values_from_meta_material(meta_mat: SS2D_Material_Edge_Metadata) -> void:
|
|
set_render(meta_mat.render)
|
|
set_weld(meta_mat.weld)
|
|
set_z_index(meta_mat.z_index)
|
|
set_edge_material(meta_mat.edge_material)
|
|
|
|
|
|
func save_values_to_meta_material(meta_mat: SS2D_Material_Edge_Metadata) -> void:
|
|
meta_mat.render = get_render()
|
|
meta_mat.weld = get_weld()
|
|
meta_mat.z_index = get_z_index()
|
|
meta_mat.edge_material = edge_material
|