spreads and stacks!

This commit is contained in:
Haze Weathers 2026-01-03 11:02:33 -06:00
parent 08763960ca
commit 8eb39f4a70
5 changed files with 72 additions and 22 deletions

View file

@ -1,4 +1,4 @@
[gd_scene load_steps=17 format=3 uid="uid://dxsp66qpvm65b"]
[gd_scene load_steps=15 format=3 uid="uid://dxsp66qpvm65b"]
[ext_resource type="PackedScene" uid="uid://q2fys6o0jy6w" path="res://objects/starfield/starfield.tscn" id="1_4oowd"]
[ext_resource type="PackedScene" uid="uid://c714s5d7d5765" path="res://objects/player/player.tscn" id="2_j8ivh"]
@ -7,9 +7,8 @@
[ext_resource type="Script" uid="uid://dntp60my5f65m" path="res://systems/bullets/bullet_behaviors/linear_motion_behavior.gd" id="4_t1bs8"]
[ext_resource type="Texture2D" uid="uid://c21fe72aym3fe" path="res://graphics/bullets/normal_bullet/test_bullet.png" id="5_4oowd"]
[ext_resource type="Script" uid="uid://vus1a0flwtnm" path="res://systems/bullets/bullet_preset.gd" id="6_sle1e"]
[ext_resource type="Script" uid="uid://dtuc6qerbfset" path="res://systems/bullets/spawn_patterns/ring_pattern.gd" id="6_uu3sg"]
[ext_resource type="Script" uid="uid://ckedfcjjnv7dq" path="res://systems/bullets/spawn_patterns/spawn_pattern_randomizer.gd" id="7_4oowd"]
[ext_resource type="Texture2D" uid="uid://cgqgb84k38tbe" path="res://graphics/bullets/normal_bullet/test_bullet_overlay.png" id="7_sle1e"]
[ext_resource type="Script" uid="uid://t5lnmlng1vey" path="res://systems/bullets/spawn_patterns/spread_pattern.gd" id="8_sle1e"]
[sub_resource type="Resource" id="Resource_c0i5a"]
script = ExtResource("4_4oowd")
@ -29,23 +28,12 @@ frames = 2
fps = 10.0
metadata/_custom_type_script = "uid://0ognvvq2ncd7"
[sub_resource type="Resource" id="Resource_4oowd"]
script = ExtResource("6_uu3sg")
bullet_count = 1
bullet_speed = 120.0
metadata/_custom_type_script = "uid://dtuc6qerbfset"
[sub_resource type="Resource" id="Resource_sle1e"]
script = ExtResource("7_4oowd")
pattern = SubResource("Resource_4oowd")
property_min_values = Dictionary[StringName, float]({
&"direction_rotation": -3.142
})
property_max_values = Dictionary[StringName, float]({
&"direction_rotation": 3.142
})
iterations = 50
metadata/_custom_type_script = "uid://ckedfcjjnv7dq"
[sub_resource type="Resource" id="Resource_uu3sg"]
script = ExtResource("8_sle1e")
bullet_count = 3
bullet_speed = 60.0
spread = 1.0471975511965976
metadata/_custom_type_script = "uid://t5lnmlng1vey"
[sub_resource type="Resource" id="Resource_hxqcc"]
script = ExtResource("6_sle1e")
@ -54,9 +42,9 @@ hitbox_size = Vector2i(6, 6)
base_graphics = Array[ExtResource("4_4oowd")]([SubResource("Resource_c0i5a")])
overlay_graphics = Array[ExtResource("4_4oowd")]([SubResource("Resource_1xo0o")])
colors = Array[Color]([Color(1, 0, 0, 1), Color(0, 0, 1, 1), Color(0, 1, 0, 1), Color(1, 1, 0, 1)])
pattern = SubResource("Resource_sle1e")
pattern = SubResource("Resource_uu3sg")
rounds = 99999999
round_delay = 0.5
round_delay = 0.2
metadata/_custom_type_script = "uid://vus1a0flwtnm"
[node name="TestScene" type="Node"]
@ -73,6 +61,7 @@ position = Vector2(122, 283)
[node name="BulletSet" type="Node2D" parent="."]
position = Vector2(122, 92)
rotation = 1.5707964
script = ExtResource("3_cf1so")
preset = SubResource("Resource_hxqcc")
metadata/_custom_type_script = "uid://cj2fj7snls8aa"

View file

@ -0,0 +1,32 @@
@tool
class_name SpawnPatternStacker
extends BulletSpawnPattern
## Spawns a pattern in a "stack". The pattern will be spawned multiple
## times at once with a varying [code]bullet_speed[/code].
## The subpattern to stack.
@export var pattern: BulletSpawnPattern
## The number of times to "stack" up the pattern.
@export_range(1, 1, 1, "or_greater") var stack_count: int = 1
## The minimum speed of the stacked patterns.
@export var min_speed: float:
set(value):
if min_speed != value:
min_speed = value
max_speed = maxf(min_speed, max_speed)
## The maximum speed of the stacked patterns.
@export var max_speed: float:
set(value):
if max_speed != value:
max_speed = value
min_speed = minf(min_speed, max_speed)
func _spawn_bullets(bullet_set: BulletSet, preset: BulletPreset) -> void:
for i in stack_count:
pattern.set(
&"bullet_speed",
remap(float(i), 0.0, float(stack_count - 1), min_speed, max_speed)
)
pattern.spawn_bullets(bullet_set, preset)

View file

@ -0,0 +1 @@
uid://drxrjgbmeglwp

View file

@ -0,0 +1,27 @@
class_name SpreadPattern
extends BulletSpawnPattern
## Number of bullets to spawn along the spread.
@export_range(1, 1, 1, "or_greater") var bullet_count: int
## The speed that bullets will start with.
@export var bullet_speed: float
## Angular distance between first and last bullet.
@export_range(0.0, 360.0, 0.1, "radians_as_degrees") var spread
## Radius of the arc that bullets spawn along the edge of.
@export var radius: float
## Rotation of the entire pattern.
@export_custom(0, "radians_as_degrees") var angle_offset: float
## Rotation of each bullet's travel direction.
@export_custom(0, "radians_as_degrees") var direction_rotation: float
func _spawn_bullets(bullet_set: BulletSet, preset: BulletPreset) -> void:
for i in bullet_count:
var angle = remap(float(i), 0.0, float(bullet_count - 1), -spread * 0.5, spread * 0.5)
angle += angle_offset + bullet_set.spawn_rotation
var bullet = Bullet.create(preset, Vector2.from_angle(angle + direction_rotation))
bullet.speed = bullet_speed
bullet.position = bullet_set.spawn_offset + Vector2.from_angle(angle) * radius
bullet_set.add_bullet(bullet)

View file

@ -0,0 +1 @@
uid://t5lnmlng1vey