/obj/machinery/computer/general_air_control/atmos_automation icon = 'icons/obj/computer.dmi' icon_state = "aac" circuit = "/obj/item/weapon/circuitboard/atmos_automation" show_sensors = 0 var/on = 0 name = "Atmospherics Automations Console" var/list/datum/automation/automations=list() //Registers, see them as variables for the AAC. var/register_amount = 10//Determines the maximal registers you can have. var/list/registers = list()//Stores the register values, registers can't be named so this is enough. var/list/linked_assemblies = list() //Can have up to 5 assemblies connected. AAC scripts can pulse them var/const/max_linked_assembly_amount = 5 var/datum/delay_controller/next_run= new (10, 50) /obj/machinery/computer/general_air_control/atmos_automation/New() ..() for(var/i = 1, i <= register_amount, i++)//Fill the registers registers.Add(list(0)) for(var/i = 1 to max_linked_assembly_amount) linked_assemblies.Add(null) /obj/machinery/computer/general_air_control/atmos_automation/Destroy() linked_assemblies = null ..() /obj/machinery/computer/general_air_control/atmos_automation/receive_signal(datum/signal/signal) if(!signal || signal.encryption) return var/id_tag = signal.data["tag"] if(!id_tag) return sensor_information[id_tag] = signal.data /obj/machinery/computer/general_air_control/atmos_automation/process() if(on) for(var/datum/automation/A in automations) A.process() /obj/machinery/computer/general_air_control/atmos_automation/update_icon() icon_state = initial(icon_state) // Broken if(stat & BROKEN) icon_state += "b" // Powered else if(stat & NOPOWER) icon_state = initial(icon_state) icon_state += "0" else if(on) icon_state += "_active" /obj/machinery/computer/general_air_control/atmos_automation/proc/request_device_refresh(var/device) send_signal(list("tag"=device, "status")) /obj/machinery/computer/general_air_control/atmos_automation/proc/send_signal(var/list/data, filter = RADIO_ATMOSIA) var/datum/signal/signal = getFromPool(/datum/signal) signal.transmission_method = 1 //radio signal signal.source = src signal.data=data signal.data["sigtype"]="command" radio_connection.post_signal(src, signal, filter = filter) /obj/machinery/computer/general_air_control/atmos_automation/proc/selectValidChildFor(var/datum/automation/parent, var/mob/user, var/list/valid_returntypes) var/list/choices=list() for(var/childtype in automation_types) var/datum/automation/A = new childtype(src) if(A.returntype == null) continue if(!(A.returntype in valid_returntypes)) continue choices[A.name]=A if (choices.len==0) //testing("Unable to find automations with returntype in [english_list(valid_returntypes)]!") return 0 var/label=input(user, "Select new automation:", "Automations", "Cancel") as null|anything in choices if(!label) return 0 return choices[label] /obj/machinery/computer/general_air_control/atmos_automation/return_text() var/out=..() if(on) out += "RUNNING" else out += "STOPPED" out += " | RUN ONCE" out += "
" out += {"[i]) [isnull(linked_assemblies[i]) ? "-click to insert-" : linked_assemblies[i]]
" var/datum/browser/popup = new(usr, "AAC_assemblies", "[src]", 500, 300, src) popup.set_content(dat) popup.open() onclose(usr, "AAC_assemblies") /obj/machinery/computer/general_air_control/atmos_automation/proc/MakeCompare(var/datum/automation/a, var/datum/automation/b, var/comparetype) var/datum/automation/compare/compare=new(src) compare.comparator = comparetype compare.children[1] = a compare.children[2] = b return compare /obj/machinery/computer/general_air_control/atmos_automation/proc/MakeNumber(var/value) var/datum/automation/static_value/val = new(src) val.value=value return val /obj/machinery/computer/general_air_control/atmos_automation/proc/MakeGetSensorData(var/sns_tag,var/field) var/datum/automation/get_sensor_data/sensor=new(src) sensor.sensor=sns_tag sensor.field=field return sensor /obj/machinery/computer/general_air_control/atmos_automation/proc/DumpCode() var/list/json[0] for(var/datum/automation/A in automations) json += list(A.Export()) return list2json(json) /obj/machinery/computer/general_air_control/atmos_automation/proc/ReadCode(var/jsonStr) automations.len = 0 var/list/json=json2list(jsonStr) if(json && json.len > 0) for(var/list/cData in json) if(isnull(cData) || !("type" in cData)) //testing("AAC: Null cData in root JS array.") continue var/Atype=text2path(cData["type"]) if(!(Atype in automation_types)) //testing("AAC: Unrecognized Atype [Atype].") continue var/datum/automation/A = new Atype(src) A.Import(cData) automations += A /obj/machinery/computer/general_air_control/atmos_automation/burnchamber var/injector_tag="inc_in" var/output_tag="inc_out" var/sensor_tag="inc_sensor" frequency=1449 var/temperature=1000 /obj/machinery/computer/general_air_control/atmos_automation/burnchamber/New() ..() // On State // Pretty much this: /* if(get_sensor("inc_sensor","temperature") < 200) set_injector_state("inc_in",1) set_vent_pump_power("inc_out",0) else set_vent_pump_power("inc_out",1 */ var/datum/automation/get_sensor_data/sensor=new(src) sensor.sensor=sensor_tag sensor.field="temperature" var/datum/automation/static_value/val = new(src) val.value=temperature - 800 var/datum/automation/compare/compare=new(src) compare.comparator = "Less Than" compare.children[1] = sensor compare.children[2] = val var/datum/automation/set_injector_power/inj_on=new(src) inj_on.injector=injector_tag inj_on.state=1 var/datum/automation/set_vent_pump_power/vp_on=new(src) vp_on.vent_pump=output_tag vp_on.state=1 var/datum/automation/set_vent_pump_power/vp_off=new(src) vp_off.vent_pump=output_tag vp_off.state=0 var/datum/automation/if_statement/i = new (src) i.label = "Fuel Injector On" i.condition = compare i.children_then.Add(inj_on) i.children_then.Add(vp_off) i.children_else.Add(vp_on) automations += i // Off state /* if(get_sensor("inc_sensor","temperature") > 1000) set_injector_state("inc_in",0) */ sensor=new(src) sensor.sensor=sensor_tag sensor.field="temperature" val = new(src) val.value=temperature compare=new(src) compare.comparator = "Greater Than" compare.children[1] = sensor compare.children[2] = val var/datum/automation/set_injector_power/inj_off=new(src) inj_off.injector=injector_tag inj_off.state=0 i = new (src) i.label = "Fuel Injector Off" i.condition = compare i.children_then.Add(inj_off) automations += i /obj/machinery/computer/general_air_control/atmos_automation/air_mixing var/n2_injector_tag="air_n2_in" var/o2_injector_tag="air_o2_in" var/output_tag="air_out" var/sensor_tag="air_sensor" frequency=1443 var/temperature=1000 /obj/machinery/computer/general_air_control/atmos_automation/air_mixing/New() ..() buildO2() buildN2() buildOutletVent() /obj/machinery/computer/general_air_control/atmos_automation/air_mixing/proc/buildO2() /////////////////////////////////////////////////////////////// // Oxygen Injection /////////////////////////////////////////////////////////////// var/datum/automation/set_injector_power/inj_on=new(src) inj_on.injector=o2_injector_tag inj_on.state=1 var/datum/automation/set_injector_power/inj_off=new(src) inj_off.injector=o2_injector_tag inj_off.state=0 var/datum/automation/if_statement/i = new (src) i.label = "Oxygen Injection" i.condition = MakeCompare( MakeGetSensorData(sensor_tag,"oxygen"), MakeNumber(20), "Less Than or Equal to" ) i.children_then.Add(inj_on) i.children_else.Add(inj_off) automations += i /obj/machinery/computer/general_air_control/atmos_automation/air_mixing/proc/buildN2() /////////////////////////////////////////////////////////////// // Nitrogen Injection /////////////////////////////////////////////////////////////// /* if(get_sensor_data("pressure") < 100) injector_on() else if(get_sensor_data("pressure") > 5000) injector_off() */ var/datum/automation/set_injector_power/inj_on=new(src) inj_on.injector=n2_injector_tag inj_on.state=1 var/datum/automation/set_injector_power/inj_off=new(src) inj_off.injector=n2_injector_tag inj_off.state=0 var/datum/automation/if_statement/if_on = new (src) if_on.label = "Nitrogen Injection" if_on.condition = MakeCompare( MakeGetSensorData(sensor_tag,"pressure"), MakeNumber(100), "Less Than" ) if_on.children_then.Add(inj_on) var/datum/automation/if_statement/if_off=new(src) if_off.condition=MakeCompare( MakeGetSensorData(sensor_tag,"pressure"), MakeNumber(5000), "Greater Than" ) if_off.children_then.Add(inj_off) if_on.children_else.Add(if_off) automations += if_on /obj/machinery/computer/general_air_control/atmos_automation/air_mixing/proc/buildOutletVent() /////////////////////////////////////////////////////////////// // Outlet Management /////////////////////////////////////////////////////////////// /* if(get_sensor_data("pressure") >= 5000 && get_sensor_data("oxygen") >= 20) vent_on() else if(get_sensor_data("oxygen") < 20 || get_sensor_data("pressure") < 100) vent_off() */ var/datum/automation/set_vent_pump_power/vp_on=new(src) vp_on.vent_pump=output_tag vp_on.state=1 var/datum/automation/set_vent_pump_power/vp_off=new(src) vp_off.vent_pump=output_tag vp_off.state=0 var/datum/automation/if_statement/if_on=new(src) if_on.label="Air Output" var/datum/automation/and/and_on=new(src) and_on.children.Add( MakeCompare( MakeGetSensorData(sensor_tag,"pressure"), MakeNumber(5000), "Greater Than or Equal to" ) ) and_on.children.Add( MakeCompare( MakeGetSensorData(sensor_tag,"oxygen"), MakeNumber(20), "Greater Than or Equal to" ) ) if_on.condition=and_on if_on.children_then.Add(vp_on) ////////////////////////////// var/datum/automation/if_statement/if_off=new(src) var/datum/automation/or/or_off=new(src) or_off.children.Add( MakeCompare( MakeGetSensorData(sensor_tag,"pressure"), MakeNumber(100), "Less Than" ) ) or_off.children.Add( MakeCompare( MakeGetSensorData(sensor_tag,"oxygen"), MakeNumber(20), "Less Than" ) ) if_off.condition=or_off if_off.children_then.Add(vp_off) if_on.children_else.Add(if_off) automations += if_on