mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-12 23:53:47 +01:00
-Changed the powernet nodes list to be a dictionary list (associative list, hashtable, etc..)
-Added a solars_list. The sun will use this list instead of the machines list. I made a proc which decided on whether to use this list or the powernet nodes list depending on what is smallest. I replaced some loops to use this proc. -The sun will reference this list for debugging purposes. The sun will also remove solar equipment in the list which are not connected to a powernet. -Cut down on some duplicated code. -Fixed an issue with solar panels not updating their direction correctly. -Changed the proc updateicon()'s name to update_icon() git-svn-id: http://tgstation13.googlecode.com/svn/trunk@5418 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
+26
-26
@@ -109,7 +109,7 @@
|
||||
operating = 0
|
||||
name = "[area.name] APC"
|
||||
stat |= MAINT
|
||||
src.updateicon()
|
||||
src.update_icon()
|
||||
spawn(5)
|
||||
src.update()
|
||||
|
||||
@@ -137,7 +137,7 @@
|
||||
src.area = A
|
||||
else
|
||||
src.area = get_area_name(areastring)
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
make_terminal()
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
|
||||
// update the APC icon to show the three base states
|
||||
// also add overlays for indicator lights
|
||||
/obj/machinery/power/apc/proc/updateicon()
|
||||
/obj/machinery/power/apc/update_icon()
|
||||
overlays.Cut()
|
||||
if(opened)
|
||||
var/basestate = "apc[ cell ? "2" : "1" ]" // if opened, show cell if it's inserted
|
||||
@@ -229,14 +229,14 @@
|
||||
new /obj/item/weapon/module/power_control(loc)
|
||||
else if (opened!=2) //cover isn't removed
|
||||
opened = 0
|
||||
updateicon()
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) )
|
||||
if(coverlocked && !(stat & MAINT))
|
||||
user << "\red The cover is locked and cannot be opened."
|
||||
return
|
||||
else
|
||||
opened = 1
|
||||
updateicon()
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/cell) && opened) // trying to put a cell inside
|
||||
if(cell)
|
||||
user << "There is a power cell already installed."
|
||||
@@ -252,7 +252,7 @@
|
||||
"\red [user.name] has inserted the power cell to [src.name]!",\
|
||||
"You insert the power cell.")
|
||||
chargecount = 0
|
||||
updateicon()
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/weapon/screwdriver)) // haxing
|
||||
if(opened)
|
||||
if (cell)
|
||||
@@ -272,13 +272,13 @@
|
||||
else /* has_electronics==0 */
|
||||
user << "\red There is nothing to secure."
|
||||
return
|
||||
updateicon()
|
||||
update_icon()
|
||||
else if(emagged)
|
||||
user << "The interface is broken."
|
||||
else
|
||||
wiresexposed = !wiresexposed
|
||||
user << "The wires have been [wiresexposed ? "exposed" : "unexposed"]"
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) // trying to unlock the interface with an ID card
|
||||
if(emagged)
|
||||
@@ -293,7 +293,7 @@
|
||||
if(src.allowed(usr))
|
||||
locked = !locked
|
||||
user << "You [ locked ? "lock" : "unlock"] the APC interface."
|
||||
updateicon()
|
||||
update_icon()
|
||||
else
|
||||
user << "\red Access denied."
|
||||
else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
|
||||
@@ -310,7 +310,7 @@
|
||||
emagged = 1
|
||||
locked = 0
|
||||
user << "You emag the APC interface."
|
||||
updateicon()
|
||||
update_icon()
|
||||
else
|
||||
user << "You fail to [ locked ? "unlock" : "lock"] the APC interface."
|
||||
else if (istype(W, /obj/item/weapon/cable_coil) && !terminal && opened && has_electronics!=2)
|
||||
@@ -395,7 +395,7 @@
|
||||
"\red [user.name] has replaced the damaged APC frontal panel with a new one.",\
|
||||
"You replace the damaged APC frontal panel with a new one.")
|
||||
del(W)
|
||||
updateicon()
|
||||
update_icon()
|
||||
else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack))
|
||||
if (has_electronics)
|
||||
user << "You cannot repair this APC until you remove the electronics still inside."
|
||||
@@ -411,7 +411,7 @@
|
||||
malfhack = 0
|
||||
if (opened==2)
|
||||
opened = 1
|
||||
updateicon()
|
||||
update_icon()
|
||||
else
|
||||
if ( ((stat & BROKEN) || malfhack) \
|
||||
&& !opened \
|
||||
@@ -422,7 +422,7 @@
|
||||
user.visible_message("\red The APC cover was knocked down with the [W.name] by [user.name]!", \
|
||||
"\red You knock down the APC cover with your [W.name]!", \
|
||||
"You hear bang")
|
||||
updateicon()
|
||||
update_icon()
|
||||
else
|
||||
if (istype(user, /mob/living/silicon))
|
||||
return src.attack_hand(user)
|
||||
@@ -452,7 +452,7 @@
|
||||
user.visible_message("\red [user.name] removes the power cell from [src.name]!", "You remove the power cell.")
|
||||
//user << "You remove the power cell."
|
||||
charging = 0
|
||||
src.updateicon()
|
||||
src.update_icon()
|
||||
return
|
||||
if(stat & (BROKEN|MAINT))
|
||||
return
|
||||
@@ -477,13 +477,13 @@
|
||||
break
|
||||
if(beenhit >= pick(3, 4) && wiresexposed != 1)
|
||||
wiresexposed = 1
|
||||
src.updateicon()
|
||||
src.update_icon()
|
||||
src.visible_message("\red The [src.name]'s cover flies open, exposing the wires!")
|
||||
|
||||
else if(wiresexposed == 1 && allcut == 0)
|
||||
for(var/wire in apcwirelist)
|
||||
cut(apcwirelist[wire])
|
||||
src.updateicon()
|
||||
src.update_icon()
|
||||
src.visible_message("\red The [src.name]'s wires are shredded!")
|
||||
else
|
||||
beenhit += 1
|
||||
@@ -824,20 +824,20 @@
|
||||
operating ? ticker.mode:apcs++ : ticker.mode:apcs--
|
||||
|
||||
src.update()
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
else if (href_list["cmode"])
|
||||
chargemode = !chargemode
|
||||
if(!chargemode)
|
||||
charging = 0
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
else if (href_list["eqp"])
|
||||
var/val = text2num(href_list["eqp"])
|
||||
|
||||
equipment = (val==1) ? 0 : val
|
||||
|
||||
updateicon()
|
||||
update_icon()
|
||||
update()
|
||||
|
||||
else if (href_list["lgt"])
|
||||
@@ -845,14 +845,14 @@
|
||||
|
||||
lighting = (val==1) ? 0 : val
|
||||
|
||||
updateicon()
|
||||
update_icon()
|
||||
update()
|
||||
else if (href_list["env"])
|
||||
var/val = text2num(href_list["env"])
|
||||
|
||||
environ = (val==1) ? 0 :val
|
||||
|
||||
updateicon()
|
||||
update_icon()
|
||||
update()
|
||||
else if( href_list["close"] )
|
||||
usr << browse(null, "window=apc")
|
||||
@@ -889,7 +889,7 @@
|
||||
else
|
||||
src.malfai = usr
|
||||
malfai << "Hack complete. The APC is now under your exclusive control."
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
else if (href_list["occupyapc"])
|
||||
malfoccupy(usr)
|
||||
@@ -954,7 +954,7 @@
|
||||
src.cell.charge = 0
|
||||
cell.corrupt()
|
||||
src.malfhack = 1
|
||||
updateicon()
|
||||
update_icon()
|
||||
var/datum/effect/effect/system/harmless_smoke_spread/smoke = new /datum/effect/effect/system/harmless_smoke_spread()
|
||||
smoke.set_up(3, 0, src.loc)
|
||||
smoke.attach(src)
|
||||
@@ -1140,10 +1140,10 @@
|
||||
// update icon & area power if anything changed
|
||||
|
||||
if(last_lt != lighting || last_eq != equipment || last_en != environ)
|
||||
updateicon()
|
||||
update_icon()
|
||||
update()
|
||||
else if (last_ch != charging)
|
||||
updateicon()
|
||||
update_icon()
|
||||
|
||||
//src.updateDialog()
|
||||
src.updateDialog()
|
||||
@@ -1225,7 +1225,7 @@
|
||||
operating = 0
|
||||
if(occupant)
|
||||
malfvacate(1)
|
||||
updateicon()
|
||||
update_icon()
|
||||
update()
|
||||
|
||||
// overload all the lights in this APC area
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
powernets += NC.powernet
|
||||
NC.powernet.cables += NC
|
||||
powernet = NC.powernet
|
||||
NC.powernet.nodes += src
|
||||
NC.powernet.nodes[src] = src
|
||||
NC.mergeConnectedNetworksOnTurf()
|
||||
|
||||
coil.use(1)
|
||||
@@ -489,7 +489,7 @@
|
||||
merge_powernets(powernet, N.terminal.powernet)
|
||||
else
|
||||
N.terminal.powernet = powernet
|
||||
powernet.nodes += N.terminal
|
||||
powernet.nodes[N.terminal] = N.terminal
|
||||
|
||||
else if(istype(AM,/obj/machinery/power))
|
||||
var/obj/machinery/power/M = AM
|
||||
@@ -498,7 +498,7 @@
|
||||
merge_powernets(powernet, M.powernet)
|
||||
else
|
||||
M.powernet = powernet
|
||||
powernet.nodes += M
|
||||
powernet.nodes[M] = M
|
||||
|
||||
|
||||
obj/structure/cable/proc/cableColor(var/colorC)
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
|
||||
for(var/obj/machinery/power/M in machines)
|
||||
if(!M.powernet) continue // APCs have powernet=0 so they don't count as network nodes directly
|
||||
M.powernet.nodes += M
|
||||
M.powernet.nodes[M] = M
|
||||
|
||||
|
||||
// returns a list of all power-related objects (nodes, cable, junctions) in turf,
|
||||
@@ -274,7 +274,7 @@
|
||||
if(Node && !Node.powernet)
|
||||
Node.powernet = PN
|
||||
nodes.Cut(i,i+1)
|
||||
PN.nodes += Node
|
||||
PN.nodes[Node] = Node
|
||||
continue
|
||||
i++
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
var/obj/machinery/power/Node = net2.nodes[i]
|
||||
if(Node)
|
||||
Node.powernet = net1
|
||||
net1.nodes += Node
|
||||
net1.nodes[Node] = Node
|
||||
|
||||
for(var/i=1,i<=net2.cables.len,i++)
|
||||
var/obj/structure/cable/Cable = net2.cables[i]
|
||||
@@ -382,7 +382,7 @@
|
||||
if(!C || !C.powernet) return
|
||||
// makepowernets() //TODO: find fast way //EWWWW what are you doing!?
|
||||
powernet = C.powernet
|
||||
powernet.nodes += src
|
||||
powernet.nodes[src] = src
|
||||
|
||||
/obj/machinery/power/proc/disconnect_from_network()
|
||||
if(!powernet) return
|
||||
|
||||
+61
-24
@@ -1,7 +1,20 @@
|
||||
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
|
||||
|
||||
#define SOLAR_MAX_DIST 50
|
||||
#define SOLAR_MAX_DIST 40
|
||||
#define SOLARGENRATE 1500
|
||||
|
||||
var/list/solars_list = list()
|
||||
|
||||
// This will choose whether to get the solar list from the powernet or the powernet nodes,
|
||||
// depending on the size of the nodes.
|
||||
/obj/machinery/power/proc/get_solars_powernet()
|
||||
if(!powernet)
|
||||
return list()
|
||||
if(solars_list.len < powernet.nodes)
|
||||
return solars_list
|
||||
else
|
||||
return powernet.nodes
|
||||
|
||||
/obj/machinery/power/solar
|
||||
name = "solar panel"
|
||||
desc = "A solar electrical generator."
|
||||
@@ -22,15 +35,30 @@
|
||||
var/turn_angle = 0
|
||||
var/obj/machinery/power/solar_control/control = null
|
||||
|
||||
/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S)
|
||||
/obj/machinery/power/solar/New(var/turf/loc, var/obj/item/solar_assembly/S, var/process = 1)
|
||||
..(loc)
|
||||
Make(S)
|
||||
connect_to_network(process)
|
||||
|
||||
|
||||
/obj/machinery/power/solar/disconnect_from_network()
|
||||
..()
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/solar/connect_to_network(var/process)
|
||||
..()
|
||||
if(process)
|
||||
solars_list.Add(src)
|
||||
|
||||
|
||||
/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
|
||||
if(!S)
|
||||
S = new /obj/item/solar_assembly(src)
|
||||
S.glass_type = /obj/item/stack/sheet/glass
|
||||
S.anchored = 1
|
||||
S.loc = src
|
||||
update_icon()
|
||||
connect_to_network()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
|
||||
@@ -98,19 +126,20 @@
|
||||
/obj/machinery/power/solar/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY
|
||||
if(stat & BROKEN) return
|
||||
if(!control) return
|
||||
if(obscured) return
|
||||
|
||||
var/sgen = SOLARGENRATE * sunfrac
|
||||
add_avail(sgen)
|
||||
if(powernet && control)
|
||||
if(control in powernet.nodes) //this line right here...
|
||||
control.gen += sgen
|
||||
|
||||
if(adir != ndir)
|
||||
adir = (360+adir+dd_range(-10,10,ndir-adir))%360
|
||||
update_icon()
|
||||
update_solar_exposure()
|
||||
|
||||
if(obscured) return
|
||||
|
||||
var/sgen = SOLARGENRATE * sunfrac
|
||||
add_avail(sgen)
|
||||
if(powernet && control)
|
||||
if(powernet.nodes[control])
|
||||
control.gen += sgen
|
||||
|
||||
|
||||
/obj/machinery/power/solar/proc/broken()
|
||||
stat |= BROKEN
|
||||
@@ -151,6 +180,9 @@
|
||||
src.density = 0
|
||||
|
||||
|
||||
/obj/machinery/power/solar/fake/New(var/turf/loc, var/obj/item/solar_assembly/S)
|
||||
..(loc, S, 0)
|
||||
|
||||
/obj/machinery/power/solar/fake/process()
|
||||
. = PROCESS_KILL
|
||||
return
|
||||
@@ -257,16 +289,19 @@
|
||||
initialize()
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/solar_control/disconnect_from_network()
|
||||
..()
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/solar_control/connect_to_network()
|
||||
..()
|
||||
if(powernet)
|
||||
solars_list.Add(src)
|
||||
|
||||
/obj/machinery/power/solar_control/initialize()
|
||||
..()
|
||||
if(!powernet) return
|
||||
for(var/obj/machinery/power/solar/S in powernet.nodes)
|
||||
if(get_dist(S, src) < SOLAR_MAX_DIST)
|
||||
cdir = S.adir//The hell is this even doing?
|
||||
S.control = src
|
||||
update_icon()
|
||||
|
||||
set_panels(cdir)
|
||||
|
||||
/obj/machinery/power/solar_control/update_icon()
|
||||
if(stat & BROKEN)
|
||||
@@ -415,9 +450,10 @@
|
||||
if(src.trackrate) nexttime = world.timeofday + 3600/abs(trackrate)
|
||||
track = text2num(href_list["track"])
|
||||
if(powernet && (track == 2))
|
||||
var/obj/machinery/power/tracker/T = locate() in powernet.nodes
|
||||
if(T)
|
||||
cdir = T.sun_angle
|
||||
for(var/obj/machinery/power/tracker/T in get_solars_powernet())
|
||||
if(powernet.nodes[T])
|
||||
cdir = T.sun_angle
|
||||
break
|
||||
|
||||
set_panels(cdir)
|
||||
update_icon()
|
||||
@@ -427,11 +463,12 @@
|
||||
|
||||
/obj/machinery/power/solar_control/proc/set_panels(var/cdir)
|
||||
if(!powernet) return
|
||||
for(var/obj/machinery/power/solar/S in powernet.nodes)
|
||||
if(get_dist(S, src) < SOLAR_MAX_DIST)
|
||||
if(!S.control)
|
||||
S.control = src
|
||||
S.ndir = cdir
|
||||
for(var/obj/machinery/power/solar/S in get_solars_powernet())
|
||||
if(powernet.nodes[S])
|
||||
if(get_dist(S, src) < SOLAR_MAX_DIST)
|
||||
if(!S.control)
|
||||
S.control = src
|
||||
S.ndir = cdir
|
||||
|
||||
|
||||
/obj/machinery/power/solar_control/power_change()
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
anchored = 1
|
||||
density = 1
|
||||
directwired = 1
|
||||
use_power = 0
|
||||
|
||||
var/sun_angle = 0 // sun angle as set by sun datum
|
||||
|
||||
@@ -24,6 +25,14 @@
|
||||
S.loc = src
|
||||
connect_to_network()
|
||||
|
||||
/obj/machinery/power/tracker/disconnect_from_network()
|
||||
..()
|
||||
solars_list.Remove(src)
|
||||
|
||||
/obj/machinery/power/tracker/connect_to_network()
|
||||
..()
|
||||
solars_list.Add(src)
|
||||
|
||||
// called by datum/sun/calc_position() as sun's angle changes
|
||||
/obj/machinery/power/tracker/proc/set_angle(var/angle)
|
||||
sun_angle = angle
|
||||
@@ -39,9 +48,10 @@
|
||||
// currently, just update all controllers in world
|
||||
// ***TODO: better communication system using network
|
||||
if(powernet)
|
||||
for(var/obj/machinery/power/solar_control/C in powernet.nodes)
|
||||
if(get_dist(C, src) < SOLAR_MAX_DIST)
|
||||
C.tracker_update(angle)
|
||||
for(var/obj/machinery/power/solar_control/C in get_solars_powernet())
|
||||
if(powernet.nodes[C])
|
||||
if(get_dist(C, src) < SOLAR_MAX_DIST)
|
||||
C.tracker_update(angle)
|
||||
|
||||
|
||||
/obj/machinery/power/tracker/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||
@@ -71,10 +81,6 @@
|
||||
else
|
||||
stat |= NOPOWER
|
||||
|
||||
// override power change to do nothing since we don't care about area power
|
||||
/obj/machinery/power/tracker/power_change()
|
||||
return
|
||||
|
||||
|
||||
// Tracker Electronic
|
||||
|
||||
|
||||
Reference in New Issue
Block a user