From 3a450169c079385afdab0d77e7e4bfab0d41db5e Mon Sep 17 00:00:00 2001 From: derek Date: Tue, 1 Oct 2024 17:02:40 -0500 Subject: [PATCH] item pickup work added extra stop before player eats the item so you can see what you've gathered --- assets/ammo_pickup.tscn | 4 ++++ assets/health_pickup.tscn | 7 +++++++ assets/money_pickup.tscn | 5 +++++ assets/player.tscn | 3 +++ assets/stamina_pickup.tscn | 6 ++++++ scripts/item_pickup.gd | 32 +++++++++++++++++++++++++------- scripts/player.gd | 5 ++++- scripts/weapon_pickup.gd | 2 ++ 8 files changed, 56 insertions(+), 8 deletions(-) diff --git a/assets/ammo_pickup.tscn b/assets/ammo_pickup.tscn index 138488f..af104dc 100644 --- a/assets/ammo_pickup.tscn +++ b/assets/ammo_pickup.tscn @@ -85,3 +85,7 @@ skeleton = NodePath("") stream = ExtResource("2_2ks2g") attenuation_model = 1 autoplay = true + +[node name="Timer" type="Timer" parent="."] + +[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] diff --git a/assets/health_pickup.tscn b/assets/health_pickup.tscn index effbebc..f17610a 100644 --- a/assets/health_pickup.tscn +++ b/assets/health_pickup.tscn @@ -73,3 +73,10 @@ shape = SubResource("CapsuleShape3D_om0ey") stream = ExtResource("2_8hupy") attenuation_model = 1 autoplay = true + +[node name="Timer" type="Timer" parent="."] + +[node name="PickupTimer" type="Timer" parent="."] +wait_time = 3.0 + +[connection signal="timeout" from="PickupTimer" to="." method="_on_pickup_timer_timeout"] diff --git a/assets/money_pickup.tscn b/assets/money_pickup.tscn index a917f86..e4ae4b4 100644 --- a/assets/money_pickup.tscn +++ b/assets/money_pickup.tscn @@ -123,3 +123,8 @@ collision_mask = 16 [node name="CollisionShape3D" type="CollisionShape3D" parent="Area3D"] shape = SubResource("CapsuleShape3D_ms2qn") + +[node name="Timer" type="Timer" parent="."] + +[node name="PickupTimer" type="Timer" parent="."] +wait_time = 3.0 diff --git a/assets/player.tscn b/assets/player.tscn index 2295bdb..a216353 100644 --- a/assets/player.tscn +++ b/assets/player.tscn @@ -128,6 +128,9 @@ collision_mask = 2 hit_from_inside = true collide_with_areas = true +[node name="ItemHolder" type="Node3D" parent="Head"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.47261, -2) + [node name="pick_up_detection" type="Area3D" parent="."] collision_layer = 0 collision_mask = 16 diff --git a/assets/stamina_pickup.tscn b/assets/stamina_pickup.tscn index 77861a1..f0185f7 100644 --- a/assets/stamina_pickup.tscn +++ b/assets/stamina_pickup.tscn @@ -76,6 +76,12 @@ skeleton = NodePath("") [node name="CollisionShape3D2" type="CollisionShape3D" parent="."] shape = SubResource("CapsuleShape3D_om0ey") +[node name="Timer" type="Timer" parent="."] + +[node name="PickupTimer" type="Timer" parent="."] +wait_time = 3.0 +one_shot = true + [connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="area_entered" from="Area3D" to="." method="_on_area_3d_area_entered"] [connection signal="body_entered" from="Area3D" to="." method="_on_area_3d_body_entered"] diff --git a/scripts/item_pickup.gd b/scripts/item_pickup.gd index af236b9..72faebf 100644 --- a/scripts/item_pickup.gd +++ b/scripts/item_pickup.gd @@ -6,7 +6,10 @@ extends RigidBody3D @export_enum("Ammo", "Stamina", "Health", "Money","Weapon") var pickupType: int @onready var level_control = get_tree().current_scene +@onready var timer: Timer = $Timer +var pickupable = false +var pick_up = false var rand_amt var player_follow var player @@ -20,15 +23,23 @@ func _ready(): rand_amt = randi_range(25,100) if despawning == true: - await get_tree().create_timer(despawn_time_s).timeout - collision_shape.disabled = true - await get_tree().create_timer(1).timeout - self.queue_free() + timer.wait_time = despawn_time_s + timer.start() func _physics_process(delta): - if player_follow != null: - var float_direction = (player.global_position - self.position) - self.set_linear_velocity(float_direction * 7) + if player_follow != null and !pick_up: + despawning = false + position = lerp(position, player.item_holder.global_position, 25 * delta) + + if abs(position - player.item_holder.global_position) < Vector3(.5,.5,.5): + await get_tree().create_timer(3).timeout + pick_up = true + + if pick_up: + position = lerp(position, player.camera.global_position, 5 * delta) + if abs(global_position - player.camera.global_position) < Vector3(.5,.5,.5): + pickupable = true + func picked_up(): player.pickup_sound.pitch_scale = 1 + randf_range(-.3,.3) @@ -52,3 +63,10 @@ func picked_up(): level_control.money += rand_amt queue_free() + + +func _on_timer_timeout() -> void: + if despawning == true: + collision_shape.disabled = true + await get_tree().create_timer(1).timeout + self.queue_free() diff --git a/scripts/player.gd b/scripts/player.gd index ca7f22b..6e6ad07 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -89,6 +89,7 @@ var pickupmsg @onready var weapon_spawner = $Head/Camera3D/WeaponHolder/WeaponSpawner @onready var pick_up_detection = $pick_up_detection +@onready var item_holder: Node3D = $Head/ItemHolder func _ready(): @@ -291,7 +292,8 @@ func _headbob(time) -> Vector3: func _on_pick_up_detection_body_entered(body): if body.is_in_group("pickup"): - body.picked_up() + if body.pickupable: + body.picked_up() func ladder_collide(is_climbing): @@ -304,6 +306,7 @@ func ladder_collide(is_climbing): func _on_pick_up_magnet_body_entered(body): if body.is_in_group("pickup") and body.is_in_group("magnet"): body.player_follow = self + #body.collision_shape.disabled = true func weapon_tilt(input_x, delta): if weapon_holder: diff --git a/scripts/weapon_pickup.gd b/scripts/weapon_pickup.gd index 2ced852..eca6127 100644 --- a/scripts/weapon_pickup.gd +++ b/scripts/weapon_pickup.gd @@ -6,6 +6,8 @@ extends RigidBody3D @onready var level_control = get_tree().current_scene +var pickupable = true + # Called when the node enters the scene tree for the first time. func _ready(): pass # Replace with function body.