Files
vgstation13/code/modules/power/switch.dm
baloh.matevz c12a1b4206 Added the caution code, sprited by magicbones, not present anywhere on the map
http://nanotrasen.com/phpBB3/viewtopic.php?f=10&t=4548&start=50#p37266

Added a power switch (/obj/structure/powerswitch), which is used to split or connect two cables.

The way it works is simple. It connects the powernets by adding cable on the floor it's on and removing it when it's turned off.

In-file description:
//This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it.
//After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed
//with wirecutters. When the switch is turned off it removes all the cables on the tile it's on.
//The switch uses a 5s delay to prevent powernet change spamming.

Screenshot:
http://www.kamletos.si/power%20switch.PNG

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@3072 316c924e-a436-60f5-8080-3fe189b3f50e
2012-02-09 21:11:20 +00:00

84 lines
2.4 KiB
Plaintext

//This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it.
//After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed
//with wirecutters. When the switch is turned off it removes all the cables on the tile it's on.
//The switch uses a 5s delay to prevent powernet change spamming.
/obj/structure/powerswitch
name = "power switch"
desc = "A switch that controls power."
icon = 'power.dmi'
icon_state = "switch-dbl-up"
var/icon_state_on = "switch-dbl-down"
var/icon_state_off = "switch-dbl-up"
flags = FPRINT
density = 0
anchored = 1
var/on = 0 //up is off, down is on
var/busy = 0 //set to 1 when you start pulling
simple
icon_state = "switch-up"
icon_state_on = "switch-down"
icon_state_off = "switch-up"
examine()
..()
if(on)
usr << "The switch is in the on position"
else
usr << "The switch is in the off position"
attack_ai(mob/user)
user << "\red You're an AI. This is a manual switch. It's not going to work."
return
attack_hand(mob/user)
if(busy)
user << "\red This switch is already being toggled."
return
..()
busy = 1
for(var/mob/O in viewers(user))
O.show_message(text("\red [user] started pulling the [src]."), 1)
if(do_after(user, 50))
set_state(!on)
for(var/mob/O in viewers(user))
O.show_message(text("\red [user] flipped the [src] into the [on ? "on": "off"] position."), 1)
busy = 0
proc/set_state(var/state)
on = state
if(on)
icon_state = icon_state_on
var/list/connection_dirs = list()
for(var/direction in list(1,2,4,8,5,6,9,10))
for(var/obj/structure/cable/C in get_step(src,direction))
if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180))
connection_dirs += direction
break
for(var/direction in connection_dirs)
var/obj/structure/cable/C = new/obj/structure/cable(src.loc)
C.d1 = 0
C.d2 = direction
C.icon_state = "[C.d1]-[C.d2]"
C.power_switch = src
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()
else
icon_state = icon_state_off
for(var/obj/structure/cable/C in src.loc)
del(C)