mirror of
https://github.com/litruv/PNGTuber-Plus.git
synced 2026-07-24 02:26:02 +10:00
Added Mirror and Rotation
This commit is contained in:
@@ -100,6 +100,11 @@ var toggle = "null"
|
||||
#Wobble Sync Group
|
||||
var wobbleSyncGroup = ""
|
||||
|
||||
#Transform
|
||||
var staticRotation = 0.0
|
||||
var mirrorHorizontal = false
|
||||
var mirrorVertical = false
|
||||
|
||||
func _ready():
|
||||
|
||||
Global.main.spriteVisToggles.connect(visToggle)
|
||||
@@ -264,6 +269,7 @@ func _process(delta):
|
||||
|
||||
rotationalDrag(length,delta)
|
||||
stretch(length,delta)
|
||||
applyStaticTransform()
|
||||
|
||||
if grabDelay > 0:
|
||||
grabDelay -= 1
|
||||
@@ -431,7 +437,7 @@ func rotationalDrag(length, delta):
|
||||
var physicsMultiplier = Global.main.physicsTimeMultiplier if Global.main else 10.0
|
||||
var scaledTime = time * physicsMultiplier
|
||||
var rotationWobble = sin(scaledTime * rFrq) * (rotationRange * rAmp * 0.01)
|
||||
var totalRotation = yvel + rotationWobble
|
||||
var totalRotation = yvel + rotationWobble + staticRotation
|
||||
|
||||
# Use delta-based lerp for smooth rotation with slower speed
|
||||
var lerpFactor = clamp(delta * (physicsMultiplier * 1.0), 0.0, 1.0) # Reduced from 15.0 to 4.0
|
||||
@@ -446,6 +452,20 @@ func stretch(length, delta):
|
||||
var lerpFactor = clamp(delta * (physicsMultiplier * 30.0), 0.0, 1.0)
|
||||
sprite.scale = lerp(sprite.scale, target, lerpFactor)
|
||||
|
||||
## Apply static transformation (mirroring)
|
||||
func applyStaticTransform():
|
||||
var scale_x = 1.0
|
||||
var scale_y = 1.0
|
||||
|
||||
if mirrorHorizontal:
|
||||
scale_x = -1.0
|
||||
if mirrorVertical:
|
||||
scale_y = -1.0
|
||||
|
||||
# Apply mirror scaling while preserving the stretch scale
|
||||
var current_scale = sprite.scale
|
||||
sprite.scale = Vector2(abs(current_scale.x) * scale_x, abs(current_scale.y) * scale_y)
|
||||
|
||||
func changeCollision(enable):
|
||||
grabArea.monitorable = enable
|
||||
grabArea.monitorable = enable
|
||||
|
||||
@@ -37,6 +37,7 @@ func _setup_slider_components():
|
||||
_setup_limit_sliders()
|
||||
_setup_animation_sliders()
|
||||
_setup_opacity_slider()
|
||||
_setup_transform_sliders()
|
||||
|
||||
## Set up drag slider
|
||||
func _setup_drag_slider():
|
||||
@@ -104,6 +105,13 @@ func _setup_opacity_slider():
|
||||
slider_manager.add_slider(opacity_slider)
|
||||
opacity_slider.value_changed.connect(_on_opacity_slider_changed)
|
||||
|
||||
## Set up transform sliders
|
||||
func _setup_transform_sliders():
|
||||
var rotation_slider = $VBoxContainer/TransformSection/rotationSlider
|
||||
if rotation_slider:
|
||||
slider_manager.add_slider(rotation_slider)
|
||||
rotation_slider.value_changed.connect(_on_transform_slider_changed)
|
||||
|
||||
## Generic slider change handlers
|
||||
func _on_drag_slider_value_changed(value: float):
|
||||
if Global.heldSprite:
|
||||
@@ -136,6 +144,10 @@ func _on_animation_slider_changed(value: float):
|
||||
func _on_opacity_slider_changed(value: float):
|
||||
# Opacity slider handles its own parameter updates via sprite_property
|
||||
pass
|
||||
|
||||
func _on_transform_slider_changed(value: float):
|
||||
# Transform sliders handle their own parameter updates via sprite_property
|
||||
pass
|
||||
|
||||
func setImage():
|
||||
if Global.heldSprite == null:
|
||||
@@ -145,6 +157,12 @@ func setImage():
|
||||
spriteSpin.pixel_size = 1.5 / Global.heldSprite.imageData.get_size().y
|
||||
spriteSpin.hframes = Global.heldSprite.frames
|
||||
|
||||
# Apply static rotation and mirroring to 3D preview
|
||||
spriteSpin.rotation = Vector3(0, 0, deg_to_rad(Global.heldSprite.staticRotation))
|
||||
var scale_x = -1.0 if Global.heldSprite.mirrorHorizontal else 1.0
|
||||
var scale_y = -1.0 if Global.heldSprite.mirrorVertical else 1.0
|
||||
spriteSpin.scale = Vector3(scale_x, scale_y, 1.0)
|
||||
|
||||
spriteRotDisplay.texture = Global.heldSprite.tex
|
||||
spriteRotDisplay.offset = Global.heldSprite.offset
|
||||
var displaySize = Global.heldSprite.imageData.get_size().y
|
||||
@@ -171,6 +189,10 @@ func setImage():
|
||||
$VBoxContainer/RenderingSection/affectChildrenCheck.button_pressed = Global.heldSprite.affectChildrenOpacity
|
||||
$VBoxContainer/RenderingSection/blendModeContainer/blendModeDropdown.selected = Global.heldSprite.blendMode
|
||||
|
||||
# Update transform controls
|
||||
$VBoxContainer/TransformSection/MirrorControls/mirrorHorizontalCheck.button_pressed = Global.heldSprite.mirrorHorizontal
|
||||
$VBoxContainer/TransformSection/MirrorControls/mirrorVerticalCheck.button_pressed = Global.heldSprite.mirrorVertical
|
||||
|
||||
$VBoxContainer/BoxContainer/setToggle/Label.text = "toggle: \"" + Global.heldSprite.toggle + "\""
|
||||
|
||||
changeRotLimit()
|
||||
@@ -261,6 +283,11 @@ func _update_all_slider_values():
|
||||
var opacity_slider = $VBoxContainer/RenderingSection/opacitySlider
|
||||
if opacity_slider:
|
||||
opacity_slider.set_value(Global.heldSprite.spriteOpacity)
|
||||
|
||||
# Update transform slider
|
||||
var rotation_slider = $VBoxContainer/TransformSection/rotationSlider
|
||||
if rotation_slider:
|
||||
rotation_slider.set_value(Global.heldSprite.staticRotation)
|
||||
|
||||
## Update wobble control states based on sync status
|
||||
func updateWobbleControlStates():
|
||||
@@ -554,6 +581,12 @@ func _on_affect_children_check_toggled(button_pressed):
|
||||
Global.heldSprite.affectChildrenOpacity = button_pressed
|
||||
Global.heldSprite.updateOpacity()
|
||||
|
||||
func _on_mirror_horizontal_check_toggled(button_pressed):
|
||||
Global.heldSprite.mirrorHorizontal = button_pressed
|
||||
|
||||
func _on_mirror_vertical_check_toggled(button_pressed):
|
||||
Global.heldSprite.mirrorVertical = button_pressed
|
||||
|
||||
## Set up the blend mode dropdown with all available blend modes
|
||||
func setupBlendModeDropdown():
|
||||
blendModeDropdown.clear()
|
||||
|
||||
@@ -14529,6 +14529,48 @@ layout_mode = 2
|
||||
theme = SubResource("Theme_mrbyn")
|
||||
text = "Affect children"
|
||||
|
||||
[node name="TransformSection" type="VBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
theme_override_constants/separation = 5
|
||||
|
||||
[node name="TransformTitle" type="Label" parent="VBoxContainer/TransformSection"]
|
||||
custom_minimum_size = Vector2(0, 38.93)
|
||||
layout_mode = 2
|
||||
theme_override_colors/font_shadow_color = Color(0, 0, 0, 0.486275)
|
||||
theme_override_constants/shadow_offset_x = 2
|
||||
theme_override_constants/shadow_offset_y = 2
|
||||
theme_override_constants/shadow_outline_size = 5
|
||||
theme_override_fonts/font = ExtResource("2_da8lk")
|
||||
theme_override_font_sizes/font_size = 21
|
||||
text = "TRANSFORM"
|
||||
label_settings = SubResource("LabelSettings_da8lk")
|
||||
horizontal_alignment = 1
|
||||
vertical_alignment = 2
|
||||
|
||||
[node name="rotationSlider" parent="VBoxContainer/TransformSection" instance=ExtResource("3_parameter_slider")]
|
||||
layout_mode = 2
|
||||
parameter_name = "staticRotation"
|
||||
sprite_property = "staticRotation"
|
||||
label_text = "Rotation"
|
||||
min_value = -360.0
|
||||
max_value = 360.0
|
||||
value_suffix = "°"
|
||||
|
||||
[node name="MirrorControls" type="HBoxContainer" parent="VBoxContainer/TransformSection"]
|
||||
layout_mode = 2
|
||||
theme_override_constants/separation = 10
|
||||
|
||||
[node name="mirrorHorizontalCheck" type="CheckBox" parent="VBoxContainer/TransformSection/MirrorControls"]
|
||||
layout_mode = 2
|
||||
theme = SubResource("Theme_mrbyn")
|
||||
text = "Mirror H"
|
||||
|
||||
[node name="mirrorVerticalCheck" type="CheckBox" parent="VBoxContainer/TransformSection/MirrorControls"]
|
||||
layout_mode = 2
|
||||
theme = SubResource("Theme_mrbyn")
|
||||
text = "Mirror V"
|
||||
|
||||
[node name="AnimationSection" type="VBoxContainer" parent="VBoxContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_vertical = 0
|
||||
@@ -15072,7 +15114,11 @@ centered = false
|
||||
[connection signal="pressed" from="VBoxContainer/Buttons/SpeakingWrapper/Speaking/speaking" to="." method="_on_speaking_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Buttons/UnlinkWrapper/Unlink/unlink" to="." method="_on_unlink_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/Buttons/TrashWrapper/Trash/trash" to="." method="_on_trash_pressed"]
|
||||
[connection signal="item_selected" from="VBoxContainer/RenderingSection/blendModeContainer/blendModeDropdown" to="." method="_on_blend_mode_dropdown_item_selected"]
|
||||
[connection signal="toggled" from="VBoxContainer/RenderingSection/ClipLinked" to="." method="_on_clip_linked_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/RenderingSection/affectChildrenCheck" to="." method="_on_affect_children_check_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/TransformSection/MirrorControls/mirrorHorizontalCheck" to="." method="_on_mirror_horizontal_check_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/TransformSection/MirrorControls/mirrorVerticalCheck" to="." method="_on_mirror_vertical_check_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/PhysicsSection/BounceVelocity" to="." method="_on_check_box_toggled"]
|
||||
[connection signal="pressed" from="VBoxContainer/LayersSection/HBoxContainer/Layer1Container/Layer1/layerButton1" to="." method="_on_layer_button_1_pressed"]
|
||||
[connection signal="pressed" from="VBoxContainer/LayersSection/HBoxContainer/Layer2Container/Layer2/layerButton2" to="." method="_on_layer_button_2_pressed"]
|
||||
|
||||
Reference in New Issue
Block a user