wow lotsa effort huh

This commit is contained in:
kevinz000
2020-04-26 03:29:31 -07:00
parent 8fc661ba14
commit af3651172c
8 changed files with 241 additions and 13 deletions
+4 -5
View File
@@ -726,13 +726,12 @@
to_chat(usr, "<span class='warning'>A color that dark on an object like this? Surely not...</span>")
return FALSE
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
if(istype(target, /obj/structure/window))
if(color_hex2num(paint_color) < 255)
target.set_opacity(255)
else
target.set_opacity(initial(target.opacity))
var/obj/structure/window/W = target
W.spraycan_paint(paint_color)
else
target.add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
. = use_charges(user, 2)
var/fraction = min(1, . / reagents.maximum_volume)
@@ -0,0 +1,15 @@
/obj/item/electronics/electrochromatic_kit
name = "electrochromatic kit"
desc = "A kit for upgrading a window into an electrochromatic one."
icon = 'icons/obj/device.dmi'
/// Electrochromatic ID
var/id
/obj/item/electronics/electrochromatic_kit/attack_self(mob/user)
. = ..()
if(.)
return
var/new_id = input(user, "Set this kit's electrochromatic ID", "Set ID", id) as text|null
if(isnull(new_id))
return
id = new_id
+138 -3
View File
@@ -1,3 +1,19 @@
#define NOT_ELECTROCHROMATIC 0
#define ELECTROCHROMATIC_OFF 1
#define ELECTROCHROMATIC_DIMMED 2
GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
/proc/do_electrochromatic_toggle(new_status, id)
var/list/windows = GLOB.electrochromatic_window_lookup["[id]"]
if(!windows)
return
var/obj/structure/window/W = i
for(var/i in windows)
W = i
new_status? W.electrochromatic_dim() : W.electrochromatic_off()
/obj/structure/window
name = "window"
desc = "A window."
@@ -28,8 +44,15 @@
rad_insulation = RAD_VERY_LIGHT_INSULATION
rad_flags = RAD_PROTECT_CONTENTS
/// Electrochromatic status
var/electrochromatic_status = NOT_ELECTROCHROMATIC
/// Electrochromatic ID. Set the first character to ! to replace with a SSmapping generated pseudorandom obfuscated ID for mapping purposes.
var/electrochromatic_id
/obj/structure/window/examine(mob/user)
. = ..()
if(electrochromatic_status != NOT_ELECTROCHROMATIC)
. += "<span class='notice'>The window has electrochromatic circuitry on it.</span>")
if(reinf)
if(anchored && state == WINDOW_SCREWED_TO_FRAME)
. += "<span class='notice'>The window is <b>screwed</b> to the frame.</span>"
@@ -52,6 +75,10 @@
if(reinf && anchored)
state = WINDOW_SCREWED_TO_FRAME
if(mapload && electrochromatic_id)
if(copytext(electrochromatic_id, 1, 2) == "!")
electrochromatic_id = SSmapping.get_obfuscated_id(electrochromatic_id)
ini_dir = dir
air_update_turf(1)
@@ -62,6 +89,12 @@
real_explosion_block = explosion_block
explosion_block = EXPLOSION_BLOCK_PROC
if(electrochromatic_status != NOT_ELECTROCHROMATIC)
var/old = electrochromatic_status
make_electrochromatic()
if(old == ELECTROCHROMATIC_DIMMED)
electrochromatic_dim()
/obj/structure/window/ComponentInitialize()
. = ..()
AddComponent(/datum/component/simple_rotation,ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS ,null,CALLBACK(src, .proc/can_be_rotated),CALLBACK(src,.proc/after_rotation))
@@ -177,6 +210,24 @@
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
return
if(!anchored && istype(I, /obj/item/electronics/electrochromatic_kit && user.a_intent == INTENT_HELP)
var/obj/item/electronics/electrochromatic_kit/K = I
if(!user.temporarilyRemoveItemFromInventory(K))
to_chat(user, "<span class='warning'>[K] is stuck to your hand!</span>")
return
if(is_electrochromatic)
to_chat(user, "<span class='warning'>[src] is already electrochromatic!</span>")
return
if(!anchored)
to_chat(user, "<span class='warning'>[src] must not be attached to the floor!</span>")
return
if(!K.id)
to_chat(user, "<span class='warning'>[K] has no ID set!</span>")
return
user.visible_message("<span class='notice'>[user] upgrades [src] with [I].</span>", "<span class='notice'>You upgrade [src] with [I].</span>")
make_electrochromatic(K.id)
qdel(K)
if(!(flags_1&NODECONSTRUCT_1))
if(istype(I, /obj/item/screwdriver))
I.play_tool_sound(src, 75)
@@ -224,6 +275,85 @@
air_update_turf(TRUE)
update_nearby_icons()
/obj/structure/window/proc/spraycan_paint(paint_color)
if(color_hex2num(paint_color) < 255)
set_opacity(255)
else
set_opacity(initial(opacity))
add_atom_colour(paint_color, WASHABLE_COLOUR_PRIORITY)
/obj/structure/window/proc/electrochromatic_dim()
if(electrochromatic_status == ELECTROCHROMATIC_DIMMED)
return
electrochromatic_status = ELECTROCHROMATIC_DIMMED
animate(src, color = "#222222", time = 2)
set_opacity(TRUE)
/obj/structure/window/proc/electrochromatic_off()
if(electrochromatic_status == ELECTROCHROMATIC_OFF)
return
electrochromatic_on = FALSE
var/current = color
update_atom_colour()
var/newcolor = color
color = current
animate(src, color = newcolor, time = 2)
/obj/structure/window/proc/remove_electrochromatic()
electrochromatic_status = NOT_ELECTROCHROMATIC
if(!electrochromatic_id)
return
var/list/L = GLOB.electrochromatic_window_lookup["[electrochromatic_id]"]
if(L)
L -= src
electrochromatic_id = null
/obj/structure/window/vv_edit_var(var_name, var_value)
var/old_id
var/check_status
if(var_name == NAMEOF(src, electrochromatic_id))
if((electrochromatic_status != NOT_ELECTROCHROMATIC) && electrochromatic_id)
old_id = electrochromatic_id
if(var_name == NAMEOF(src, electrochromatic_status))
check_status = TRUE
. = ..() //do this first incase it runtimes.
if(check_status)
if(electrochromatic_status == NOT_ELECTROCHROMATIC)
remove_electrochromatic()
return
else if(electrochromatic_status == ELECTROCHROMATIC_OFF)
if(!electrochromatic_id)
return
else
make_electrochromatic()
electrochromatic_off()
return
else if(electrochromatic_status == ELECTROCHROMATIC_DIMMED)
if(!electrochromatic_id)
return
else
make_electrochromatic()
electrochromatic_dim()
return
else
remove_electrochromatic()
if(old_id)
GLOB.electrochromatic_window_lookup[old_id] -= src
if(electrochromatic_id)
GLOB.electrochromatic_window_lookup[electrochromatic_id] += src
/obj/structure/window/proc/make_electrochromatic(new_id)
remove_electrochromatic()
electrochromatic_id = new_id
electrochromatic_status = ELECTROCHROMATIC_OFF
LAZYINITLIST(GLOB.electrochromatic_window_lookup["[electrochromatic_id]")
GLOB.electrochromatic_window_lookup[electrochromatic_id] |= src
/obj/structure/window/update_atom_colour()
if((electrochromatic_status != ELECTROCHROMATIC_OFF) && (electrochromatic_status != ELECTROCHROMATIC_DIMMED))
return FALSE
return ..()
/obj/structure/window/proc/check_state(checked_state)
if(state == checked_state)
return TRUE
@@ -263,7 +393,6 @@
if(BURN)
playsound(src, 'sound/items/Welder.ogg', 100, 1)
/obj/structure/window/deconstruct(disassembled = TRUE)
if(QDELETED(src))
return
@@ -272,6 +401,9 @@
if(!(flags_1 & NODECONSTRUCT_1))
for(var/obj/item/shard/debris in spawnDebris(drop_location()))
transfer_fingerprints_to(debris) // transfer fingerprints to shards only
if(electrochromatic_status != NOT_ELECTROCHROMATIC) //eh fine keep your kit.
new /obj/item/electrochromatic_kit/K(drop_location())
// Intentionally not setting the ID so you can't decon one to know all of the IDs.
qdel(src)
update_nearby_icons()
@@ -315,9 +447,9 @@
density = FALSE
air_update_turf(1)
update_nearby_icons()
remove_electrochromatic()
return ..()
/obj/structure/window/Move()
var/turf/T = loc
. = ..()
@@ -731,7 +863,6 @@
set_opacity(TRUE)
queue_smooth(src)
/obj/structure/window/paperframe/attackby(obj/item/W, mob/user)
if(W.get_temperature())
fire_act(W.get_temperature())
@@ -749,3 +880,7 @@
return
..()
update_icon()
#undef NOT_ELECTROCHROMATIC
#undef ELECTROCHROMATIC_OFF
#undef ELECTROCHROMATIC_DIMMED