From e2cf516c90c55c69a079f212c86c7a19cb02a51c Mon Sep 17 00:00:00 2001 From: henry Date: Wed, 17 Jun 2026 02:55:40 +0100 Subject: [PATCH] Refactored weapon component to handle weapon swaping. --- scenes/player.tscn | 2 +- scenes/player_weapons/weapon_stock.gd | 13 ++++++----- scripts/input_component.gd | 4 ++++ scripts/shoot_component.gd | 5 ++++- scripts/shoot_component.gd.uid | 2 +- scripts/weapon_component.gd | 31 ++++++++++++++++++++++++--- 6 files changed, 46 insertions(+), 11 deletions(-) diff --git a/scenes/player.tscn b/scenes/player.tscn index 4b33f53..e60f549 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -6,7 +6,7 @@ [ext_resource type="Script" uid="uid://dss0dbwr71y6m" path="res://scripts/input_component.gd" id="4_smehm"] [ext_resource type="Texture2D" uid="uid://b0iavxi8vaxtj" path="res://graphics/ship_thrusters.png" id="5_qlg0r"] [ext_resource type="Script" uid="uid://c0rikbakpcags" path="res://scripts/movement_component.gd" id="5_ur7pv"] -[ext_resource type="Script" uid="uid://bgd1hwindc2ui" path="res://scripts/shoot_component.gd" id="6_y4r1p"] +[ext_resource type="Script" uid="uid://suynuijl68qp" path="res://scripts/shoot_component.gd" id="6_y4r1p"] [ext_resource type="Script" uid="uid://ylmao2ndp22y" path="res://scripts/weapon_component.gd" id="7_d2wvv"] [sub_resource type="AtlasTexture" id="AtlasTexture_tuyoq"] diff --git a/scenes/player_weapons/weapon_stock.gd b/scenes/player_weapons/weapon_stock.gd index 3de04e9..55fd8e7 100644 --- a/scenes/player_weapons/weapon_stock.gd +++ b/scenes/player_weapons/weapon_stock.gd @@ -1,10 +1,8 @@ extends Area2D - -@onready var bullet: PackedScene = load("res://scenes/player_weapons/weapon_stock.tscn") -@onready var shot_data: = load("res://resources/player_weapon_resources/weapon_shot_stock.tres") - - +# Data to be set externally when this bullet is instantiated +var bullet_scene: PackedScene = null +var shot_data: WeaponShot = null # Time offset when this bullet was fired (relative to other bullets in the same shot) var time_offset: float = 0.5 @@ -38,3 +36,8 @@ func _on_visible_on_screen_notifier_2d_screen_exited(): # Set fire_time for the next shot (staggered firing) var current_time = Time.get_ticks_msec() / 1000.0 fire_time = current_time + shot_data.stagger_offset + +# Function to set the bullet data (called from parent scene) +func set_weapon_data(bullet_scene_param: PackedScene, shot_data_param: WeaponShot): + bullet_scene = bullet_scene_param + shot_data = shot_data_param diff --git a/scripts/input_component.gd b/scripts/input_component.gd index ce71e8d..83131e6 100644 --- a/scripts/input_component.gd +++ b/scripts/input_component.gd @@ -9,3 +9,7 @@ func update() -> void: move_dir = Input.get_vector("left", "right", "up", "down") shoot_pressed = Input.is_action_just_pressed("shoot") shooting = Input.is_action_pressed("shoot") + + + # Development Keys + # Cycle Available Weapons diff --git a/scripts/shoot_component.gd b/scripts/shoot_component.gd index 3f1ee7d..b3bd5b3 100644 --- a/scripts/shoot_component.gd +++ b/scripts/shoot_component.gd @@ -19,7 +19,7 @@ func shoot(): if total_projectiles > 0: for b in range(total_projectiles): var bullet_scene = weapon_data.bullet_scene - var bullet := bullet_scene.instantiate() as Node + var bullet := bullet_scene.instantiate() as Area2D get_tree().root.add_child(bullet) # Calculate index relative to center (0 = center, -1/+1 = first from center) @@ -42,5 +42,8 @@ func shoot(): bullet.time_offset = time_offset bullet.fire_time = current_time + time_offset + # Set the bullet data (this is what was missing) + bullet.set_weapon_data(weapon_data.bullet_scene, weapon_data) + # Subtract projectile spacing from current Player travel for next shot player.travel -= weapon_data.spacing diff --git a/scripts/shoot_component.gd.uid b/scripts/shoot_component.gd.uid index 4e59bd1..fdd16b5 100644 --- a/scripts/shoot_component.gd.uid +++ b/scripts/shoot_component.gd.uid @@ -1 +1 @@ -uid://bgd1hwindc2ui +uid://suynuijl68qp diff --git a/scripts/weapon_component.gd b/scripts/weapon_component.gd index 0a9a9cd..e88e83b 100644 --- a/scripts/weapon_component.gd +++ b/scripts/weapon_component.gd @@ -1,9 +1,34 @@ class_name WeaponComponent extends Node -@export var loaded_weapon: PackedScene = load("res://scenes/player_weapons/weapon_stock.tscn") -var data : WeaponShot = load("res://resources/player_weapon_resources/weapon_shot_stock.tres") +enum WeaponType { + STOCK, + NONE, +} +@export_enum("STOCK", "NONE") var loaded_weapon: int = WeaponType.STOCK +var data: WeaponShot = load("res://resources/player_weapon_resources/weapon_shot_stock.tres") func get_bullet_scene() -> PackedScene: - return data.weapon_shot # Reference to the Shot scene from the resource + if loaded_weapon == WeaponType.STOCK: + return preload("res://scenes/player_weapons/weapon_stock.tscn") + else: + return null + +func get_weapon_resource() -> Resource: + var weapon_resource_path: String + + if loaded_weapon == WeaponType.STOCK: + weapon_resource_path = "res://resources/player_weapon_resources/weapon_shot_stock.tres" + data = load(weapon_resource_path) + return data + else: + return null + + +#var data : WeaponShot = load("res://resources/player_weapon_resources/weapon_shot_stock.tres") + + + +#func get_bullet_scene() -> PackedScene: + #return data.weapon_shot # Reference to the Shot scene from the resource