game.laser.beam
What the pointer looks like in the room.
A fixed set of entities the laser slice re-poses every frame rather than spawning and despawning: a hot core and a wide halo per beam segment (one segment per mirror bounce plus the first), a two-part dot, and a small red light standing on the dot so the surface under it answers.
local Beam = require("game.laser.beam")
local v = Beam.ensure(mount) -- builds under one root it owns
Beam.show(segments, hit, { intensity = 1 }) -- pose the line and stand the dot
Beam.hide()
Beam.ids() -- what a raycast must step over
Beam.destroy()
The core and halo are additive, unlit, and write no depth, so the beam reads through the shaft fog rather than cutting a hole in it. The halo widens with the length of the run: a short shot at something an arm's length away otherwise fills the frame, because the near end of the tube is a hand's width from the eye.
intensity is the sag as the pointer heats: it thins the core, dims the halo
and pulls the light down.
Scoped to this part · feeds back into the world's score.