Made full-tile windows meld together like walls

This commit is contained in:
Chinski
2012-02-29 23:29:41 +04:00
parent e1caabdec2
commit a9e3e2d431
2 changed files with 46 additions and 1 deletions
+46 -1
View File
@@ -170,10 +170,22 @@
usr << ( state==1? "You have unfastened the window from the frame." : "You have fastened the window to the frame." )
else if(reinf && state == 0)
anchored = !anchored
for(var/obj/structure/window/w in range(src,1))
if (w.anchored)
w.relativewindow()
src.relativewindow()
playsound(src.loc, 'Screwdriver.ogg', 75, 1)
user << (src.anchored ? "You have fastened the frame to the floor." : "You have unfastened the frame from the floor.")
else if(!reinf)
src.anchored = !( src.anchored )
for(var/obj/structure/window/w in range(src,1))
if (w.anchored)
w.relativewindow()
src.relativewindow()
playsound(src.loc, 'Screwdriver.ogg', 75, 1)
user << (src.anchored ? "You have fastened the window to the floor." : "You have unfastened the window.")
else if(istype(W, /obj/item/weapon/crowbar) && reinf && state <=1)
@@ -187,6 +199,12 @@
playsound(src.loc, 'Glasshit.ogg', 75, 1)
if (src.health <= 7)
src.anchored = 0
for(var/obj/structure/window/w in range(src,1))
if (w.anchored)
w.relativewindow()
src.relativewindow()
step(src, get_dir(user, src))
if (src.health <= 0)
if (src.dir == SOUTHWEST)
@@ -282,6 +300,8 @@
density = 0
update_nearby_tiles()
for(var/obj/structure/window/w in range(src,1))
w.relativewindow()
playsound(src, "shatter", 70, 1)
..()
@@ -317,4 +337,29 @@
if(istype(source)) air_master.tiles_to_update += source
if(istype(target)) air_master.tiles_to_update += target
return 1
return 1
//checks if this window is full-tile one
/obj/structure/window/proc/is_fulltile()
return (src.dir == SOUTHWEST || src.dir == SOUTHEAST || src.dir == NORTHWEST || src.dir == NORTHEAST)
//merges adjacent full-tile windows into one (blatant ripoff from game/smoothwall.dm)
/obj/structure/window/proc/relativewindow()
//A little cludge here, since I don't know how it will work with slim windows. Most likely VERY wrong.
//this way it will only update full-tile ones
if (!is_fulltile())
return
var/junction = 0 //will be used to determine from which side the window is connected to other windows
if (src.anchored)
for(var/obj/structure/window/W in orange(src,1))
if (W.anchored && W.density && W.is_fulltile()) //Only counts anchored, not-destroyed fill-tile windows.
if (abs(src.x-W.x)-abs(src.y-W.y) ) //doesn't count windows, placed diagonally to src
junction |= get_dir(src,W)
if (istype(src,/obj/structure/window/basic))
src.icon_state = "window[junction]"
// else if (istype(src,/obj/structure/window/reinforced)) No sprites yet.
// src.icon_state = "rwindow[junction]"
return