From 77737581c129864291bf54371af2c36b1c096715 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Sat, 28 Aug 2021 15:11:07 +0100 Subject: [PATCH 1/7] Fancy windows? I think so good sir! --- .../mountable_frames/buttons_switches.dm | 8 +++ .../game/objects/items/stacks/sheets/glass.dm | 5 +- .../items/stacks/sheets/sheet_types.dm | 1 + code/game/objects/structures/window.dm | 52 +++++++++++++++++-- 4 files changed, 60 insertions(+), 6 deletions(-) diff --git a/code/game/objects/items/mountable_frames/buttons_switches.dm b/code/game/objects/items/mountable_frames/buttons_switches.dm index 76e4f0ecfd4..30b77ea2f33 100644 --- a/code/game/objects/items/mountable_frames/buttons_switches.dm +++ b/code/game/objects/items/mountable_frames/buttons_switches.dm @@ -21,3 +21,11 @@ /obj/item/mounted/frame/light_switch/do_build(turf/on_wall, mob/user) new /obj/machinery/light_switch(get_turf(user), get_dir(user, on_wall)) qdel(src) + +/obj/item/mounted/frame/light_switch/windowtint + name = "window tint control button frame" + desc = "Used for repairing or building window tint control buttons" + +/obj/item/mounted/frame/light_switch/windowtint/do_build(turf/on_wall, mob/user) + new /obj/machinery/button/windowtint(get_turf(user), get_dir(user, on_wall)) + qdel(src) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index c9901c8b0fe..1f8ae46083e 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -89,7 +89,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ new/datum/stack_recipe/window("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \ null, \ new/datum/stack_recipe/window("directional reinforced window", /obj/structure/window/reinforced, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ + new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + null, \ + new/datum/stack_recipe/window("directional electrochromic window", /obj/structure/window/reinforced/polarized, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe/window("fulltile electrochromic window", /obj/structure/window/full/reinforced/polarized, 4, time = 0, on_floor = TRUE, window_checks = TRUE) \ )) /obj/item/stack/sheet/rglass diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 92e2c4115fe..6bf4bc8051d 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -83,6 +83,7 @@ GLOBAL_LIST_INIT(metal_recipes, list( null, new /datum/stack_recipe("mass driver button frame", /obj/item/mounted/frame/driver_button, 1, time = 50, one_per_turf = 0, on_floor = 1), new /datum/stack_recipe("light switch frame", /obj/item/mounted/frame/light_switch, 1, time = 50, one_per_turf = 0, on_floor = 1), + new /datum/stack_recipe("window tint control button frame", /obj/item/mounted/frame/light_switch/windowtint, 1, time = 50, one_per_turf = 0, on_floor = 1), null, new /datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade), new /datum/stack_recipe("light fixture frame", /obj/item/mounted/frame/light_fixture, 2), diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a2d13ad8afb..54d617ca3e4 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -514,12 +514,35 @@ var/id = 0 var/active = 0 +/obj/machinery/button/windowtint/New(turf/loc, w_dir=null) + ..() + switch(w_dir) + if(NORTH) + pixel_y = 25 + if(SOUTH) + pixel_y = -25 + if(EAST) + pixel_x = 25 + if(WEST) + pixel_x = -25 + /obj/machinery/button/windowtint/attack_hand(mob/user) if(..()) - return 1 + return TRUE toggle_tint() +/obj/machinery/button/windowtint/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/wrench)) + playsound(get_turf(src), W.usesound, 50, 1) + if(do_after(user, 30 * W.toolspeed, target = src)) + to_chat(user, "You detach \the [src] from the wall.") + new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) + qdel(src) + return TRUE + + return ..() + /obj/machinery/button/windowtint/proc/toggle_tint() use_power(5) @@ -532,6 +555,12 @@ W.toggle() return + for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range)) + if(W.id == src.id || !W.id) + spawn(0) + W.toggle() + return + /obj/machinery/button/windowtint/power_change() ..() if(active && !powered(power_channel)) @@ -589,7 +618,7 @@ icon_state = "window" max_integrity = 50 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) /obj/structure/window/full/plasmabasic name = "plasma window" @@ -602,7 +631,7 @@ heat_resistance = 32000 max_integrity = 300 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) explosion_block = 1 armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) rad_insulation = RAD_NO_INSULATION @@ -616,7 +645,7 @@ shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmarglass smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) reinf = TRUE max_integrity = 1000 explosion_block = 2 @@ -632,7 +661,7 @@ icon = 'icons/obj/smooth_structures/reinforced_window.dmi' icon_state = "r_window" smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) max_integrity = 100 reinf = TRUE heat_resistance = 1600 @@ -641,6 +670,19 @@ explosion_block = 1 glass_type = /obj/item/stack/sheet/rglass +/obj/structure/window/full/reinforced/polarized + name = "electrochromic window" + desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." + var/id + +/obj/structure/window/full/reinforced/polarized/proc/toggle() + if(opacity) + animate(src, color="#FFFFFF", time=5) + set_opacity(0) + else + animate(src, color="#222222", time=5) + set_opacity(1) + /obj/structure/window/full/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." From 523c7786b29e0eb9cb298e33864a11a802a83768 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Sat, 28 Aug 2021 15:17:31 +0100 Subject: [PATCH 2/7] spawner --- code/game/objects/effects/spawners/windowspawner.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/game/objects/effects/spawners/windowspawner.dm b/code/game/objects/effects/spawners/windowspawner.dm index 1d498888588..20f43f6eea2 100644 --- a/code/game/objects/effects/spawners/windowspawner.dm +++ b/code/game/objects/effects/spawners/windowspawner.dm @@ -59,6 +59,12 @@ window_to_spawn_regular = /obj/structure/window/reinforced/tinted window_to_spawn_full = /obj/structure/window/full/reinforced/tinted +/obj/effect/spawner/window/reinforced/polarized + name = "electrochromic reinforced window spawner" + icon_state = "pwindow_spawner" + window_to_spawn_regular = /obj/structure/window/reinforced/polarized + window_to_spawn_full = /obj/structure/window/full/reinforced/polarized + /obj/effect/spawner/window/shuttle name = "shuttle window spawner" icon_state = "swindow_spawner" From 89b7b016a1686e8d087625dd12ed4a2fc3064524 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Sat, 28 Aug 2021 15:28:17 +0100 Subject: [PATCH 3/7] ahem, you saw nothing --- code/game/objects/structures/window.dm | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 54d617ca3e4..535fb190c2c 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -551,15 +551,11 @@ for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) - spawn(0) - W.toggle() - return + W.toggle() for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) - spawn(0) - W.toggle() - return + W.toggle() /obj/machinery/button/windowtint/power_change() ..() From 68c90f791c9ed96ab5eea37dd13b98c34e2b5f79 Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Sat, 28 Aug 2021 16:09:08 +0100 Subject: [PATCH 4/7] steel review --- code/game/objects/structures/window.dm | 54 +++++++++++--------------- 1 file changed, 23 insertions(+), 31 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 535fb190c2c..c9c594e3dcc 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -69,6 +69,14 @@ air_update_turf(TRUE) +/obj/structure/window/proc/toggle_polarization() + if(opacity) + animate(src, color="#FFFFFF", time=5) + set_opacity(0) + else + animate(src, color="#222222", time=5) + set_opacity(1) + /obj/structure/window/narsie_act() color = NARSIE_WINDOW_COLOUR @@ -497,14 +505,6 @@ desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." var/id -/obj/structure/window/reinforced/polarized/proc/toggle() - if(opacity) - animate(src, color="#FFFFFF", time=5) - set_opacity(0) - else - animate(src, color="#222222", time=5) - set_opacity(1) - /obj/machinery/button/windowtint name = "window tint control" icon = 'icons/obj/power.dmi' @@ -514,8 +514,8 @@ var/id = 0 var/active = 0 -/obj/machinery/button/windowtint/New(turf/loc, w_dir=null) - ..() +/obj/machinery/button/windowtint/Initialize(mapload, w_dir=null) + . = ..() switch(w_dir) if(NORTH) pixel_y = 25 @@ -532,16 +532,17 @@ toggle_tint() -/obj/machinery/button/windowtint/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/wrench)) - playsound(get_turf(src), W.usesound, 50, 1) - if(do_after(user, 30 * W.toolspeed, target = src)) - to_chat(user, "You detach \the [src] from the wall.") - new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) - qdel(src) - return TRUE - - return ..() +/obj/machinery/button/windowtint/wrench_act(mob/user, obj/item/I) + . = TRUE + if(!I.tool_use_check(user, 0)) + return + user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.") + . = TRUE + if(!I.use_tool(src, user, 50, volume = I.tool_volume)) + return + WRENCH_UNANCHOR_WALL_MESSAGE + new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) + qdel(src) /obj/machinery/button/windowtint/proc/toggle_tint() use_power(5) @@ -551,11 +552,11 @@ for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) - W.toggle() + W.toggle_polarization() for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) - W.toggle() + W.toggle_polarization() /obj/machinery/button/windowtint/power_change() ..() @@ -670,15 +671,6 @@ name = "electrochromic window" desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." var/id - -/obj/structure/window/full/reinforced/polarized/proc/toggle() - if(opacity) - animate(src, color="#FFFFFF", time=5) - set_opacity(0) - else - animate(src, color="#222222", time=5) - set_opacity(1) - /obj/structure/window/full/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." From 267e3d2967d4e51e222a533332dae8d9c2e9a34e Mon Sep 17 00:00:00 2001 From: S34N <12197162+S34NW@users.noreply.github.com> Date: Mon, 30 Aug 2021 13:20:12 +0100 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: dearmochi <1496804+dearmochi@users.noreply.github.com> --- code/game/objects/structures/window.dm | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c9c594e3dcc..e8d38a64d3d 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -71,11 +71,11 @@ /obj/structure/window/proc/toggle_polarization() if(opacity) - animate(src, color="#FFFFFF", time=5) - set_opacity(0) + animate(src, color = "#FFFFFF", time = 0.5 SECONDS) + set_opacity(FALSE) else - animate(src, color="#222222", time=5) - set_opacity(1) + animate(src, color = "#222222", time = 0.5 SECONDS) + set_opacity(TRUE) /obj/structure/window/narsie_act() color = NARSIE_WINDOW_COLOUR @@ -514,7 +514,7 @@ var/id = 0 var/active = 0 -/obj/machinery/button/windowtint/Initialize(mapload, w_dir=null) +/obj/machinery/button/windowtint/Initialize(mapload, w_dir = null) . = ..() switch(w_dir) if(NORTH) @@ -537,7 +537,6 @@ if(!I.tool_use_check(user, 0)) return user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.") - . = TRUE if(!I.use_tool(src, user, 50, volume = I.tool_volume)) return WRENCH_UNANCHOR_WALL_MESSAGE @@ -554,7 +553,7 @@ if(W.id == src.id || !W.id) W.toggle_polarization() - for(var/obj/structure/window/full/reinforced/polarized/W in range(src,range)) + for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range)) if(W.id == src.id || !W.id) W.toggle_polarization() From a6a79dca1e6d59ecb8854c919d9212eaa2c73b8b Mon Sep 17 00:00:00 2001 From: S34NW <12197162+S34NW@users.noreply.github.com> Date: Mon, 30 Aug 2021 15:56:04 +0100 Subject: [PATCH 6/7] windows remember their old colours --- code/game/objects/structures/window.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index e8d38a64d3d..c3c23b4296e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -27,6 +27,8 @@ var/real_explosion_block //ignore this, just use explosion_block var/breaksound = "shatter" var/hitsound = 'sound/effects/Glasshit.ogg' + /// Used to restore colours from polarised glass + var/old_color /obj/structure/window/examine(mob/user) . = ..() @@ -71,9 +73,12 @@ /obj/structure/window/proc/toggle_polarization() if(opacity) - animate(src, color = "#FFFFFF", time = 0.5 SECONDS) + if(!old_color) + old_color = "#FFFFFF" + animate(src, color = old_color, time = 0.5 SECONDS) set_opacity(FALSE) else + old_color = color animate(src, color = "#222222", time = 0.5 SECONDS) set_opacity(TRUE) From 3defd460379afabf8ba0862b2fd87fc10fac3585 Mon Sep 17 00:00:00 2001 From: S34N <12197162+S34NW@users.noreply.github.com> Date: Wed, 1 Sep 2021 19:31:20 +0100 Subject: [PATCH 7/7] Apply suggestions from code review Co-authored-by: SteelSlayer <42044220+SteelSlayer@users.noreply.github.com> --- code/game/objects/structures/window.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index c3c23b4296e..7872c395d1e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -545,7 +545,7 @@ if(!I.use_tool(src, user, 50, volume = I.tool_volume)) return WRENCH_UNANCHOR_WALL_MESSAGE - new/obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) + new /obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) qdel(src) /obj/machinery/button/windowtint/proc/toggle_tint() @@ -559,7 +559,7 @@ W.toggle_polarization() for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range)) - if(W.id == src.id || !W.id) + if(W.id == id || !W.id) W.toggle_polarization() /obj/machinery/button/windowtint/power_change() @@ -675,6 +675,7 @@ name = "electrochromic window" desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." var/id + /obj/structure/window/full/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."