From 4c8989e05d1aa1a380fa995bc37e762e7d1ec6af Mon Sep 17 00:00:00 2001 From: Ren Erthilo Date: Mon, 9 Apr 2012 22:09:07 +0100 Subject: [PATCH] TG: Moves the areas procs all into the same file. Comments out an if statement to supress a warning. Although not yet located on the map, adds the code for gravity generators. Actually enables attack logging by default, now. Revision: r2927 Author: VivianFoxfoot --- baystation12.dme | 1 + code/modules/power/gravitygenerator.dm | 144 +++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 code/modules/power/gravitygenerator.dm diff --git a/baystation12.dme b/baystation12.dme index 9aded600eac..9f7330d6847 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -1002,6 +1002,7 @@ #include "code\modules\power\engine.dm" #include "code\modules\power\generator.dm" #include "code\modules\power\generator_type2.dm" +#include "code\modules\power\gravitygenerator.dm" #include "code\modules\power\lighting.dm" #include "code\modules\power\port_gen.dm" #include "code\modules\power\power.dm" diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm new file mode 100644 index 00000000000..4c34fdaf7e8 --- /dev/null +++ b/code/modules/power/gravitygenerator.dm @@ -0,0 +1,144 @@ +// It.. uses a lot of power. Everything under power is engineering stuff, at least. + +/obj/machinery/computer/gravity_control_computer + name = "Gravity Generator Control" + desc = "A computer to control a local gravity generator. Qualified personnel only." + icon = 'computer.dmi' + icon_state = "airtunnel0e" + anchored = 1 + density = 1 + var/obj/machinery/gravity_generator = null + + +/obj/machinery/gravity_generator/ + name = "Gravitational Generator" + desc = "A device which produces a gravaton field when set up." + icon = 'singularity.dmi' + icon_state = "TheSingGen" + anchored = 1 + density = 1 + use_power = 1 + idle_power_usage = 200 + active_power_usage = 1000 + var/on = 1 + var/list/localareas = list() + var/effectiverange = 25 + + // Borrows code from cloning computer +/obj/machinery/computer/gravity_control_computer/New() + ..() + spawn(5) + updatemodules() + return + return + +/obj/machinery/gravity_generator/New() + ..() + spawn(5) + locatelocalareas() + return + return + + + +/obj/machinery/computer/gravity_control_computer/proc/updatemodules() + src.gravity_generator = findgenerator() + + + +/obj/machinery/gravity_generator/proc/locatelocalareas() + for(var/area/A in range(src,effectiverange)) + if(A.name == "Space") + continue // No (de)gravitizing space. + if(A.master && !( A.master in localareas) ) + localareas += A.master + +/obj/machinery/computer/gravity_control_computer/proc/findgenerator() + var/obj/machinery/gravity_generator/foundgenerator = null + for(dir in list(NORTH,EAST,SOUTH,WEST)) + //world << "SEARCHING IN [dir]" + foundgenerator = locate(/obj/machinery/gravity_generator/, get_step(src, dir)) + if (!isnull(foundgenerator)) + //world << "FOUND" + break + return foundgenerator + + +/obj/machinery/computer/gravity_control_computer/attack_paw(mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/gravity_control_computer/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/gravity_control_computer/attack_hand(mob/user as mob) + user.machine = src + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + + updatemodules() + + var/dat = "

Generator Control System

" + //dat += "Refresh" + if(gravity_generator) + if(gravity_generator:on) + dat += "
Gravity Status: ON

" + else + dat += "
Gravity Status: OFF

" + + dat += "
Currently Supplying Gravitons To:
" + + for(var/area/A in gravity_generator:localareas) + if(A.has_gravity && gravity_generator:on) + dat += "[A]
" + + else if (A.has_gravity) + dat += "[A]
" + + else + dat += "[A]
" + + dat += "
Maintainence Functions:
" + if(gravity_generator:on) + dat += " TURN GRAVITY GENERATOR OFF. " + else + dat += " TURN GRAVITY GENERATOR ON. " + + else + dat += "No local gravity generator detected!" + + user << browse(dat, "window=gravgen") + onclose(user, "gravgen") + + +/obj/machinery/computer/gravity_control_computer/Topic(href, href_list) + set background = 1 + ..() + + if ( (get_dist(src, usr) > 1 )) + if (!istype(usr, /mob/living/silicon)) + usr.machine = null + usr << browse(null, "window=air_alarm") + return + + if(href_list["gentoggle"]) + if(gravity_generator:on) + gravity_generator:on = 0 + + for(var/area/A in gravity_generator:localareas) + var/obj/machinery/gravity_generator/G + for(G in world) + if((A.master in G.localareas) && (G.on)) + break + if(!G) + A.gravitychange(0,A) + + + else + for(var/area/A in gravity_generator:localareas) + gravity_generator:on = 1 + A.gravitychange(1,A) + + src.updateUsrDialog() + return \ No newline at end of file