mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-16 18:45:22 +01:00
bf61287cdb
## About The Pull Request Makes it so nodes in an integrated circuit are colored depending on their category in the component menu. Before:  After:  All categories (BCI has been changed to solid black since this for contrast purposes)  If I was some sort of tgui magician I'd try to implement a way to add comment fields, but since I'm nowhere near that, I figured this was the least I could do. ## Why It's Good For The Game This makes it far easier to read integrated circuits and remember what they do. While there's still inherently some amount of confusion due to the nature of how node-based programming visually works, hopefully having it so nodes aren't all the same color helps a bit. ## Changelog 🆑 Wallem qol: Integrated Circuit nodes are now colored depending on their type. /🆑
115 lines
4.2 KiB
Plaintext
115 lines
4.2 KiB
Plaintext
/**
|
|
* # Sound Emitter Component
|
|
*
|
|
* A component that emits a sound when it receives an input.
|
|
*/
|
|
/obj/item/circuit_component/soundemitter
|
|
display_name = "Sound Emitter"
|
|
desc = "A component that emits a sound when it receives an input. The frequency is a multiplier which determines the speed at which the sound is played"
|
|
category = "Action"
|
|
circuit_flags = CIRCUIT_FLAG_INPUT_SIGNAL|CIRCUIT_FLAG_OUTPUT_SIGNAL
|
|
|
|
/// Sound to play
|
|
var/datum/port/input/option/sound_file
|
|
|
|
/// Volume of the sound when played
|
|
var/datum/port/input/volume
|
|
|
|
/// Whether to play the sound backwards
|
|
var/datum/port/input/backwards
|
|
|
|
/// Frequency of the sound when played
|
|
var/datum/port/input/frequency
|
|
|
|
/// The cooldown for this component of how often it can play sounds.
|
|
var/sound_cooldown = 2 SECONDS
|
|
|
|
/// The maximum pitch this component can play sounds at.
|
|
var/max_pitch = 50
|
|
/// The minimum pitch this component can play sounds at.
|
|
var/min_pitch = -50
|
|
/// The maximum volume this component can play sounds at.
|
|
var/max_volume = 30
|
|
|
|
var/list/options_map
|
|
|
|
/obj/item/circuit_component/soundemitter/Initialize(mapload)
|
|
if(CONFIG_GET(flag/disallow_circuit_sounds))
|
|
update_ui_alerts(new_flag=CIRCUIT_FLAG_DISABLED)
|
|
. = ..()
|
|
|
|
/obj/item/circuit_component/soundemitter/get_ui_notices()
|
|
. = ..()
|
|
. += create_ui_notice("Sound Cooldown: [DisplayTimeText(sound_cooldown)]", "orange", "stopwatch")
|
|
if(CONFIG_GET(flag/disallow_circuit_sounds))
|
|
. += create_ui_notice("Non-functional", "red", "exclamation")
|
|
update_ui_alerts(new_flag=CIRCUIT_FLAG_DISABLED)
|
|
else
|
|
update_ui_alerts(remove_flag=CIRCUIT_FLAG_DISABLED)
|
|
|
|
|
|
/obj/item/circuit_component/soundemitter/populate_ports()
|
|
volume = add_input_port("Volume", PORT_TYPE_NUMBER, default = 35)
|
|
frequency = add_input_port("Frequency", PORT_TYPE_NUMBER, default = 0)
|
|
backwards = add_input_port("Play Backwards", PORT_TYPE_NUMBER, default = 0)
|
|
|
|
/obj/item/circuit_component/soundemitter/populate_options()
|
|
var/static/component_options = list(
|
|
"Buzz" = 'sound/machines/buzz/buzz-sigh.ogg',
|
|
"Buzz Twice" = 'sound/machines/buzz/buzz-two.ogg',
|
|
"Chime" = 'sound/machines/chime.ogg',
|
|
"Honk" = 'sound/items/bikehorn.ogg',
|
|
"Ping" = 'sound/machines/ping.ogg',
|
|
"Sad Trombone" = 'sound/misc/sadtrombone.ogg',
|
|
"Warn" = 'sound/machines/warning-buzzer.ogg',
|
|
"Slow Clap" = 'sound/machines/slowclap.ogg',
|
|
"Moth Buzz" = 'sound/mobs/humanoids/moth/scream_moth.ogg',
|
|
"Squeak" = 'sound/items/toy_squeak/toysqueak1.ogg',
|
|
"Rip" = 'sound/items/poster/poster_ripped.ogg',
|
|
"Coinflip" = 'sound/items/coinflip.ogg',
|
|
"Megaphone" = 'sound/items/megaphone.ogg',
|
|
"Warpwhistle" = 'sound/effects/magic/warpwhistle.ogg',
|
|
"Hiss" = 'sound/mobs/non-humanoids/hiss/hiss1.ogg',
|
|
"Lizard" = 'sound/mobs/humanoids/lizard/lizard_scream_1.ogg',
|
|
"Flashbang" = 'sound/items/weapons/flashbang.ogg',
|
|
"Flash" = 'sound/items/weapons/flash.ogg',
|
|
"Whip" = 'sound/items/weapons/whip.ogg',
|
|
"Laugh Track" = 'sound/items/sitcom_laugh/sitcomLaugh1.ogg',
|
|
"Gavel" = 'sound/items/gavel.ogg',
|
|
)
|
|
sound_file = add_option_port("Sound Option", component_options)
|
|
options_map = component_options
|
|
|
|
/obj/item/circuit_component/soundemitter/pre_input_received(datum/port/input/port)
|
|
volume.set_value(clamp(volume.value, 0, 100))
|
|
frequency.set_value(clamp(frequency.value, min_pitch, max_pitch))
|
|
backwards.set_value(clamp(backwards.value, 0, 1))
|
|
|
|
/obj/item/circuit_component/soundemitter/input_received(datum/port/input/port)
|
|
if(CONFIG_GET(flag/disallow_circuit_sounds))
|
|
// Without constantly checking the config 24/7 or sending a signal to every circuit, best we can do to update existing emitters is this.
|
|
update_ui_alerts(new_flag=CIRCUIT_FLAG_DISABLED)
|
|
return
|
|
else
|
|
update_ui_alerts(remove_flag=CIRCUIT_FLAG_DISABLED)
|
|
|
|
if(!parent.shell)
|
|
return
|
|
|
|
if(TIMER_COOLDOWN_RUNNING(parent.shell, COOLDOWN_CIRCUIT_SOUNDEMITTER))
|
|
return
|
|
|
|
var/sound_to_play = options_map[sound_file.value]
|
|
if(!sound_to_play)
|
|
return
|
|
|
|
var/actual_frequency = 1 + (frequency.value/100)
|
|
var/actual_volume = max_volume * (volume.value/100)
|
|
|
|
if(backwards.value)
|
|
actual_frequency = -actual_frequency
|
|
|
|
playsound(src, sound_to_play, actual_volume, TRUE, frequency = actual_frequency)
|
|
|
|
TIMER_COOLDOWN_START(parent.shell, COOLDOWN_CIRCUIT_SOUNDEMITTER, sound_cooldown)
|