mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 22:42:26 +01:00
Add support for non-genetic markings (#3643)
Adds support for non-genetic markings which are not embedded into DNA.
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user