From 809ba1710df8112f9087e9ac35fbbb415ae7c1f6 Mon Sep 17 00:00:00 2001 From: "baloh.matevz" Date: Thu, 21 Jul 2011 02:58:03 +0000 Subject: [PATCH] Solars fix. Needs the powernet fix to actually work properly. - Solars now bring out a fixed value. 700W each, meaning 60 of them (one array) generates 42000W. Not enough to power the station? That's the point. Although 4 x 42000W = 168000. This might be nerfed soon. - Sun removed. Seriously, that thing ate up processor time and was completely useless. - Solar tracker remains on the map but is completely useless. Will remove. - Also reverted the cable updates from r1729. The code from prior to that revision might be as laggy as it was, but it works properly. After the revision powernets didn't calculate available power properly and did not update properly when new pieces were made (They stopped updating at the first wire piece which ended in a knot (non-smooth cable piece)) git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1897 316c924e-a436-60f5-8080-3fe189b3f50e --- code/datums/sun.dm | 3 + code/defines/obj/machinery.dm | 7 - code/game/master_controller.dm | 2 +- code/modules/admin/verbs/debug.dm | 12 ++ code/modules/power/cable.dm | 286 +++++++++--------------------- code/modules/power/solar.dm | 43 ++--- code/modules/power/tracker.dm | 10 +- 7 files changed, 129 insertions(+), 234 deletions(-) diff --git a/code/datums/sun.dm b/code/datums/sun.dm index c69369912c6..81e6a720600 100644 --- a/code/datums/sun.dm +++ b/code/datums/sun.dm @@ -1,3 +1,5 @@ +/* + /datum/sun var/angle var/dx @@ -71,6 +73,7 @@ S.obscured = 0 // if hit the edge or stepped 20 times, not obscured S.update_solar_exposure() +*/ //returns the north-zero clockwise angle in degrees, given a direction diff --git a/code/defines/obj/machinery.dm b/code/defines/obj/machinery.dm index 4fa0a665a04..cc08bced985 100644 --- a/code/defines/obj/machinery.dm +++ b/code/defines/obj/machinery.dm @@ -515,13 +515,6 @@ density = 1 directwired = 1 var/health = 10.0 - var/id = 1 - var/obscured = 0 - var/sunfrac = 0 - var/adir = SOUTH - var/ndir = SOUTH - var/turn_angle = 0 - var/obj/machinery/power/solar_control/control use_power = 0 idle_power_usage = 0 active_power_usage = 0 diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm index 884a1de5dca..78632e4a624 100644 --- a/code/game/master_controller.dm +++ b/code/game/master_controller.dm @@ -79,7 +79,7 @@ datum/controller/game_controller sleep(1) - sun.calc_position() + //sun.calc_position() sleep(-1) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e18fc9d0f21..45f23b5e26f 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -358,6 +358,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that //log_admin("[key_name(src)] has alienized [M.key].") var/list/dresspacks = list( "strip", + "standard space gear", "tournament standard red", "tournament standard green", "tournament gangster", @@ -387,6 +388,17 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that switch(dresscode) if ("strip") //do nothing + if ("standard space gear") + M.equip_if_possible(new /obj/item/clothing/shoes/black(M), M.slot_shoes) + + M.equip_if_possible(new /obj/item/clothing/under/color/grey(M), M.slot_w_uniform) + M.equip_if_possible(new /obj/item/clothing/suit/space(M), M.slot_wear_suit) + M.equip_if_possible(new /obj/item/clothing/head/helmet/space(M), M.slot_head) + var /obj/item/weapon/tank/jetpack/J = new /obj/item/weapon/tank/jetpack(M) + M.equip_if_possible(J, M.slot_back) + J.toggle() + M.equip_if_possible(new /obj/item/clothing/mask/breath(M), M.slot_wear_mask) + J.Topic(null, list("stat" = 1)) if ("tournament standard red","tournament standard green") //we think stunning weapon is too overpowered to use it on tournaments. --rastaf0 if (dresscode=="tournament standard red") M.equip_if_possible(new /obj/item/clothing/under/color/red(M), M.slot_w_uniform) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index b8cd243ae78..ccb92baf469 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -26,37 +26,26 @@ var/obj/cable/NC = new(T) - NC.cableColor(coil.color) + 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.d1 = 0 NC.d2 = dirn NC.add_fingerprint() NC.updateicon() - - 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() - + NC.update_network() 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 ..() @@ -145,6 +134,8 @@ 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) @@ -306,27 +297,29 @@ var/obj/cable/C = new(F) - C.cableColor(color) + 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.d1 = 0 C.d2 = dirn C.add_fingerprint(user) C.updateicon() - - 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() - - + C.update_network() use(1) if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(C.loc, 1, C.color) + if (prob(50)) + new/obj/item/weapon/cable_coil(C.loc, C.d1 ? 2 : 1, C.color) del(C) //src.laying = 1 //last = C @@ -336,6 +329,7 @@ /obj/item/weapon/cable_coil/proc/cable_join(obj/cable/C, mob/user) + var/turf/U = user.loc if(!isturf(U)) return @@ -371,30 +365,39 @@ return var/obj/cable/NC = new(U) - NC.cableColor(color) + + 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 = 0 NC.d2 = fdirn NC.add_fingerprint() NC.updateicon() - - NC.netnum = C.netnum - var/datum/powernet/PN = powernets[C.netnum] - PN.cables += NC - NC.mergeConnectedNetworksOnTurf() + NC.update_network() use(1) if (NC.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(NC.loc, 1, NC.color) + if (prob(50)) + new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 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 @@ -406,166 +409,49 @@ 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' - C.cableColor(color) - - C.d1 = nd1 - C.d2 = nd2 - - C.add_fingerprint() - C.updateicon() - - - C.mergeConnectedNetworks(C.d1) - C.mergeConnectedNetworks(C.d2) + NC.d1 = nd1 + NC.d2 = nd2 + NC.add_fingerprint() + NC.updateicon() + NC.update_network() use(1) - if (C.shock(user, 50)) - if (prob(50)) //fail - new/obj/item/weapon/cable_coil(C.loc, 2, C.color) - del(C) + if (NC.shock(user, 50)) + if (prob(50)) + new/obj/item/weapon/cable_coil(NC.loc, NC.d1 ? 2 : 1, NC.color) + del(NC) return -/obj/cable/proc/mergeConnectedNetworks(var/direction) - var/turf/TB - if((d1 == direction || d2 == direction) != 1) - return - TB = get_step(src, direction) - for(var/obj/cable/TC in TB) - if(src == TC) - continue +// 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) - var/fdir = (!direction)? 0 : turn(direction, 180) - if(TC.d1 == fdir || TC.d2 == fdir) - 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' \ No newline at end of file +/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) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 0a121e65281..38058a2b70c 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -1,13 +1,19 @@ +/obj/machinery/power/solar + var/id + var/net_set = 0 + /obj/machinery/power/solar/New() ..() spawn(10) updateicon() - update_solar_exposure() if(powernet) - for(var/obj/machinery/power/solar_control/SC in powernet.nodes) - if(SC.id == id) - control = SC + add_avail(700) + net_set = 1 + else + net_set = 0 + + /obj/machinery/power/solar/attackby(obj/item/weapon/W, mob/user) ..() @@ -39,9 +45,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 @@ -58,31 +64,22 @@ #define SOLARGENRATE 1500 +*/ + /obj/machinery/power/solar/process() if(stat & BROKEN) return - //return //TODO: FIX + add_avail(700) - 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() @@ -93,19 +90,14 @@ 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) - if (prob(25)) - broken() + return return /obj/machinery/power/solar/blob_act() @@ -118,7 +110,7 @@ - +/* /obj/machinery/power/solar_control/New() ..() spawn(15) @@ -331,3 +323,4 @@ if (prob(75)) broken() src.density = 0 +*/ \ No newline at end of file diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm index 9fc73c98b35..d452fe0cdd5 100644 --- a/code/modules/power/tracker.dm +++ b/code/modules/power/tracker.dm @@ -3,6 +3,8 @@ //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." @@ -15,6 +17,8 @@ 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 @@ -34,6 +38,8 @@ C.tracker_update(angle) + + // timed process // make sure we can draw power from the powernet process() @@ -47,4 +53,6 @@ // override power change to do nothing since we don't care about area power power_change() - return \ No newline at end of file + return + +*/ \ No newline at end of file