mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 08:37:43 +01:00
animates beam effects (#96339)
This commit is contained in:
@@ -75,7 +75,9 @@
|
||||
return FALSE
|
||||
|
||||
/// Used to refresh the beam in whatever context.
|
||||
/obj/item/assembly/infra/proc/make_beam()
|
||||
/// glide_seed/glide_time (from a predecessor beam's get_last_geometry) make the rebuilt beam glide
|
||||
/// from the old position instead of snapping; left as defaults for non-movement refreshes.
|
||||
/obj/item/assembly/infra/proc/make_beam(list/glide_seed = null, glide_time = 0)
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
|
||||
if(!isnull(buffer_turf))
|
||||
@@ -115,6 +117,8 @@
|
||||
emissive = TRUE,
|
||||
override_target_pixel_x = pixel_x,
|
||||
override_target_pixel_y = pixel_y,
|
||||
glide_seed = glide_seed,
|
||||
glide_time = glide_time,
|
||||
)
|
||||
RegisterSignal(active_beam, COMSIG_BEAM_ENTERED, PROC_REF(beam_entered))
|
||||
RegisterSignal(active_beam, COMSIG_BEAM_TURFS_CHANGED, PROC_REF(beam_turfs_changed))
|
||||
@@ -244,30 +248,15 @@
|
||||
make_beam()
|
||||
|
||||
/obj/item/assembly/infra/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change)
|
||||
var/list/glide_seed = active_beam?.get_last_geometry()
|
||||
. = ..()
|
||||
if(loc == old_loc)
|
||||
return
|
||||
make_beam()
|
||||
if(!visible || forced || !movement_dir || !Adjacent(old_loc))
|
||||
make_beam()
|
||||
return
|
||||
// Because the new beam is made in the new loc, it "jumps" from one turf to another
|
||||
// We can do an animate to pretend we're gliding between turfs rather than making a whole new beam
|
||||
var/x_move = 0
|
||||
var/y_move = 0
|
||||
if(movement_dir & NORTH)
|
||||
y_move = -ICON_SIZE_Y
|
||||
else if(movement_dir & SOUTH)
|
||||
y_move = ICON_SIZE_Y
|
||||
if(movement_dir & WEST)
|
||||
x_move = ICON_SIZE_X
|
||||
else if(movement_dir & EAST)
|
||||
x_move = -ICON_SIZE_X
|
||||
|
||||
var/fake_glide_time = round(ICON_SIZE_ALL / glide_size * world.tick_lag, world.tick_lag)
|
||||
for(var/obj/effect/ebeam/beam as anything in active_beam?.elements)
|
||||
var/matrix/base_transform = matrix(beam.transform)
|
||||
beam.transform = beam.transform.Translate(x_move, y_move)
|
||||
animate(beam, transform = base_transform, time = fake_glide_time)
|
||||
var/glide_time = ICON_SIZE_ALL / max(glide_size, MIN_GLIDE_SIZE) * world.tick_lag * GLOB.glide_size_multiplier
|
||||
make_beam(glide_seed, glide_time)
|
||||
|
||||
/obj/item/assembly/infra/setDir(newdir)
|
||||
var/prev_dir = dir
|
||||
|
||||
Reference in New Issue
Block a user