From b4f772d9e5381012383fbbc0760d1925b70c7bb2 Mon Sep 17 00:00:00 2001 From: dj-34 Date: Thu, 11 Jul 2024 17:52:22 +0500 Subject: [PATCH] Fix: Neon shoes overlay (#1317) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Что этот PR делает Fixes https://github.com/ss220club/Paradise-SS220/issues/470 - Исправляет работу оверлея неоновых ботинок - Код отсортирован ## Почему это хорошо для игры Оверлей будет отображаться корректно ## Изображения изменений https://github.com/ss220club/Paradise-SS220/assets/20109643/6488c929-6289-4784-a02e-73ff90f88908 ## Тестирование Проверял в игре ## Changelog :cl: fix: Неоновые ботинки теперь корректно накладывают оверлей подсветки (да-да, оно было сломано). /:cl: --- modular_ss220/clothing/code/shoes.dm | 99 +++++++++++++++++++++------- modular_ss220/loadout/code/donor.dm | 2 +- 2 files changed, 77 insertions(+), 24 deletions(-) diff --git a/modular_ss220/clothing/code/shoes.dm b/modular_ss220/clothing/code/shoes.dm index 8bcb47b543f0..e53cf4daa113 100644 --- a/modular_ss220/clothing/code/shoes.dm +++ b/modular_ss220/clothing/code/shoes.dm @@ -1,9 +1,11 @@ +/* Datums */ /datum/action/item_action/change_color - name = "Change color" + name = "Change Color" +/* Neon Shoes */ /obj/item/clothing/shoes/black/neon - name = "неоновые кросовки" - desc = "Пара чёрных кросовок с светодиодными вставками." + name = "неоновые кроссовки" + desc = "Пара чёрных кроссовок с светодиодными вставками." icon = 'modular_ss220/clothing/icons/object/shoes.dmi' icon_state = "neon" icon_override = 'modular_ss220/clothing/icons/mob/shoes.dmi' @@ -12,45 +14,96 @@ actions_types = list(/datum/action/item_action/toggle_light, /datum/action/item_action/change_color) dyeable = FALSE color = null + /// Does it emit light? var/glow_active = FALSE - var/brightness_on = 2 + /// Neon overlay that applies on mob + var/mutable_appearance/neon_overlay -/obj/item/clothing/shoes/black/neon/attack_self(mob/living/user) - var/choice = tgui_input_list(user, "Что вы хотите сделать?", "Неоновые кросовки", list("Переключить подсветку", "Сменить цвет")) +/obj/item/clothing/shoes/black/neon/ui_action_click(mob/user, actiontype) + switch(actiontype) + if(/datum/action/item_action/change_color) + change_color(user) + if(/datum/action/item_action/toggle_light) + toggle_glow(user) + +/obj/item/clothing/shoes/black/neon/attack_self(mob/user) + var/choice = tgui_input_list(user, "Что вы хотите сделать?", "Неоновые кроссовки", list("Переключить подсветку", "Сменить цвет")) switch(choice) if("Переключить подсветку") - turn_glow() + toggle_glow(user) if("Сменить цвет") - change_color() + change_color(user) + +/obj/item/clothing/shoes/black/neon/equipped(mob/user, slot) + . = ..() + if(!neon_overlay && glow_active && slot == SLOT_HUD_SHOES) + apply_neon_overlay(user) -/obj/item/clothing/shoes/black/neon/update_icon_state() +/obj/item/clothing/shoes/black/neon/dropped(mob/user) . = ..() + if(neon_overlay) + remove_neon_overlay(user) + +/obj/item/clothing/shoes/black/neon/Destroy() + var/mob/living/user + if(neon_overlay) + remove_neon_overlay(user) + return ..() + +/// Applies neon overlay and gets color on it +/obj/item/clothing/shoes/black/neon/proc/apply_neon_overlay(mob/user) + if(!user) + return + neon_overlay = mutable_appearance('modular_ss220/clothing/icons/mob/shoes.dmi', "neon_overlay") + neon_overlay.color = color + user.add_overlay(neon_overlay) -/obj/item/clothing/shoes/black/neon/proc/turn_glow() +/// Completely removes the neon overlay +/obj/item/clothing/shoes/black/neon/proc/remove_neon_overlay(mob/user) + if(!user) + return + user.cut_overlay(neon_overlay) + QDEL_NULL(neon_overlay) + +/// Reloads neon overlay (usually used after a color change) +/obj/item/clothing/shoes/black/neon/proc/reload_neon_overlay(mob/user) + if(!user) + return + if(!neon_overlay) + return + + remove_neon_overlay(user) + if(user.get_item_by_slot(SLOT_HUD_SHOES)) + apply_neon_overlay(user) + +/// Toggles neon overlay and light emit +/obj/item/clothing/shoes/black/neon/proc/toggle_glow(mob/user) + if(!user) + return + // Toggle neon overlay + if(!glow_active && user.get_item_by_slot(SLOT_HUD_SHOES)) + apply_neon_overlay(user) + else if(neon_overlay) + remove_neon_overlay(user) + // Toggle light emit if(!glow_active) - set_light(brightness_on) - var/mutable_appearance/neon_overlay = mutable_appearance('modular_ss220/clothing/icons/mob/shoes.dmi',"neon_overlay") - neon_overlay.color = color - add_overlay(neon_overlay) + set_light(2) glow_active = TRUE else set_light(0) - cut_overlays() glow_active = FALSE + update_icon_state() -/obj/item/clothing/shoes/black/neon/proc/change_color(mob/living/user as mob) - var/temp = input(usr, "Пожалуйста, выберите цвет.", "Цвет кросовок") as color +/// Opens user input for changing neon color +/obj/item/clothing/shoes/black/neon/proc/change_color(mob/user) + var/temp = input(user, "Пожалуйста, выберите цвет.", "Цвет кроссовок") as color color = temp light_color = temp + reload_neon_overlay(user) update_icon_state() -/obj/item/clothing/shoes/black/neon/ui_action_click(mob/user, actiontype) - if(actiontype == /datum/action/item_action/change_color) - change_color() - else if(actiontype == /datum/action/item_action/toggle_light) - turn_glow() - +/* Shark Shoes */ /obj/item/clothing/shoes/shark name = "акульи тапочки" desc = "Эти тапочки сделаны из акульей кожи, или нет?" diff --git a/modular_ss220/loadout/code/donor.dm b/modular_ss220/loadout/code/donor.dm index d2b4c7d4972e..bb0bbd87c6b3 100644 --- a/modular_ss220/loadout/code/donor.dm +++ b/modular_ss220/loadout/code/donor.dm @@ -1,5 +1,5 @@ /datum/gear/donor/neon_shoes - display_name = "Неоновые кросовки" + display_name = "Неоновые кроссовки" path = /obj/item/clothing/shoes/black/neon donator_tier = 1 cost = 1