Files
Wallem bf61287cdb Makes integrated circuit nodes more colorful (#89360)
## About The Pull Request
Makes it so nodes in an integrated circuit are colored depending on
their category in the component menu.

Before:

![1212121212121212](https://github.com/user-attachments/assets/aec4602f-c837-415f-8f42-0dcfb9e0e4aa)

After:

![452345235345](https://github.com/user-attachments/assets/2a28f471-f0c1-4fda-9727-41db18894cb1)

All categories (BCI has been changed to solid black since this for
contrast purposes)

![e](https://private-user-images.githubusercontent.com/66052067/410190943-b66d26b0-29b5-4b3f-8e65-35e6a44b74d1.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg3OTU0OTIsIm5iZiI6MTczODc5NTE5MiwicGF0aCI6Ii82NjA1MjA2Ny80MTAxOTA5NDMtYjY2ZDI2YjAtMjliNS00YjNmLThlNjUtMzVlNmE0NGI3NGQxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjA1VDIyMzk1MlomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWI5MzMxOWUyMzUxMmRkZTQwMThkOTNiNTk3OTEyOTExNWY4NjNkODE0YWJjZjE0MTQwYzM2YTZjYjY0ZGQ4ZDEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.uRa_SkIjdhzEbedzzLI1hDzOK-vpgC2ZNoQtvxo4ijE)

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.
/🆑
2025-02-07 10:54:21 -08:00

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)