From 341e09d2a92d5514ea47d55419449affa0fd256f Mon Sep 17 00:00:00 2001 From: Artur David Date: Thu, 18 Jun 2026 10:37:02 +0200 Subject: [PATCH] fix camera shake: use Tween instead of _process, remove rogue Camera2D from worldborder --- scenes/worldborder.tscn | 7 ------- scripts/camera_2d.gd | 32 +++++++++++++++++++++----------- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/scenes/worldborder.tscn b/scenes/worldborder.tscn index 47e419b..37c8738 100644 --- a/scenes/worldborder.tscn +++ b/scenes/worldborder.tscn @@ -1,6 +1,5 @@ [gd_scene format=4 uid="uid://7vohdw0xop0g"] -[ext_resource type="Script" uid="uid://coplu13jpw4xq" path="res://scripts/camera_2d.gd" id="1_cdr13"] [ext_resource type="Texture2D" uid="uid://50fc7a64032e" path="res://assets/tileset/PNG/Water_coasts.png" id="2_eppfv"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_lvc68"] @@ -773,12 +772,6 @@ sources/0 = SubResource("TileSetAtlasSource_lvc68") [node name="Worldborder" type="Node2D" unique_id=985455729] -[node name="Camera2D" type="Camera2D" parent="." unique_id=1311217942] -position = Vector2(1, 5) -anchor_mode = 0 -zoom = Vector2(2.11, 2.11) -script = ExtResource("1_cdr13") - [node name="TileMapLayer" type="TileMapLayer" parent="." unique_id=1270876518] tile_map_data = PackedByteArray("AAD//wAAAAAYAA4AAAD//wEAAAAYAA4AAAD//wIAAAAYAA4AAAD//wMAAAAYAA4AAAD//wQAAAAYAA4AAAD//w4AAAAYAA4AAAD//w0AAAAYAA4AAAD//wwAAAAYAA4AAAD//wsAAAAYAA4AAAD//woAAAAYAA4AAAD//wkAAAAYAA4AAAD//wgAAAAYAA4AAAD//wcAAAAYAA4AAAD//wYAAAAYAA4AAAD//wUAAAAYAA4AAAD//w8AAAAYAA4AAAD//xAAAAAYAA4AAAD//xEAAAAYAA4AAAD//xIAAAAYAA4AAAD//xMAAAAYAA4AAAD//xQAAAAYAA4AAAD//xUAAAAYAA4AAAD//xYAAAAYAA4AAAAAABYAAAAYAA4AAAABABYAAAAYAA4AAAACABYAAAAYAA4AAAADABYAAAAYAA4AAAAEABYAAAAYAA4AAAAFABYAAAAYAA4AAAAGABYAAAAYAA4AAAAHABYAAAAYAA4AAAAIABYAAAAYAA4AAAAJABYAAAAYAA4AAAAKABYAAAAYAA4AAAALABYAAAAYAA4AAAAMABYAAAAYAA4AAAANABYAAAAYAA4AAAAOABYAAAAYAA4AAAAPABYAAAAYAA4AAAAQABYAAAAYAA4AAAARABYAAAAYAA4AAAASABYAAAAYAA4AAAATABYAAAAYAA4AAAAUABYAAAAYAA4AAAAVABYAAAAYAA4AAAAWABYAAAAYAA4AAAAXABYAAAAYAA4AAAAYABYAAAAYAA4AAAAZABYAAAAYAA4AAAAaABYAAAAYAA4AAAAbABYAAAAYAA4AAAAcABYAAAAYAA4AAAAdABYAAAAYAA4AAAAeABYAAAAYAA4AAAAfABYAAAAYAA4AAAAgABYAAAAYAA4AAAAhABYAAAAYAA4AAAAiABYAAAAYAA4AAAAjABYAAAAYAA4AAAAkABYAAAAYAA4AAAAlABYAAAAYAA4AAAAmABYAAAAYAA4AAAAmABUAAAAYAA4AAAAmABQAAAAYAA4AAAAmABMAAAAYAA4AAAAmABIAAAAYAA4AAAAmABEAAAAYAA4AAAAmABAAAAAYAA4AAAAmAA8AAAAYAA4AAAAmAA4AAAAYAA4AAAAmAA0AAAAYAA4AAAAmAAwAAAAYAA4AAAAmAAsAAAAYAA4AAAAmAAoAAAAYAA4AAAAmAAkAAAAYAA4AAAAmAAgAAAAYAA4AAAAmAAcAAAAYAA4AAAAmAAYAAAAYAA4AAAAmAAUAAAAYAA4AAAAmAAQAAAAYAA4AAAAmAAMAAAAYAA4AAAAmAAIAAAAYAA4AAAAmAAEAAAAYAA4AAAAmAAAAAAAYAA4AAAAmAP//AAAYAA4AAAAlAP//AAAYAA4AAAAkAP//AAAYAA4AAAAjAP//AAAYAA4AAAAiAP//AAAYAA4AAAAhAP//AAAYAA4AAAAgAP//AAAYAA4AAAAfAP//AAAYAA4AAAAeAP//AAAYAA4AAAAdAP//AAAYAA4AAAAcAP//AAAYAA4AAAAbAP//AAAYAA4AAAAaAP//AAAYAA4AAAAZAP//AAAYAA4AAAAYAP//AAAYAA4AAAAXAP//AAAYAA4AAAAWAP//AAAYAA4AAAAVAP//AAAYAA4AAAAUAP//AAAYAA4AAAATAP//AAAYAA4AAAASAP//AAAYAA4AAAARAP//AAAYAA4AAAAQAP//AAAYAA4AAAAPAP//AAAYAA4AAAAOAP//AAAYAA4AAAANAP//AAAYAA4AAAAMAP//AAAYAA4AAAALAP//AAAYAA4AAAAKAP//AAAYAA4AAAAJAP//AAAYAA4AAAAIAP//AAAYAA4AAAAHAP//AAAYAA4AAAAGAP//AAAYAA4AAAAFAP//AAAYAA4AAAAEAP//AAAYAA4AAAADAP//AAAYAA4AAAACAP//AAAYAA4AAAABAP//AAAYAA4AAAAAAP//AAAYAA4AAAD/////AAAYAA4AAAA=") tile_set = SubResource("TileSet_jveav") diff --git a/scripts/camera_2d.gd b/scripts/camera_2d.gd index 0295e7d..98d4441 100644 --- a/scripts/camera_2d.gd +++ b/scripts/camera_2d.gd @@ -1,16 +1,26 @@ extends Camera2D -var shake_duration = 0.0 -var shake_intensity = 5.0 +var shake_tween: Tween func shake(duration: float, intensity: float) -> void: - shake_duration = duration - shake_intensity = intensity + if shake_tween and shake_tween.is_valid(): + shake_tween.kill() -func _process(delta: float) -> void: - if shake_duration > 0: - shake_duration -= delta - offset = Vector2(randf_range(-shake_intensity, shake_intensity), - randf_range(-shake_intensity, shake_intensity)) - else: - offset = Vector2.ZERO + offset = Vector2.ZERO + shake_tween = create_tween() + shake_tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS) + + var steps = 20 + var step_duration = duration / steps + + for i in steps: + var t = float(i) / float(steps) + var decay = 1.0 - t + var si = intensity * decay + var target = Vector2( + randf_range(-si, si), + randf_range(-si, si) + ) + shake_tween.tween_property(self, "offset", target, step_duration) + + shake_tween.tween_property(self, "offset", Vector2.ZERO, 0.05)