Update spawner to be scene-based.
This commit is contained in:
parent
8fe05e0c70
commit
da9f947788
9 changed files with 59 additions and 46 deletions
|
|
@ -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="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://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="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]
|
[resource]
|
||||||
script = ExtResource("2_4b7mw")
|
script = ExtResource("2_4b7mw")
|
||||||
shot_name = "spread"
|
shot_name = "spread"
|
||||||
bullet_scene = ExtResource("1_pn64g")
|
bullet_scene = ExtResource("1_pn64g")
|
||||||
|
pickup_icon = ExtResource("3_ak5x4")
|
||||||
damage = 5
|
damage = 5
|
||||||
speed = 720
|
speed = 720
|
||||||
projectiles = 5
|
projectiles = 5
|
||||||
|
|
|
||||||
|
|
@ -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="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://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="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]
|
[resource]
|
||||||
script = ExtResource("2_ym48c")
|
script = ExtResource("2_ym48c")
|
||||||
shot_name = "stock"
|
shot_name = "stock"
|
||||||
bullet_scene = ExtResource("1_lcw6o")
|
bullet_scene = ExtResource("1_lcw6o")
|
||||||
|
pickup_icon = ExtResource("3_e245k")
|
||||||
damage = 2
|
damage = 2
|
||||||
speed = 650
|
speed = 650
|
||||||
horizontal_offset = 12.0
|
horizontal_offset = 12.0
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,15 @@
|
||||||
[gd_resource type="Resource" script_class="WeaponShot" format=3 uid="uid://cck3gmnhu5agc"]
|
[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://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="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]
|
[resource]
|
||||||
script = ExtResource("2_syw6j")
|
script = ExtResource("2_syw6j")
|
||||||
shot_name = "tri"
|
shot_name = "tri"
|
||||||
bullet_scene = ExtResource("1_07hyh")
|
bullet_scene = ExtResource("1_bhv8k")
|
||||||
|
pickup_icon = ExtResource("3_fw2v3")
|
||||||
damage = 3
|
damage = 3
|
||||||
speed = 700
|
speed = 700
|
||||||
projectiles = 3
|
projectiles = 3
|
||||||
|
|
|
||||||
|
|
@ -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://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="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="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]
|
[resource]
|
||||||
script = ExtResource("3_fh2eq")
|
script = ExtResource("3_fh2eq")
|
||||||
shot_name = "vanguard+"
|
shot_name = "vanguard+"
|
||||||
bullet_scene = ExtResource("1_lqlv8")
|
bullet_scene = ExtResource("1_lqlv8")
|
||||||
|
pickup_icon = ExtResource("4_fh2eq")
|
||||||
damage = 5
|
damage = 5
|
||||||
speed = 500
|
speed = 500
|
||||||
projectiles = 5
|
projectiles = 5
|
||||||
|
|
|
||||||
|
|
@ -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="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://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="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]
|
[resource]
|
||||||
script = ExtResource("2_w7xlm")
|
script = ExtResource("2_w7xlm")
|
||||||
shot_name = "vanguard"
|
shot_name = "vanguard"
|
||||||
bullet_scene = ExtResource("1_hm46f")
|
bullet_scene = ExtResource("1_hm46f")
|
||||||
|
pickup_icon = ExtResource("3_xf183")
|
||||||
damage = 5
|
damage = 5
|
||||||
speed = 500
|
speed = 500
|
||||||
projectiles = 5
|
projectiles = 5
|
||||||
|
|
|
||||||
|
|
@ -1,16 +1,20 @@
|
||||||
[gd_scene format=3 uid="uid://du5nub2keaty3"]
|
[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="PackedScene" uid="uid://c9k2p5m8xrq4" path="res://scenes/powerup_pickup.tscn" id="1_xk8p2"]
|
||||||
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="2_07x44"]
|
[ext_resource type="Script" uid="uid://qf6mgn4117o" path="res://scripts/power_up_spawner.gd" id="2_9m3n7"]
|
||||||
[ext_resource type="Resource" uid="uid://b75ae840k03dy" path="res://resources/player_weapon_resources/stock.tres" id="3_0eev3"]
|
[ext_resource type="Script" uid="uid://7n1itonn35fm" path="res://scripts/weapon_shot.gd" id="3_07x44"]
|
||||||
[ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="4_qqjui"]
|
[ext_resource type="Resource" uid="uid://b75ae840k03dy" path="res://resources/player_weapon_resources/stock.tres" id="4_0eev3"]
|
||||||
[ext_resource type="Resource" uid="uid://ds53sryglmf27" path="res://resources/player_weapon_resources/spread.tres" id="5_mwa7c"]
|
[ext_resource type="Resource" uid="uid://cck3gmnhu5agc" path="res://resources/player_weapon_resources/tri.tres" id="5_qqjui"]
|
||||||
[ext_resource type="Resource" uid="uid://bhc6aja38vyr" path="res://resources/player_weapon_resources/vanguard.tres" id="6_vphcr"]
|
[ext_resource type="Resource" uid="uid://ds53sryglmf27" path="res://resources/player_weapon_resources/spread.tres" id="6_mwa7c"]
|
||||||
[ext_resource type="Resource" uid="uid://c41aoyka7nfr8" path="res://resources/player_weapon_resources/vanguard+.tres" id="7_g67dp"]
|
[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]
|
[node name="PowerUpSpawner" type="Node2D" unique_id=1191463626]
|
||||||
script = ExtResource("1_85wk8")
|
script = ExtResource("2_9m3n7")
|
||||||
all_weapon_shots = Array[ExtResource("2_07x44")]([ExtResource("3_0eev3"), ExtResource("4_qqjui"), ExtResource("5_mwa7c"), ExtResource("6_vphcr"), ExtResource("7_g67dp")])
|
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]
|
[node name="SpawnTimer" type="Timer" parent="." unique_id=173111015]
|
||||||
wait_time = 5.0
|
wait_time = 5.0
|
||||||
|
|
|
||||||
10
scenes/powerup_pickup.tscn
Normal file
10
scenes/powerup_pickup.tscn
Normal file
|
|
@ -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")
|
||||||
|
|
@ -3,6 +3,9 @@ class_name PowerUpSpawner extends Node2D
|
||||||
@export var spawn_interval: float = 5.0
|
@export var spawn_interval: float = 5.0
|
||||||
@export var test_mode: bool = true
|
@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 screensize: Vector2 = get_viewport().content_scale_size
|
||||||
@onready var spawn_timer: Timer = $SpawnTimer
|
@onready var spawn_timer: Timer = $SpawnTimer
|
||||||
|
|
||||||
|
|
@ -31,7 +34,8 @@ func _spawn_test_pickups() -> void:
|
||||||
for weapon: WeaponShot in all_weapon_shots:
|
for weapon: WeaponShot in all_weapon_shots:
|
||||||
if weapon == null or weapon.shot_name.is_empty():
|
if weapon == null or weapon.shot_name.is_empty():
|
||||||
continue
|
continue
|
||||||
var pickup := _create_pickup(weapon)
|
|
||||||
|
var pickup := _spawn_pickup(weapon)
|
||||||
if not is_instance_valid(pickup):
|
if not is_instance_valid(pickup):
|
||||||
continue # skipped — no valid icon
|
continue # skipped — no valid icon
|
||||||
|
|
||||||
|
|
@ -61,45 +65,27 @@ func pickup_collected() -> void:
|
||||||
_pickups_spawned = 0
|
_pickups_spawned = 0
|
||||||
|
|
||||||
|
|
||||||
func _create_pickup(weapon: WeaponShot) -> Area2D:
|
func _spawn_pickup(weapon: WeaponShot) -> Area2D:
|
||||||
var pickup := Area2D.new()
|
# Validate that the weapon has a pickup icon configured.
|
||||||
pickup.name = "PowerUpPickup"
|
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.
|
# Instantiate the scene template and attach weapon metadata.
|
||||||
var icon_path := "res://graphics/" + weapon.shot_name.replace(" ", "") + ".png"
|
var pickup := pickup_scene.instantiate() as Area2D
|
||||||
var icon_tex := load(icon_path) as Texture2D
|
if pickup == null:
|
||||||
if icon_tex == null:
|
printerr("[PowerUpSpawner] Failed to instantiate pickup scene.")
|
||||||
printerr("[PowerUpSpawner] No texture found for weapon: ", weapon.shot_name)
|
return null
|
||||||
pickup.queue_free() # return a dead node — caller skips it
|
|
||||||
return pickup
|
|
||||||
|
|
||||||
|
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()
|
var icon := TextureRect.new()
|
||||||
icon.texture = icon_tex
|
icon.texture = weapon.pickup_icon
|
||||||
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
icon.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED
|
||||||
icon.size = Vector2(16, 16)
|
icon.size = Vector2(16, 16)
|
||||||
pickup.add_child(icon)
|
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
|
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().
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,9 @@ extends Resource
|
||||||
# PackedScene reference to the bullet / projectile scene instantiated on fire.
|
# PackedScene reference to the bullet / projectile scene instantiated on fire.
|
||||||
@export var bullet_scene: PackedScene
|
@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")
|
@export_subgroup("Launch")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue