From 8c995dbad983e585266eea0bc28f755f33d6d652 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Mon, 13 Apr 2020 19:16:55 +0200 Subject: [PATCH] Making things work. --- code/datums/action.dm | 50 ++++++++++++++--------------- code/datums/elements/polychromic.dm | 21 +++++++++--- 2 files changed, 41 insertions(+), 30 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index e94e6a182d..f2f93ac40d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -120,34 +120,34 @@ /datum/action/proc/UpdateButtonIcon(status_only = FALSE, force = FALSE) if(!button) return - if(button_icon && button_icon_state) - if(!status_only) - button.name = name - button.desc = desc - if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) - var/list/settings = owner.hud_used.get_action_buttons_icons() - if(button.icon != settings["bg_icon"]) - button.icon = settings["bg_icon"] - if(button.icon_state != settings["bg_state"]) - button.icon_state = settings["bg_state"] - else - if(button.icon != button_icon) - button.icon = button_icon - if(button.icon_state != background_icon_state) - button.icon_state = background_icon_state + if(!status_only) + button.name = name + button.desc = desc + if(owner && owner.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) + var/list/settings = owner.hud_used.get_action_buttons_icons() + if(button.icon != settings["bg_icon"]) + button.icon = settings["bg_icon"] + if(button.icon_state != settings["bg_state"]) + button.icon_state = settings["bg_state"] + else + if(button.icon != button_icon) + button.icon = button_icon + if(button.icon_state != background_icon_state) + button.icon_state = background_icon_state + if(!use_target_appearance) ApplyIcon(button, force) - else if(use_target_appearance && target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. - var/mutable_appearance/M = new(target) - M.layer = FLOAT_LAYER - M.plane = FLOAT_PLANE - if(target_appearance_matrix) - var/list/L = target_appearance_matrix - M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6]) - button.cut_overlays() - button.add_overlay(M) - button.appearance_cache = target.appearance + else if(target && button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. + var/mutable_appearance/M = new(target) + M.layer = FLOAT_LAYER + M.plane = FLOAT_PLANE + if(target_appearance_matrix) + var/list/L = target_appearance_matrix + M.transform = matrix(L[1], L[2], L[3], L[4], L[5], L[6]) + button.cut_overlays() + button.add_overlay(M) + button.appearance_cache = target.appearance if(!IsAvailable(TRUE)) button.color = transparent_when_unavailable ? rgb(128,0,0,128) : rgb(128,0,0) diff --git a/code/datums/elements/polychromic.dm b/code/datums/elements/polychromic.dm index 109da4ac50..70424507b7 100644 --- a/code/datums/elements/polychromic.dm +++ b/code/datums/elements/polychromic.dm @@ -11,6 +11,7 @@ var/icon_file var/list/overlays_names //wrap numbers into text strings please. var/list/actions_by_atom = list() + var/list/already_updates_onmob = list() var/poly_flags var/worn_file //used in place of items' held or mob overlay icons if present. @@ -54,8 +55,11 @@ if(_flags & POLYCHROMIC_ACTION) RegisterSignal(A, COMSIG_ITEM_EQUIPPED, .proc/grant_user_action) RegisterSignal(A, COMSIG_ITEM_DROPPED, .proc/remove_user_action) - if(!(_flags & (POLYCHROMIC_NO_HELD|POLYCHROMIC_NO_WORN))) - A.AddElement(/datum/element/update_icon_updates_onmob) + if(!(_flags & POLYCHROMIC_NO_HELD) && !(_flags & POLYCHROMIC_NO_WORN)) + if(!SSdcs.GetElement(/datum/element/update_icon_updates_onmob)) + A.AddElement(/datum/element/update_icon_updates_onmob) + else + already_updates_onmob[A]++ RegisterSignal(A, COMSIG_ITEM_WORN_OVERLAYS, .proc/apply_worn_overlays) else if(_flags & POLYCHROMIC_ACTION && ismob(A)) //in the event mob update icon procs are ever standarized. var/datum/action/polychromic/P = new(A) @@ -69,6 +73,13 @@ . = ..() A.cut_overlay(colors_by_atom[A]) colors_by_atom -= A + if(!(poly_flags & POLYCHROMIC_NO_HELD) && !(poly_flags & POLYCHROMIC_NO_WORN) && isitem(A)) + if(!already_updates_onmob[A]) + A.RemoveElement(/datum/element/update_icon_updates_onmob) + else + already_updates_onmob[A]-- + if(!already_updates_onmob[A]) + already_updates_onmob -= A var/datum/action/polychromic/P = actions_by_atom[A] if(P) actions_by_atom -= A @@ -99,10 +110,10 @@ /datum/element/polychromic/proc/set_color(atom/source, mob/user) var/choice = input(user,"Polychromic options", "Recolor [source]") as null|anything in overlays_names - if(!choice || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(!choice || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) return var/ncolor = input(user, "Polychromic options", "Choose [choice] Color") as color|null - if(!ncolor || QDELETED(source) || !user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) + if(!ncolor || QDELETED(source) || !user.canUseTopic(source, BE_CLOSE, NO_DEXTERY)) return var/list/L = colors_by_atom[source] if(!L) // Ummmmmh. @@ -142,4 +153,4 @@ background_icon_state = "bg_polychromic" use_target_appearance = TRUE button_icon_state = null - target_appearance_matrix = list(0.7,0,0,0,0.7,0) + target_appearance_matrix = list(0.75,0,0,0,0.75,0)