Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

More work on porting to Godot4 -- Part 2 #3

Merged
merged 3 commits into from
Mar 7, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 19 additions & 18 deletions addons/rmsmartshape/plugin.gd
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ var gui_snap_settings = GUI_SNAP_POPUP.instantiate()
const GUI_POINT_INFO_PANEL_OFFSET = Vector2(256, 130)

# This is the shape node being edited
var shape = null
var shape: SS2D_Shape_Base = null
# For when a legacy shape is selected
var legacy_shape = null

Expand Down Expand Up @@ -289,8 +289,8 @@ func _gui_update_edge_info_panel():
# Don't update if already visible
if gui_edge_info_panel.visible:
return
var indicies = [-1, -1]
var override = null
var indicies: Array[int] = [-1, -1]
var override: SS2D_Material_Edge_Metadata = null
if on_edge:
var t: Transform2D = get_et() * shape.get_global_transform()
var offset = shape.get_closest_offset_straight_edge(t.affine_inverse() * edge_point)
Expand Down Expand Up @@ -342,11 +342,11 @@ func _ready():
gui_point_info_panel.visible = false
add_child(gui_edge_info_panel)
gui_edge_info_panel.visible = false
gui_edge_info_panel.connect("set_material_override",Callable(self,"_on_set_edge_material_override"))
gui_edge_info_panel.connect("set_render",Callable(self,"_on_set_edge_material_override_render"))
gui_edge_info_panel.connect("set_weld",Callable(self,"_on_set_edge_material_override_weld"))
gui_edge_info_panel.connect("set_z_index",Callable(self,"_on_set_edge_material_override_z_index"))
gui_edge_info_panel.connect("set_edge_material",Callable(self,"_on_set_edge_material"))
gui_edge_info_panel.connect("material_override_toggled", self._on_edge_material_override_toggled)
gui_edge_info_panel.connect("render_toggled", self._on_edge_material_override_render_toggled)
gui_edge_info_panel.connect("weld_toggled", self._on_edge_material_override_weld_toggled)
gui_edge_info_panel.connect("z_index_changed", self._on_edge_material_override_z_index_changed)
gui_edge_info_panel.connect("edge_material_changed", self._on_edge_material_changed)
add_child(gui_snap_settings)
gui_snap_settings.hide()

Expand Down Expand Up @@ -612,32 +612,32 @@ static func get_material_override_from_indicies(s: SS2D_Shape_Base, indicies: Ar
return s.get_point_array().get_material_override(keys)


func _on_set_edge_material_override_render(enabled: bool):
func _on_edge_material_override_render_toggled(enabled: bool) -> void:
var override = get_material_override_from_indicies(shape, gui_edge_info_panel.indicies)
if override != null:
override.render = enabled


func _on_set_edge_material_override_weld(enabled: bool):
func _on_edge_material_override_weld_toggled(enabled: bool) -> void:
var override = get_material_override_from_indicies(shape, gui_edge_info_panel.indicies)
if override != null:
override.weld = enabled


func _on_set_edge_material_override_z_index(z: int):
func _on_edge_material_override_z_index_changed(z: int) -> void:
var override = get_material_override_from_indicies(shape, gui_edge_info_panel.indicies)
if override != null:
override.z_index = z


func _on_set_edge_material(m: SS2D_Material_Edge):
func _on_edge_material_changed(m: SS2D_Material_Edge) -> void:
var override = get_material_override_from_indicies(shape, gui_edge_info_panel.indicies)
if override != null:
override.edge_material = m


func _on_set_edge_material_override(enabled: bool):
var indicies = gui_edge_info_panel.indicies
func _on_edge_material_override_toggled(enabled: bool) -> void:
var indicies: Array[int] = gui_edge_info_panel.indicies
if indicies.has(-1) or indicies.size() != 2:
return
var keys = []
Expand Down Expand Up @@ -1033,7 +1033,8 @@ func _input_handle_right_click_press(mb_position: Vector2, grab_threshold: float
elif current_mode == MODE.EDIT_EDGE:
if on_edge:
gui_edge_info_panel.visible = not gui_edge_info_panel.visible
gui_edge_info_panel.position = mb_position + Vector2(256, -24)
gui_edge_info_panel.position = get_window().get_mouse_position()
mphe marked this conversation as resolved.
Show resolved Hide resolved
return true
return false


Expand Down Expand Up @@ -1316,10 +1317,10 @@ func _input_move_control_points(mb: InputEventMouseButton, vp_m_pos: Vector2, gr
return false


func _get_edge_point_keys_from_offset(offset: float, straight: bool = false, _position := Vector2(0, 0)):
func _get_edge_point_keys_from_offset(offset: float, straight: bool = false, _position := Vector2(0, 0)) -> Array[int]:
for i in range(0, shape.get_point_count() - 1, 1):
var key = shape.get_point_key_at_index(i)
var key_next = shape.get_point_key_at_index(i + 1)
var key: int = shape.get_point_key_at_index(i)
var key_next: int = shape.get_point_key_at_index(i + 1)
var this_offset = 0
var next_offset = 0
if straight:
Expand Down
145 changes: 68 additions & 77 deletions addons/rmsmartshape/scenes/GUI_Edge_InfoPanel.gd
Original file line number Diff line number Diff line change
@@ -1,154 +1,145 @@
@tool
extends PanelContainer

@export (NodePath) var p_lbl_idx
@export (NodePath) var p_btn_material_override
@export (NodePath) var p_ctr_override
@export (NodePath) var p_chk_render
@export (NodePath) var p_chk_weld
@export (NodePath) var p_int_index
@export (NodePath) var p_btn_edge_material
@export (NodePath) var p_btn_clear_edge_material
@export (NodePath) var p_lbl_edge_material

var indicies = [-1, -1] : set = set_indicies
var edge_material = null
var edge_material_selector = FileDialog.new()

signal set_material_override(enabled)
signal set_render(enabled)
signal set_weld(enabled)
signal set_z_index(value)
signal set_edge_material(value)


func _ready():
var n_btn_override = get_node(p_btn_material_override)
n_btn_override.connect("toggled",Callable(self,"_on_toggle_material_override"))

var n_chk_render = get_node(p_chk_render)
n_chk_render.connect("toggled",Callable(self,"_on_toggle_render"))

var n_btn_weld = get_node(p_chk_weld)
n_btn_weld.connect("toggled",Callable(self,"_on_toggle_weld"))

var n_int_index = get_node(p_int_index)
n_int_index.connect("value_changed",Callable(self,"_on_set_z_index"))

var n_btn_edge_material = get_node(p_btn_edge_material)
n_btn_edge_material.connect("pressed",Callable(self,"_on_set_edge_material_pressed"))

var n_btn_clear_edge_material = get_node(p_btn_clear_edge_material)
n_btn_clear_edge_material.connect("pressed",Callable(self,"_on_set_edge_material_clear_pressed"))

edge_material_selector.mode = FileDialog.FILE_MODE_OPEN_FILE
signal material_override_toggled(enabled)
signal render_toggled(enabled)
signal weld_toggled(enabled)
signal z_index_changed(value)
signal edge_material_changed(value)

var indicies: Array[int] = [-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", Callable(self, "_on_toggle_material_override"))
render_checkbox.connect("toggled", Callable(self, "_on_toggle_render"))
weld_checkbox.connect("toggled", Callable(self, "_on_toggle_weld"))
z_index_spinbox.connect("value_changed", Callable(self, "_on_set_z_index"))
set_material_button.connect("pressed", Callable(self, "_on_set_edge_material_pressed"))
clear_material_button.connect("pressed", Callable(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.window_title = "Select Edge Material"
edge_material_selector.title = "Select Edge Material"
edge_material_selector.filters = PackedStringArray(["*.tres"])
edge_material_selector.connect("file_selected",Callable(self,"_on_set_edge_material_file_selected"))
add_child(edge_material_selector)


func _on_set_edge_material_clear_pressed():
func _on_set_edge_material_clear_pressed() -> void:
set_edge_material(null)


func _on_set_edge_material_pressed():
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):
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(a: Array):
func set_indicies(a: Array[int]) -> void:
indicies = a
get_node(p_lbl_idx).text = "IDX: [%s, %s]" % [indicies[0], indicies[1]]
idx_label.text = "IDX: [%s, %s]" % [indicies[0], indicies[1]]


func set_material_override(enabled: bool):
var n_btn_override = get_node(p_btn_material_override)
n_btn_override.button_pressed = enabled
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):
get_node(p_chk_render).button_pressed = 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):
get_node(p_chk_weld).button_pressed = 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):
func set_edge_material(v: SS2D_Material_Edge, emit: bool = true) -> void:
edge_material = v
if v == null:
get_node(p_lbl_edge_material).text = "[No Material]"
get_node(p_btn_clear_edge_material).visible = false
material_status.text = "[No Material]"
clear_material_button.visible = false
else:
# Call string function 'get_file()' to get the filepath
get_node(p_lbl_edge_material).text = "[%s]" % (v.resource_path).get_file()
get_node(p_btn_clear_edge_material).visible = true
material_status.text = "[%s]" % (v.resource_path).get_file()
clear_material_button.visible = true
if emit:
emit_signal("set_edge_material", v)
emit_signal("edge_material_changed", v)


func set_z_index(v: int, emit: bool = true):
get_node(p_int_index).value = float(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 get_node(p_chk_render).pressed
return render_checkbox.button_pressed


func get_weld() -> bool:
return get_node(p_chk_weld).pressed
return weld_checkbox.button_pressed


func get_z_index() -> int:
return get_node(p_int_index).value
func get_edge_z_index() -> int:
return int(z_index_spinbox.value)


func _on_toggle_material_override(pressed: bool):
var n_override_container = get_node(p_ctr_override)
n_override_container.visible = pressed
emit_signal("set_material_override", pressed)
func _on_toggle_material_override(pressed: bool) -> void:
override_container.visible = pressed
emit_signal("material_override_toggled", pressed)


func _on_toggle_render(pressed: bool):
emit_signal("set_render", pressed)
func _on_toggle_render(pressed: bool) -> void:
emit_signal("render_toggled", pressed)


func _on_toggle_weld(pressed: bool):
emit_signal("set_weld", pressed)
func _on_toggle_weld(pressed: bool) -> void:
emit_signal("weld_toggled", pressed)


func _on_set_z_index(v: float):
emit_signal("set_z_index", int(v))
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):
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):
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()
Expand Down
Loading