Completely reverted r1897 due to loss of interest in updating solars. Better to have the old set back than a half-finished set after all. (Only kept the space suit select equipment thing.)

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1901 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
baloh.matevz
2011-07-21 17:10:01 +00:00
parent 1fa9d1806e
commit a7290faeae
7 changed files with 235 additions and 118 deletions
+200 -86
View File
@@ -26,26 +26,37 @@
var/obj/cable/NC = new(T)
var/color = "red"
if(coil.color)
color = coil.color
NC.color = coil.color
switch(color)
if("red")
NC.icon = 'power_cond_red.dmi'
if("yellow")
NC.icon = 'power_cond_yellow.dmi'
if("green")
NC.icon = 'power_cond_green.dmi'
if("blue")
NC.icon = 'power_cond_blue.dmi'
NC.cableColor(coil.color)
NC.d1 = 0
NC.d2 = dirn
NC.add_fingerprint()
NC.updateicon()
NC.update_network()
NC.mergeConnectedNetworks(NC.d2)
NC.mergeConnectedNetworksOnTurf()
if(netnum == 0 && NC.netnum == 0)
var/datum/powernet/PN = new()
PN.number = powernets.len + 1
powernets += PN
NC.netnum = PN.number
netnum = PN.number
PN.cables += NC
PN.nodes += src
powernet = PN
else if(netnum == 0)
netnum = NC.netnum
var/datum/powernet/PN = powernets[netnum]
powernet = PN
PN.nodes += src
NC.mergeConnectedNetworksOnTurf()
coil.use(1)
if (NC.shock(user, 50))
if (prob(50)) //fail
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color)
del(NC)
return
else
..()
@@ -134,8 +145,6 @@
else if(istype(W, /obj/item/weapon/cable_coil))
if (shock(user, 50))
return
var/obj/item/weapon/cable_coil/coil = W
coil.cable_join(src, user)
@@ -297,29 +306,27 @@
var/obj/cable/C = new(F)
var/color_n = "red"
if(color)
color_n = color
C.color = color_n
switch(color)
if("red")
C.icon = 'power_cond_red.dmi'
if("yellow")
C.icon = 'power_cond_yellow.dmi'
if("green")
C.icon = 'power_cond_green.dmi'
if("blue")
C.icon = 'power_cond_blue.dmi'
C.cableColor(color)
C.d1 = 0
C.d2 = dirn
C.add_fingerprint(user)
C.updateicon()
C.update_network()
var/datum/powernet/PN = new()
PN.number = powernets.len + 1
powernets += PN
C.netnum = PN.number
PN.cables += C
C.mergeConnectedNetworks(C.d2)
C.mergeConnectedNetworksOnTurf()
use(1)
if (C.shock(user, 50))
if (prob(50))
new/obj/item/weapon/cable_coil(C.loc, C.d1 ? 2 : 1, C.color)
if (prob(50)) //fail
new/obj/item/weapon/cable_coil(C.loc, 1, C.color)
del(C)
//src.laying = 1
//last = C
@@ -329,7 +336,6 @@
/obj/item/weapon/cable_coil/proc/cable_join(obj/cable/C, mob/user)
var/turf/U = user.loc
if(!isturf(U))
return
@@ -365,39 +371,30 @@
return
var/obj/cable/NC = new(U)
var/color_n = "red"
if(color)
color_n = color
NC.color = color_n
switch(color)
if("red")
NC.icon = 'power_cond_red.dmi'
if("yellow")
NC.icon = 'power_cond_yellow.dmi'
if("green")
NC.icon = 'power_cond_green.dmi'
if("blue")
NC.icon = 'power_cond_blue.dmi'
NC.cableColor(color)
NC.d1 = 0
NC.d2 = fdirn
NC.add_fingerprint()
NC.updateicon()
NC.update_network()
NC.netnum = C.netnum
var/datum/powernet/PN = powernets[C.netnum]
PN.cables += NC
NC.mergeConnectedNetworksOnTurf()
use(1)
if (NC.shock(user, 50))
if (prob(50))
new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color)
if (prob(50)) //fail
new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color)
del(NC)
return
else if(C.d1 == 0) // exisiting cable doesn't point at our position, so see if it's a stub
// if so, make it a full cable pointing from it's old direction to our dirn
var/nd1 = C.d2 // these will be the new directions
var/nd2 = dirn
if(nd1 > nd2) // swap directions to match icons/states
nd1 = dirn
nd2 = C.d2
@@ -409,49 +406,166 @@
if((LC.d1 == nd1 && LC.d2 == nd2) || (LC.d1 == nd2 && LC.d2 == nd1) ) // make sure no cable matches either direction
user << "There's already a cable at that position."
return
C.shock(user, 25)
del(C)
var/obj/cable/NC = new(T)
var/color_n = "red"
if(color)
color_n = color
NC.color = color_n
switch(color)
if("red")
NC.icon = 'power_cond_red.dmi'
if("yellow")
NC.icon = 'power_cond_yellow.dmi'
if("green")
NC.icon = 'power_cond_green.dmi'
if("blue")
NC.icon = 'power_cond_blue.dmi'
NC.d1 = nd1
NC.d2 = nd2
NC.add_fingerprint()
NC.updateicon()
NC.update_network()
C.cableColor(color)
C.d1 = nd1
C.d2 = nd2
C.add_fingerprint()
C.updateicon()
C.mergeConnectedNetworks(C.d1)
C.mergeConnectedNetworks(C.d2)
use(1)
if (NC.shock(user, 50))
if (prob(50))
new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color)
del(NC)
if (C.shock(user, 50))
if (prob(50)) //fail
new/obj/item/weapon/cable_coil(C.loc, 2, C.color)
del(C)
return
/obj/cable/proc/mergeConnectedNetworks(var/direction)
var/turf/TB
if((d1 == direction || d2 == direction) != 1)
return
TB = get_step(src, direction)
// called when a new cable is created
// can be 1 of 3 outcomes:
// 1. Isolated cable (or only connects to isolated machine) -> create new powernet
// 2. Joins to end or bridges loop of a single network (may also connect isolated machine) -> add to old network
// 3. Bridges gap between 2 networks -> merge the networks (must rebuild lists also)
for(var/obj/cable/TC in TB)
if(src == TC)
continue
var/fdir = (!direction)? 0 : turn(direction, 180)
if(TC.d1 == fdir || TC.d2 == fdir)
/obj/cable/proc/update_network()
// easy way: do /makepowernets again
makepowernets()
// do things more logically if this turns out to be too slow
// may just do this for case 3 anyway (simpler than refreshing list)
if(!netnum)
var/datum/powernet/PN = powernets[TC.netnum]
netnum = TC.netnum
PN = powernets[netnum]
PN.cables += src
continue
if(TC.netnum != netnum)
var/datum/powernet/PN = powernets[netnum]
var/datum/powernet/TPN = powernets[TC.netnum]
var/kingNetnum = netnum
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
kingNetnum = TC.netnum
var/datum/powernet/temp = PN
PN = TPN
TPN = temp
for(var/obj/cable/C in TPN.cables)
TPN.cables -= C
PN.cables += C
C.netnum = kingNetnum
for(var/obj/machinery/power/M in TPN.nodes)
if(M.netnum < 0) // APCs have netnum=-1 so they don't count as network nodes directly
continue
TPN.nodes -= M
PN.nodes += M
M.netnum = kingNetnum
M.powernet = powernets[M.netnum]
TC.netnum = kingNetnum
TPN.cables -= TC
PN.cables += TC
for(var/obj/machinery/power/M in TB)
if(!netnum)
if(!M.netnum)
continue
else
netnum = M.netnum
var/datum/powernet/PN = powernets[netnum]
PN.nodes += src
/obj/cable/proc/mergeConnectedNetworksOnTurf()
var/turf/TB
TB = loc
for(var/obj/cable/C in TB)
if(C == src)
continue
if(netnum == 0)
var/datum/powernet/PN = powernets[C.netnum]
netnum = C.netnum
PN.cables += src
continue
var/datum/powernet/PN = powernets[netnum]
var/datum/powernet/TPN = powernets[C.netnum]
var/kingNetnum = netnum
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
kingNetnum = C.netnum
var/datum/powernet/temp = PN
PN = TPN
TPN = temp
TPN.cables -= C
PN.cables += C
C.netnum = kingNetnum
for(var/obj/machinery/power/M in TB)
if(M.netnum < 0)
continue
if(M.netnum == 0)
var/datum/powernet/PN = powernets[netnum]
PN.nodes += M
M.netnum = netnum
M.powernet = powernets[M.netnum]
var/datum/powernet/PN = powernets[netnum]
var/datum/powernet/TPN = powernets[M.netnum]
var/kingNetnum = netnum
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
kingNetnum = M.netnum
var/datum/powernet/temp = PN
PN = TPN
TPN = temp
TPN.nodes -= M
PN.nodes += M
M.netnum = kingNetnum
M.powernet = powernets[M.netnum]
for(var/obj/machinery/power/apc/N in TB)
var/obj/machinery/power/M
M = N.terminal
if(M.netnum == 0)
if(netnum == 0)
continue
var/datum/powernet/PN = powernets[netnum]
PN.nodes += M
M.netnum = netnum
M.powernet = powernets[M.netnum]
continue
var/datum/powernet/PN = powernets[netnum]
var/datum/powernet/TPN = powernets[M.netnum]
var/kingNetnum = netnum
if(PN.cables.len + PN.nodes.len < TPN.cables.len + TPN.nodes.len)
kingNetnum = M.netnum
var/datum/powernet/temp = PN
PN = TPN
TPN = temp
TPN.nodes -= M
PN.nodes += M
M.netnum = kingNetnum
M.powernet = powernets[M.netnum]
obj/cable/proc/cableColor(var/colorC)
var/color_n = "red"
if(colorC)
color_n = colorC
color = color_n
switch(colorC)
if("red")
icon = 'power_cond_red.dmi'
if("yellow")
icon = 'power_cond_yellow.dmi'
if("green")
icon = 'power_cond_green.dmi'
if("blue")
icon = 'power_cond_blue.dmi'
+25 -18
View File
@@ -1,19 +1,13 @@
/obj/machinery/power/solar
var/id
var/net_set = 0
/obj/machinery/power/solar/New()
..()
spawn(10)
updateicon()
update_solar_exposure()
if(powernet)
add_avail(700)
net_set = 1
else
net_set = 0
for(var/obj/machinery/power/solar_control/SC in powernet.nodes)
if(SC.id == id)
control = SC
/obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user)
..()
@@ -45,9 +39,9 @@
overlays += image('power.dmi', icon_state = "solar_panel-b", layer = FLY_LAYER)
else
overlays += image('power.dmi', icon_state = "solar_panel", layer = FLY_LAYER)
src.dir = angle2dir(adir)
return
/*
/obj/machinery/power/solar/proc/update_solar_exposure()
if(!sun)
return
@@ -64,22 +58,31 @@
#define SOLARGENRATE 1500
*/
/obj/machinery/power/solar/process()
if(stat & BROKEN)
return
add_avail(700)
//return //TODO: FIX
if(!obscured)
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)
spawn(10+rand(0,15))
adir = (360+adir+dd_range(-10,10,ndir-adir))%360
updateicon()
update_solar_exposure()
/obj/machinery/power/solar/proc/broken()
stat |= BROKEN
updateicon()
return
/obj/machinery/power/solar/meteorhit()
if(stat & !BROKEN)
broken()
@@ -90,14 +93,19 @@
switch(severity)
if(1.0)
del(src)
if(prob(15))
new /obj/item/weapon/shard( src.loc )
return
if(2.0)
if (prob(25))
new /obj/item/weapon/shard( src.loc )
del(src)
return
if (prob(50))
broken()
if(3.0)
return
if (prob(25))
broken()
return
/obj/machinery/power/solar/blob_act()
@@ -110,7 +118,7 @@
/*
/obj/machinery/power/solar_control/New()
..()
spawn(15)
@@ -323,4 +331,3 @@
if (prob(75))
broken()
src.density = 0
*/
+1 -9
View File
@@ -3,8 +3,6 @@
//Machine that tracks the sun and reports it's direction to the solar controllers
//As long as this is working, solar panels on same powernet will track automatically
/obj/machinery/power/tracker
name = "solar tracker"
desc = "A solar directional tracker."
@@ -17,8 +15,6 @@
var/sun_angle = 0 // sun angle as set by sun datum
/*
// called by datum/sun/calc_position() as sun's angle changes
proc/set_angle(var/angle)
sun_angle = angle
@@ -38,8 +34,6 @@
C.tracker_update(angle)
// timed process
// make sure we can draw power from the powernet
process()
@@ -53,6 +47,4 @@
// override power change to do nothing since we don't care about area power
power_change()
return
*/
return