Files
Bubberstation/code/datums/components/sitcomlaughter.dm
SSensum13 4722bf017e Some ITEM_SLOT bitflags fixes. (#92441)
## About The Pull Request

This PR fixes wrong usage of bitflags in a few places, where instead of
bitfields lists were used.

## Why It's Good For The Game

It will help prevent problems that can be a thing in the future,
improving consistency of the codebase.
2025-08-11 13:20:50 -05:00

37 lines
1.7 KiB
Plaintext

/datum/component/wearertargeting/sitcomlaughter
valid_slots = ITEM_SLOT_HANDS | ITEM_SLOT_BELT | ITEM_SLOT_ID | ITEM_SLOT_LPOCKET | ITEM_SLOT_RPOCKET | ITEM_SLOT_SUITSTORE | ITEM_SLOT_DEX_STORAGE
signals = list(COMSIG_MOB_HIT_BY_SPLAT, COMSIG_ON_CARBON_SLIP, COMSIG_POST_TILT_AND_CRUSH, COMSIG_MOB_CLUMSY_SHOOT_FOOT)
proctype = PROC_REF(EngageInComedy)
mobtype = /mob/living
///Sounds used for when user has a sitcom action occur
var/list/comedysounds = list('sound/items/sitcom_laugh/sitcomLaugh1.ogg', 'sound/items/sitcom_laugh/sitcomLaugh2.ogg', 'sound/items/sitcom_laugh/sitcomLaugh3.ogg')
///Invoked in EngageInComedy is ran
var/datum/callback/post_comedy_callback
///Cooldown for inbetween laughs
var/cooldown_time = 3 SECONDS
/// Delay before laugh starts
var/laugh_delay = 0.4 SECONDS
COOLDOWN_DECLARE(laugh_cooldown)
/datum/component/wearertargeting/sitcomlaughter/Initialize(post_comedy_callback, laugh_delay)
. = ..()
if(.) //If this is set something went wrong and we shouldn't init
return
src.post_comedy_callback = post_comedy_callback
if(laugh_delay)
src.laugh_delay = laugh_delay
/datum/component/wearertargeting/sitcomlaughter/Destroy(force)
post_comedy_callback = null
return ..()
///Play the laugh track if any of the signals related to comedy have been sent.
/datum/component/wearertargeting/sitcomlaughter/proc/EngageInComedy(datum/source)
SIGNAL_HANDLER
if(!COOLDOWN_FINISHED(src, laugh_cooldown))
return
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(playsound), parent, pick(comedysounds), 100, FALSE, SHORT_RANGE_SOUND_EXTRARANGE), laugh_delay)
post_comedy_callback?.Invoke(source)
COOLDOWN_START(src, laugh_cooldown, cooldown_time)