feat: rifle pickup added to map

This commit is contained in:
Sara 2025-08-11 16:10:16 +02:00
parent 2511ac69c0
commit 6b7a092961
8 changed files with 57 additions and 6 deletions

View file

@ -2,10 +2,12 @@
#include "interactable.h" #include "interactable.h"
#include "player_body.h" #include "player_body.h"
#include "player_input.h" #include "player_input.h"
#include "weapon_inventory.h"
void PlayerInteractor::_bind_methods() { void PlayerInteractor::_bind_methods() {
ClassDB::bind_method(D_METHOD("pickup_demo_pack"), &self_type::pickup_demo_pack); ClassDB::bind_method(D_METHOD("pickup_demo_pack"), &self_type::pickup_demo_pack);
ClassDB::bind_method(D_METHOD("try_use_demo_pack"), &self_type::try_use_demo_pack); ClassDB::bind_method(D_METHOD("try_use_demo_pack"), &self_type::try_use_demo_pack);
ClassDB::bind_method(D_METHOD("get_inventory"), &self_type::get_inventory);
} }
void PlayerInteractor::highlight_removed() { void PlayerInteractor::highlight_removed() {
@ -23,6 +25,7 @@ void PlayerInteractor::activate() {
void PlayerInteractor::ready() { void PlayerInteractor::ready() {
PlayerInput *input{ cast_to<PlayerInput>(get_node(NodePath("%PlayerInput"))) }; PlayerInput *input{ cast_to<PlayerInput>(get_node(NodePath("%PlayerInput"))) };
input->connect(PlayerInput::sig_activate, callable_mp(this, &self_type::activate)); input->connect(PlayerInput::sig_activate, callable_mp(this, &self_type::activate));
this->inventory = cast_to<WeaponInventory>(get_node(NodePath("%WeaponInventory")));
} }
void PlayerInteractor::process(double delta) { void PlayerInteractor::process(double delta) {
@ -85,3 +88,7 @@ bool PlayerInteractor::try_use_demo_pack() {
} }
return false; return false;
} }
WeaponInventory *PlayerInteractor::get_inventory() const {
return this->inventory;
}

View file

@ -3,6 +3,7 @@
#include "scene/3d/physics/shape_cast_3d.h" #include "scene/3d/physics/shape_cast_3d.h"
class Interactable; class Interactable;
class WeaponInventory;
class PlayerInteractor : public ShapeCast3D { class PlayerInteractor : public ShapeCast3D {
GDCLASS(PlayerInteractor, ShapeCast3D); GDCLASS(PlayerInteractor, ShapeCast3D);
@ -19,11 +20,13 @@ public:
virtual PackedStringArray get_configuration_warnings() const override; virtual PackedStringArray get_configuration_warnings() const override;
void pickup_demo_pack(); void pickup_demo_pack();
bool try_use_demo_pack(); bool try_use_demo_pack();
WeaponInventory *get_inventory() const;
private: private:
int num_demo_packs{ 0 }; int num_demo_packs{ 0 };
Interactable *interactable{ nullptr }; Interactable *interactable{ nullptr };
Callable on_highlight_removed{ callable_mp(this, &self_type::highlight_removed) }; Callable on_highlight_removed{ callable_mp(this, &self_type::highlight_removed) };
WeaponInventory *inventory{ nullptr };
static String activate_method_name; static String activate_method_name;
}; };

View file

@ -6,6 +6,7 @@ void WeaponInventory::_bind_methods() {
BIND_HPROPERTY(Variant::OBJECT, starting_weapon, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene"); BIND_HPROPERTY(Variant::OBJECT, starting_weapon, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
BIND_PROPERTY(Variant::INT, pistol_ammo); BIND_PROPERTY(Variant::INT, pistol_ammo);
BIND_PROPERTY(Variant::INT, rifle_ammo); BIND_PROPERTY(Variant::INT, rifle_ammo);
ClassDB::bind_method(D_METHOD("pickup_weapon"), &self_type::pickup_weapon);
} }
void WeaponInventory::on_switch_input() { void WeaponInventory::on_switch_input() {

View file

@ -25,9 +25,6 @@ public:
void set_starting_weapon(Ref<PackedScene> weapon_scene); void set_starting_weapon(Ref<PackedScene> weapon_scene);
Ref<PackedScene> get_starting_weapon() const; Ref<PackedScene> get_starting_weapon() const;
void pickup_demo_pack();
bool try_use_demo_pack();
void deposit_pistol_ammo(int amount); void deposit_pistol_ammo(int amount);
void set_pistol_ammo(int amount); void set_pistol_ammo(int amount);
int get_pistol_ammo() const; int get_pistol_ammo() const;

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=31 format=4 uid="uid://dllho5nkq2smw"] [gd_scene load_steps=32 format=4 uid="uid://dllho5nkq2smw"]
[ext_resource type="PackedScene" uid="uid://eu0yil2ylm0q" path="res://objects/props/box_car_fully_enclosed.tscn" id="1_ti8jp"] [ext_resource type="PackedScene" uid="uid://eu0yil2ylm0q" path="res://objects/props/box_car_fully_enclosed.tscn" id="1_ti8jp"]
[ext_resource type="PackedScene" uid="uid://hf7yyyiep30l" path="res://objects/props/box_car_enclosed.tscn" id="2_cfpv2"] [ext_resource type="PackedScene" uid="uid://hf7yyyiep30l" path="res://objects/props/box_car_enclosed.tscn" id="2_cfpv2"]
@ -12,6 +12,7 @@
[ext_resource type="PackedScene" uid="uid://22j1too6rheq" path="res://objects/props/sand_bag_half_circle.tscn" id="9_ug5on"] [ext_resource type="PackedScene" uid="uid://22j1too6rheq" path="res://objects/props/sand_bag_half_circle.tscn" id="9_ug5on"]
[ext_resource type="PackedScene" uid="uid://cclghy01gblif" path="res://objects/pickups/demo_pack_pickup.tscn" id="11_foo0w"] [ext_resource type="PackedScene" uid="uid://cclghy01gblif" path="res://objects/pickups/demo_pack_pickup.tscn" id="11_foo0w"]
[ext_resource type="PackedScene" uid="uid://5hg5eirw7v8n" path="res://objects/units/unit_4_wretched.tscn" id="12_plog7"] [ext_resource type="PackedScene" uid="uid://5hg5eirw7v8n" path="res://objects/units/unit_4_wretched.tscn" id="12_plog7"]
[ext_resource type="PackedScene" uid="uid://crml35t12hx2h" path="res://objects/pickups/weapon_pickup.tscn" id="13_qwrat"]
[sub_resource type="GDScript" id="GDScript_ug5on"] [sub_resource type="GDScript" id="GDScript_ug5on"]
script/source = "extends Interactable script/source = "extends Interactable
@ -802,3 +803,6 @@ use_collision = true
collision_layer = 19 collision_layer = 19
collision_mask = 0 collision_mask = 0
size = Vector3(5.7617188, 4.102051, 0.33398438) size = Vector3(5.7617188, 4.102051, 0.33398438)
[node name="WeaponPickup" parent="." instance=ExtResource("13_qwrat")]
transform = Transform3D(-4.371139e-08, 0, 1, 0, 1, 0, -1, 0, -4.371139e-08, -17.444277, 0.05698805, -22.7964)

View file

@ -17,7 +17,7 @@ func _on_health_status_death() -> void:
radius = 0.26953125 radius = 0.26953125
[node name="EnemyWretched" type="EnemyWretched"] [node name="EnemyWretched" type="EnemyWretched"]
chase_speed = 4.0 chase_speed = 7.0
script = SubResource("GDScript_qot2n") script = SubResource("GDScript_qot2n")
[node name="wretched" parent="." instance=ExtResource("1_qot2n")] [node name="wretched" parent="." instance=ExtResource("1_qot2n")]

View file

@ -0,0 +1,39 @@
[gd_scene load_steps=5 format=3 uid="uid://crml35t12hx2h"]
[ext_resource type="PackedScene" uid="uid://ce40pq785yoyi" path="res://objects/weapons/rifle.tscn" id="1_y6dn2"]
[sub_resource type="GDScript" id="GDScript_fn0cd"]
script/source = "extends Interactable
@export var weapon_name : String = \"Rifle\"
@export var weapon_scene : PackedScene
func _highlight_changed(_interactor: PlayerInteractor, value: bool) -> void:
var hud := HeadsUpDisplay.get_singleton()
if hud:
hud.set_tooltip(\"Pick up %s\" % weapon_name if value else \"\")
func _activated(interactor: PlayerInteractor) -> void:
interactor.get_inventory().pickup_weapon(weapon_scene)
get_parent().queue_free()
"
[sub_resource type="BoxMesh" id="BoxMesh_fn0cd"]
size = Vector3(0.2, 0.1, 0.7)
[sub_resource type="BoxShape3D" id="BoxShape3D_fn0cd"]
size = Vector3(0.20874023, 0.115478516, 0.7109375)
[node name="WeaponPickup" type="StaticBody3D"]
collision_layer = 16
collision_mask = 0
[node name="Interactable" type="Interactable" parent="."]
script = SubResource("GDScript_fn0cd")
weapon_scene = ExtResource("1_y6dn2")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
mesh = SubResource("BoxMesh_fn0cd")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("BoxShape3D_fn0cd")

View file

@ -9,7 +9,7 @@ radius = 0.2
script/source = "extends HealthStatus script/source = "extends HealthStatus
func _on_death() -> void: func _on_death() -> void:
get_tree().change_scene_to_file.call_deferred(\"res://menus/main_menu.tscn\") get_tree().change_scene_to_file.call_deferred(\"res://guis/main_menu.tscn\")
" "
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_bxedw"]