player: handle gears on respawn

Use a preloaded scene to give the player the starting gear rather than
making a duplicate of the gear on spawn, and strip any gears from the
backpack on death.

Remove Gear from the editor scene tree and add it on respawn().
This commit is contained in:
Jeremy Baxter 2026-01-22 14:29:59 +13:00
parent d395bb6f26
commit 9b229e5d8f
2 changed files with 16 additions and 7 deletions

View file

@ -8,11 +8,12 @@ const gear_slots = ["1", "2", "3"]
@onready var spawn = Vector3(position) @onready var spawn = Vector3(position)
var starting_gear = preload("res://gears/ball.tscn")
var health = 100 var health = 100
var suspended = false var suspended = false
var direction = Vector3.ZERO var direction = Vector3.ZERO
var target_velocity = Vector3.ZERO var target_velocity = Vector3.ZERO
var initial_gear = null
func resize_ui(): func resize_ui():
var bpui_h = 200 var bpui_h = 200
@ -40,6 +41,12 @@ func die():
suspended = true suspended = true
visible = false visible = false
$BackpackUI.visible = false $BackpackUI.visible = false
# strip gears
for gear in $Backpack.get_children():
gear.queue_free()
$Pivot/Container/Gear.queue_free()
$RespawnTimer.start() $RespawnTimer.start()
message("Le gone") message("Le gone")
@ -49,6 +56,12 @@ func respawn():
health = 100 health = 100
visible = true visible = true
suspended = false suspended = false
# add starting gear
var gear = starting_gear.instantiate()
$Pivot/Container.add_child(gear)
make_backpack_ui()
$BackpackUI.visible = true $BackpackUI.visible = true
# Backpack functions # Backpack functions
@ -136,10 +149,9 @@ func move_player(x, z):
direction += camera_basis.x * x direction += camera_basis.x * x
func _ready(): func _ready():
initial_gear = $Pivot/Container/Gear.duplicate()
get_viewport().size_changed.connect(resize_ui) get_viewport().size_changed.connect(resize_ui)
resize_ui() resize_ui()
make_backpack_ui() respawn()
func _physics_process(delta): func _physics_process(delta):
if suspended: if suspended:

View file

@ -1,9 +1,8 @@
[gd_scene load_steps=9 format=4 uid="uid://cfceg80unq0pe"] [gd_scene load_steps=8 format=4 uid="uid://cfceg80unq0pe"]
[ext_resource type="Script" uid="uid://djeyfi7vm2vw0" path="res://player/player.gd" id="1_onrkg"] [ext_resource type="Script" uid="uid://djeyfi7vm2vw0" path="res://player/player.gd" id="1_onrkg"]
[ext_resource type="Script" uid="uid://oi6sint7jkc6" path="res://player/camera_gimbal.gd" id="2_onrkg"] [ext_resource type="Script" uid="uid://oi6sint7jkc6" path="res://player/camera_gimbal.gd" id="2_onrkg"]
[ext_resource type="Texture2D" uid="uid://cfb0gbwm57hm4" path="res://models/player_0.png" id="3_hqtel"] [ext_resource type="Texture2D" uid="uid://cfb0gbwm57hm4" path="res://models/player_0.png" id="3_hqtel"]
[ext_resource type="PackedScene" uid="uid://c117buhmmkvkt" path="res://gears/ball.tscn" id="3_yw30f"]
[sub_resource type="BoxShape3D" id="BoxShape3D_onrkg"] [sub_resource type="BoxShape3D" id="BoxShape3D_onrkg"]
size = Vector3(2, 5, 1) size = Vector3(2, 5, 1)
@ -67,8 +66,6 @@ skeleton = NodePath("")
[node name="Container" type="Node3D" parent="Pivot"] [node name="Container" type="Node3D" parent="Pivot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 2.5, -1.5) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1.5, 2.5, -1.5)
[node name="Gear" parent="Pivot/Container" instance=ExtResource("3_yw30f")]
[node name="CameraGimbal" type="Node3D" parent="."] [node name="CameraGimbal" type="Node3D" parent="."]
script = ExtResource("2_onrkg") script = ExtResource("2_onrkg")