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,64 @@
@tool
extends VBoxContainer
class_name SS2D_NormalRangeEditor
signal value_changed
var start: float: get = _get_start, set = _set_start
var end: float: get = _get_end, set = _set_end
var zero_equals_full_circle := true
var _progress_bar: TextureProgressBar:
get:
if _progress_bar == null:
_progress_bar = get_node_or_null("%TextureProgressBar")
return _progress_bar
func _ready() -> void:
_set_initial_angles()
func _enter_tree() -> void:
_set_initial_angles()
func _set_initial_angles() -> void:
_set_start(_progress_bar.radial_initial_angle)
_set_end(_progress_bar.radial_fill_degrees)
func _on_startSlider_value_changed(value: float) -> void:
_set_start(value)
func _on_endSlider_value_changed(value: float) -> void:
_set_end(value)
func _set_start(value: float) -> void:
var fill: float = _progress_bar.radial_fill_degrees
var init_angle: float = 360.0 - fill - value + 90.0
_progress_bar.radial_initial_angle = _mutate_angle_deg(init_angle)
func _get_start() -> float:
return _progress_bar.radial_initial_angle
func _set_end(value: float) -> void:
_progress_bar.radial_fill_degrees = _mutate_angle_deg(value)
func _get_end() -> float:
return _progress_bar.radial_fill_degrees
func _on_SS2D_StartEditorSpinSlider_value_changed(value: float) -> void:
_set_start(value)
func _mutate_angle_deg(v: float) -> float:
if zero_equals_full_circle and v == 0.0:
return 360.0
return v

View File

@@ -0,0 +1,32 @@
[gd_scene load_steps=5 format=3 uid="uid://cg1vy768oxwxr"]
[ext_resource type="Texture2D" uid="uid://dajqljvjm2d2q" path="res://addons/rmsmartshape/editors/NormalRangeEditor/progress_texture.png" id="1"]
[ext_resource type="Script" path="res://addons/rmsmartshape/editors/NormalRangeEditor/NormalRangeEditor.gd" id="2"]
[ext_resource type="Texture2D" uid="uid://dgd4sbhsw1no3" path="res://addons/rmsmartshape/editors/NormalRangeEditor/over_texture.png" id="3"]
[ext_resource type="Texture2D" uid="uid://cax163h05b60j" path="res://addons/rmsmartshape/editors/NormalRangeEditor/under_texture.png" id="4"]
[node name="NormalRangeEditor" type="VBoxContainer"]
anchors_preset = -1
anchor_right = 0.087
anchor_bottom = 0.027
offset_right = 38.912
offset_bottom = 203.8
size_flags_horizontal = 3
size_flags_vertical = 9
script = ExtResource("2")
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 2
[node name="TextureProgressBar" type="TextureProgressBar" parent="CenterContainer"]
unique_name_in_owner = true
layout_mode = 2
max_value = 1.0
step = 0.0
value = 1.0
fill_mode = 4
texture_under = ExtResource("4")
texture_over = ExtResource("3")
texture_progress = ExtResource("1")
radial_initial_angle = 79.3
radial_fill_degrees = 93.8

View File

@@ -0,0 +1,26 @@
extends EditorProperty
class_name SS2D_NormalRangeEditorProperty
var control: SS2D_NormalRangeEditor = preload(
"res://addons/rmsmartshape/editors/NormalRangeEditor/NormalRangeEditor.tscn"
).instantiate()
func _init() -> void:
add_child(control)
add_focusable(control)
func _enter_tree() -> void:
control.connect("value_changed", self._value_changed)
_value_changed()
func _exit_tree() -> void:
control.disconnect("value_changed", self._value_changed)
func _value_changed() -> void:
var obj: SS2D_NormalRange = get_edited_object()
control.end = obj.distance
control.start = obj.begin

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dgd4sbhsw1no3"
path="res://.godot/imported/over_texture.png-8aa46a605c51c9642f0609a4a8bbd43d.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rmsmartshape/editors/NormalRangeEditor/over_texture.png"
dest_files=["res://.godot/imported/over_texture.png-8aa46a605c51c9642f0609a4a8bbd43d.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dajqljvjm2d2q"
path="res://.godot/imported/progress_texture.png-5c3ce00c522dd3c8b7a6f676bd7a3382.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rmsmartshape/editors/NormalRangeEditor/progress_texture.png"
dest_files=["res://.godot/imported/progress_texture.png-5c3ce00c522dd3c8b7a6f676bd7a3382.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,34 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cax163h05b60j"
path="res://.godot/imported/under_texture.png-87a243e17179ba2b162ef41ea65a8e51.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/rmsmartshape/editors/NormalRangeEditor/under_texture.png"
dest_files=["res://.godot/imported/under_texture.png-87a243e17179ba2b162ef41ea65a8e51.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1

View File

@@ -0,0 +1,60 @@
extends EditorInspectorPlugin
## This inspector plugin will show an Execute button for action properties in
## SS2D_Shape.
##
## To add an action property export it with:
##
## @export_placeholder("ActionProperty") var ...
##
## Then, when an action is executed by user (by pressing an Execute button in inspector),
## setter will be called with non-empty string:
##
## func _action_property_setter(value: String) -> void:
## if value.size() > 0:
## ## Action is executed
##
class ActionPropertyEditor:
extends EditorProperty
signal action_pressed
var button: Button
func _init() -> void:
button = Button.new()
button.text = "Execute"
add_child(button)
button.connect("pressed", func() -> void: emit_signal("action_pressed"))
func _ready() -> void:
button.icon = get_theme_icon("TextEditorPlay", "EditorIcons")
func _can_handle(object: Object) -> bool:
if object is SS2D_Shape:
return true
return false
func _parse_property(
object: Object,
_type: Variant.Type,
name: String,
_hint_type: PropertyHint,
hint_string: String,
_usage_flags,
_wide: bool
) -> bool:
if hint_string == "ActionProperty":
var prop_editor := ActionPropertyEditor.new()
add_property_editor(name, prop_editor)
prop_editor.connect("action_pressed", self._on_action_pressed.bind(object, name))
return true
return false
func _on_action_pressed(object: Object, prop_name: String) -> void:
prints("Action executed:", prop_name.capitalize())
object.set(prop_name, "executed")

View File

@@ -0,0 +1,45 @@
extends EditorInspectorPlugin
var control: SS2D_NormalRangeEditorProperty = null
func _can_handle(object: Object) -> bool:
#if object is SS2D_NormalRange:
# return true
if object is SS2D_NormalRange:
#Connect
if not object.is_connected("changed", self._changed):
object.connect("changed", self._changed.bind(object))
return true
else:
#Disconnect
if control != null:
control = null
if object.has_signal("changed"):
if object.is_connected("changed", self._changed):
object.disconnect("changed", self._changed)
pass
return false
func _changed(_object: Object) -> void:
control._value_changed()
func _parse_property(
_object: Object,
_type: Variant.Type,
name: String,
_hint_type: PropertyHint,
_hint_string: String,
_usage_flags: int,
_wide: bool
) -> bool:
if name == "edgeRendering":
control = SS2D_NormalRangeEditorProperty.new()
add_property_editor(" ", control)
return true
return false