diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 64ccdf50470..a18b0636975 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -912,11 +912,3 @@ req_components = list( /obj/item/stock_parts/manipulator = 2, /obj/item/stock_parts/matter_bin = 2) - -/obj/item/circuitboard/machine/generator - name = "Thermo-Electric Generator (Machine Board)" - build_path = /obj/machinery/power/generator - -/obj/item/circuitboard/machine/circulator - name = "Circulator/Heat Exchanger (Machine Board)" - build_path = /obj/machinery/atmospherics/components/binary/circulator \ No newline at end of file diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index f8c366a4401..e8007a66081 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -1,40 +1,23 @@ //node2, air2, network2 correspond to input //node1, air1, network1 correspond to output -#define CIRCULATOR_COLD 0 -#define CIRCULATOR_HOT 1 + /obj/machinery/atmospherics/components/binary/circulator name = "circulator/heat exchanger" desc = "A gas circulator pump and heat exchanger." - icon_state = "circ-off" + icon_state = "circ1-off" - var/active = FALSE + var/side = CIRC_LEFT + var/status = 0 var/last_pressure_delta = 0 pipe_flags = PIPING_ONE_PER_TURF density = TRUE + var/global/const/CIRC_LEFT = 1 + var/global/const/CIRC_RIGHT = 2 - var/mode = CIRCULATOR_HOT - var/obj/machinery/power/generator/generator - -//default cold circ for mappers -/obj/machinery/atmospherics/components/binary/circulator/cold - mode = CIRCULATOR_COLD - -/obj/machinery/atmospherics/components/binary/circulator/Initialize(mapload) - .=..() - component_parts = list(new /obj/item/circuitboard/machine/circulator) - -/obj/machinery/atmospherics/components/binary/circulator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) - -/obj/machinery/atmospherics/components/binary/circulator/Destroy() - if(generator) - disconnectFromGenerator() - ..() /obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air() @@ -73,55 +56,11 @@ /obj/machinery/atmospherics/components/binary/circulator/update_icon() if(!is_operational()) - icon_state = "circ-p" + icon_state = "circ[side]-p" else if(last_pressure_delta > 0) if(last_pressure_delta > ONE_ATMOSPHERE) - icon_state = "circ-run" + icon_state = "circ[side]-run" else - icon_state = "circ-slow" + icon_state = "circ[side]-slow" else - icon_state = "circ-off" - -/obj/machinery/atmospherics/components/binary/circulator/wrench_act(mob/living/user, obj/item/I) - if(!panel_open) - return - anchored = !anchored - I.play_tool_sound(src) - if(generator) - disconnectFromGenerator() - to_chat(user, "You [anchored?"secure":"unsecure"] [src].") - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/multitool_act(mob/living/user, obj/item/I) - if(generator) - disconnectFromGenerator() - mode = !mode - to_chat(user, "You set [src] to [mode?"cold":"hot"] mode.") - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/screwdriver_act(mob/user, obj/item/I) - panel_open = !panel_open - I.play_tool_sound(src) - to_chat(user, "You [panel_open?"open":"close"] the panel on [src].") - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/atmospherics/components/binary/circulator/on_deconstruction() - if(generator) - disconnectFromGenerator() - -/obj/machinery/atmospherics/components/binary/circulator/proc/disconnectFromGenerator() - if(mode) - generator.cold_circ = null - else - generator.hot_circ = null - generator.update_icon() - generator = null - -/obj/machinery/atmospherics/components/binary/circulator/setPipingLayer(new_layer) - ..() - pixel_x = 0 - pixel_y = 0 + icon_state = "circ[side]-off" diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index da6a2888889..eb6e82a2422 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -8,6 +8,10 @@ var/obj/machinery/atmospherics/components/binary/circulator/cold_circ var/obj/machinery/atmospherics/components/binary/circulator/hot_circ + //note: these currently only support EAST and WEST + var/cold_dir = WEST + var/hot_dir = EAST + var/lastgen = 0 var/lastgenlev = -1 var/lastcirc = "00" @@ -15,18 +19,34 @@ /obj/machinery/power/generator/Initialize(mapload) . = ..() - find_circs() + var/obj/machinery/atmospherics/components/binary/circulator/circpath = /obj/machinery/atmospherics/components/binary/circulator + cold_circ = locate(circpath) in get_step(src, cold_dir) + hot_circ = locate(circpath) in get_step(src, hot_dir) connect_to_network() SSair.atmos_machinery += src - update_icon() - component_parts = list(new /obj/item/circuitboard/machine/generator) -/obj/machinery/power/generator/ComponentInitialize() - . = ..() - AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ) + if(cold_circ) + switch(cold_dir) + if(EAST) + cold_circ.side = circpath.CIRC_RIGHT + if(WEST) + cold_circ.side = circpath.CIRC_LEFT + cold_circ.update_icon() + + if(hot_circ) + switch(hot_dir) + if(EAST) + hot_circ.side = circpath.CIRC_RIGHT + if(WEST) + hot_circ.side = circpath.CIRC_LEFT + hot_circ.update_icon() + + if(!cold_circ || !hot_circ) + stat |= BROKEN + + update_icon() /obj/machinery/power/generator/Destroy() - kill_circs() SSair.atmos_machinery -= src return ..() @@ -41,8 +61,7 @@ if(L != 0) add_overlay(image('icons/obj/power.dmi', "teg-op[L]")) - if(hot_circ && cold_circ) - add_overlay("teg-oc[lastcirc]") + add_overlay("teg-oc[lastcirc]") #define GENRATE 800 // generator output coefficient from Q @@ -103,7 +122,7 @@ lastgen -= power_output ..() -/obj/machinery/power/generator/proc/get_menu(include_link = TRUE) +/obj/machinery/power/generator/proc/get_menu(include_link = 1) var/t = "" if(!powernet) t += "Unable to connect to the power network!" @@ -128,12 +147,8 @@ t += "Pressure Inlet: [round(hot_circ_air2.return_pressure(), 0.1)] kPa / Outlet: [round(hot_circ_air1.return_pressure(), 0.1)] kPa
" t += "" - else if(!hot_circ && cold_circ) - t += "Unable to locate hot circulator!" - else if(hot_circ && !cold_circ) - t += "Unable to locate cold circulator!" else - t += "Unable to locate any parts!" + t += "Unable to locate all parts!" if(include_link) t += "
Close" @@ -152,80 +167,10 @@ if( href_list["close"] ) usr << browse(null, "window=teg") usr.unset_machine() - return FALSE - return TRUE + return 0 + return 1 /obj/machinery/power/generator/power_change() ..() update_icon() - -/obj/machinery/power/generator/proc/find_circs() - kill_circs() - var/list/circs = list() - var/obj/machinery/atmospherics/components/binary/circulator/C - var/circpath = /obj/machinery/atmospherics/components/binary/circulator - if(dir == NORTH || dir == SOUTH) - C = locate(circpath) in get_step(src, EAST) - if(C && C.dir == WEST) - circs += C - - C = locate(circpath) in get_step(src, WEST) - if(C && C.dir == EAST) - circs += C - - else - C = locate(circpath) in get_step(src, NORTH) - if(C && C.dir == SOUTH) - circs += C - - C = locate(circpath) in get_step(src, SOUTH) - if(C && C.dir == NORTH) - circs += C - - if(circs.len) - for(C in circs) - if(C.mode == CIRCULATOR_COLD && !cold_circ) - cold_circ = C - C.generator = src - else if(C.mode == CIRCULATOR_HOT && !hot_circ) - hot_circ = C - C.generator = src - -/obj/machinery/power/generator/wrench_act(mob/living/user, obj/item/I) - if(!panel_open) - return - anchored = !anchored - I.play_tool_sound(src) - if(!anchored) - kill_circs() - to_chat(user, "You [anchored?"secure":"unsecure"] [src].") - return TRUE - -/obj/machinery/power/generator/multitool_act(mob/living/user, obj/item/I) - if(!anchored) - return - find_circs() - to_chat(user, "You update [src]'s circulator links.") - return TRUE - -/obj/machinery/power/generator/screwdriver_act(mob/user, obj/item/I) - panel_open = !panel_open - I.play_tool_sound(src) - to_chat(user, "You [panel_open?"open":"close"] the panel on [src].") - return TRUE - -/obj/machinery/power/generator/crowbar_act(mob/user, obj/item/I) - default_deconstruction_crowbar(I) - return TRUE - -/obj/machinery/power/generator/on_deconstruction() - kill_circs() - -/obj/machinery/power/generator/proc/kill_circs() - if(hot_circ) - hot_circ.generator = null - hot_circ = null - if(cold_circ) - cold_circ.generator = null - cold_circ = null diff --git a/icons/obj/atmospherics/components/binary_devices.dmi b/icons/obj/atmospherics/components/binary_devices.dmi index ebe5a61ddb5..9331613af32 100644 Binary files a/icons/obj/atmospherics/components/binary_devices.dmi and b/icons/obj/atmospherics/components/binary_devices.dmi differ diff --git a/icons/obj/power.dmi b/icons/obj/power.dmi index dc6d4547b45..cd76709b00c 100644 Binary files a/icons/obj/power.dmi and b/icons/obj/power.dmi differ