Add lever and jump pad components with activation logic

This commit is contained in:
2025-04-25 22:41:35 +02:00
parent 9b2ca61163
commit 8959fd4b9f
323 changed files with 12844 additions and 18 deletions

View File

@@ -0,0 +1,146 @@
@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

View File

@@ -0,0 +1,100 @@
[gd_scene load_steps=3 format=3 uid="uid://cy1l6tyadc4s3"]
[ext_resource type="Theme" uid="uid://dud4fe6fsicvm" path="res://addons/rmsmartshape/assets/gui_theme.res" id="1_pwu3l"]
[ext_resource type="Script" path="res://addons/rmsmartshape/scenes/GUI_Edge_InfoPanel.gd" id="2"]
[node name="GUI_Edge_InfoPanel" type="PanelContainer"]
anchors_preset = -1
anchor_right = 0.203125
anchor_bottom = 0.345679
offset_bottom = -62.0
size_flags_horizontal = 4
size_flags_vertical = 4
mouse_filter = 2
theme = ExtResource("1_pwu3l")
script = ExtResource("2")
metadata/_edit_use_anchors_ = true
[node name="Panel" type="Panel" parent="."]
layout_mode = 2
mouse_filter = 2
[node name="Container" type="VBoxContainer" parent="."]
layout_mode = 2
[node name="Properties" type="VBoxContainer" parent="Container"]
layout_mode = 2
mouse_filter = 2
[node name="IDX" type="Label" parent="Container/Properties"]
unique_name_in_owner = true
layout_mode = 2
text = "IDX: [1,2]"
[node name="Functions" type="VBoxContainer" parent="Container"]
layout_mode = 2
mouse_filter = 2
[node name="Make Inner Curve" type="Button" parent="Container/Functions"]
visible = false
layout_mode = 2
text = "Make Inner Curve"
[node name="Make Outer Curve" type="Button" parent="Container/Functions"]
visible = false
layout_mode = 2
text = "Make Outer Curve"
[node name="MaterialOverride" type="Button" parent="Container/Functions"]
unique_name_in_owner = true
layout_mode = 2
toggle_mode = true
text = "Material Override"
[node name="OverrideContainer" type="VBoxContainer" parent="Container"]
unique_name_in_owner = true
visible = false
layout_mode = 2
[node name="HSeparator" type="HSeparator" parent="Container/OverrideContainer"]
layout_mode = 2
[node name="Render" type="CheckBox" parent="Container/OverrideContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Render"
[node name="Weld" type="CheckBox" parent="Container/OverrideContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
text = "Weld"
[node name="ZIndexSection" type="HBoxContainer" parent="Container/OverrideContainer"]
visible = false
layout_mode = 2
[node name="lbl" type="Label" parent="Container/OverrideContainer/ZIndexSection"]
layout_mode = 2
text = "Z:"
[node name="ZIndex" type="SpinBox" parent="Container/OverrideContainer/ZIndexSection"]
unique_name_in_owner = true
layout_mode = 2
min_value = -100.0
[node name="SetMaterial" type="Button" parent="Container/OverrideContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "Set Material"
[node name="ClearMaterial" type="Button" parent="Container/OverrideContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
text = "Clear Material"
[node name="MaterialStatus" type="Label" parent="Container/OverrideContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "[No Material]"

View File

@@ -0,0 +1,25 @@
@tool
extends PanelContainer
class_name SS2D_PointInfoPanel
@onready var idx_label: Label = %IDX
@onready var tex_label: Label = %Tex
@onready var width_label: Label = %Width
@onready var flip_label: Label = %Flip
func set_idx(i: int) -> void:
idx_label.text = "IDX: %s" % i
func set_texture_idx(i: int) -> void:
tex_label.text = "Texture2D: %s" % i
func set_width(f: float) -> void:
width_label.text = "Width: %s" % f
func set_flip(b: bool) -> void:
flip_label.text = "Flip: %s" % b

View File

@@ -0,0 +1,44 @@
[gd_scene load_steps=3 format=3 uid="uid://cxu6258urdtf1"]
[ext_resource type="Theme" uid="uid://dud4fe6fsicvm" path="res://addons/rmsmartshape/assets/gui_theme.res" id="1_byls6"]
[ext_resource type="Script" path="res://addons/rmsmartshape/scenes/GUI_InfoPanel.gd" id="2"]
[node name="GUI_InfoPanel" type="PanelContainer"]
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_right = -918.0
offset_bottom = -486.0
size_flags_horizontal = 4
size_flags_vertical = 4
mouse_filter = 2
theme = ExtResource("1_byls6")
script = ExtResource("2")
[node name="Panel" type="Panel" parent="."]
layout_mode = 2
mouse_filter = 2
[node name="Properties" type="VBoxContainer" parent="."]
layout_mode = 2
mouse_filter = 2
[node name="IDX" type="Label" parent="Properties"]
unique_name_in_owner = true
layout_mode = 2
text = "IDX: 13"
[node name="Tex" type="Label" parent="Properties"]
unique_name_in_owner = true
layout_mode = 2
text = "Tex: 1"
[node name="Width" type="Label" parent="Properties"]
unique_name_in_owner = true
layout_mode = 2
text = "Width: 1.0"
[node name="Flip" type="Label" parent="Properties"]
unique_name_in_owner = true
layout_mode = 2
text = "Flip: N"

View File

@@ -0,0 +1,16 @@
@tool
extends Popup
class_name SS2D_SnapPopup
@onready var snap_offset_x: SpinBox = %SnapOffsetX
@onready var snap_offset_y: SpinBox = %SnapOffsetY
@onready var snap_step_x: SpinBox = %SnapStepX
@onready var snap_step_y: SpinBox = %SnapStepY
func get_snap_offset() -> Vector2:
return Vector2(snap_offset_x.value, snap_offset_y.value)
func get_snap_step() -> Vector2:
return Vector2(snap_step_x.value, snap_step_y.value)

View File

@@ -0,0 +1,58 @@
[gd_scene load_steps=3 format=3 uid="uid://d1acvw8yuubxo"]
[ext_resource type="Script" path="res://addons/rmsmartshape/scenes/SnapPopup.gd" id="1"]
[ext_resource type="Theme" uid="uid://dud4fe6fsicvm" path="res://addons/rmsmartshape/assets/gui_theme.res" id="1_6ft7o"]
[node name="SnapPopup" type="PopupPanel"]
size = Vector2i(301, 128)
visible = true
theme = ExtResource("1_6ft7o")
script = ExtResource("1")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
offset_left = 12.0
offset_top = 12.0
offset_right = 289.0
offset_bottom = 116.0
[node name="Label" type="Label" parent="VBoxContainer"]
layout_mode = 2
text = "Configure Snap"
[node name="SnapOffset" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="Label" type="Label" parent="VBoxContainer/SnapOffset"]
layout_mode = 2
text = "Grid Offset:"
[node name="SnapOffsetX" type="SpinBox" parent="VBoxContainer/SnapOffset"]
unique_name_in_owner = true
layout_mode = 2
suffix = "px"
[node name="SnapOffsetY" type="SpinBox" parent="VBoxContainer/SnapOffset"]
unique_name_in_owner = true
layout_mode = 2
suffix = "px"
[node name="SnapStep" type="HBoxContainer" parent="VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="Label" type="Label" parent="VBoxContainer/SnapStep"]
layout_mode = 2
text = "Grid Step: "
[node name="SnapStepX" type="SpinBox" parent="VBoxContainer/SnapStep"]
unique_name_in_owner = true
layout_mode = 2
value = 8.0
suffix = "px"
[node name="SnapStepY" type="SpinBox" parent="VBoxContainer/SnapStep"]
unique_name_in_owner = true
layout_mode = 2
value = 8.0
suffix = "px"