71 lines
2.3 KiB
Plaintext
71 lines
2.3 KiB
Plaintext
/proc/generate_projectile_beam_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported!
|
|
if(!istype(starting) || !istype(ending) || !ispath(beam_type))
|
|
return
|
|
var/datum/point/midpoint = point_midpoint_points(starting, ending)
|
|
var/obj/effect/projectile_beam/PB = new beam_type
|
|
PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / world.icon_size, midpoint.return_turf(), 0)
|
|
. = PB
|
|
if(qdel_in)
|
|
QDEL_IN(PB, qdel_in)
|
|
|
|
/obj/effect/projectile_beam
|
|
icon = 'icons/obj/projectiles.dmi'
|
|
layer = ABOVE_MOB_LAYER
|
|
anchored = TRUE
|
|
light_power = 1
|
|
light_range = 2
|
|
light_color = "#00ffff"
|
|
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
|
flags_1 = ABSTRACT_1
|
|
appearance_flags = 0
|
|
|
|
/obj/effect/projectile_beam/singularity_pull()
|
|
return
|
|
|
|
/obj/effect/projectile_beam/singularity_act()
|
|
return
|
|
|
|
/obj/effect/projectile_beam/proc/scale_to(nx,ny,override=TRUE)
|
|
var/matrix/M
|
|
if(!override)
|
|
M = transform
|
|
else
|
|
M = new
|
|
M.Scale(nx,ny)
|
|
transform = M
|
|
|
|
/obj/effect/projectile_beam/proc/turn_to(angle,override=TRUE)
|
|
var/matrix/M
|
|
if(!override)
|
|
M = transform
|
|
else
|
|
M = new
|
|
M.Turn(angle)
|
|
transform = M
|
|
|
|
/obj/effect/projectile_beam/New(angle_override, p_x, p_y, color_override, scaling = 1)
|
|
if(angle_override && p_x && p_y && color_override && scaling)
|
|
apply_vars(angle_override, p_x, p_y, color_override, scaling)
|
|
return ..()
|
|
|
|
/obj/effect/projectile_beam/proc/apply_vars(angle_override, p_x = 0, p_y = 0, color_override, scaling = 1, new_loc, increment = 0)
|
|
var/mutable_appearance/look = new(src)
|
|
look.pixel_x = p_x
|
|
look.pixel_y = p_y
|
|
if(color_override)
|
|
look.color = color_override
|
|
appearance = look
|
|
scale_to(1,scaling, FALSE)
|
|
turn_to(angle_override, FALSE)
|
|
if(!isnull(new_loc)) //If you want to null it just delete it...
|
|
forceMove(new_loc)
|
|
for(var/i in 1 to increment)
|
|
pixel_x += round((sin(angle_override)+16*sin(angle_override)*2), 1)
|
|
pixel_y += round((cos(angle_override)+16*cos(angle_override)*2), 1)
|
|
|
|
/obj/effect/projectile_beam/tracer
|
|
icon_state = "tracer_beam"
|
|
|
|
/obj/effect/projectile_beam/tracer/aiming
|
|
icon_state = "gbeam"
|