#90: give the laser an ignition instead of a blink
The shot was one flat line that appeared at full length and faded. Nothing happened at the ship, nothing moved, and a hit looked exactly like a miss. The blade now runs out of the hull over the first 30% of the flash on a cubic ease-out, holds white-hot, then falls away, with a hum in its width, a bright cap at the leading end, a flare at the emitter, and sparks off the hull that fired it. MuzzleSparkVFX takes an optional colour so the laser throws cyan where the ordinary gun (#87) keeps its gold. The extra light is a white-hot rod down the middle at 42% of the width, deliberately not a wider halo: the note at BEAM_WIDTH_SCALE records that the drawn beam spans exactly what the beam hits, and a halo past that would put the "it visibly missed" complaint back the other way round. The damage is untouched - dealt in full, along the whole beam, on the frame of the shot. A beam that had to arrive would change how the weapon plays, which the ticket did not ask for, so the test pins it down: a target at the far end of the range must be hit before the drawn blade has visibly reached it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
01f053e01a
commit
c8d4731232
4 changed files with 249 additions and 8 deletions
|
|
@ -23,15 +23,21 @@ const LENGTH: float = 9.0
|
|||
const COLOR: Color = Color(1.0, 0.88, 0.42)
|
||||
|
||||
var age: float = 0.0
|
||||
var color: Color = COLOR
|
||||
var sparks: Array = []
|
||||
|
||||
|
||||
static func spawn(parent: Node, world_position: Vector2, direction: Vector2) -> void:
|
||||
# The colour is optional and defaults to the gun's own: #90 wanted the laser
|
||||
# to do something at the hull too, and a cyan weapon throwing gold sparks
|
||||
# would read as a different weapon firing from the same ship.
|
||||
static func spawn(parent: Node, world_position: Vector2, direction: Vector2,
|
||||
spark_color: Color = COLOR) -> void:
|
||||
if direction.length() < 0.001:
|
||||
return
|
||||
var vfx: Node2D = (load(SELF_PATH) as GDScript).new()
|
||||
vfx.position = world_position
|
||||
vfx.rotation = direction.angle()
|
||||
vfx.color = spark_color
|
||||
parent.add_child(vfx)
|
||||
|
||||
|
||||
|
|
@ -63,5 +69,5 @@ func _draw() -> void:
|
|||
var heading: Vector2 = Vector2.RIGHT.rotated(float(spark.angle))
|
||||
var start: Vector2 = heading * float(spark.speed) * age
|
||||
var end: Vector2 = start + heading * float(spark.length)
|
||||
NeonDraw.draw_glowing_line(self, start, end, COLOR, fade, 0.35,
|
||||
COLOR.darkened(0.7))
|
||||
NeonDraw.draw_glowing_line(self, start, end, color, fade, 0.35,
|
||||
color.darkened(0.7))
|
||||
|
|
|
|||
Loading…
Reference in a new issue