mirror of
https://github.com/litruv/PNGTuber-Plus.git
synced 2026-07-24 02:26:02 +10:00
replaced framerate dependant physics with delta time
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -4,7 +4,8 @@ extends Node2D
|
|||||||
@onready var editButton = $Edit/Button
|
@onready var editButton = $Edit/Button
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
|
var uiAnimSpeed = Global.main.physicsTimeMultiplier * 20.0 if Global.main else 120.0
|
||||||
if Rect2(editButton.get_parent().position-Vector2(24,24),editButton.size).has_point(get_local_mouse_position()):
|
if Rect2(editButton.get_parent().position-Vector2(24,24),editButton.size).has_point(get_local_mouse_position()):
|
||||||
editSprite.scale = lerp(editSprite.scale,Vector2(1.2,1.2),0.2)
|
editSprite.scale = lerp(editSprite.scale, Vector2(1.2,1.2), delta * uiAnimSpeed)
|
||||||
else:
|
else:
|
||||||
editSprite.scale = lerp(editSprite.scale,Vector2(1.0,1.0),0.2)
|
editSprite.scale = lerp(editSprite.scale, Vector2(1.0,1.0), delta * uiAnimSpeed)
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ func _process(delta):
|
|||||||
if buttons[b] == null:
|
if buttons[b] == null:
|
||||||
continue
|
continue
|
||||||
if Rect2(buttons[b].get_parent().position-Vector2(24,24),buttons[b].size).has_point(get_local_mouse_position()):
|
if Rect2(buttons[b].get_parent().position-Vector2(24,24),buttons[b].size).has_point(get_local_mouse_position()):
|
||||||
sprites[s].scale = lerp(sprites[s].scale,Vector2(1.2,1.2),0.2)
|
var uiAnimSpeed = Global.main.physicsTimeMultiplier * 20.0 if Global.main else 120.0
|
||||||
|
sprites[s].scale = lerp(sprites[s].scale, Vector2(1.2,1.2), delta * uiAnimSpeed)
|
||||||
if Input.is_action_pressed("mouse_left"):
|
if Input.is_action_pressed("mouse_left"):
|
||||||
sprites[s].scale = Vector2(0.6,0.6)
|
sprites[s].scale = Vector2(0.6,0.6)
|
||||||
match b:
|
match b:
|
||||||
@@ -50,7 +51,8 @@ func _process(delta):
|
|||||||
Global.mouse.text = "Duplicate sprite"
|
Global.mouse.text = "Duplicate sprite"
|
||||||
|
|
||||||
else:
|
else:
|
||||||
sprites[s].scale = lerp(sprites[s].scale,Vector2(1.0,1.0),0.2)
|
var uiAnimSpeed = Global.main.physicsTimeMultiplier * 20.0 if Global.main else 120.0
|
||||||
|
sprites[s].scale = lerp(sprites[s].scale, Vector2(1.0,1.0), delta * uiAnimSpeed)
|
||||||
s += 1
|
s += 1
|
||||||
|
|
||||||
var newColor = Color.DARK_SLATE_GRAY if Global.heldSprite == null else Color.WHITE
|
var newColor = Color.DARK_SLATE_GRAY if Global.heldSprite == null else Color.WHITE
|
||||||
|
|||||||
@@ -36,6 +36,10 @@ var yVel = 0
|
|||||||
var bounceSlider = 250
|
var bounceSlider = 250
|
||||||
var bounceGravity = 1000
|
var bounceGravity = 1000
|
||||||
|
|
||||||
|
# Physics timing multiplier - adjust this to fine-tune physics speed
|
||||||
|
# 1.0 = very slow, 10.0 = reasonable, 60.0 = old frame-based speed
|
||||||
|
var physicsTimeMultiplier = 6.0
|
||||||
|
|
||||||
#Costumes
|
#Costumes
|
||||||
var costume = 1
|
var costume = 1
|
||||||
var bounceOnCostumeChange = false
|
var bounceOnCostumeChange = false
|
||||||
@@ -147,12 +151,12 @@ func _ready():
|
|||||||
func _process(delta):
|
func _process(delta):
|
||||||
var hold = origin.get_parent().position.y
|
var hold = origin.get_parent().position.y
|
||||||
|
|
||||||
origin.get_parent().position.y += yVel * 0.0166
|
origin.get_parent().position.y += yVel * delta * physicsTimeMultiplier
|
||||||
if origin.get_parent().position.y > 0:
|
if origin.get_parent().position.y > 0:
|
||||||
origin.get_parent().position.y = 0
|
origin.get_parent().position.y = 0
|
||||||
bounceChange = hold - origin.get_parent().position.y
|
bounceChange = hold - origin.get_parent().position.y
|
||||||
|
|
||||||
yVel += bounceGravity*0.0166
|
yVel += bounceGravity * delta * physicsTimeMultiplier
|
||||||
|
|
||||||
# Handle view mode panning lerp back to center
|
# Handle view mode panning lerp back to center
|
||||||
if !editMode:
|
if !editMode:
|
||||||
@@ -168,7 +172,7 @@ func _process(delta):
|
|||||||
OS.shell_open(ProjectSettings.globalize_path("user://"))
|
OS.shell_open(ProjectSettings.globalize_path("user://"))
|
||||||
|
|
||||||
moveSpriteMenu(delta)
|
moveSpriteMenu(delta)
|
||||||
zoomScene()
|
zoomScene(delta)
|
||||||
|
|
||||||
fileSystemOpen = isFileSystemOpen()
|
fileSystemOpen = isFileSystemOpen()
|
||||||
|
|
||||||
@@ -269,7 +273,7 @@ func onWindowSizeChange():
|
|||||||
updateCameraPosition()
|
updateCameraPosition()
|
||||||
spriteList.position.x = s.x - 233
|
spriteList.position.x = s.x - 233
|
||||||
|
|
||||||
func zoomScene():
|
func zoomScene(delta):
|
||||||
#Handles Zooming
|
#Handles Zooming
|
||||||
if Input.is_action_pressed("control"):
|
if Input.is_action_pressed("control"):
|
||||||
if Input.is_action_just_pressed("scrollUp"):
|
if Input.is_action_just_pressed("scrollUp"):
|
||||||
@@ -283,7 +287,7 @@ func zoomScene():
|
|||||||
scaleOverall -= 10
|
scaleOverall -= 10
|
||||||
changeZoom()
|
changeZoom()
|
||||||
|
|
||||||
$ControlPanel/ZoomLabel.modulate.a = lerp($ControlPanel/ZoomLabel.modulate.a,0.0,0.02)
|
$ControlPanel/ZoomLabel.modulate.a = lerp($ControlPanel/ZoomLabel.modulate.a, 0.0, delta * (physicsTimeMultiplier * 1.2))
|
||||||
|
|
||||||
func changeZoom():
|
func changeZoom():
|
||||||
var newZoom = Vector2(1.0,1.0) / camera.zoom
|
var newZoom = Vector2(1.0,1.0) / camera.zoom
|
||||||
@@ -700,9 +704,9 @@ func moveSpriteMenu(delta):
|
|||||||
|
|
||||||
|
|
||||||
if $EditControls/MoveMenuUp.overlaps_area(Global.mouse.area):
|
if $EditControls/MoveMenuUp.overlaps_area(Global.mouse.area):
|
||||||
Global.spriteEdit.position.y += (delta*432.0)
|
Global.spriteEdit.position.y += (delta * 432.0 * physicsTimeMultiplier)
|
||||||
elif $EditControls/MoveMenuDown.overlaps_area(Global.mouse.area):
|
elif $EditControls/MoveMenuDown.overlaps_area(Global.mouse.area):
|
||||||
Global.spriteEdit.position.y -= (delta*432.0)
|
Global.spriteEdit.position.y -= (delta * 432.0 * physicsTimeMultiplier)
|
||||||
|
|
||||||
if Global.spriteEdit.position.y > 66:
|
if Global.spriteEdit.position.y > 66:
|
||||||
Global.spriteEdit.position.y = 66
|
Global.spriteEdit.position.y = 66
|
||||||
|
|||||||
@@ -14358,7 +14358,7 @@ text = "Zoom : 100%"
|
|||||||
horizontal_alignment = 2
|
horizontal_alignment = 2
|
||||||
|
|
||||||
[node name="VersionLabels" type="Node2D" parent="ControlPanel"]
|
[node name="VersionLabels" type="Node2D" parent="ControlPanel"]
|
||||||
position = Vector2(-205, 59)
|
position = Vector2(-284, 59)
|
||||||
|
|
||||||
[node name="Label" type="Label" parent="ControlPanel/VersionLabels"]
|
[node name="Label" type="Label" parent="ControlPanel/VersionLabels"]
|
||||||
offset_left = -713.0
|
offset_left = -713.0
|
||||||
@@ -14378,14 +14378,21 @@ label_settings = SubResource("LabelSettings_qg0do")
|
|||||||
|
|
||||||
[node name="versionNo" type="Label" parent="ControlPanel/VersionLabels/Label2"]
|
[node name="versionNo" type="Label" parent="ControlPanel/VersionLabels/Label2"]
|
||||||
layout_mode = 0
|
layout_mode = 0
|
||||||
offset_left = 144.0
|
offset_left = 104.0
|
||||||
offset_top = 17.0
|
offset_top = 11.0
|
||||||
offset_right = 282.0
|
offset_right = 242.0
|
||||||
offset_bottom = 60.0
|
offset_bottom = 54.0
|
||||||
text = "v1.4.5
|
text = "v1.4.5"
|
||||||
Litruv"
|
|
||||||
label_settings = SubResource("LabelSettings_xvf50")
|
label_settings = SubResource("LabelSettings_xvf50")
|
||||||
|
|
||||||
|
[node name="Label3" type="Label" parent="ControlPanel/VersionLabels"]
|
||||||
|
offset_left = -566.0
|
||||||
|
offset_top = -93.0
|
||||||
|
offset_right = -428.0
|
||||||
|
offset_bottom = -59.0
|
||||||
|
text = "Litruv Edition"
|
||||||
|
label_settings = SubResource("LabelSettings_qg0do")
|
||||||
|
|
||||||
[node name="EditControls" type="Node2D" parent="."]
|
[node name="EditControls" type="Node2D" parent="."]
|
||||||
z_index = 4090
|
z_index = 4090
|
||||||
script = ExtResource("17_bf1ic")
|
script = ExtResource("17_bf1ic")
|
||||||
|
|||||||
@@ -79,12 +79,13 @@ var ignoreBounce = false
|
|||||||
#Animation
|
#Animation
|
||||||
var frames = 1
|
var frames = 1
|
||||||
var animSpeed = 0
|
var animSpeed = 0
|
||||||
|
var animTime = 0.0 # Time accumulator for animations
|
||||||
|
|
||||||
var remadePolygon = false
|
var remadePolygon = false
|
||||||
|
|
||||||
var clipped = false
|
var clipped = false
|
||||||
|
|
||||||
var tick = 0
|
var time = 0.0 # Time accumulator for physics calculations
|
||||||
|
|
||||||
#Opacity
|
#Opacity
|
||||||
var spriteOpacity = 1.0
|
var spriteOpacity = 1.0
|
||||||
@@ -224,7 +225,7 @@ func replaceSprite(pathNew):
|
|||||||
remakePolygon()
|
remakePolygon()
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
tick += 1
|
time += delta
|
||||||
if Global.heldSprite == self:
|
if Global.heldSprite == self:
|
||||||
|
|
||||||
grabArea.visible = true
|
grabArea.visible = true
|
||||||
@@ -251,13 +252,17 @@ func _process(delta):
|
|||||||
|
|
||||||
talkBlink()
|
talkBlink()
|
||||||
|
|
||||||
animation()
|
animation(delta)
|
||||||
|
|
||||||
func animation():
|
func animation(delta):
|
||||||
|
|
||||||
var speed = max(float(animSpeed),Engine.max_fps*6.0)
|
|
||||||
if animSpeed > 0 and frames > 1:
|
if animSpeed > 0 and frames > 1:
|
||||||
if Global.animationTick % int((speed)/float(animSpeed)) == 0:
|
animTime += delta
|
||||||
|
# Convert animSpeed to frames per second - no additional scaling needed since this controls frame rate
|
||||||
|
var frameRate = animSpeed / 60.0 # Normalize from old frame-based system
|
||||||
|
var frameInterval = 1.0 / frameRate
|
||||||
|
|
||||||
|
if animTime >= frameInterval:
|
||||||
|
animTime -= frameInterval
|
||||||
if sprite.frame == frames - 1:
|
if sprite.frame == frames - 1:
|
||||||
sprite.frame = 0
|
sprite.frame = 0
|
||||||
else:
|
else:
|
||||||
@@ -348,31 +353,46 @@ func drag(delta):
|
|||||||
if dragSpeed == 0:
|
if dragSpeed == 0:
|
||||||
dragger.global_position = wob.global_position
|
dragger.global_position = wob.global_position
|
||||||
else:
|
else:
|
||||||
dragger.global_position = lerp(dragger.global_position,wob.global_position,1/dragSpeed)
|
# Convert dragSpeed to a proper delta-time lerp factor
|
||||||
|
# Higher dragSpeed = slower movement, so we invert it
|
||||||
|
# Use Global.main.physicsTimeMultiplier for consistent physics timing
|
||||||
|
var physicsMultiplier = Global.main.physicsTimeMultiplier if Global.main else 10.0
|
||||||
|
var lerpFactor = clamp(delta * (physicsMultiplier * 10.0 / max(dragSpeed, 0.1)), 0.0, 1.0)
|
||||||
|
dragger.global_position = lerp(dragger.global_position, wob.global_position, lerpFactor)
|
||||||
dragOrigin.global_position = dragger.global_position
|
dragOrigin.global_position = dragger.global_position
|
||||||
|
|
||||||
func wobble():
|
func wobble():
|
||||||
wob.position.x = sin(tick*xFrq)*xAmp
|
# Use Global.main.physicsTimeMultiplier for consistent physics timing
|
||||||
wob.position.y = sin(tick*yFrq)*yAmp
|
var physicsMultiplier = Global.main.physicsTimeMultiplier if Global.main else 10.0
|
||||||
|
var scaledTime = time * physicsMultiplier
|
||||||
|
wob.position.x = sin(scaledTime * xFrq) * xAmp
|
||||||
|
wob.position.y = sin(scaledTime * yFrq) * yAmp
|
||||||
|
|
||||||
func rotationalDrag(length,delta):
|
func rotationalDrag(length, delta):
|
||||||
var yvel = (length * rdragStr)
|
var yvel = (length * rdragStr)
|
||||||
|
|
||||||
#Calculate Max angle
|
#Calculate Max angle
|
||||||
yvel = clamp(yvel,rLimitMin,rLimitMax)
|
yvel = clamp(yvel, rLimitMin, rLimitMax)
|
||||||
|
|
||||||
# Add rotation wobble as percentage of rotational limits range
|
# Add rotation wobble as percentage of rotational limits range
|
||||||
var rotationRange = rLimitMax - rLimitMin
|
var rotationRange = rLimitMax - rLimitMin
|
||||||
var rotationWobble = sin(tick*rFrq) * (rotationRange * rAmp * 0.01)
|
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
|
||||||
|
|
||||||
sprite.rotation = lerp_angle(sprite.rotation,deg_to_rad(totalRotation),0.25)
|
# 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
|
||||||
|
sprite.rotation = lerp_angle(sprite.rotation, deg_to_rad(totalRotation), lerpFactor)
|
||||||
|
|
||||||
func stretch(length,delta):
|
func stretch(length, delta):
|
||||||
var yvel = (length * stretchAmount * 0.01)
|
var yvel = (length * stretchAmount * 0.01)
|
||||||
var target = Vector2(1.0-yvel,1.0+yvel)
|
var target = Vector2(1.0 - yvel, 1.0 + yvel)
|
||||||
|
|
||||||
sprite.scale = lerp(sprite.scale,target,0.5)
|
# Use delta-based lerp for smooth stretching
|
||||||
|
var physicsMultiplier = Global.main.physicsTimeMultiplier if Global.main else 10.0
|
||||||
|
var lerpFactor = clamp(delta * (physicsMultiplier * 30.0), 0.0, 1.0)
|
||||||
|
sprite.scale = lerp(sprite.scale, target, lerpFactor)
|
||||||
|
|
||||||
func changeCollision(enable):
|
func changeCollision(enable):
|
||||||
grabArea.monitorable = enable
|
grabArea.monitorable = enable
|
||||||
|
|||||||
Reference in New Issue
Block a user