Files
Bubberstation/code/datums/greyscale/json_reader.dm
SkyratBot 9a29d6f1e6 [MIRROR] Adds a color matrix layer to GAGS [MDB IGNORE] (#10669)
* Adds a color matrix layer to GAGS (#63957)

* Adds a color matrix layer to GAGS

* Fixes default row value

* Passes along the last viable icon for color matrix use

* Removes stray nocache reference

* Adds a color matrix layer to GAGS

Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
2022-01-14 12:05:40 +00:00

76 lines
2.3 KiB
Plaintext

/// Takes a json list and extracts a single value.
/// Subtypes represent different conversions of that value.
/datum/json_reader
/// Takes a value read directly from json and verifies/converts as needed to a result
/datum/json_reader/proc/ReadJson(value)
return
/datum/json_reader/text/ReadJson(value)
if(!istext(value))
CRASH("Text value expected but got '[value]'")
return value
/datum/json_reader/number/ReadJson(value)
var/newvalue = text2num(value)
if(!isnum(newvalue))
CRASH("Number expected but got [newvalue]")
return newvalue
/datum/json_reader/number_color_list/ReadJson(list/value)
if(!istype(value))
CRASH("Expected a list but got [value]")
var/list/new_values = list()
for(var/number_string in value)
var/new_value = text2num(number_string)
if(!isnum(new_value))
if(!istext(number_string) || number_string[1] != "#")
stack_trace("Expected list to only contain numbers or colors but got '[number_string]'")
continue
new_value = number_string
new_values += new_value
return new_values
/datum/json_reader/color_matrix/ReadJson(list/value)
if(!istype(value))
CRASH("Expected a list but got [value]")
if(length(value) > 5 || length(value) < 4)
CRASH("Color matrix must contain 4 or 5 rows")
var/list/new_values = list()
for(var/list/row in value)
var/list/interpreted_row = list()
if(!istype(row) || length(row) != 4)
stack_trace("Expected list to contain further row lists with exactly 4 entries")
interpreted_row = list(0, 0, 0, 0)
continue
for(var/number in row)
if(!isnum(number))
stack_trace("Each color matrix row must only contain numbers")
interpreted_row += 0
else
interpreted_row += number
new_values += interpreted_row
return new_values
/datum/json_reader/blend_mode
var/static/list/blend_modes = list(
"add" = ICON_ADD,
"subtract" = ICON_SUBTRACT,
"multiply" = ICON_MULTIPLY,
"or" = ICON_OR,
"overlay" = ICON_OVERLAY,
"underlay" = ICON_UNDERLAY,
)
/datum/json_reader/blend_mode/ReadJson(value)
var/new_value = blend_modes[lowertext(value)]
if(isnull(new_value))
CRASH("Blend mode expected but got '[value]'")
return new_value
/datum/json_reader/greyscale_config/ReadJson(value)
var/newvalue = SSgreyscale.configurations[value]
if(!newvalue)
CRASH("Greyscale configuration type expected but got '[value]'")
return newvalue