Files
przygody-pana-cegly/addons/rmsmartshape/scenes/GUI_Edge_InfoPanel.gd

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