diff --git a/resources/player_weapon_resources/spread.tres b/resources/player_weapon_resources/spread.tres index dc6b432..912569c 100644 --- a/resources/player_weapon_resources/spread.tres +++ b/resources/player_weapon_resources/spread.tres @@ -3,11 +3,13 @@ [ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_pn64g"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_4b7mw"] [ext_resource type="Script" uid="uid://d0ios82vubijg" path="res://scripts/weapon_projectile_group.gd" id="2_ak5x4"] +[ext_resource type="Texture2D" uid="uid://dwc5fjwhqikoo" path="res://graphics/spread.png" id="3_ak5x4"] [resource] script = ExtResource("2_4b7mw") shot_name = "spread" bullet_scene = ExtResource("1_pn64g") +pickup_icon = ExtResource("3_ak5x4") damage = 5 speed = 720 projectiles = 5 diff --git a/resources/player_weapon_resources/stock.tres b/resources/player_weapon_resources/stock.tres index 41c3bb3..f975f9a 100644 --- a/resources/player_weapon_resources/stock.tres +++ b/resources/player_weapon_resources/stock.tres @@ -3,11 +3,13 @@ [ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_lcw6o"] [ext_resource type="Script" uid="uid://d0ios82vubijg" path="res://scripts/weapon_projectile_group.gd" id="2_e245k"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_ym48c"] +[ext_resource type="Texture2D" uid="uid://dtggedl0127vk" path="res://graphics/stock.png" id="3_e245k"] [resource] script = ExtResource("2_ym48c") shot_name = "stock" bullet_scene = ExtResource("1_lcw6o") +pickup_icon = ExtResource("3_e245k") damage = 2 speed = 650 horizontal_offset = 12.0 diff --git a/resources/player_weapon_resources/tri.tres b/resources/player_weapon_resources/tri.tres index d13bcc6..be0811a 100644 --- a/resources/player_weapon_resources/tri.tres +++ b/resources/player_weapon_resources/tri.tres @@ -1,13 +1,15 @@ [gd_resource type="Resource" script_class="WeaponShot" format=3 uid="uid://cck3gmnhu5agc"] -[ext_resource type="PackedScene" uid="uid://clpyd8qfwthk2" path="res://scenes/player_weapons/weapon_spreadshot.tscn" id="1_07hyh"] +[ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_bhv8k"] [ext_resource type="Script" uid="uid://d0ios82vubijg" path="res://scripts/weapon_projectile_group.gd" id="2_bhv8k"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_syw6j"] +[ext_resource type="Texture2D" uid="uid://cne450xyao5xl" path="res://graphics/tri.png" id="3_fw2v3"] [resource] script = ExtResource("2_syw6j") shot_name = "tri" -bullet_scene = ExtResource("1_07hyh") +bullet_scene = ExtResource("1_bhv8k") +pickup_icon = ExtResource("3_fw2v3") damage = 3 speed = 700 projectiles = 3 diff --git a/resources/player_weapon_resources/vanguard+.tres b/resources/player_weapon_resources/vanguard+.tres index b8b46ab..6397f26 100644 --- a/resources/player_weapon_resources/vanguard+.tres +++ b/resources/player_weapon_resources/vanguard+.tres @@ -4,11 +4,13 @@ [ext_resource type="Script" uid="uid://d0ios82vubijg" path="res://scripts/weapon_projectile_group.gd" id="2_qeb4b"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="3_fh2eq"] [ext_resource type="Resource" uid="uid://ch8qch6lx1mdx" path="res://resources/player_weapon_resources/patterns/phallanx.tres" id="3_qeb4b"] +[ext_resource type="Texture2D" uid="uid://dsjhp3mh5pqg3" path="res://graphics/vanguard+.png" id="4_fh2eq"] [resource] script = ExtResource("3_fh2eq") shot_name = "vanguard+" bullet_scene = ExtResource("1_lqlv8") +pickup_icon = ExtResource("4_fh2eq") damage = 5 speed = 500 projectiles = 5 diff --git a/resources/player_weapon_resources/vanguard.tres b/resources/player_weapon_resources/vanguard.tres index 0970935..3e6a379 100644 --- a/resources/player_weapon_resources/vanguard.tres +++ b/resources/player_weapon_resources/vanguard.tres @@ -3,11 +3,13 @@ [ext_resource type="PackedScene" uid="uid://ddpclu2vdy2ve" path="res://scenes/player_weapons/weapon_stock.tscn" id="1_hm46f"] [ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_w7xlm"] [ext_resource type="Script" uid="uid://d0ios82vubijg" path="res://scripts/weapon_projectile_group.gd" id="2_xf183"] +[ext_resource type="Texture2D" uid="uid://b34vaaw3u84ae" path="res://graphics/vanguard.png" id="3_xf183"] [resource] script = ExtResource("2_w7xlm") shot_name = "vanguard" bullet_scene = ExtResource("1_hm46f") +pickup_icon = ExtResource("3_xf183") damage = 5 speed = 500 projectiles = 5 diff --git a/scenes/power_up_spawner.tscn b/scenes/power_up_spawner.tscn index d099e50..ac4dce4 100644 --- a/scenes/power_up_spawner.tscn +++ b/scenes/power_up_spawner.tscn @@ -1,16 +1,20 @@ [gd_scene format=3 uid="uid://du5nub2keaty3"] -[ext_resource type="Script" uid="uid://qf6mgn4117o" path="res://scripts/power_up_spawner.gd" id="1_85wk8"] -[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_07x44"] -[ext_resource type="Resource" uid="uid://b75ae840k03dy" path="res://resources/player_weapon_resources/stock.tres" id="3_0eev3"] -[ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="4_qqjui"] -[ext_resource type="Resource" uid="uid://ds53sryglmf27" path="res://resources/player_weapon_resources/spread.tres" id="5_mwa7c"] -[ext_resource type="Resource" uid="uid://bhc6aja38vyr" path="res://resources/player_weapon_resources/vanguard.tres" id="6_vphcr"] -[ext_resource type="Resource" uid="uid://c41aoyka7nfr8" path="res://resources/player_weapon_resources/vanguard+.tres" id="7_g67dp"] +[ext_resource type="PackedScene" uid="uid://c9k2p5m8xrq4" path="res://scenes/powerup_pickup.tscn" id="1_xk8p2"] +[ext_resource type="Script" uid="uid://qf6mgn4117o" path="res://scripts/power_up_spawner.gd" id="2_9m3n7"] +[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="3_07x44"] +[ext_resource type="Resource" uid="uid://b75ae840k03dy" path="res://resources/player_weapon_resources/stock.tres" id="4_0eev3"] +[ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="5_qqjui"] +[ext_resource type="Resource" uid="uid://ds53sryglmf27" path="res://resources/player_weapon_resources/spread.tres" id="6_mwa7c"] +[ext_resource type="Resource" uid="uid://bhc6aja38vyr" path="res://resources/player_weapon_resources/vanguard.tres" id="7_vphcr"] +[ext_resource type="Resource" uid="uid://c41aoyka7nfr8" path="res://resources/player_weapon_resources/vanguard+.tres" id="8_g67dp"] [node name="PowerUpSpawner" type="Node2D" unique_id=1191463626] -script = ExtResource("1_85wk8") -all_weapon_shots = Array[ExtResource("2_07x44")]([ExtResource("3_0eev3"), ExtResource("4_qqjui"), ExtResource("5_mwa7c"), ExtResource("6_vphcr"), ExtResource("7_g67dp")]) +script = ExtResource("2_9m3n7") +pickup_scene = ExtResource("1_xk8p2") +all_weapon_shots = Array[ExtResource("3_07x44")]( + [ExtResource("4_0eev3"), ExtResource("5_qqjui"), ExtResource("6_mwa7c"), ExtResource("7_vphcr"), ExtResource("8_g67dp")] +) [node name="SpawnTimer" type="Timer" parent="." unique_id=173111015] wait_time = 5.0 diff --git a/scenes/powerup_pickup.tscn b/scenes/powerup_pickup.tscn new file mode 100644 index 0000000..8073dac --- /dev/null +++ b/scenes/powerup_pickup.tscn @@ -0,0 +1,10 @@ +[gd_scene format=3 uid="uid://dsqfuv86suu17"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_mmgg1"] +size = Vector2(14, 14) + +[node name="PowerUpPickup" type="Area2D" unique_id=478708932] +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="." unique_id=347643413] +shape = SubResource("RectangleShape2D_mmgg1") diff --git a/scripts/power_up_spawner.gd b/scripts/power_up_spawner.gd index 8185b71..8387f34 100644 --- a/scripts/power_up_spawner.gd +++ b/scripts/power_up_spawner.gd @@ -3,6 +3,9 @@ class_name PowerUpSpawner extends Node2D @export var spawn_interval: float = 5.0 @export var test_mode: bool = true +# PackedScene for the pickup template — configure in the scene editor. +@export var pickup_scene: PackedScene + @onready var screensize: Vector2 = get_viewport().content_scale_size @onready var spawn_timer: Timer = $SpawnTimer @@ -31,7 +34,8 @@ func _spawn_test_pickups() -> void: for weapon: WeaponShot in all_weapon_shots: if weapon == null or weapon.shot_name.is_empty(): continue - var pickup := _create_pickup(weapon) + + var pickup := _spawn_pickup(weapon) if not is_instance_valid(pickup): continue # skipped — no valid icon @@ -61,45 +65,27 @@ func pickup_collected() -> void: _pickups_spawned = 0 -func _create_pickup(weapon: WeaponShot) -> Area2D: - var pickup := Area2D.new() - pickup.name = "PowerUpPickup" +func _spawn_pickup(weapon: WeaponShot) -> Area2D: + # Validate that the weapon has a pickup icon configured. + if weapon.pickup_icon == null: + printerr("[PowerUpSpawner] No pickup icon set for weapon: ", weapon.shot_name) + var dead := Area2D.new() # return a dead node — caller skips it + dead.queue_free() + return dead - # Icon texture — load from graphics/ matching the weapon's shot_name. - var icon_path := "res://graphics/" + weapon.shot_name.replace(" ", "") + ".png" - var icon_tex := load(icon_path) as Texture2D - if icon_tex == null: - printerr("[PowerUpSpawner] No texture found for weapon: ", weapon.shot_name) - pickup.queue_free() # return a dead node — caller skips it - return pickup + # Instantiate the scene template and attach weapon metadata. + var pickup := pickup_scene.instantiate() as Area2D + if pickup == null: + printerr("[PowerUpSpawner] Failed to instantiate pickup scene.") + return null + pickup.set_meta("weapon_shot", weapon) + + # Add the icon node at runtime (scene has no TextureRect to avoid null-dependency issues). var icon := TextureRect.new() - icon.texture = icon_tex + icon.texture = weapon.pickup_icon icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED icon.size = Vector2(16, 16) pickup.add_child(icon) - # Collision shape — small rectangle matching the icon. - var shape := RectangleShape2D.new() - shape.size = Vector2(14, 14) - var collision := CollisionShape2D.new() - collision.shape = shape - pickup.add_child(collision) - - # Store the weapon reference so we know what to give the player. - pickup.set_meta("weapon_shot", weapon) - - # Configure collision so HelpBoxArea (Layer 2, Mask 1) detects it. - pickup.collision_layer = 1 - pickup.collision_mask = 0 - return pickup - - - - - -# --- Timer control --- - -# Direct stop/start — no guard conditions. The timer's paused property -# can cause deadlock if the guard checks "not paused" after stop(). diff --git a/scripts/weapon_shot.gd b/scripts/weapon_shot.gd index a2f902a..fb6ecdc 100644 --- a/scripts/weapon_shot.gd +++ b/scripts/weapon_shot.gd @@ -11,6 +11,9 @@ extends Resource # PackedScene reference to the bullet / projectile scene instantiated on fire. @export var bullet_scene: PackedScene +# Icon used when this weapon appears as a powerup pickup on the field. +@export var pickup_icon: Texture2D + @export_subgroup("Launch")