mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-06-04 21:14:24 +01:00
f4bf017921
* Unit Test rework & Master/Ticker update * Fixes and working unit testing * Fixes * Test fixes and FA update * Fixed runtimes * Radio subsystem * move that glob wherever later * ident * CIBUILDING compile option * Fixed runtimes * Some changes to the workflow * CI Split * More split * Pathing * Linters and Annotators * ci dir fix * Missing undef fixed * Enable grep checks * More test conversions * More split * Correct file * Removes unneeded inputs * oop * More dependency changes * More conversions * Conversion fixes * Fixes * Some assert fixes * Corrects start gate * Converted some README.dms to README.mds * Removes duplicate proc * Removes unused defines * Example configs * fix dll access viol by double calling * Post-rebase fixes * Cleans up names global list * Undef restart counter * More code/game/ cleanup * Statpanel update * Skybox * add * Fix ticker * Roundend fix * Persistence dependency update * Reordering * Reordering * Reordering * Initstage fix * . * . * Reorder * Reorder * Circle * Mobs * Air * Test fix * CI Script Fix * Configs * More ticker stuff * This is now in 'reboot world' * Restart world announcements * no glob in PreInit * to define * Update * Removed old include * Make this file normal again * moved * test * shared unit testing objects * Updates batched_spritesheets and universal_icon * . * job data debug * rm that * init order * show us * . * i wonder * . * . * urg * do we not have a job ID? * . * rm sleep for now * updated rust-g linux binaries * binaries update 2 * binaries update 3 * testing something * change that * test something * . * . * . * locavar * test * move that * . * debug * don't run this test * strack trace it * cleaner * . * . * cras again * also comment this out * return to official rust g * Update robot_icons.dm * monitor the generation * . --------- Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
312 lines
6.9 KiB
Plaintext
312 lines
6.9 KiB
Plaintext
/obj/machinery/atmospherics/valve
|
|
icon = 'icons/atmos/valve.dmi'
|
|
icon_state = "map_valve0"
|
|
construction_type = /obj/item/pipe/binary
|
|
pipe_state = "mvalve"
|
|
|
|
name = "manual valve"
|
|
desc = "A pipe valve"
|
|
|
|
level = 1
|
|
dir = SOUTH
|
|
initialize_directions = SOUTH|NORTH
|
|
|
|
var/open = 0
|
|
var/openDuringInit = 0
|
|
|
|
|
|
var/datum/pipe_network/network_node1
|
|
var/datum/pipe_network/network_node2
|
|
|
|
/obj/machinery/atmospherics/valve/open
|
|
open = 1
|
|
icon_state = "map_valve1"
|
|
|
|
/obj/machinery/atmospherics/valve/update_icon(animation)
|
|
if(animation)
|
|
flick("valve[src.open][!src.open]",src)
|
|
else
|
|
icon_state = "valve[open]"
|
|
|
|
/obj/machinery/atmospherics/valve/update_underlays()
|
|
if(..())
|
|
underlays.Cut()
|
|
var/turf/T = get_turf(src)
|
|
if(!istype(T))
|
|
return
|
|
add_underlay(T, node1, get_dir(src, node1))
|
|
add_underlay(T, node2, get_dir(src, node2))
|
|
|
|
/obj/machinery/atmospherics/valve/hide(var/i)
|
|
update_underlays()
|
|
|
|
/obj/machinery/atmospherics/valve/init_dir()
|
|
switch(dir)
|
|
if(NORTH,SOUTH)
|
|
initialize_directions = NORTH|SOUTH
|
|
if(EAST,WEST)
|
|
initialize_directions = EAST|WEST
|
|
|
|
/obj/machinery/atmospherics/valve/get_neighbor_nodes_for_init()
|
|
return list(node1, node2)
|
|
|
|
/obj/machinery/atmospherics/valve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
|
if(reference == node1)
|
|
network_node1 = new_network
|
|
if(open)
|
|
network_node2 = new_network
|
|
else if(reference == node2)
|
|
network_node2 = new_network
|
|
if(open)
|
|
network_node1 = new_network
|
|
|
|
if(new_network.normal_members.Find(src))
|
|
return 0
|
|
|
|
new_network.normal_members += src
|
|
|
|
if(open)
|
|
if(reference == node1)
|
|
if(node2)
|
|
return node2.network_expand(new_network, src)
|
|
else if(reference == node2)
|
|
if(node1)
|
|
return node1.network_expand(new_network, src)
|
|
|
|
return null
|
|
|
|
/obj/machinery/atmospherics/valve/Destroy()
|
|
. = ..()
|
|
|
|
if(node1)
|
|
node1.disconnect(src)
|
|
qdel(network_node1)
|
|
if(node2)
|
|
node2.disconnect(src)
|
|
qdel(network_node2)
|
|
|
|
node1 = null
|
|
node2 = null
|
|
|
|
/obj/machinery/atmospherics/valve/proc/open()
|
|
if(open) return 0
|
|
|
|
open = 1
|
|
update_icon()
|
|
|
|
if(network_node1&&network_node2)
|
|
network_node1.merge(network_node2)
|
|
network_node2 = network_node1
|
|
|
|
if(network_node1)
|
|
network_node1.update = 1
|
|
else if(network_node2)
|
|
network_node2.update = 1
|
|
|
|
return 1
|
|
|
|
/obj/machinery/atmospherics/valve/proc/close()
|
|
if(!open)
|
|
return 0
|
|
|
|
open = 0
|
|
update_icon()
|
|
|
|
if(network_node1)
|
|
qdel(network_node1)
|
|
if(network_node2)
|
|
qdel(network_node2)
|
|
|
|
build_network()
|
|
|
|
return 1
|
|
|
|
/obj/machinery/atmospherics/valve/proc/normalize_dir()
|
|
if(dir==3)
|
|
set_dir(1)
|
|
else if(dir==12)
|
|
set_dir(4)
|
|
|
|
/obj/machinery/atmospherics/valve/attack_ai(mob/user as mob)
|
|
return
|
|
|
|
/obj/machinery/atmospherics/valve/attack_hand(mob/user as mob)
|
|
src.add_fingerprint(user)
|
|
update_icon(1)
|
|
sleep(10)
|
|
if (src.open)
|
|
src.close()
|
|
else
|
|
src.open()
|
|
|
|
/obj/machinery/atmospherics/valve/process()
|
|
..()
|
|
. = PROCESS_KILL
|
|
|
|
return
|
|
|
|
/obj/machinery/atmospherics/valve/atmos_init()
|
|
normalize_dir()
|
|
|
|
var/node1_dir
|
|
var/node2_dir
|
|
|
|
for(var/direction in GLOB.cardinal)
|
|
if(direction&initialize_directions)
|
|
if (!node1_dir)
|
|
node1_dir = direction
|
|
else if (!node2_dir)
|
|
node2_dir = direction
|
|
|
|
STANDARD_ATMOS_CHOOSE_NODE(1, node1_dir)
|
|
STANDARD_ATMOS_CHOOSE_NODE(2, node2_dir)
|
|
|
|
build_network()
|
|
|
|
update_icon()
|
|
update_underlays()
|
|
|
|
if(openDuringInit)
|
|
close()
|
|
open()
|
|
openDuringInit = 0
|
|
|
|
/obj/machinery/atmospherics/valve/build_network()
|
|
if(!network_node1 && node1)
|
|
network_node1 = new /datum/pipe_network()
|
|
network_node1.normal_members += src
|
|
network_node1.build_network(node1, src)
|
|
|
|
if(!network_node2 && node2)
|
|
network_node2 = new /datum/pipe_network()
|
|
network_node2.normal_members += src
|
|
network_node2.build_network(node2, src)
|
|
|
|
/obj/machinery/atmospherics/valve/return_network(obj/machinery/atmospherics/reference)
|
|
build_network()
|
|
|
|
if(reference==node1)
|
|
return network_node1
|
|
|
|
if(reference==node2)
|
|
return network_node2
|
|
|
|
return null
|
|
|
|
/obj/machinery/atmospherics/valve/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network)
|
|
if(network_node1 == old_network)
|
|
network_node1 = new_network
|
|
if(network_node2 == old_network)
|
|
network_node2 = new_network
|
|
|
|
return 1
|
|
|
|
/obj/machinery/atmospherics/valve/return_network_air(datum/pipe_network/reference)
|
|
return null
|
|
|
|
/obj/machinery/atmospherics/valve/disconnect(obj/machinery/atmospherics/reference)
|
|
if(reference==node1)
|
|
qdel(network_node1)
|
|
node1 = null
|
|
|
|
else if(reference==node2)
|
|
qdel(network_node2)
|
|
node2 = null
|
|
|
|
update_underlays()
|
|
|
|
return null
|
|
|
|
/obj/machinery/atmospherics/valve/digital // can be controlled by AI
|
|
name = "digital valve"
|
|
desc = "A digitally controlled valve."
|
|
icon = 'icons/atmos/digital_valve.dmi'
|
|
pipe_state = "dvalve"
|
|
|
|
var/frequency = 0
|
|
var/id = null
|
|
var/datum/radio_frequency/radio_connection
|
|
|
|
/obj/machinery/atmospherics/valve/digital/Destroy()
|
|
unregister_radio(src, frequency)
|
|
. = ..()
|
|
|
|
/obj/machinery/atmospherics/valve/digital/attack_ai(mob/user as mob)
|
|
return src.attack_hand(user)
|
|
|
|
/obj/machinery/atmospherics/valve/digital/attack_hand(mob/user as mob)
|
|
if(!powered())
|
|
return
|
|
if(!src.allowed(user))
|
|
to_chat(user, span_warning("Access denied."))
|
|
return
|
|
..()
|
|
|
|
/obj/machinery/atmospherics/valve/digital/open
|
|
open = 1
|
|
icon_state = "map_valve1"
|
|
|
|
/obj/machinery/atmospherics/valve/digital/power_change()
|
|
var/old_stat = stat
|
|
..()
|
|
if(old_stat != stat)
|
|
update_icon()
|
|
|
|
/obj/machinery/atmospherics/valve/digital/update_icon()
|
|
..()
|
|
if(!powered())
|
|
icon_state = "valve[open]nopower"
|
|
|
|
/obj/machinery/atmospherics/valve/digital/proc/set_frequency(new_frequency)
|
|
SSradio.remove_object(src, frequency)
|
|
frequency = new_frequency
|
|
if(frequency)
|
|
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
|
|
|
/obj/machinery/atmospherics/valve/digital/Initialize(mapload)
|
|
. = ..()
|
|
if(frequency)
|
|
set_frequency(frequency)
|
|
|
|
/obj/machinery/atmospherics/valve/digital/receive_signal(datum/signal/signal)
|
|
if(!signal.data["tag"] || (signal.data["tag"] != id))
|
|
return 0
|
|
|
|
switch(signal.data["command"])
|
|
if("valve_open")
|
|
if(!open)
|
|
open()
|
|
|
|
if("valve_close")
|
|
if(open)
|
|
close()
|
|
|
|
if("valve_toggle")
|
|
if(open)
|
|
close()
|
|
else
|
|
open()
|
|
|
|
/obj/machinery/atmospherics/valve/attackby(var/obj/item/W as obj, var/mob/user as mob)
|
|
if (!W.has_tool_quality(TOOL_WRENCH))
|
|
return ..()
|
|
if (istype(src, /obj/machinery/atmospherics/valve/digital) && !src.allowed(user))
|
|
to_chat(user, span_warning("Access denied."))
|
|
return 1
|
|
if(!can_unwrench())
|
|
to_chat(user, span_warning("You cannot unwrench \the [src], it is too exerted due to internal pressure."))
|
|
add_fingerprint(user)
|
|
return 1
|
|
playsound(src, W.usesound, 50, 1)
|
|
to_chat(user, span_notice("You begin to unfasten \the [src]..."))
|
|
if (do_after(user, 40 * W.toolspeed))
|
|
user.visible_message( \
|
|
span_infoplain(span_bold("\The [user]") + " unfastens \the [src]."), \
|
|
span_notice("You have unfastened \the [src]."), \
|
|
"You hear a ratchet.")
|
|
deconstruct()
|
|
|
|
/obj/machinery/atmospherics/valve/examine(mob/user)
|
|
. = ..()
|
|
. += "It is [open ? "open" : "closed"]."
|