item pickups

This commit is contained in:
Rowan 2025-06-28 10:30:12 -04:00
parent 3b39ff2970
commit 262928664a
8 changed files with 53 additions and 7 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=16 format=3 uid="uid://dttyp3682enn7"]
[gd_scene load_steps=17 format=3 uid="uid://dttyp3682enn7"]
[ext_resource type="PackedScene" uid="uid://crbrniwi6kd3p" path="res://scenes/player.tscn" id="1_2q6dc"]
[ext_resource type="Script" uid="uid://csjccrhj5wnx7" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_3d.gd" id="2_klq6b"]
@ -10,6 +10,7 @@
[ext_resource type="Resource" uid="uid://cqfnwpmo4fyv4" path="res://resources/items/key.tres" id="7_8c41q"]
[ext_resource type="PackedScene" uid="uid://cn7tgd4y67wnd" path="res://scenes/inventory.tscn" id="8_b121j"]
[ext_resource type="PackedScene" uid="uid://c0cf6jkxasplk" path="res://scenes/enemy.tscn" id="10_olg7q"]
[ext_resource type="PackedScene" uid="uid://iwn3rk6leull" path="res://scenes/pistol_pickup.tscn" id="11_t1rx8"]
[sub_resource type="PlaneMesh" id="PlaneMesh_rd3vj"]
@ -72,6 +73,7 @@ transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 10,
[node name="Door" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5)
collision_layer = 3
collision_mask = 0
script = ExtResource("2_w8frs")
is_locked = true
key = ExtResource("7_8c41q")
@ -119,6 +121,9 @@ visible = false
[node name="Enemy" parent="." instance=ExtResource("10_olg7q")]
transform = Transform3D(1.75, 0, 0, 0, 1.75, 0, 0, 0, 1.75, 6, 0, 0)
[node name="PistolPickup" parent="." instance=ExtResource("11_t1rx8")]
transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 0, 2, -3)
[connection signal="opened" from="Door" to="Door" method="hide"]
[connection signal="interacted" from="Door/Interactable" to="Door" method="_on_interact"]
[connection signal="pressed" from="CanvasLayer/Control/HBoxContainer/SaveButton" to="CanvasLayer/Control/Persistence" method="save" binds= ["save1.sav"]]

View file

@ -0,0 +1,26 @@
[gd_scene load_steps=6 format=3 uid="uid://iwn3rk6leull"]
[ext_resource type="Script" uid="uid://dyghf5fq7s72x" path="res://src/interactable.gd" id="1_2t8sx"]
[ext_resource type="Script" uid="uid://cb3fj8dexn6i6" path="res://src/item_pickup.gd" id="1_naliw"]
[ext_resource type="Resource" uid="uid://crgwey6ibaf2h" path="res://resources/items/pistol.tres" id="2_2t8sx"]
[ext_resource type="PackedScene" uid="uid://5a023hrws3gx" path="res://assets/Glock 17 Gen 4/Main.glb" id="2_ewanq"]
[sub_resource type="SphereShape3D" id="SphereShape3D_ewanq"]
[node name="PistolPickup" type="StaticBody3D"]
collision_layer = 2
collision_mask = 0
script = ExtResource("1_naliw")
item = ExtResource("2_2t8sx")
[node name="Main" parent="." instance=ExtResource("2_ewanq")]
transform = Transform3D(0.2, 0, 0, 0, 0.2, 0, 0, 0, 0.2, 0, 0, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("SphereShape3D_ewanq")
[node name="Interactable" type="Node3D" parent="."]
script = ExtResource("1_2t8sx")
metadata/_custom_type_script = "uid://dyghf5fq7s72x"
[connection signal="interacted" from="Interactable" to="." method="add_to_inventory"]

View file

@ -23,7 +23,6 @@ func remove_equipment():
func equip_item(item: EquippableItem):
remove_equipment()
if item != null:
print(item.scene)
primary_node = item.scene.instantiate()
add_child(primary_node)

View file

@ -1,6 +1,6 @@
class_name Interactable extends Node3D
signal interacted(interactor: Interactor)
signal interacted(interactor: Node)
func interact(interactor: Node):
interacted.emit(interactor)

View file

@ -62,7 +62,7 @@ func _sort_by_distance():
_sorted = true
func interact(interactable: InteractableNode):
interactable.interact(self)
interactable.interact(root_node)
func interact_nearest():
if not _sorted:

View file

@ -53,9 +53,14 @@ func find(item: Item) -> Option:
func add_item(item: Item, quantity: int = 1):
var id = _get_id(item)
var inst = items.get_or_add(id)
inst.quantity += quantity
item_added.emit(item, inst.quantity)
var updated_quantity = quantity
if items.has(id):
items[id].quantity += quantity
updated_quantity = items[id].quantity
else:
items[id] = ItemInstance.new(item, quantity)
item_added.emit(item, updated_quantity)
updated.emit()
func remove_item(item: Item, quantity: int = 1):

10
godot/src/item_pickup.gd Normal file
View file

@ -0,0 +1,10 @@
class_name ItemPickup extends Node
@export var item: Item
@export var quantity: int = 1
func add_to_inventory(node: Node):
match NodeExt.find_child_variant(node, ItemContainer):
var opt when opt.is_some():
opt.unwrap().add_item(item, quantity)
queue_free()

View file

@ -0,0 +1 @@
uid://cb3fj8dexn6i6