(Many) Emissive Lights Now Glow (#8952)

This commit is contained in:
MarinaGryphon
2020-05-31 06:05:35 -05:00
committed by GitHub
parent cf0b762246
commit dd09d18744
14 changed files with 164 additions and 60 deletions

View File

@@ -41,9 +41,17 @@
target.add_overlay(list(multiply, overlay))
/proc/make_screen_overlay(icon, icon_state, brightness_factor = null)
/proc/make_screen_overlay(icon, icon_state, brightness_factor = null, glow_radius = 1)
var/icon/base = new(icon, icon_state) // forgive us, but this is to get the width/height.
var/height = base.Height() // at least this is cached in most use cases
var/width = base.Width()
var/image/overlay = image(icon, icon_state)
overlay.layer = EFFECTS_ABOVE_LIGHTING_LAYER
var/image/underlay = image(overlay)
underlay.alpha = 128
underlay.transform = underlay.transform.Scale((width + glow_radius*2)/width, (height+glow_radius*2)/height)
underlay.filters = filter(type="blur", size=glow_radius)
overlay.underlays += underlay
if (brightness_factor)
overlay.color = list(
brightness_factor, 0, 0, 0,

View File

@@ -252,6 +252,7 @@
/obj/item/stock_parts/scanning_module = 2,
/obj/item/stock_parts/console_screen
)
var/global/image/console_overlay
/obj/machinery/body_scanconsole/Destroy()
if (connected)
@@ -267,8 +268,9 @@
if((stat & BROKEN) || (stat & NOPOWER))
return
else
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "body_scannerconsole-screen", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
if(!console_overlay)
console_overlay = make_screen_overlay(icon, "body_scannerconsole-screen")
add_overlay(console_overlay)
set_light(1.4, 1, COLOR_RED)
/obj/machinery/body_scanconsole/proc/get_collapsed_lung_desc()

View File

@@ -50,8 +50,19 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
var/hitstaken = 0 //Death at 3 hits from an item with force>=15
var/datum/feed_channel/viewing_channel = null
var/datum/feed_message/viewing_message = null
var/global/list/screen_overlays
anchored = 1
/obj/machinery/newscaster/proc/generate_overlays(var/force = 0)
if(LAZYLEN(screen_overlays) && !force)
return
LAZYINITLIST(screen_overlays)
screen_overlays["newscaster-screen"] = make_screen_overlay(icon, "newscaster-screen")
screen_overlays["newscaster-title"] = make_screen_overlay(icon, "newscaster-title")
screen_overlays["newscaster-wanted"] = make_screen_overlay(icon, "newscaster-wanted")
screen_overlays["newscaster-scanline"] = make_screen_overlay(icon, "newscaster-scanline")
for(var/i in 1 to 3)
screen_overlays["crack[i]"] = make_screen_overlay(icon, "crack[i]")
/obj/machinery/newscaster/security_unit //Security unit
name = "Security Newscaster"
@@ -62,6 +73,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
allCasters += src
src.paper_remaining = 15 // Will probably change this to something better
src.unit_no = allCasters.len + 1
src.generate_overlays()
src.update_icon() //for any custom ones on the map...
/obj/machinery/newscaster/Destroy()
@@ -74,36 +86,30 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
set_light(FALSE)
if(isbroken) //If the thing is smashed, add crack overlay on top of the unpowered sprite.
cut_overlays()
add_overlay("crack3")
add_overlay(screen_overlays["crack3"])
return
cut_overlays() //reset overlays
var/mutable_appearance/base_screen_overlay = mutable_appearance(icon, "newscaster-screen", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(base_screen_overlay)
add_overlay(screen_overlays["newscaster-screen"])
set_light(1.4, 1, COLOR_CYAN)
if(!alert || !SSnews.wanted_issue) // since we're transparent I don't want overlay nonsense
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "newscaster-title", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["newscaster-title"])
if(SSnews.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "newscaster-wanted", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["newscaster-wanted"])
return
if(alert) //new message alert overlay
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "newscaster-alert", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["newscaster-alert"])
if(hitstaken == 0)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "newscaster-scanline", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["newscaster-scanline"])
if(hitstaken > 0) //Cosmetic damage overlay
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "crack[hitstaken]", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["crack[hitstaken]"])
icon_state = initial(icon_state)
return

View File

@@ -64,6 +64,17 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//End Form Integration
var/datum/announcement/announcement = new
var/list/obj/item/device/pda/alert_pdas = list() //The PDAs we alert upon a request receipt.
var/global/list/screen_overlays
/obj/machinery/requests_console/proc/generate_overlays(var/force = 0)
if(LAZYLEN(screen_overlays) && !force)
return
LAZYINITLIST(screen_overlays)
screen_overlays["req_comp-idle"] = make_screen_overlay(icon, "req_comp-idle")
screen_overlays["req_comp-alert"] = make_screen_overlay(icon, "req_comp-alert")
screen_overlays["req_comp-redalert"] = make_screen_overlay(icon, "req_comp-redalert")
screen_overlays["req_comp-yellowalert"] = make_screen_overlay(icon, "req_comp-yellowalert")
screen_overlays["req_comp-scanline"] = make_screen_overlay(icon, "req_comp-scanline")
/obj/machinery/requests_console/power_change()
..()
@@ -77,24 +88,19 @@ var/list/obj/machinery/requests_console/allConsoles = list()
else
switch(newmessagepriority)
if(0)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "req_comp-idle", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["req_comp-idle"])
set_light(1.4, 1, COLOR_CYAN)
if(1)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "req_comp-alert", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["req_comp-alert"])
set_light(1.4, 1, COLOR_CYAN)
if(2)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "req_comp-redalert", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["req_comp-redalert"])
set_light(1.4, 1, COLOR_ORANGE)
if(3)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "req_comp-yellowalert", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["req_comp-yellowalert"])
set_light(1.4, 1, COLOR_ORANGE)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "req_comp-scanline", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["req_comp-scanline"])
/obj/machinery/requests_console/Initialize(mapload, var/dir, var/building = 0)
. = ..()
@@ -119,6 +125,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
req_console_supplies |= department
if (departmentType & RC_INFO)
req_console_information |= department
generate_overlays()
update_icon()
/obj/machinery/requests_console/Destroy()

View File

@@ -13,11 +13,13 @@
var/on = TRUE
var/department = "Somewhere" //whatever department/desk you put this thing
var/pinged = FALSE //for cooldown
var/global/list/screen_overlays
/obj/machinery/ringer/Initialize()
. = ..()
if(id)
ringers = new(id, src)
generate_overlays()
update_icon()
/obj/machinery/ringer/power_change()
@@ -28,6 +30,15 @@
QDEL_NULL(ringers)
return ..()
/obj/machinery/ringer/proc/generate_overlays(var/force = 0)
if(LAZYLEN(screen_overlays) && !force)
return
LAZYINITLIST(screen_overlays)
screen_overlays["bell-active"] = make_screen_overlay(icon, "bell-active")
screen_overlays["bell-alert"] = make_screen_overlay(icon, "bell-alert")
screen_overlays["bell-scanline"] = make_screen_overlay(icon, "bell-scanline")
screen_overlays["bell-standby"] = make_screen_overlay(icon, "bell-standby")
/obj/machinery/ringer/update_icon()
cut_overlays()
if(!on || stat & NOPOWER)
@@ -35,19 +46,15 @@
set_light(FALSE)
return
if(rings_pdas || rings_pdas.len)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "bell-active", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["bell-active"])
set_light(1.4, 1, COLOR_CYAN)
if(pinged)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "bell-alert", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["bell-alert"])
set_light(1.4, 1, COLOR_CYAN)
if(on)
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "bell-scanline", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["bell-scanline"])
else
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "bell-standby", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
add_overlay(screen_overlays["bell-standby"])
set_light(1.4, 1, COLOR_CYAN)
/obj/machinery/ringer/attackby(obj/item/C as obj, mob/living/user as mob)

View File

@@ -53,6 +53,7 @@
small_station_map = image(SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir)
small_station_map.layer = EFFECTS_ABOVE_LIGHTING_LAYER
small_station_map.filters = filter(type = "drop_shadow", color = light_color + "F0", size = 1, offset = 1, x = 0, y = 0)
floor_markings = image('icons/obj/machines/stationmap.dmi', "decal_station_map")
floor_markings.dir = src.dir

View File

@@ -106,6 +106,9 @@
var/heating_temperature = T0C + 57 //Best temp for coffee.
var/vending_sound = "machines/vending/vending_drop.ogg"
var/global/list/screen_overlays
var/exclusive_screen = TRUE // Are we not allowed to show the deny and screen states at the same time?
light_range = 2
light_power = 1
@@ -123,7 +126,7 @@
if(src.product_ads)
src.ads_list += text2list(src.product_ads, ";")
add_screen_overlay()
src.build_inventory()
@@ -132,14 +135,20 @@
/obj/machinery/vending/proc/reset_light()
set_light(initial(light_range), initial(light_power), initial(light_color))
/obj/machinery/vending/proc/add_screen_overlay()
if("[icon_state]-screen" in icon_states(icon))
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "[icon_state]-screen", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
/obj/machinery/vending/proc/add_screen_overlay(var/deny = FALSE)
if(!LAZYLEN(screen_overlays))
LAZYINITLIST(screen_overlays)
if(!("[icon_state]-screen" in screen_overlays) || (deny && !("[icon_state]-deny" in screen_overlays)))
var/list/states = icon_states(icon)
if ("[icon_state]-screen" in states)
screen_overlays["[icon_state]-screen"] = make_screen_overlay(icon, "[icon_state]-screen")
if ("[icon_state]-deny" in states)
screen_overlays["[icon_state]-deny"] = make_screen_overlay(icon, "[icon_state]-deny")
add_overlay(screen_overlays["[icon_state]-[deny ? "deny" : "screen"]"])
reset_light()
/**
* Build src.produdct_records from the products lists
* Build src.product_records from the products lists
*
* src.products, src.contraband, src.premium, and src.prices allow specifying
* products that the vending machine is to carry without manually populating
@@ -556,11 +565,14 @@
if (href_list["vendItem"] && vend_ready && !currently_vending)
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
to_chat(usr, "<span class='warning'>Access denied.</span>") //Unless emagged of course
var/mutable_appearance/deny_overlay = mutable_appearance(icon, "[icon_state]-deny", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(deny_overlay)
addtimer(CALLBACK(src, /atom/.proc/cut_overlay, deny_overlay), deny_time ? deny_time : 15)
if(exclusive_screen)
cut_overlays()
addtimer(CALLBACK(src, .proc/add_screen_overlay), deny_time ? deny_time : 15)
add_screen_overlay(deny = TRUE)
addtimer(CALLBACK(src, /atom/.proc/cut_overlay, screen_overlays["[icon_state]-deny"]), deny_time ? deny_time : 15)
set_light(initial(light_range), initial(light_power), COLOR_RED_LIGHT)
addtimer(CALLBACK(src, .proc/reset_light), deny_time ? deny_time : 15)
addtimer(CALLBACK(src, .proc/add_screen_overlay), deny_time ? deny_time : 15)
return
var/key = text2num(href_list["vendItem"])
@@ -599,9 +611,11 @@
if((!allowed(usr)) && !emagged && scan_id) //For SECURE VENDING MACHINES YEAH
to_chat(usr, "<span class='warning'>Access denied.</span>") //Unless emagged of course)
var/mutable_appearance/deny_overlay = mutable_appearance(icon, "[icon_state]-deny", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(deny_overlay)
addtimer(CALLBACK(src, /atom/.proc/cut_overlay, deny_overlay), deny_time ? deny_time : 15)
if(exclusive_screen)
cut_overlays()
addtimer(CALLBACK(src, .proc/add_screen_overlay), deny_time ? deny_time : 15)
add_screen_overlay(deny = TRUE)
addtimer(CALLBACK(src, /atom/.proc/cut_overlay, screen_overlays["[icon_state]-deny"]), deny_time ? deny_time : 15)
set_light(initial(light_range), initial(light_power), COLOR_RED_LIGHT)
addtimer(CALLBACK(src, .proc/reset_light), deny_time ? deny_time : 15)
return

View File

@@ -116,6 +116,7 @@
random_itemcount = 0
vending_sound = "machines/vending/vending_cans.ogg"
light_color = COLOR_PALE_BLUE_GRAY
exclusive_screen = FALSE
/obj/machinery/vending/assist
@@ -418,7 +419,7 @@
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
random_itemcount = 0
temperature_setting = -1
light_color = COLOR_GREEN_GRAY
light_color = LIGHT_COLOR_GREEN
//This one's from bay12
@@ -454,7 +455,7 @@
desc = "A wall-mounted version of the NanoMed."
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?"
icon_state = "wallmed"
deny_time = 14
deny_time = 15
req_access = list(access_medical)
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
vend_id = "meds"
@@ -475,14 +476,14 @@
)
random_itemcount = 0
temperature_setting = -1
light_color = COLOR_GREEN_GRAY
light_color = LIGHT_COLOR_GREEN
/obj/machinery/vending/wallmed2
name = "NanoMed"
desc = "A wall-mounted version of the NanoMed, containing only vital first aid equipment."
icon_state = "wallmed"
deny_time = 14
deny_time = 15
req_access = list(access_medical)
density = 0 //It is wall-mounted, and thus, not dense. --Superxpdude
vend_id = "meds"
@@ -501,7 +502,7 @@
)
random_itemcount = 0
temperature_setting = -1
light_color = COLOR_GREEN_GRAY
light_color = LIGHT_COLOR_GREEN
/obj/machinery/vending/security
@@ -536,6 +537,7 @@
restock_items = 1
random_itemcount = 0
light_color = COLOR_BABY_BLUE
exclusive_screen = FALSE
/obj/machinery/vending/hydronutrients

View File

@@ -8,6 +8,7 @@
flags = CONDUCT | NOBLOODY
var/number = 0
var/obj/machinery/abstract/intercom_listener/power_interface
var/global/list/screen_overlays
var/radio_sound = null
clickvol = 40
@@ -49,8 +50,18 @@
/obj/item/device/radio/intercom/Initialize()
. = ..()
power_interface = new(loc, src)
generate_overlays()
update_icon()
/obj/item/device/radio/intercom/proc/generate_overlays(var/force = 0)
if(LAZYLEN(screen_overlays) && !force)
return
LAZYINITLIST(screen_overlays)
screen_overlays["intercom_screen"] = make_screen_overlay(icon, "intercom_screen")
screen_overlays["intercom_scanline"] = make_screen_overlay(icon, "intercom_scanline")
screen_overlays["intercom_b"] = make_screen_overlay(icon, "intercom_b")
screen_overlays["intercom_l"] = make_screen_overlay(icon, "intercom_l")
/obj/item/device/radio/intercom/department/medbay/Initialize()
. = ..()
internal_channels = default_medbay_channels.Copy()
@@ -137,17 +148,13 @@
set_light(FALSE)
return
else
var/mutable_appearance/screen_overlay = mutable_appearance(icon, "intercom_screen", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(screen_overlay)
var/mutable_appearance/scanline_overlay = mutable_appearance(icon, "intercom_scanline", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(scanline_overlay)
add_overlay(screen_overlays["intercom_screen"])
add_overlay(screen_overlays["intercom_scanline"])
set_light(1.4, 1, COLOR_CYAN)
if(broadcasting)
var/mutable_appearance/button_overlay = mutable_appearance(icon, "intercom_b", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(button_overlay)
add_overlay(screen_overlays["intercom_b"])
if(listening)
var/mutable_appearance/button_overlay = mutable_appearance(icon, "intercom_l", EFFECTS_ABOVE_LIGHTING_LAYER)
add_overlay(button_overlay)
add_overlay(screen_overlays["intercom_l"])
/obj/item/device/radio/intercom/broadcasting
broadcasting = 1

View File

@@ -54,6 +54,13 @@
light_power = 1
light_range = 1
light_color = LIGHT_COLOR_HALOGEN
var/global/image/glow_state
/obj/effect/temp_visual/constellation/Initialize()
. = ..()
if(!glow_state)
glow_state = make_screen_overlay(icon, icon_state)
add_overlay(glow_state)
/obj/effect/temp_visual/constellation/attackby(obj/item/W as obj, mob/user as mob)
visible_message("<span class='notice'>\The [src] vanishes!</span>")

View File

@@ -233,6 +233,7 @@
..()
if(color)
set_light(1.5,1.5,color)
filters = filter(type="drop_shadow", color = color + "F0", size = 2, offset = 1, x = 0, y = 0)
/obj/item/clothing/ears/skrell/goop/Initialize()
. = ..()