From 27f1e0c0aa54598ec7a4dfe3985b1e9ed1d0dd02 Mon Sep 17 00:00:00 2001 From: Rendo Date: Sun, 30 Nov 2025 00:15:42 +0500 Subject: [PATCH] drop on death --- levels/prototype_scene.tscn | 8 +++--- scenes/weapons/bomb.tscn | 6 ++++- scripts/weapon_system/bomb/bomb_dropper.gd | 9 +++++++ .../weapon_system/bomb/bomb_dropper.gd.uid | 1 + scripts/weapon_system/weapon_system.gd | 26 ++++++++++++------- 5 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 scripts/weapon_system/bomb/bomb_dropper.gd create mode 100644 scripts/weapon_system/bomb/bomb_dropper.gd.uid diff --git a/levels/prototype_scene.tscn b/levels/prototype_scene.tscn index c3baba5..97932f5 100644 --- a/levels/prototype_scene.tscn +++ b/levels/prototype_scene.tscn @@ -170,15 +170,15 @@ size = Vector3(41.466846, 22.777176, 35.36573) material = ExtResource("5_bno23") [node name="CSGBox3D18" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D16"] -transform = Transform3D(0.2478614, 0, 0.96879554, 0, 1, 0, -0.96879554, 0, 0.2478614, -0.98422813, -9.519702, 10.0603485) +transform = Transform3D(0.07983352, 0, 0.9968083, 0, 1, 0, -0.9968083, 0, 0.07983352, 7.1200104, -9.519702, 10.70941) operation = 2 -size = Vector3(20.900824, 3.737772, 4.796875) +size = Vector3(20.900824, 3.737772, 6.9975586) material = ExtResource("5_bno23") [node name="CSGBox3D19" type="CSGBox3D" parent="CSGCombiner3D/CSGBox3D16"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.064535, -9.519702, 1.6905918) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13.488387, -9.519702, 1.6905918) operation = 2 -size = Vector3(23.704197, 3.737772, 4.796875) +size = Vector3(18.856493, 3.737772, 4.796875) material = ExtResource("5_bno23") [node name="CSGBox3D4" type="CSGBox3D" parent="CSGCombiner3D"] diff --git a/scenes/weapons/bomb.tscn b/scenes/weapons/bomb.tscn index c32209b..34276f8 100644 --- a/scenes/weapons/bomb.tscn +++ b/scenes/weapons/bomb.tscn @@ -1,9 +1,10 @@ -[gd_scene load_steps=5 format=3 uid="uid://bxdatd1ilfgmc"] +[gd_scene load_steps=6 format=3 uid="uid://bxdatd1ilfgmc"] [ext_resource type="Script" uid="uid://e6lqknfl4ngt" path="res://scripts/weapon_system/weapon_substate_machine.gd" id="1_krsgt"] [ext_resource type="Script" uid="uid://rx78vdadldm7" path="res://scripts/weapon_system/bomb/bomb_main_state.gd" id="2_870cc"] [ext_resource type="Script" uid="uid://cx7j3kr1laq3s" path="res://scripts/weapon_system/bomb/bomb_idle_state.gd" id="3_1x0so"] [ext_resource type="Script" uid="uid://dmyir46aricwi" path="res://scripts/weapon_system/bomb/bomb_intro_state.gd" id="4_fv3ha"] +[ext_resource type="Script" uid="uid://b5eapvgoni1pj" path="res://scripts/weapon_system/bomb/bomb_dropper.gd" id="5_fv3ha"] [node name="Bomb" type="Node" node_paths=PackedStringArray("enter_state")] script = ExtResource("1_krsgt") @@ -26,3 +27,6 @@ script = ExtResource("3_1x0so") [node name="Intro" type="Node" parent="."] script = ExtResource("4_fv3ha") + +[node name="Dropper" type="Node" parent="."] +script = ExtResource("5_fv3ha") diff --git a/scripts/weapon_system/bomb/bomb_dropper.gd b/scripts/weapon_system/bomb/bomb_dropper.gd new file mode 100644 index 0000000..4a1572a --- /dev/null +++ b/scripts/weapon_system/bomb/bomb_dropper.gd @@ -0,0 +1,9 @@ +extends Node + + +func _ready() -> void: + if get_parent().player == null: return + get_parent().player.died.connect(on_death) + +func on_death() -> void: + get_parent().system.drop_slot("bomb") diff --git a/scripts/weapon_system/bomb/bomb_dropper.gd.uid b/scripts/weapon_system/bomb/bomb_dropper.gd.uid new file mode 100644 index 0000000..2ac3767 --- /dev/null +++ b/scripts/weapon_system/bomb/bomb_dropper.gd.uid @@ -0,0 +1 @@ +uid://b5eapvgoni1pj diff --git a/scripts/weapon_system/weapon_system.gd b/scripts/weapon_system/weapon_system.gd index e17819f..7bc3611 100644 --- a/scripts/weapon_system/weapon_system.gd +++ b/scripts/weapon_system/weapon_system.gd @@ -96,14 +96,17 @@ func update_remotes(to: StringName,exit: bool): switched_to.emit(current_state) -func drop(): - if slots.find_key(current_state) == "knife": +func drop_current(): + drop(current_state) + +func drop(weapon: WeaponSubStateMachine) -> void: + if slots.find_key(weapon) == "knife": return var drop_data: Dictionary = {} - drop_data.scene = current_state.droppable - drop_data.ammo = current_state.ammo - drop_data.remaining_ammo = current_state.remaining_ammo - drop_data.slot = current_state.slot + drop_data.scene = weapon.droppable + drop_data.ammo = weapon.ammo + drop_data.remaining_ammo = weapon.remaining_ammo + drop_data.slot = weapon.slot drop_data.position = camera.global_position drop_data.impulse = -camera.global_basis.z * 10 + player.velocity @@ -111,11 +114,16 @@ func drop(): $"../PickupRange".start_temp_ignore() - slots[slots.find_key(current_state)] = null + slots[slots.find_key(weapon)] = null slots_updated.emit(slots) - current_state.queue_free() + weapon.queue_free() return_to_previous(false) +func drop_slot(slot: StringName): + if slots.has(slot) == false or slots[slot] == null: + return + drop(slots[slot]) + # Spawn function # Data should be a dictionary with these keys: # ammo @@ -198,5 +206,5 @@ func _input(event: InputEvent) -> void: current_state.switch_mode() if event.is_action_pressed("plr_drop"): - drop() + drop_current()