82 lines
2.3 KiB
Plaintext
82 lines
2.3 KiB
Plaintext
// the disposal outlet machine
|
|
/obj/structure/disposaloutlet
|
|
name = "disposal outlet"
|
|
desc = "An outlet for the pneumatic disposal system."
|
|
icon = 'icons/obj/atmospherics/pipes/disposal.dmi'
|
|
icon_state = "outlet"
|
|
density = TRUE
|
|
anchored = TRUE
|
|
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
|
|
var/active = FALSE
|
|
var/turf/target // this will be where the output objects are 'thrown' to.
|
|
var/obj/structure/disposalpipe/trunk/trunk // the attached pipe trunk
|
|
var/obj/structure/disposalconstruct/stored
|
|
var/start_eject = 0
|
|
var/eject_range = 2
|
|
|
|
/obj/structure/disposaloutlet/Initialize(mapload, obj/structure/disposalconstruct/make_from)
|
|
. = ..()
|
|
if(make_from)
|
|
setDir(make_from.dir)
|
|
make_from.forceMove(src)
|
|
stored = make_from
|
|
else
|
|
stored = new /obj/structure/disposalconstruct(src, null , SOUTH , FALSE , src)
|
|
|
|
target = get_ranged_target_turf(src, dir, 10)
|
|
|
|
trunk = locate() in loc
|
|
if(trunk)
|
|
trunk.linked = src // link the pipe trunk to self
|
|
|
|
/obj/structure/disposaloutlet/Destroy()
|
|
if(trunk)
|
|
trunk.linked = null
|
|
trunk = null
|
|
QDEL_NULL(stored)
|
|
return ..()
|
|
|
|
// expel the contents of the holder object, then delete it
|
|
// called when the holder exits the outlet
|
|
/obj/structure/disposaloutlet/proc/expel(obj/structure/disposalholder/H)
|
|
H.active = FALSE
|
|
flick("outlet-open", src)
|
|
if((start_eject + 30) < world.time)
|
|
start_eject = world.time
|
|
playsound(src, 'sound/machines/warning-buzzer.ogg', 50, 0, 0)
|
|
addtimer(CALLBACK(src, .proc/expel_holder, H, TRUE), 20)
|
|
else
|
|
addtimer(CALLBACK(src, .proc/expel_holder, H), 20)
|
|
|
|
/obj/structure/disposaloutlet/proc/expel_holder(obj/structure/disposalholder/H, playsound=FALSE)
|
|
if(playsound)
|
|
playsound(src, 'sound/machines/hiss.ogg', 50, 0, 0)
|
|
|
|
if(!H)
|
|
return
|
|
|
|
var/turf/T = get_turf(src)
|
|
|
|
for(var/A in H)
|
|
var/atom/movable/AM = A
|
|
AM.forceMove(T)
|
|
AM.pipe_eject(dir)
|
|
AM.throw_at(target, eject_range, 1)
|
|
|
|
H.vent_gas(T)
|
|
qdel(H)
|
|
|
|
/obj/structure/disposaloutlet/welder_act(mob/living/user, obj/item/I)
|
|
if(!I.tool_start_check(user, amount=0))
|
|
return TRUE
|
|
|
|
playsound(src, 'sound/items/welder2.ogg', 100, 1)
|
|
to_chat(user, "<span class='notice'>You start slicing the floorweld off [src]...</span>")
|
|
if(I.use_tool(src, user, 20))
|
|
to_chat(user, "<span class='notice'>You slice the floorweld off [src].</span>")
|
|
stored.forceMove(loc)
|
|
transfer_fingerprints_to(stored)
|
|
stored = null
|
|
qdel(src)
|
|
return TRUE
|