mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-25 16:45:42 +00:00
If you came here thinking this was some game feature then you are in the wrong place. Here is where I ramble about code. This adds /datum/element as a sort of sibling to components. Only one of each type gets instanced and they do not get tied directly to any particular thing like a component does. Basically they're a very lightweight component for doing simple functionality that doesn't have much state. Originally this concept came about as a kind of component that could be shared between many parents to reduce some resource costs. Doing this would allow us to componentize more behaviors that are a part of too many things to be viable to have a whole component for every single one. For example a component on every space turf would be entirely unviable. With elements it's much more reasonable. This implements a prety bare framework and a couple components are migrated to it. It's ready to be used but I fully expect I'm going to need to refine how it works for all the usecases we'll want it for. Also: this fixes the qdeleted signal. This signal isn't even possible because after qdel is done there's nothing to receive a signal anyway. I've changed it to a qdeling signal instead. I need it to work for some elements to know when to clean themselves up.
53 lines
1.6 KiB
Plaintext
53 lines
1.6 KiB
Plaintext
|
|
//Ears: currently only used for headsets and earmuffs
|
|
/obj/item/clothing/ears
|
|
name = "ears"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
throwforce = 0
|
|
slot_flags = ITEM_SLOT_EARS
|
|
resistance_flags = NONE
|
|
|
|
/obj/item/clothing/ears/earmuffs
|
|
name = "earmuffs"
|
|
desc = "Protects your hearing from loud noises, and quiet ones as well."
|
|
icon_state = "earmuffs"
|
|
item_state = "earmuffs"
|
|
strip_delay = 15
|
|
equip_delay_other = 25
|
|
resistance_flags = FLAMMABLE
|
|
custom_price = 40
|
|
|
|
/obj/item/clothing/ears/earmuffs/ComponentInitialize()
|
|
. = ..()
|
|
AddElement(/datum/element/earhealing)
|
|
AddComponent(/datum/component/wearertargeting/earprotection, list(SLOT_EARS))
|
|
|
|
/obj/item/clothing/ears/headphones
|
|
name = "headphones"
|
|
desc = "Unce unce unce unce. Boop!"
|
|
icon = 'icons/obj/clothing/accessories.dmi'
|
|
icon_state = "headphones"
|
|
item_state = "headphones"
|
|
slot_flags = ITEM_SLOT_EARS | ITEM_SLOT_HEAD | ITEM_SLOT_NECK //Fluff item, put it whereever you want!
|
|
actions_types = list(/datum/action/item_action/toggle_headphones)
|
|
var/headphones_on = FALSE
|
|
custom_price = 20
|
|
|
|
/obj/item/clothing/ears/headphones/Initialize()
|
|
. = ..()
|
|
update_icon()
|
|
|
|
/obj/item/clothing/ears/headphones/update_icon()
|
|
icon_state = "[initial(icon_state)]_[headphones_on? "on" : "off"]"
|
|
item_state = "[initial(item_state)]_[headphones_on? "on" : "off"]"
|
|
|
|
/obj/item/clothing/ears/headphones/proc/toggle(owner)
|
|
headphones_on = !headphones_on
|
|
update_icon()
|
|
var/mob/living/carbon/human/H = owner
|
|
if(istype(H))
|
|
H.update_inv_ears()
|
|
H.update_inv_neck()
|
|
H.update_inv_head()
|
|
to_chat(owner, "<span class='notice'>You turn the music [headphones_on? "on. Untz Untz Untz!" : "off."]</span>")
|