|
1 | | -// It... uses a lot of power. Everything under power is engineering stuff, at least. |
2 | | - |
3 | 1 | /obj/machinery/computer/gravity_control_computer |
4 | | - name = "Gravity Generator Control" |
5 | | - desc = "A computer to control a local gravity generator. Qualified personnel only." |
| 2 | + name = "gravity generator control computer" |
| 3 | + desc = "A computer to control a local gravity generator. Qualified personnel only." |
6 | 4 | icon = 'icons/obj/computer.dmi' |
7 | 5 | icon_state = "airtunnel0e" |
8 | 6 | anchored = TRUE |
9 | 7 | density = TRUE |
10 | 8 | var/obj/machinery/gravity_generator/gravity_generator |
11 | 9 |
|
12 | | -/obj/machinery/gravity_generator/ |
13 | | - name = "Gravitational Generator" |
| 10 | +// Wait. This isn't even used anywhere? |
| 11 | +/obj/machinery/gravity_generator |
| 12 | + name = "gravitational generator" |
14 | 13 | desc = "A device which produces a graviton field when set up." |
15 | 14 | icon = 'icons/obj/singularity.dmi' |
16 | 15 | icon_state = "TheSingGen" |
17 | 16 | anchored = TRUE |
18 | 17 | density = TRUE |
19 | 18 | idle_power_usage = 200 |
20 | 19 | active_power_usage = 1000 |
21 | | - var/on = 1 |
| 20 | + var/on = TRUE |
22 | 21 | var/list/localareas = list() |
23 | 22 | var/effectiverange = 25 |
24 | 23 |
|
|
32 | 31 | locatelocalareas() |
33 | 32 |
|
34 | 33 | /obj/machinery/computer/gravity_control_computer/proc/updatemodules() |
35 | | - for(dir in list(NORTH,EAST,SOUTH,WEST)) |
36 | | - gravity_generator = locate(/obj/machinery/gravity_generator/, get_step(src, dir)) |
37 | | - if (gravity_generator) |
| 34 | + for(var/check_dir in global.cardinal) |
| 35 | + gravity_generator = locate(/obj/machinery/gravity_generator, get_step(src, check_dir)) |
| 36 | + if(gravity_generator) |
38 | 37 | return |
39 | 38 |
|
40 | 39 | /obj/machinery/gravity_generator/proc/locatelocalareas() |
41 | 40 | for(var/area/A in range(src,effectiverange)) |
42 | | - if(istype(A,/area/space)) |
| 41 | + if(istype(A,/area/space)) // todo: un-hardcode this |
43 | 42 | continue // No (de)gravitizing space. |
44 | 43 | localareas |= A |
45 | 44 |
|
|
85 | 84 | onclose(user, "gravgen") |
86 | 85 |
|
87 | 86 |
|
| 87 | +/obj/machinery/gravity_generator/proc/toggle_gravity() |
| 88 | + on = !on |
| 89 | + update_use_power(on ? POWER_USE_ACTIVE : POWER_USE_IDLE) |
| 90 | + if(on) |
| 91 | + mass_gravitychange(localareas, TRUE) |
| 92 | + else |
| 93 | + var/list/still_covered_areas = list() |
| 94 | + // We do it this way to avoid nested loops, and also because gravity generators are relatively rare. |
| 95 | + for(var/obj/machinery/gravity_generator/other_generator in SSmachines.machinery) |
| 96 | + if(other_generator.on) |
| 97 | + still_covered_areas |= localareas & other_generator.localareas |
| 98 | + mass_gravitychange(localareas - still_covered_areas, FALSE) |
| 99 | + |
88 | 100 | /obj/machinery/computer/gravity_control_computer/OnTopic(user, href_list) |
89 | 101 | if((. = ..())) |
90 | 102 | return |
91 | 103 |
|
92 | 104 | if(href_list["gentoggle"]) |
93 | 105 | . = TOPIC_REFRESH |
94 | | - if(gravity_generator.on) |
95 | | - gravity_generator.on = 0 |
96 | | - |
97 | | - for(var/area/A in gravity_generator.localareas) |
98 | | - var/obj/machinery/gravity_generator/G |
99 | | - for(G in SSmachines.machinery) |
100 | | - if((A in G.localareas) && (G.on)) |
101 | | - break |
102 | | - if(!G) |
103 | | - A.gravitychange(0) |
104 | | - CHECK_TICK |
105 | | - else |
106 | | - for(var/area/A in gravity_generator.localareas) |
107 | | - gravity_generator.on = 1 |
108 | | - A.gravitychange(1) |
109 | | - CHECK_TICK |
| 106 | + gravity_generator.toggle_gravity() |
0 commit comments