Still a lille buggy! But closer.

This commit is contained in:
Henry Faber 2026-06-28 02:38:02 +01:00
parent 99a5d9838d
commit 64e685a3c1
3 changed files with 19 additions and 8 deletions

View file

@ -26,8 +26,8 @@ func _shoot_standard(weapon_data: WeaponShot, current_time: float):
var bullet := weapon_data.bullet_scene.instantiate() as Area2D var bullet := weapon_data.bullet_scene.instantiate() as Area2D
get_tree().root.add_child(bullet) get_tree().root.add_child(bullet)
# Delegate math to the helper, with spawn position offset by sprite height and weapon origin # Delegate math to the helper, with spawn position offset by weapon origin
var spawn_position = ship.global_position + Vector2(0, ship.get_texture().get_height() / 2.0) + weapon_data.origin var spawn_position = ship.global_position + weapon_data.origin
var props = fire_helper.compute_standard_props(weapon_data, b, spawn_position, current_time) var props = fire_helper.compute_standard_props(weapon_data, b, spawn_position, current_time)
bullet.position = props.position bullet.position = props.position
bullet.angle = props.angle bullet.angle = props.angle
@ -50,7 +50,7 @@ func _shoot_grouped(weapon_data: WeaponShot, current_time: float):
get_tree().root.add_child(bullet) get_tree().root.add_child(bullet)
# Apply computed properties for the original bullet # Apply computed properties for the original bullet
var spawn_position = ship.global_position + Vector2(0, ship.get_texture().get_height() / 2.0) + weapon_data.origin var spawn_position = ship.global_position + weapon_data.origin
var props = fire_helper.compute_grouped_props(group, weapon_data, b, spawn_position, current_time, false) var props = fire_helper.compute_grouped_props(group, weapon_data, b, spawn_position, current_time, false)
bullet.position = props.position bullet.position = props.position
bullet.angle = props.angle bullet.angle = props.angle
@ -66,7 +66,7 @@ func _shoot_grouped(weapon_data: WeaponShot, current_time: float):
get_tree().root.add_child(mirror_bullet) get_tree().root.add_child(mirror_bullet)
# Apply computed properties for the mirrored bullet # Apply computed properties for the mirrored bullet
var mirror_spawn = ship.global_position + Vector2(0, ship.get_texture().get_height() / 2.0) + weapon_data.origin var mirror_spawn = ship.global_position + weapon_data.origin
var mirror_props = fire_helper.compute_grouped_props(group, weapon_data, b, mirror_spawn, current_time, true) var mirror_props = fire_helper.compute_grouped_props(group, weapon_data, b, mirror_spawn, current_time, true)
mirror_bullet.position = mirror_props.position mirror_bullet.position = mirror_props.position
mirror_bullet.angle = mirror_props.angle mirror_bullet.angle = mirror_props.angle

View file

@ -15,9 +15,11 @@ func compute_standard_props(weapon_data: WeaponShot, projectile_index: int, spaw
# Timing: center-first, pairs outward # Timing: center-first, pairs outward
var time_offset: float = abs(index_from_center) * weapon_data.stagger_offset var time_offset: float = abs(index_from_center) * weapon_data.stagger_offset
# Vertical offset: outer projectiles are spaced relative to center, preserving the pattern geometry. # Vertical spacing creates the ^ (inverted-V) geometry: outer projectiles fire higher
# than the center projectile. Negate the offset so outer bullets are pushed upward
# (lower y values in Godot), creating a ^ pattern relative to the origin.
var vertical_offset: float = (abs(index_from_center) * weapon_data.projectile_vertical_spacing) / 2.0 var vertical_offset: float = (abs(index_from_center) * weapon_data.projectile_vertical_spacing) / 2.0
var position: Vector2 = spawn_position + Vector2(bullet_horizontal_offset, vertical_offset) var position: Vector2 = spawn_position + Vector2(bullet_horizontal_offset, -vertical_offset)
# Angle (only when projectiles >= 3, division-by-zero guard) # Angle (only when projectiles >= 3, division-by-zero guard)
var bullet_angle: float = 0.0 var bullet_angle: float = 0.0

View file

@ -7,9 +7,18 @@ extends Resource
@export var damage: int = 1 @export var damage: int = 1
@export var speed: int = 135 @export var speed: int = 135
@export var projectiles: int = 2 @export var projectiles: int = 2
# Vertical spacing between projectiles when firing continuously # Vertical spacing between projectiles in a burst (used by WeaponFireHelper to compute the ^ pattern).
# This controls spatial burst geometry, NOT temporal spacing between continuous fire bursts.
@export var projectile_vertical_spacing: float = 35 @export var projectile_vertical_spacing: float = 35
# Spawn offset from center of player (x is usually 0, y controls vertical fire position) # Spawn offset strictly relative to the ship node's global position (origin).
# This offset is measured from the ship node's center, not the sprite texture.
# x is usually 0 (horizontal centering), y controls vertical fire position.
# Negative Y moves bullets "above" the ship (in front of it); positive Y
# moves them "below" (behind it). The default of (0, -25) places the burst
# 25 pixels above (in front of) the ship center.
# All weapon resources in this project use the default. Custom weapons with
# explicit origin.y > 0 (positive) will have their burst pattern appear
# behind or below the ship -- verify visually if adjusting.
@export var origin: Vector2 = Vector2(0, -25) @export var origin: Vector2 = Vector2(0, -25)
@export_category("Spread") @export_category("Spread")