mirror of
https://github.com/fulpstation/fulpstation.git
synced 2025-12-10 18:11:47 +00:00
114 lines
2.6 KiB
Plaintext
114 lines
2.6 KiB
Plaintext
|
|
/*
|
|
Client Colour Priority System By RemieRichards
|
|
A System that gives finer control over which client.colour value to display on screen
|
|
so that the "highest priority" one is always displayed as opposed to the default of
|
|
"whichever was set last is displayed"
|
|
*/
|
|
|
|
|
|
|
|
/*
|
|
Define subtypes of this datum
|
|
*/
|
|
/datum/client_colour
|
|
var/colour = "" //Any client.color-valid value
|
|
var/priority = 1 //Since only one client.color can be rendered on screen, we take the one with the highest priority value:
|
|
//eg: "Bloody screen" > "goggles colour" as the former is much more important
|
|
|
|
|
|
/*
|
|
Adds an instance of colour_type to the mob's client_colours list
|
|
colour_type - a typepath (subtyped from /datum/client_colour)
|
|
*/
|
|
/mob/proc/add_client_colour(colour_type)
|
|
if(!ispath(colour_type, /datum/client_colour))
|
|
return
|
|
|
|
var/datum/client_colour/CC = new colour_type()
|
|
client_colours |= CC
|
|
sortTim(client_colours, /proc/cmp_clientcolour_priority)
|
|
update_client_colour()
|
|
|
|
|
|
/*
|
|
Removes an instance of colour_type from the mob's client_colours list
|
|
colour_type - a typepath (subtyped from /datum/client_colour)
|
|
*/
|
|
/mob/proc/remove_client_colour(colour_type)
|
|
if(!ispath(colour_type, /datum/client_colour))
|
|
return
|
|
|
|
for(var/cc in client_colours)
|
|
var/datum/client_colour/CC = cc
|
|
if(CC.type == colour_type)
|
|
client_colours -= CC
|
|
qdel(CC)
|
|
break
|
|
update_client_colour()
|
|
|
|
|
|
/*
|
|
Resets the mob's client.color to null, and then sets it to the highest priority
|
|
client_colour datum, if one exists
|
|
*/
|
|
/mob/proc/update_client_colour()
|
|
if(!client)
|
|
return
|
|
client.color = ""
|
|
if(!client_colours.len)
|
|
return
|
|
var/datum/client_colour/CC = client_colours[1]
|
|
if(CC)
|
|
client.color = CC.colour
|
|
|
|
|
|
|
|
|
|
/datum/client_colour/glass_colour
|
|
priority = 0
|
|
colour = "red"
|
|
|
|
/datum/client_colour/glass_colour/green
|
|
colour = "#aaffaa"
|
|
|
|
/datum/client_colour/glass_colour/lightgreen
|
|
colour = "#ccffcc"
|
|
|
|
/datum/client_colour/glass_colour/blue
|
|
colour = "#aaaaff"
|
|
|
|
/datum/client_colour/glass_colour/lightblue
|
|
colour = "#ccccff"
|
|
|
|
/datum/client_colour/glass_colour/yellow
|
|
colour = "#ffff66"
|
|
|
|
/datum/client_colour/glass_colour/red
|
|
colour = "#ffaaaa"
|
|
|
|
/datum/client_colour/glass_colour/darkred
|
|
colour = "#bb5555"
|
|
|
|
/datum/client_colour/glass_colour/orange
|
|
colour = "#ffbb99"
|
|
|
|
/datum/client_colour/glass_colour/lightorange
|
|
colour = "#ffddaa"
|
|
|
|
/datum/client_colour/glass_colour/purple
|
|
colour = "#ff99ff"
|
|
|
|
/datum/client_colour/glass_colour/gray
|
|
colour = "#cccccc"
|
|
|
|
/datum/client_colour/monochrome
|
|
colour = list(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
|
priority = INFINITY //we can't see colors anyway!
|
|
|
|
/datum/client_colour/monochrome/trance
|
|
priority = 1
|
|
|
|
/datum/client_colour/monochrome/blind
|
|
priority = 1
|