From 132a3c9526a3747dc10495319d1c85f1074d6f13 Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Tue, 8 Dec 2020 19:29:34 +0000
Subject: [PATCH] color non polychromic items
---
code/controllers/subsystem/job.dm | 22 +++++++++++++---------
code/modules/client/preferences.dm | 23 ++++++++++++++++++++++-
2 files changed, 35 insertions(+), 10 deletions(-)
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index 14d49d55ea..4963e33cc3 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -691,6 +691,19 @@ SUBSYSTEM_DEF(job)
if(!permitted)
continue
var/obj/item/I = new G.path
+ if(I && length(i[LOADOUT_COLOR])) //handle loadout colors
+ //handle polychromic items
+ if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors))
+ var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this
+ if(polychromic && istype(polychromic))
+ var/list/polychromic_entry = polychromic.colors_by_atom[I]
+ if(polychromic_entry)
+ polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
+ I.update_icon()
+ else
+ //handle non-polychromic items (they only have one color)
+ I.add_atom_colour(i[LOADOUT_COLOR][1], FIXED_COLOUR_PRIORITY)
+ I.update_icon()
if(!M.equip_to_slot_if_possible(I, G.slot, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first
if(iscarbon(M))
var/mob/living/carbon/C = M
@@ -705,15 +718,6 @@ SUBSYSTEM_DEF(job)
I.forceMove(get_turf(M)) // If everything fails, just put it on the floor under the mob.
else
qdel(I)
- if(I) //handle loadout colors last
- if((G.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC) && length(G.loadout_initial_colors))
- var/datum/element/polychromic/polychromic = I.comp_lookup["item_worn_overlays"] //stupid way to do it but GetElement does not work for this
- if(polychromic && istype(polychromic))
- var/list/polychromic_entry = polychromic.colors_by_atom[I]
- if(polychromic_entry)
- polychromic.colors_by_atom[I] = i[LOADOUT_COLOR]
- I.update_icon()
-
/datum/controller/subsystem/job/proc/FreeRole(rank)
if(!rank)
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index e466037696..3931216702 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -880,9 +880,15 @@ GLOBAL_LIST_EMPTY(preferences_datums)
if(loadout_item)
class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(name)];toggle_gear=0'"
if(gear.loadout_flags & LOADOUT_CAN_COLOR_POLYCHROMIC)
- extra_color_data += "
Color"
+ extra_color_data += "
Color"
for(var/loadout_color in loadout_item[LOADOUT_COLOR])
extra_color_data += " "
+ else
+ var/loadout_color_non_poly = "#FFFFFF"
+ if(length(loadout_item[LOADOUT_COLOR]))
+ loadout_color_non_poly = loadout_item[LOADOUT_COLOR][1]
+ extra_color_data += "
Color"
+ extra_color_data += " "
else if(gear_points <= 0)
class_link = "style='white-space:normal;' class='linkOff'"
else if(donoritem)
@@ -2655,11 +2661,26 @@ GLOBAL_LIST_EMPTY(preferences_datums)
var/list/new_loadout_data = list(LOADOUT_ITEM = "[G.type]")
if(length(G.loadout_initial_colors))
new_loadout_data[LOADOUT_COLOR] = G.loadout_initial_colors
+ else
+ new_loadout_data[LOADOUT_COLOR] = list("#FFFFFF")
if(loadout_data["SAVE_[loadout_slot]"])
loadout_data["SAVE_[loadout_slot]"] += list(new_loadout_data) //double packed because it does the union of the CONTENTS of the lists
else
loadout_data["SAVE_[loadout_slot]"] = list(new_loadout_data) //double packed because you somehow had no save slot in your loadout?
if(href_list["loadout_color"])
+ var/name = html_decode(href_list["loadout_gear_name"])
+ var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name]
+ if(!G)
+ return
+ var/user_gear = has_loadout_gear(loadout_slot, "[G.type]")
+ if(!user_gear)
+ return
+ if(!length(user_gear[LOADOUT_COLOR]))
+ user_gear[LOADOUT_COLOR] = list("#FFFFFF")
+ var/current_color = user_gear[LOADOUT_COLOR][1]
+ var/new_color = input(user, "Polychromic options", "Choose Color", current_color) as color|null
+ user_gear[LOADOUT_COLOR][1] = sanitize_hexcolor(new_color, 6, TRUE, current_color)
+ if(href_list["loadout_color_polychromic"])
var/name = html_decode(href_list["loadout_gear_name"])
var/datum/gear/G = GLOB.loadout_items[gear_category][gear_subcategory][name]
if(!G)