diff --git a/godot/scenes/level.tscn b/godot/scenes/level.tscn index d0fcdce..c1f9455 100644 --- a/godot/scenes/level.tscn +++ b/godot/scenes/level.tscn @@ -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"]] diff --git a/godot/scenes/pistol_pickup.tscn b/godot/scenes/pistol_pickup.tscn new file mode 100644 index 0000000..4c351f4 --- /dev/null +++ b/godot/scenes/pistol_pickup.tscn @@ -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"] diff --git a/godot/src/equipment_handler.gd b/godot/src/equipment_handler.gd index f15ba18..39f509c 100644 --- a/godot/src/equipment_handler.gd +++ b/godot/src/equipment_handler.gd @@ -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) diff --git a/godot/src/interactable.gd b/godot/src/interactable.gd index ff6c059..99561bf 100644 --- a/godot/src/interactable.gd +++ b/godot/src/interactable.gd @@ -1,6 +1,6 @@ class_name Interactable extends Node3D -signal interacted(interactor: Interactor) +signal interacted(interactor: Node) func interact(interactor: Node): interacted.emit(interactor) diff --git a/godot/src/interactor.gd b/godot/src/interactor.gd index 9aa1f24..4efa619 100644 --- a/godot/src/interactor.gd +++ b/godot/src/interactor.gd @@ -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: diff --git a/godot/src/inventory.gd b/godot/src/inventory.gd index d4d45e5..584dd0d 100644 --- a/godot/src/inventory.gd +++ b/godot/src/inventory.gd @@ -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): diff --git a/godot/src/item_pickup.gd b/godot/src/item_pickup.gd new file mode 100644 index 0000000..c16c655 --- /dev/null +++ b/godot/src/item_pickup.gd @@ -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() diff --git a/godot/src/item_pickup.gd.uid b/godot/src/item_pickup.gd.uid new file mode 100644 index 0000000..77aaf4b --- /dev/null +++ b/godot/src/item_pickup.gd.uid @@ -0,0 +1 @@ +uid://cb3fj8dexn6i6