diff --git a/code/ATMOSPHERICS/components/trinary_devices/filter.dm b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
index 97e318577b..94924baedc 100755
--- a/code/ATMOSPHERICS/components/trinary_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/filter.dm
@@ -59,7 +59,7 @@
. = ..()
/obj/machinery/atmospherics/trinary/atmos_filter/update_icon()
- if(istype(src, /obj/machinery/atmospherics/trinary/atmos_filter/m_filter))
+ if(mirrored)
icon_state = "m"
else
icon_state = ""
@@ -108,24 +108,6 @@
if(frequency)
set_frequency(frequency)
-/obj/machinery/atmospherics/trinary/atmos_filter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if(!can_unwrench())
- to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.")
- add_fingerprint(user)
- return 1
- playsound(src, W.usesound, 50, 1)
- to_chat(user, "You begin to unfasten \the [src]...")
- if (do_after(user, 40 * W.toolspeed))
- user.visible_message( \
- "\The [user] unfastens \the [src].", \
- "You have unfastened \the [src].", \
- "You hear a ratchet.")
- new /obj/item/pipe(loc, make_from=src)
- qdel(src)
-
-
/obj/machinery/atmospherics/trinary/atmos_filter/attack_hand(user as mob) // -- TLE
if(..())
return
@@ -210,25 +192,11 @@
*/
return
+//
+// Mirrored Orientation - Flips the output dir to opposite side from normal.
+//
/obj/machinery/atmospherics/trinary/atmos_filter/m_filter
icon_state = "mmap"
-
dir = SOUTH
initialize_directions = SOUTH|NORTH|EAST
-
-/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = WEST|NORTH|SOUTH
- if(SOUTH)
- initialize_directions = SOUTH|EAST|NORTH
- if(EAST)
- initialize_directions = EAST|WEST|NORTH
- if(WEST)
- initialize_directions = WEST|SOUTH|EAST
-
-/obj/machinery/atmospherics/trinary/atmos_filter/m_filter/get_node_connect_dirs()
- var/node1_connect = turn(dir, -180)
- var/node2_connect = turn(dir, 90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
+ mirrored = TRUE
diff --git a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
index 3361708ae4..2a70fe1591 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/mixer.dm
@@ -20,10 +20,10 @@
//node 3 is the outlet, nodes 1 & 2 are intakes
/obj/machinery/atmospherics/trinary/mixer/update_icon(var/safety = 0)
- if(istype(src, /obj/machinery/atmospherics/trinary/mixer/m_mixer))
- icon_state = "m"
- else if(istype(src, /obj/machinery/atmospherics/trinary/mixer/t_mixer))
+ if(tee)
icon_state = "t"
+ else if(mirrored)
+ icon_state = "m"
else
icon_state = ""
@@ -75,23 +75,6 @@
return 1
-/obj/machinery/atmospherics/trinary/mixer/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- if (!istype(W, /obj/item/weapon/wrench))
- return ..()
- if(!can_unwrench())
- to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.")
- add_fingerprint(user)
- return 1
- playsound(src, W.usesound, 50, 1)
- to_chat(user, "You begin to unfasten \the [src]...")
- if (do_after(user, 40 * W.toolspeed))
- user.visible_message( \
- "\The [user] unfastens \the [src].", \
- "You have unfastened \the [src].", \
- "You hear ratchet.")
- new /obj/item/pipe(loc, make_from=src)
- qdel(src)
-
/obj/machinery/atmospherics/trinary/mixer/attack_hand(user as mob)
if(..())
return
@@ -150,53 +133,15 @@
//
obj/machinery/atmospherics/trinary/mixer/t_mixer
icon_state = "tmap"
-
dir = SOUTH
initialize_directions = SOUTH|EAST|WEST
-
- //node 3 is the outlet, nodes 1 & 2 are intakes
-
-/obj/machinery/atmospherics/trinary/mixer/t_mixer/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = EAST|NORTH|WEST
- if(SOUTH)
- initialize_directions = SOUTH|WEST|EAST
- if(EAST)
- initialize_directions = EAST|NORTH|SOUTH
- if(WEST)
- initialize_directions = WEST|NORTH|SOUTH
-
-/obj/machinery/atmospherics/trinary/mixer/t_mixer/get_node_connect_dirs()
- var/node1_connect = turn(dir, -90)
- var/node2_connect = turn(dir, 90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
+ tee = TRUE
//
// Mirrored Orientation - Flips the output dir to opposite side from normal.
//
/obj/machinery/atmospherics/trinary/mixer/m_mixer
icon_state = "mmap"
-
dir = SOUTH
initialize_directions = SOUTH|NORTH|EAST
-
- //node 3 is the outlet, nodes 1 & 2 are intakes
-
-/obj/machinery/atmospherics/trinary/mixer/m_mixer/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = WEST|NORTH|SOUTH
- if(SOUTH)
- initialize_directions = SOUTH|EAST|NORTH
- if(EAST)
- initialize_directions = EAST|WEST|NORTH
- if(WEST)
- initialize_directions = WEST|SOUTH|EAST
-
-/obj/machinery/atmospherics/trinary/mixer/m_mixer/get_node_connect_dirs()
- var/node1_connect = turn(dir, -180)
- var/node2_connect = turn(dir, 90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
+ mirrored = TRUE
diff --git a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
index 43ded8e13f..79aa77dc6f 100644
--- a/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
+++ b/code/ATMOSPHERICS/components/trinary_devices/trinary_base.dm
@@ -3,6 +3,9 @@
initialize_directions = SOUTH|NORTH|WEST
use_power = 0
+ var/mirrored = FALSE
+ var/tee = FALSE
+
var/datum/gas_mixture/air1
var/datum/gas_mixture/air2
var/datum/gas_mixture/air3
@@ -25,15 +28,7 @@
air3.volume = 200
/obj/machinery/atmospherics/trinary/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = EAST|NORTH|SOUTH
- if(SOUTH)
- initialize_directions = SOUTH|WEST|NORTH
- if(EAST)
- initialize_directions = EAST|WEST|SOUTH
- if(WEST)
- initialize_directions = WEST|NORTH|EAST
+ initialize_directions = get_initialize_directions_trinary(dir, mirrored, tee)
/obj/machinery/atmospherics/trinary/update_underlays()
if(..())
@@ -55,6 +50,23 @@
if(old_stat != stat)
update_icon()
+/obj/machinery/atmospherics/trinary/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ if (!istype(W, /obj/item/weapon/wrench))
+ return ..()
+ if(!can_unwrench())
+ to_chat(user, "You cannot unwrench \the [src], it too exerted due to internal pressure.")
+ add_fingerprint(user)
+ return 1
+ playsound(src, W.usesound, 50, 1)
+ to_chat(user, "You begin to unfasten \the [src]...")
+ if (do_after(user, 40 * W.toolspeed))
+ user.visible_message( \
+ "\The [user] unfastens \the [src].", \
+ "You have unfastened \the [src].", \
+ "You hear a ratchet.")
+ new /obj/item/pipe(loc, make_from=src)
+ qdel(src)
+
// Housekeeping and pipe network stuff below
/obj/machinery/atmospherics/trinary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
@@ -93,10 +105,7 @@
// Get the direction each node is facing to connect.
// It now returns as a list so it can be fetched nicely, each entry corresponds to node of same number.
/obj/machinery/atmospherics/trinary/get_node_connect_dirs()
- var/node1_connect = turn(dir, 180)
- var/node2_connect = turn(dir, -90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
+ return get_node_connect_dirs_trinary(dir, mirrored, tee)
/obj/machinery/atmospherics/trinary/atmos_init()
if(node1 && node2 && node3)
@@ -191,4 +200,58 @@
update_underlays()
- return null
\ No newline at end of file
+ return null
+
+// Trinary init_dir() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves
+// TODO - Someday refactor those places under atmospherics/trinary
+/proc/get_initialize_directions_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE)
+ if(tee)
+ switch(dir)
+ if(NORTH)
+ return EAST|NORTH|WEST
+ if(SOUTH)
+ return SOUTH|WEST|EAST
+ if(EAST)
+ return EAST|NORTH|SOUTH
+ if(WEST)
+ return WEST|NORTH|SOUTH
+ else if(mirrored)
+ switch(dir)
+ if(NORTH)
+ return WEST|NORTH|SOUTH
+ if(SOUTH)
+ return SOUTH|EAST|NORTH
+ if(EAST)
+ return EAST|WEST|NORTH
+ if(WEST)
+ return WEST|SOUTH|EAST
+ else
+ switch(dir)
+ if(NORTH)
+ return EAST|NORTH|SOUTH
+ if(SOUTH)
+ return SOUTH|WEST|NORTH
+ if(EAST)
+ return EAST|WEST|SOUTH
+ if(WEST)
+ return WEST|NORTH|EAST
+
+// Trinary get_node_connect_dirs() logic in a separate proc so it can be referenced from "trinary-ish" places like T-Valves
+/proc/get_node_connect_dirs_trinary(var/dir, var/mirrored = FALSE, var/tee = FALSE)
+ var/node1_connect
+ var/node2_connect
+ var/node3_connect
+
+ if(tee)
+ node1_connect = turn(dir, -90)
+ node2_connect = turn(dir, 90)
+ node3_connect = dir
+ else if(mirrored)
+ node1_connect = turn(dir, 180)
+ node2_connect = turn(dir, 90)
+ node3_connect = dir
+ else
+ node1_connect = turn(dir, 180)
+ node2_connect = turn(dir, -90)
+ node3_connect = dir
+ return list(node1_connect, node2_connect, node3_connect)
diff --git a/code/ATMOSPHERICS/components/tvalve.dm b/code/ATMOSPHERICS/components/tvalve.dm
index 6c2264321e..bb73544883 100644
--- a/code/ATMOSPHERICS/components/tvalve.dm
+++ b/code/ATMOSPHERICS/components/tvalve.dm
@@ -11,6 +11,8 @@
var/state = 0 // 0 = go straight, 1 = go to side
+ var/mirrored = FALSE
+
// like a trinary component, node1 is input, node2 is side output, node3 is straight output
var/obj/machinery/atmospherics/node3
@@ -24,9 +26,9 @@
/obj/machinery/atmospherics/tvalve/update_icon(animation)
if(animation)
- flick("tvalve[src.state][!src.state]",src)
+ flick("tvalve[mirrored ? "m" : ""][src.state][!src.state]",src)
else
- icon_state = "tvalve[state]"
+ icon_state = "tvalve[mirrored ? "m" : ""][state]"
/obj/machinery/atmospherics/tvalve/update_underlays()
if(..())
@@ -43,15 +45,7 @@
update_underlays()
/obj/machinery/atmospherics/tvalve/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = SOUTH|NORTH|EAST
- if(SOUTH)
- initialize_directions = NORTH|SOUTH|WEST
- if(EAST)
- initialize_directions = WEST|EAST|SOUTH
- if(WEST)
- initialize_directions = EAST|WEST|NORTH
+ initialize_directions = get_initialize_directions_trinary(dir, mirrored)
/obj/machinery/atmospherics/tvalve/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
if(reference == node1)
@@ -176,10 +170,7 @@
return
/obj/machinery/atmospherics/tvalve/get_node_connect_dirs()
- var/node1_connect = turn(dir, 180)
- var/node2_connect = turn(dir, -90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
+ return get_node_connect_dirs_trinary(dir, mirrored)
/obj/machinery/atmospherics/tvalve/atmos_init()
if(node1 && node2 && node3)
@@ -293,7 +284,7 @@
/obj/machinery/atmospherics/tvalve/digital/update_icon()
..()
if(!powered())
- icon_state = "tvalvenopower"
+ icon_state = "tvalve[mirrored ? "m" : ""]nopower"
/obj/machinery/atmospherics/tvalve/digital/attack_ai(mob/user as mob)
return src.attack_hand(user)
@@ -362,34 +353,12 @@
/obj/machinery/atmospherics/tvalve/mirrored
icon_state = "map_tvalvem0"
+ mirrored = TRUE
/obj/machinery/atmospherics/tvalve/mirrored/bypass
icon_state = "map_tvalvem1"
state = 1
-/obj/machinery/atmospherics/tvalve/mirrored/init_dir()
- switch(dir)
- if(NORTH)
- initialize_directions = SOUTH|NORTH|WEST
- if(SOUTH)
- initialize_directions = NORTH|SOUTH|EAST
- if(EAST)
- initialize_directions = WEST|EAST|NORTH
- if(WEST)
- initialize_directions = EAST|WEST|SOUTH
-
-/obj/machinery/atmospherics/tvalve/mirrored/get_node_connect_dirs()
- var/node1_connect = turn(dir, 180)
- var/node2_connect = turn(dir, 90)
- var/node3_connect = dir
- return list(node1_connect, node2_connect, node3_connect)
-
-/obj/machinery/atmospherics/tvalve/mirrored/update_icon(animation)
- if(animation)
- flick("tvalvem[src.state][!src.state]",src)
- else
- icon_state = "tvalvem[state]"
-
/obj/machinery/atmospherics/tvalve/mirrored/digital // can be controlled by AI
name = "digital switching valve"
desc = "A digitally controlled valve."