From dc0a988d6c07d238bc2b9ea22ee9c80998899df9 Mon Sep 17 00:00:00 2001 From: Dip Date: Fri, 23 Oct 2020 05:55:58 -0300 Subject: [PATCH] Energy Harvester V1 --- code/modules/cargo/packs.dm | 9 ++ tgstation.dme | 1 + .../code/modules/power/energyharvester.dm | 88 +++++++++++++++++++ 3 files changed, 98 insertions(+) create mode 100644 yogstation/code/modules/power/energyharvester.dm diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 9d47a6cfc..108b8366b 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1003,6 +1003,15 @@ contains = list(/obj/item/circuitboard/computer/sat_control) crate_name= "shield control board crate" +/datum/supply_pack/engine/energy_harvester + name = "Energy Harvesting Module" + desc = "A Device which upon connection to a node, will harvest the energy and send it to engineerless stations in return for credits, derived from a syndicate powersink model." + cost = 7500 + access = ACCESS_CE + contains = list(/obj/item/energy_harvester) + crate_name = "energy harvesting module crate" + crate_type = /obj/structure/closet/crate/secure/engineering + ////////////////////////////////////////////////////////////////////////////// //////////////////////// Engine Construction ///////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/tgstation.dme b/tgstation.dme index 5a40514d0..b627e1b0e 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3215,4 +3215,5 @@ #include "modular_citadel\code\modules\vore\eating\voreitems.dm" #include "modular_citadel\code\modules\vore\eating\vorepanel_vr.dm" #include "modular_citadel\interface\skin.dmf" +#include "yogstation\code\modules\power\energyharvester.dm" // END_INCLUDE diff --git a/yogstation/code/modules/power/energyharvester.dm b/yogstation/code/modules/power/energyharvester.dm new file mode 100644 index 000000000..cffffa9b6 --- /dev/null +++ b/yogstation/code/modules/power/energyharvester.dm @@ -0,0 +1,88 @@ +/obj/item/energy_harvester + desc = "A Device which upon connection to a node, will harvest the energy and send it to engineerless stations in return for credits, derived from a syndicate powersink model." + name = "Energy Harvesting Module" + icon_state = "powersink0" + icon = 'icons/obj/device.dmi' + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + w_class= WEIGHT_CLASS_BULKY + flags_1 = CONDUCT_1 + throwforce = 1 + throw_speed = 1 + throw_range = 1 + materials = list(MAT_METAL=750) + var/drain_rate = 100000000 + var/power_drained = 0 + var/obj/structure/cable/attached + var/datum/looping_sound/generator/soundloop + var/active = 0 + var/lastprocessed = 0 + + +/obj/item/energy_harvester/attackby(obj/item/I, mob/user, params) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(!anchored) + var/turf/T = loc + if(isturf(T) && !T.intact) + attached = locate() in T + if(!attached) + to_chat(user, "This device must be placed over an exposed, powered cable node!") + else + I.play_tool_sound(src) + START_PROCESSING(SSobj, src) + anchored = 1 + density = 1 + user.visible_message( \ + "[user] attaches \the [src] to the cable.", \ + "You attach \the [src] to the cable.", + "You hear some wires being connected to something.") + else + to_chat(user, "This device must be placed over an exposed, powered cable node!") + else + I.play_tool_sound(src) + STOP_PROCESSING(SSobj, src) + anchored = 0 + density = 0 + user.visible_message( \ + "[user] detaches \the [src] from the cable.", \ + "You detach \the [src] from the cable.", + "You hear some wires being disconnected from something.") + +/obj/item/energy_harvester/process() + if(!attached || !anchored) + return PROCESS_KILL + + var/datum/powernet/PN = attached.powernet + if(PN) + set_light(1,1,LIGHT_COLOR_ORANGE) + var/power_avaliable = PN.netexcess + if(power_avaliable <= 0) + soundloop.stop() + active = 0 + return + soundloop.start() + active = 1 + power_avaliable = min(power_avaliable, drain_rate) + attached.add_delayedload(power_avaliable) + lastprocessed = (power_avaliable * 0.00001) + SSshuttle.points += lastprocessed + +/obj/item/energy_harvester/Initialize() + . = ..() + new /obj/item/gps/internal/energy_harvester(src) + soundloop = new(list(src), FALSE) + +/obj/item/energy_harvester/Destroy() + QDEL_NULL(soundloop) + return ..() + +/obj/item/energy_harvester/examine(mob/user) + . = ..() + if(active) + . += "The [src]'s display states that it is processing approximately [lastprocessed*60] credits per minute." + else + . += "The [src]'s display is currently offline." + +/obj/item/gps/internal/energy_harvester + gpstag = "Energy Harvester"