Add support for non-genetic markings (#3643)

Adds support for non-genetic markings which are not embedded into DNA.
This commit is contained in:
Lohikar
2017-11-08 21:26:44 -06:00
committed by GitHub
parent a0d588ba1c
commit c1e0952a4f
8 changed files with 50 additions and 18 deletions
+6 -1
View File
@@ -60,7 +60,12 @@
var/can_stand
var/body_hair
var/painted = 0
var/list/markings = list() // Markings (body_markings) to apply to the icon
var/list/genetic_markings // Markings (body_markings) to apply to the icon
var/list/temporary_markings // Same as above, but not preserved when cloning
var/list/cached_markings // The two above lists cached for perf. reasons.
/obj/item/organ/external/proc/invalidate_marking_cache()
cached_markings = null
/obj/item/organ/external/Destroy()
if(parent && parent.children)
+25 -10
View File
@@ -2,14 +2,14 @@
return
/obj/item/organ/external/proc/compile_icon()
overlays.Cut()
cut_overlays()
// This is a kludge, only one icon has more than one generation of children though.
for(var/obj/item/organ/external/organ in contents)
if(organ.children && organ.children.len)
for(var/obj/item/organ/external/child in organ.children)
add_overlay(child.mob_icon)
overlays |= organ.mob_icon
add_overlay(organ.mob_icon)
/obj/item/organ/external/proc/sync_colour_to_human(var/mob/living/carbon/human/human)
s_tone = null
@@ -83,9 +83,12 @@
add_overlay(lip_icon)
mob_icon.Blend(lip_icon, ICON_OVERLAY)
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/m_color = markings[M]["color"]
if (!cached_markings)
update_marking_cache()
for(var/M in cached_markings)
var/datum/sprite_accessory/marking/mark_style = cached_markings[M]["datum"]
var/m_color = cached_markings[M]["color"]
var/cache_key = "[mark_style.icon]-[mark_style.icon_state]-[limb_name]-[m_color]"
var/icon/finished_icon = SSicon_cache.markings_cache[cache_key]
@@ -148,9 +151,12 @@
mob_icon.Blend(skin_color, ICON_ADD)
//Body markings, does not include head, duplicated (sadly) above.
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/m_color = markings[M]["color"]
if (!cached_markings)
update_marking_cache()
for(var/M in cached_markings)
var/datum/sprite_accessory/marking/mark_style = cached_markings[M]["datum"]
var/m_color = cached_markings[M]["color"]
var/cache_key = "[mark_style.icon]-[mark_style.icon_state]-[limb_name]-[m_color]"
var/icon/finished_icon = SSicon_cache.markings_cache[cache_key]
@@ -205,7 +211,16 @@
if (body_hair && hair_color)
keyparts += "[hair_color]"
for (var/marking in markings)
keyparts += "[marking][markings[marking]["color"]]"
if (!cached_markings)
update_marking_cache()
for (var/marking in cached_markings)
keyparts += "[marking][cached_markings[marking]["color"]]"
. = keyparts.Join("_")
/obj/item/organ/external/proc/update_marking_cache()
if (LAZYLEN(genetic_markings))
LAZYADD(cached_markings, genetic_markings)
if (LAZYLEN(temporary_markings))
LAZYADD(cached_markings, temporary_markings)