From e7366631ade6cbd5eb5f9a1e38c42953769c0c81 Mon Sep 17 00:00:00 2001 From: Michael Campbell Date: Thu, 19 Feb 2026 01:14:58 -0500 Subject: [PATCH] add shake when buildings take damage --- world/building/building.gd | 17 +++++++++++++++++ world/building/building.tscn | 3 +++ 2 files changed, 20 insertions(+) diff --git a/world/building/building.gd b/world/building/building.gd index dcff7db..9c3aa18 100644 --- a/world/building/building.gd +++ b/world/building/building.gd @@ -3,9 +3,24 @@ extends CollisionObject3D var health := 10. +@export var shake_noise: FastNoiseLite +var shake_duration := 0. +@onready var initial_mesh_pos: Vector3 = %Mesh.position + func _ready() -> void: scale.y = randf_range(.5, 1.25) + +func _process(delta: float) -> void: + if shake_duration <= 0: + %Mesh.position = initial_mesh_pos + else: + var x := shake_noise.get_noise_1d(shake_duration * 10000) + var y := shake_noise.get_noise_1d(-shake_duration * 10000) + %Mesh.position = initial_mesh_pos + (Vector3(x, 0, y) * 0.75) + + shake_duration = move_toward(shake_duration, 0., delta) + func hit(_proj: PlayerProjectile, damage: float) -> bool: health -= damage if health <= 0.: @@ -16,5 +31,7 @@ func hit(_proj: PlayerProjectile, damage: float) -> bool: %Mesh.hide() %DestroyedMesh.show() %GPUParticles3D.preprocess = randf() + else: + shake_duration += 0.5 return true diff --git a/world/building/building.tscn b/world/building/building.tscn index 69ef56c..3d5cc00 100644 --- a/world/building/building.tscn +++ b/world/building/building.tscn @@ -2,6 +2,8 @@ [ext_resource type="Script" uid="uid://bnr37lfj76u7n" path="res://world/building/building.gd" id="1_5j34s"] +[sub_resource type="FastNoiseLite" id="FastNoiseLite_d2kbb"] + [sub_resource type="BoxMesh" id="BoxMesh_rqn35"] size = Vector3(3, 5, 3) @@ -48,6 +50,7 @@ material = SubResource("StandardMaterial3D_2vvqs") collision_layer = 5 collision_mask = 0 script = ExtResource("1_5j34s") +shake_noise = SubResource("FastNoiseLite_d2kbb") [node name="Mesh" type="MeshInstance3D" parent="." unique_id=1919101154] unique_name_in_owner = true