From 5f271036415764855e05d46f3446d2efa3bc5d27 Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sun, 15 Dec 2019 17:30:30 -0700 Subject: [PATCH] god FUCK you icons --- code/__HELPERS/custom_holoforms.dm | 34 +++++++++++++------ code/modules/client/preferences.dm | 9 +++++ code/modules/client/verbs/custom_holoform.dm | 4 ++- code/modules/mob/living/silicon/ai/ai.dm | 4 +-- .../mob/living/silicon/pai/pai_shell.dm | 4 +-- .../mob/living/silicon/pai/update_icon.dm | 7 ++-- 6 files changed, 44 insertions(+), 18 deletions(-) diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm index 4e6fb8ab49..90094bd42c 100644 --- a/code/__HELPERS/custom_holoforms.dm +++ b/code/__HELPERS/custom_holoforms.dm @@ -1,13 +1,13 @@ // Generates a holoform appearance // Equipment list is slot = path. -/proc/generate_custom_holoform_from_prefs(datum/preferences/prefs, list/equipment_by_slot, list/inhand_equipment, copy_job_first = FALSE) +/proc/generate_custom_holoform_from_prefs(datum/preferences/prefs, list/equipment_by_slot, list/inhand_equipment, copy_job_first = FALSE, debug) ASSERT(prefs) var/mob/living/carbon/human/dummy/mannequin = generate_or_wait_for_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) prefs.copy_to(mannequin) if(copy_job_first) var/datum/job/highest = prefs.get_highest_job() if(highest && !istype(highest, /datum/job/ai) && !istype(highest, /datum/job/cyborg)) - highest.equip(mannequin, TRUE, preference_source = prefs) + highest.equip(mannequin, TRUE, preference_source = prefs.parent) if(length(equipment_by_slot)) for(var/slot in equipment_by_slot) @@ -17,26 +17,40 @@ for(var/path in inhand_equipment) var/obj/item/I = new path mannequin.equip_to_slot_if_possible(I, SLOT_HANDS, TRUE, TRUE, TRUE, TRUE) - var/icon/result = getFlatIcon(mannequin) - unset_busy_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) + + COMPILE_OVERLAYS(mannequin) + mannequin.setDir(NORTH) + var/icon/north = getFlatIcon(mannequin) + mannequin.setDir(SOUTH) + var/icon/south = getFlatIcon(mannequin) + mannequin.setDir(EAST) + var/icon/east = getFlatIcon(mannequin) + mannequin.setDir(WEST) + var/icon/west = getFlatIcon(mannequin) + + var/icon/ + + if(!debug) + unset_busy_human_dummy(DUMMY_HUMAN_SLOT_HOLOFORM) return result /proc/process_holoform_icon_filter(icon/I, filter_type) switch(filter_type) if(HOLOFORM_FILTER_AI) - I = getHologramIcon(I) + I = getHologramIcon(I, FALSE) if(HOLOFORM_FILTER_STATIC) - I = getStaticIcon(I) + I = getStaticIcon(I, FALSE) if(HOLOFORM_FILTER_PAI) - I = getPAIHologramIcon(I) + I = getPAIHologramIcon(I, FALSE) return I //Errors go to user. -/proc/generate_custom_holoform_from_prefs_safe(datum/preferences/prefs, mob/user) +/proc/generate_custom_holoform_from_prefs_safe(datum/preferences/prefs, mob/user, debug = FALSE) if(user) - if(user.client.prefs.last_custom_holoform < world.time + CUSTOM_HOLOFORM_DELAY) + if(user.client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) + to_chat(user, "You are attempting to set your custom holoform too fast!") return - return generate_custom_holoform_from_prefs(prefs, null, null, TRUE) + return generate_custom_holoform_from_prefs(prefs, null, null, TRUE, debug) //Prompts this client for custom holoform parameters. /proc/user_interface_custom_holoform(client/C) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3865ab39db..93878226b0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/last_id var/icon/custom_holoform_icon + var/list/cached_holoform_icons var/last_custom_holoform = 0 //Cooldowns for saving/loading. These are four are all separate due to loading code calling these one after another @@ -2363,3 +2364,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) return else custom_names[name_id] = sanitized_name + +/datum/preferences/proc/get_filtered_holoform(filter_type) + if(!custom_holoform_icon) + return + LAZYINITLIST(cached_holoform_icons) + if(!cached_holoform_icons[filter_type]) + cached_holoform_icons[filter_type] = process_holoform_icon_filter(custom_holoform_icon, filter_type) + return cached_holoform_icons[filter_type] diff --git a/code/modules/client/verbs/custom_holoform.dm b/code/modules/client/verbs/custom_holoform.dm index 4049d5ff96..b32ed0f1dd 100644 --- a/code/modules/client/verbs/custom_holoform.dm +++ b/code/modules/client/verbs/custom_holoform.dm @@ -3,16 +3,18 @@ set desc = "Clear your current custom holoform" prefs?.custom_holoform_icon = null + prefs?.cached_holoform_icons = null to_chat(src, "Holoform removed.") /client/verb/set_custom_holoform() set name = "Set Custom Holoform" set desc = "Set your custom holoform using your current preferences slot and a specified set of gear." - if(prefs.last_custom_holoform < world.time + CUSTOM_HOLOFORM_DELAY) + if(prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY) to_chat(src, "You are attempting to change custom holoforms too fast!") var/icon/new_holoform = user_interface_custom_holoform(src) if(new_holoform) prefs.custom_holoform_icon = new_holoform + prefs.cached_holoform_icons = null prefs.last_custom_holoform = world.time to_chat(src, "Holoform set.") diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 356907aa64..732a4d5cca 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -691,9 +691,9 @@ switch(input) if("custom") if(client?.prefs?.custom_holoform_icon) - holo_icon = client.prefs.custom_holoform_icon + holo_icon = client.prefs.get_filtered_holoform(HOLOFORM_FILTER_AI) else - holo_icon = getHologramIcon(icon("female", 'icons/mob/ai.dmi')) + holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "female")) else if("xeno queen") holo_icon = getHologramIcon(icon(icon_list[input],"alienq")) else diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 88a357e07f..ede6fedaaf 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -82,9 +82,7 @@ if(!choice) return FALSE chassis = choice - icon_state = "[chassis]" - if(resting) - icon_state = "[chassis]_rest" + update_icon() to_chat(src, "You switch your holochassis projection composite to [chassis]") /mob/living/silicon/pai/lay_down() diff --git a/code/modules/mob/living/silicon/pai/update_icon.dm b/code/modules/mob/living/silicon/pai/update_icon.dm index 0234850ea7..d18712dfc9 100644 --- a/code/modules/mob/living/silicon/pai/update_icon.dm +++ b/code/modules/mob/living/silicon/pai/update_icon.dm @@ -1,7 +1,10 @@ /mob/living/silicon/pai/proc/update_icon() - if((chassis == "custom") && !custom_holoform_icon) - chassis = pick(possible_chassis - "custom") + if(chassis == "custom") + custom_holoform_icon = client?.prefs?.get_filtered_holoform(HOLOFORM_FILTER_PAI) + if(!custom_holoform_icon) + chassis = pick(possible_chassis - "custom") if(chassis != "custom") + icon = initial(icon) icon_state = "[chassis]_[resting]" else icon = custom_holoform_icon