diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm index 968f9558fe5..06f4624f441 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_devices.dm @@ -16,7 +16,11 @@ /obj/machinery/atmospherics/components/binary/getNodeConnects() return list(turn(dir, 180), dir) -///Used by binary devices to set what the offset will be for each layer +/** + * Used by binary devices to set what the offset will be for each layer, called in update_icon_nopipes() + * Arguments: + * * -pipe_layer: is the pipe layer the component should be set to + */ /obj/machinery/atmospherics/components/binary/proc/set_overlay_offset(pipe_layer) switch(pipe_layer) if(1, 3, 5) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 11ccf801ce1..b8b90d01ef4 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -1,5 +1,5 @@ //Acts like a normal vent, but has an input AND output. - +///pressure_checks defines for external_pressure_bound and input_pressure_min #define EXT_BOUND 1 #define INPUT_MIN 2 #define OUTPUT_MAX 4 @@ -16,22 +16,23 @@ hide = TRUE + ///Variable for radio frequency var/frequency = 0 + ///Variable for radio id var/id = null + ///Stores the radio connection var/datum/radio_frequency/radio_connection - - var/pump_direction = 1 //0 = siphoning, 1 = releasing - + ///Indicates that the direction of the pump, if 0 is siphoning, if 1 is releasing + var/pump_direction = 1 + ///Set the maximum allowed external pressure var/external_pressure_bound = ONE_ATMOSPHERE + ///Set the maximum pressure at the input port var/input_pressure_min = 0 + ///Set the maximum pressure at the output port var/output_pressure_max = 0 - + ///Set the flag for the pressure bound var/pressure_checks = EXT_BOUND - //EXT_BOUND: Do not pass external_pressure_bound - //INPUT_MIN: Do not pass input_pressure_min - //OUTPUT_MAX: Do not pass output_pressure_max - /obj/machinery/atmospherics/components/binary/dp_vent_pump/Destroy() SSradio.remove_object(src, frequency) return ..() @@ -48,8 +49,6 @@ icon_state = pump_direction ? "vent_out" : "vent_in" /obj/machinery/atmospherics/components/binary/dp_vent_pump/process_atmos() - ..() - if(!on) return var/datum/gas_mixture/air1 = airs[1] @@ -66,20 +65,22 @@ if(pressure_checks&INPUT_MIN) pressure_delta = min(pressure_delta, (air1.return_pressure() - input_pressure_min)) - if(pressure_delta > 0) - if(air1.temperature > 0) - var/transfer_moles = (pressure_delta*environment.volume)/(air1.temperature * R_IDEAL_GAS_EQUATION) + if(pressure_delta <= 0) + return + if(air1.temperature <= 0) + return + var/transfer_moles = (pressure_delta*environment.volume)/(air1.temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = air1.remove(transfer_moles) - //Removed can be null if there is no atmosphere in air1 - if(!removed) - return + var/datum/gas_mixture/removed = air1.remove(transfer_moles) + //Removed can be null if there is no atmosphere in air1 + if(!removed) + return - loc.assume_air(removed) - air_update_turf(FALSE, FALSE) + loc.assume_air(removed) + air_update_turf(FALSE, FALSE) - var/datum/pipeline/parent1 = parents[1] - parent1.update = TRUE + var/datum/pipeline/parent1 = parents[1] + parent1.update = TRUE else //external -> output var/pressure_delta = 10000 @@ -89,29 +90,39 @@ if(pressure_checks&INPUT_MIN) pressure_delta = min(pressure_delta, (output_pressure_max - air2.return_pressure())) - if(pressure_delta > 0) - if(environment.temperature > 0) - var/transfer_moles = (pressure_delta*air2.volume)/(environment.temperature * R_IDEAL_GAS_EQUATION) + if(pressure_delta <= 0) + return + if(environment.temperature <= 0) + return + var/transfer_moles = (pressure_delta*air2.volume)/(environment.temperature * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) - //removed can be null if there is no air in the location - if(!removed) - return + var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + //removed can be null if there is no air in the location + if(!removed) + return - air2.merge(removed) - air_update_turf(FALSE, FALSE) + air2.merge(removed) + air_update_turf(FALSE, FALSE) - var/datum/pipeline/parent2 = parents[2] - parent2.update = TRUE + var/datum/pipeline/parent2 = parents[2] + parent2.update = TRUE //Radio remote control +/** + * Called in atmosinit(), used to change or remove the radio frequency from the component + * Arguments: + * * -new_frequency: the frequency that should be used for the radio to attach to the component, use 0 to remove the radio + */ /obj/machinery/atmospherics/components/binary/dp_vent_pump/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) +/** + * Called in atmosinit(), send the component status to the radio device connected + */ /obj/machinery/atmospherics/components/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 6cb87cf3211..c4108cc1eba 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -9,23 +9,21 @@ Passive gate is similar to the regular pump except: /obj/machinery/atmospherics/components/binary/passive_gate icon_state = "passgate_map-3" - name = "passive gate" desc = "A one-way air valve that does not require power. Passes gas when the output pressure is lower than the target pressure." - can_unwrench = TRUE shift_underlay_only = FALSE - interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_SET_MACHINE - - var/target_pressure = ONE_ATMOSPHERE - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "passivegate" + ///Set the target pressure the component should arrive to + var/target_pressure = ONE_ATMOSPHERE + ///Variable for radio frequency + var/frequency = 0 + ///Variable for radio id + var/id = null + ///Stores the radio connection + var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/components/binary/passive_gate/CtrlClick(mob/user) if(can_interact(user)) @@ -53,7 +51,6 @@ Passive gate is similar to the regular pump except: add_overlay(getpipeimage(icon, "passgate_on-[set_overlay_offset(piping_layer)]")) /obj/machinery/atmospherics/components/binary/passive_gate/process_atmos() - ..() if(!on) return @@ -62,15 +59,22 @@ Passive gate is similar to the regular pump except: if(air1.release_gas_to(air2, target_pressure)) update_parents() - //Radio remote control +/** + * Called in atmosinit(), used to change or remove the radio frequency from the component + * Arguments: + * * -new_frequency: the frequency that should be used for the radio to attach to the component, use 0 to remove the radio + */ /obj/machinery/atmospherics/components/binary/passive_gate/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) +/** + * Called in atmosinit(), send the component status to the radio device connected + */ /obj/machinery/atmospherics/components/binary/passive_gate/proc/broadcast_status() if(!radio_connection) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm index 5f6cd434f16..6ed44bf5bc3 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pressure_valve.dm @@ -2,10 +2,10 @@ icon_state = "pvalve_map-3" name = "pressure valve" desc = "An activable one way valve that let gas pass through if the pressure on the input side is higher than the set pressure." - can_unwrench = TRUE shift_underlay_only = FALSE - + construction_type = /obj/item/pipe/directional + pipe_state = "pvalve" ///Amount of pressure needed before the valve for it to open var/target_pressure = ONE_ATMOSPHERE ///Frequency for radio signaling @@ -17,9 +17,6 @@ ///Check if the gas is moving from one pipenet to the other var/is_gas_flowing = FALSE - construction_type = /obj/item/pipe/directional - pipe_state = "pvalve" - /obj/machinery/atmospherics/components/binary/pressure_valve/CtrlClick(mob/user) if(can_interact(user)) on = !on @@ -65,12 +62,22 @@ is_gas_flowing = FALSE update_icon_nopipes() +//Radio remote control + +/** + * Called in atmosinit(), used to change or remove the radio frequency from the component + * Arguments: + * * -new_frequency: the frequency that should be used for the radio to attach to the component, use 0 to remove the radio + */ /obj/machinery/atmospherics/components/binary/pressure_valve/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) +/** + * Called in atmosinit(), send the component status to the radio device connected + */ /obj/machinery/atmospherics/components/binary/pressure_valve/proc/broadcast_status() if(!radio_connection) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index ec19f28777e..ac9c1ac7137 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -14,18 +14,18 @@ icon_state = "pump_map-3" name = "gas pump" desc = "A pump that moves gas by pressure." - can_unwrench = TRUE shift_underlay_only = FALSE - - var/target_pressure = ONE_ATMOSPHERE - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "pump" + ///Pressure that the pump will reach when on + var/target_pressure = ONE_ATMOSPHERE + ///Frequency for radio signaling + var/frequency = 0 + ///ID for radio signaling + var/id = null + ///Connection to the radio processing + var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user) if(can_interact(user)) @@ -52,7 +52,6 @@ icon_state = (on && is_operational) ? "pump_on-[set_overlay_offset(piping_layer)]" : "pump_off-[set_overlay_offset(piping_layer)]" /obj/machinery/atmospherics/components/binary/pump/process_atmos() -// ..() if(!on || !is_operational) return @@ -62,13 +61,20 @@ if(air1.pump_gas_to(air2, target_pressure)) update_parents() -//Radio remote control +/** + * Called in atmosinit(), used to change or remove the radio frequency from the component + * Arguments: + * * -new_frequency: the frequency that should be used for the radio to attach to the component, use 0 to remove the radio + */ /obj/machinery/atmospherics/components/binary/pump/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) +/** + * Called in atmosinit(), send the component status to the radio device connected + */ /obj/machinery/atmospherics/components/binary/pump/proc/broadcast_status() if(!radio_connection) return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm index 756e8d3377b..38a29adb67e 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_gate.dm @@ -2,12 +2,10 @@ icon_state = "tgate_map-3" name = "temperature gate" desc = "An activable gate that compares the input temperature with the interface set temperature to check if the gas can flow from the input side to the output side or not." - can_unwrench = TRUE shift_underlay_only = FALSE construction_type = /obj/item/pipe/directional pipe_state = "tgate" - ///If the temperature of the mix before the gate is lower than this, the gas will flow (if inverted, if the temperature of the mix before the gate is higher than this) var/target_temperature = T0C ///Minimum allowed temperature diff --git a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm index 97b3ca23360..fcb7a1e20e6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/temperature_pump.dm @@ -2,18 +2,15 @@ icon_state = "tpump_map-3" name = "temperature pump" desc = "A pump that moves heat from one pipeline to another. The input will get cooler, and the output will get hotter." - can_unwrench = TRUE shift_underlay_only = FALSE - + construction_type = /obj/item/pipe/directional + pipe_state = "tpump" ///Percent of the heat delta to transfer var/heat_transfer_rate = 0 ///Maximum allowed transfer percentage var/max_heat_transfer_rate = 100 - construction_type = /obj/item/pipe/directional - pipe_state = "tpump" - /obj/machinery/atmospherics/components/binary/temperature_pump/CtrlClick(mob/user) if(can_interact(user)) on = !on diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index 0631fac4856..1318b538121 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -1,27 +1,22 @@ /* It's like a regular ol' straight pipe, but you can turn it on and off. */ +#define MANUAL_VALVE "m" +#define DIGITAL_VALVE "d" /obj/machinery/atmospherics/components/binary/valve icon_state = "mvalve_map-3" - name = "manual valve" desc = "A pipe with a valve that can be used to disable flow of gas through it." - can_unwrench = TRUE shift_underlay_only = FALSE - interaction_flags_machine = INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN //Intentionally no allow_silicon flag pipe_flags = PIPING_CARDINAL_AUTONORMALIZE - - var/frequency = 0 - var/id = null - - var/valve_type = "m" //lets us have a nice, clean, OOP update_icon_nopipes() - construction_type = /obj/item/pipe/binary pipe_state = "mvalve" - + ///Type of valve (manual or digital), used to set the icon of the component in update_icon_nopipes() + var/valve_type = MANUAL_VALVE + ///Bool to stop interactions while the opening/closing animation is going var/switching = FALSE /obj/machinery/atmospherics/components/binary/valve/update_icon_nopipes(animation = FALSE) @@ -30,6 +25,9 @@ It's like a regular ol' straight pipe, but you can turn it on and off. flick("[valve_type]valve_[on][!on]-[set_overlay_offset(piping_layer)]", src) icon_state = "[valve_type]valve_[on ? "on" : "off"]-[set_overlay_offset(piping_layer)]" +/** + * Called by finish_interact(), switch between open and closed, reconcile the air between two pipelines + */ /obj/machinery/atmospherics/components/binary/valve/proc/toggle() if(on) on = FALSE @@ -49,19 +47,21 @@ It's like a regular ol' straight pipe, but you can turn it on and off. return update_icon_nopipes(TRUE) switching = TRUE - addtimer(CALLBACK(src, .proc/finish_interact), 10) + addtimer(CALLBACK(src, .proc/finish_interact), 1 SECONDS) +/** + * Called by iteract() after a 1 second timer, calls toggle(), allows another interaction with the component. + */ /obj/machinery/atmospherics/components/binary/valve/proc/finish_interact() toggle() switching = FALSE - /obj/machinery/atmospherics/components/binary/valve/digital // can be controlled by AI icon_state = "dvalve_map-3" name = "digital valve" desc = "A digitally controlled valve." - valve_type = "d" + valve_type = DIGITAL_VALVE pipe_state = "dvalve" interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE | INTERACT_MACHINE_OPEN | INTERACT_MACHINE_OPEN_SILICON @@ -71,8 +71,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. normalize_cardinal_directions() icon_state = "dvalve_nopower-[set_overlay_offset(piping_layer)]" return - ..() - + return..() /obj/machinery/atmospherics/components/binary/valve/layer2 piping_layer = 2 @@ -111,3 +110,6 @@ It's like a regular ol' straight pipe, but you can turn it on and off. /obj/machinery/atmospherics/components/binary/valve/digital/on/layer4 piping_layer = 4 icon_state = "dvalve_map-4" + +#undef MANUAL_VALVE +#undef DIGITAL_VALVE diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 1222d14f172..5fadeeeaf77 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -14,19 +14,20 @@ icon_state = "volpump_map-3" name = "volumetric gas pump" desc = "A pump that moves gas by volume." - can_unwrench = TRUE shift_underlay_only = FALSE - - var/transfer_rate = MAX_TRANSFER_RATE - var/overclocked = FALSE - - var/frequency = 0 - var/id = null - var/datum/radio_frequency/radio_connection - construction_type = /obj/item/pipe/directional pipe_state = "volumepump" + ///Transfer rate of the component in L/s + var/transfer_rate = MAX_TRANSFER_RATE + ///Check if the component has been overclocked + var/overclocked = FALSE + ///Frequency for radio signaling + var/frequency = 0 + ///ID for radio signaling + var/id = null + ///Connection to the radio processing + var/datum/radio_frequency/radio_connection /obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user) if(can_interact(user)) @@ -51,7 +52,6 @@ icon_state = on && is_operational ? "volpump_on-[set_overlay_offset(piping_layer)]" : "volpump_off-[set_overlay_offset(piping_layer)]" /obj/machinery/atmospherics/components/binary/volume_pump/process_atmos(delta_time) -// ..() if(!on || !is_operational) return @@ -90,12 +90,20 @@ if(overclocked) . += "Its warning light is on[on ? " and it's spewing gas!" : "."]" +/** + * Called in atmosinit(), used to change or remove the radio frequency from the component + * Arguments: + * * -new_frequency: the frequency that should be used for the radio to attach to the component, use 0 to remove the radio + */ /obj/machinery/atmospherics/components/binary/volume_pump/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) +/** + * Called in atmosinit(), send the component status to the radio device connected + */ /obj/machinery/atmospherics/components/binary/volume_pump/proc/broadcast_status() if(!radio_connection) return @@ -123,7 +131,7 @@ return data /obj/machinery/atmospherics/components/binary/volume_pump/atmosinit() - ..() + . = ..() set_frequency(frequency)