class_name WeaponShot extends Resource @export_category("Parameters") @export var shot_name: String @export var bullet_scene: PackedScene = null @export var damage: int = 1 @export var speed: int = 135 @export var projectiles: int = 2 # Vertical spacing between projectiles in a burst (used by WeaponFireHelper to compute the ^ pattern). # This parameter has a dual role: spatial (computing the ^ burst geometry) and temporal # (serving as the burst-gating threshold in ShootComponent.shoot()). When compensate_spawn_geometry # is enabled, this parameter is overridden by geometric compensation for spatial calculations; # temporal behavior remains unchanged and continues to use this value. @export var projectile_vertical_spacing: float = 35 # Vertical offset from the top of the player's sprite where bullets spawn. # Measured in pixels; negative values fire in front of (above) the ship, # positive values fire behind (below) it. The default of -25 places the # burst 25 pixels above the sprite's top edge. @export var origin: float = -25.0 @export_category("Spread") # Horizontal distance between projectiles @export var horizontal_offset: float = 6.5 # Total spread angle in degrees (only applied when projectiles >= 3) @export var spread_angle: float = 0.0 # Time delay per projectile index @export var stagger_offset: float = 0.25 # When enabled, adjusts spawn vertical offsets so the geometric line # from the center bullet to each outer bullet matches their velocity # direction. Eliminates the optical illusion where the spread appears # wider than the actual bullet trajectories (e.g. spread.tres flies at # half the angle it visually appears to fan). ## WARNING: This flag uses a trigonometric formula (horizontal_offset / tan(angle)) that evaluates independently-tuned horizontal and spread angles in grouped shots ONLY! @export var compensate_spawn_geometry: bool = false @export_category("Effects") # Offset animation playback per projectile index @export var stagger_animation: bool = false # Rotate projectiles to point along their travel direction (requires >2 projectiles and spread_angle > 0) @export var follow_angle: bool = false @export_category("Grouped Projectiles") @export var groups: Array[WeaponProjectileGroup] = []