Untested PickupableItem

This commit is contained in:
Alexey 2025-07-31 15:33:31 +03:00
commit 63e87e86d5
19 changed files with 200 additions and 17 deletions

View file

@ -1,5 +1,7 @@
extends CharacterBody3D
class_name Player
@export var speed = 100.0
@export var fall_acceleration = 75.0
@export var vertical_sensivity = 0.005

View file

@ -27,3 +27,13 @@ func select_slot(index: int):
current_slot = slots[index]
current_weapon = current_slot.weapon
slot_selected.emit()
func first_free_slot() -> WeaponSlot:
for slot in slots:
if not slot.has_weapon:
return slot
return null
func refresh_current_slot() -> void:
var index = slots.find(current_slot)
select_slot(index)

View file

@ -5,6 +5,17 @@ class_name WeaponSlot
var has_weapon = false
var weapon: Weapon
## Contains data about swapped weapons
class WeaponSetData:
## New Weapon node, may be null
var new_weapon: Weapon
## Old weapon id, may be empty string
var old_weapon: StringName
func _init(_new_weapon: Weapon, _old_weapon: StringName):
new_weapon = _new_weapon
old_weapon = _old_weapon
func _ready():
has_weapon = get_child_count() > 0
@ -12,3 +23,20 @@ func _ready():
var child = get_child(0)
assert(child is Weapon)
weapon = child as Weapon
func set_weapon(new_weapon: PackedScene) -> WeaponSetData:
var weapon_inst = null
if new_weapon != null:
weapon_inst = new_weapon.instantiate() as Weapon
add_child(weapon_inst)
var old_weapon_id = drop_weapon()
return WeaponSetData.new(weapon_inst, old_weapon_id)
func drop_weapon() -> StringName:
var id = ""
if has_weapon:
id = weapon.id
weapon.queue_free()
_ready()
return id