Compare commits

...

4 commits

Author SHA1 Message Date
9b229e5d8f 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().
2026-01-22 14:29:59 +13:00
d395bb6f26 player: make spawn @onready, make gear_slots const 2026-01-22 14:28:40 +13:00
2067317a09 player: remove ui_backpack keybind 2026-01-22 14:27:00 +13:00
51da541c30 models: add hammer.glb import file
The hammer must be imported at scale 10.
2026-01-21 21:53:58 +13:00
4 changed files with 62 additions and 22 deletions

42
models/hammer.glb.import Normal file
View file

@ -0,0 +1,42 @@
[remap]
importer="scene"
importer_version=1
type="PackedScene"
uid="uid://5eo56lcgets6"
path="res://.godot/imported/hammer.glb-f03f7fd2a3e43a744c3151200ca3ddce.scn"
[deps]
source_file="res://models/hammer.glb"
dest_files=["res://.godot/imported/hammer.glb-f03f7fd2a3e43a744c3151200ca3ddce.scn"]
[params]
nodes/root_type=""
nodes/root_name=""
nodes/root_script=null
nodes/apply_root_scale=true
nodes/root_scale=10.0
nodes/import_as_skeleton_bones=false
nodes/use_name_suffixes=true
nodes/use_node_type_suffixes=true
meshes/ensure_tangents=true
meshes/generate_lods=true
meshes/create_shadow_meshes=true
meshes/light_baking=1
meshes/lightmap_texel_size=0.2
meshes/force_disable_compression=false
skins/use_named_skins=true
animation/import=true
animation/fps=30
animation/trimming=false
animation/remove_immutable_tracks=true
animation/import_rest_as_RESET=false
import_script/path=""
materials/extract=0
materials/extract_format=0
materials/extract_path=""
_subresources={}
gltf/naming_version=2
gltf/embedded_image_handling=1

View file

@ -4,13 +4,16 @@ class_name Player extends CharacterBody3D
@export var jump_power = 32
@export var fall_speed = 86
const gear_slots = ["1", "2", "3"]
@onready var spawn = Vector3(position)
var starting_gear = preload("res://gears/ball.tscn")
var health = 100
var suspended = false
var spawn = Vector3.ZERO
var direction = Vector3.ZERO
var target_velocity = Vector3.ZERO
var initial_gear = null
var gear_slots = ["1", "2", "3"]
func resize_ui():
var bpui_h = 200
@ -38,6 +41,12 @@ func die():
suspended = true
visible = false
$BackpackUI.visible = false
# strip gears
for gear in $Backpack.get_children():
gear.queue_free()
$Pivot/Container/Gear.queue_free()
$RespawnTimer.start()
message("Le gone")
@ -47,6 +56,12 @@ func respawn():
health = 100
visible = true
suspended = false
# add starting gear
var gear = starting_gear.instantiate()
$Pivot/Container.add_child(gear)
make_backpack_ui()
$BackpackUI.visible = true
# Backpack functions
@ -134,11 +149,9 @@ func move_player(x, z):
direction += camera_basis.x * x
func _ready():
spawn = Vector3(position)
initial_gear = $Pivot/Container/Gear.duplicate()
get_viewport().size_changed.connect(resize_ui)
resize_ui()
make_backpack_ui()
respawn()
func _physics_process(delta):
if suspended:
@ -148,13 +161,6 @@ func _physics_process(delta):
die()
# UI and backpack keys
if Input.is_action_pressed("ui_backpack"):
var mesg = "Equipped: " + $Pivot/Container/Gear.gear_name() + "\nBackpack: "
for node in $Backpack.get_children():
if not node is Gear:
continue
mesg += node.name + "." + node.gear_name() + " "
message(mesg)
if Input.is_action_just_pressed("backpack_1"):
use_backpack_slot("1")
if Input.is_action_just_pressed("backpack_2"):

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://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="PackedScene" uid="uid://c117buhmmkvkt" path="res://gears/ball.tscn" id="3_yw30f"]
[sub_resource type="BoxShape3D" id="BoxShape3D_onrkg"]
size = Vector3(2, 5, 1)
@ -67,8 +66,6 @@ skeleton = NodePath("")
[node name="Container" type="Node3D" parent="Pivot"]
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="."]
script = ExtResource("2_onrkg")

View file

@ -72,11 +72,6 @@ gear_use={
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":0,"position":Vector2(0, 0),"global_position":Vector2(0, 0),"factor":1.0,"button_index":1,"canceled":false,"pressed":false,"double_click":false,"script":null)
]
}
ui_backpack={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":69,"physical_keycode":0,"key_label":0,"unicode":101,"location":0,"echo":false,"script":null)
]
}
backpack_1={
"deadzone": 0.2,
"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":49,"physical_keycode":0,"key_label":0,"unicode":49,"location":0,"echo":false,"script":null)