mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-02-08 23:39:32 +00:00
This ports a whole bunch of various PRs and commits from https://github.com/effigy-se/effigy-se , with heavy refactoring to keep it fresh for /tg/'s code standards. ## About The Pull Request The whole slew of announcement touchups lately (as in #78995 (37db1ecbf8) / #79052 (12308dbd3d)) have made me realize how much this stuff sucks. The author of these new spans was advertising these in coding general, so I sat down and coded it. Look at the spans, they're much nicer than what we had going on: (ignore the capitalized alert status names, this was removed) <details> <summary>Dark Mode</summary>   </details> <details> <summary>Light Mode</summary>   </details> This PR also features * Major announcement code handling cleanup and refactor! There was a lot of copypasta so let's distill it all down into one proc * Better cacheing! We were doing a shit load of new string generation needlessly! That's fixed now. * Better string concatenation! Lists are better for string tree reasons. It still works just as well, as you can see from the screenshots above. Best of all, no fucking `<br>` dogshit everywhere! * We don't use string equivalency in order to figure out the "type" of an announcement. It's all defines now. This was a bonus that I just coded in since it irritated me. * Minor spellcheck of "announcement". * All of our HTML string mangling stuff is now all span macros! I love macros. ## Why It's Good For The Game In the same vein of adding examine blocks (#67937 (b864589522)) because old examinations tended to blend in with the chat and everything chat-wise used to suck really hard- I think this is a really nice way to draw attention to announcements in the chat box without needing a shit load of line breaks that just really look ugly and have no real consistency. You can look at the PRs/commits I linked above for an idea of just how ugly it could be getting. I haven't audited every announcement in this PR, we can tweak this down the line. ## Changelog 🆑 LT3, san7890 add: Announcements have gotten a fresh coat of paint! They should be popping with splendid new colors and should have a lot less ugly linebreaks, while still managing to keep your attention at the screen. /🆑 I know we didn't need to port all the CSS themes but I added them anyways in case admins wanna have some fun. There can probably be more code improvements, just figured I'd crack it out while I had time. The colors also seem fine, let me know if we need more redness or something. It's okay for stuff to be toned down a bit imo, but that should be done after a hot second. --------- Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
92 lines
3.5 KiB
Plaintext
92 lines
3.5 KiB
Plaintext
SUBSYSTEM_DEF(security_level)
|
|
name = "Security Level"
|
|
can_fire = FALSE // We will control when we fire in this subsystem
|
|
init_order = INIT_ORDER_SECURITY_LEVEL
|
|
/// Currently set security level
|
|
var/datum/security_level/current_security_level
|
|
/// A list of initialised security level datums.
|
|
var/list/available_levels = list()
|
|
|
|
/datum/controller/subsystem/security_level/Initialize()
|
|
for(var/iterating_security_level_type in subtypesof(/datum/security_level))
|
|
var/datum/security_level/new_security_level = new iterating_security_level_type
|
|
available_levels[new_security_level.name] = new_security_level
|
|
current_security_level = available_levels[number_level_to_text(SEC_LEVEL_GREEN)]
|
|
return SS_INIT_SUCCESS
|
|
|
|
/datum/controller/subsystem/security_level/fire(resumed)
|
|
if(!current_security_level.looping_sound) // No sound? No play.
|
|
can_fire = FALSE
|
|
return
|
|
sound_to_playing_players(current_security_level.looping_sound)
|
|
|
|
|
|
/**
|
|
* Sets a new security level as our current level
|
|
*
|
|
* This is how everything should change the security level.
|
|
*
|
|
* Arguments:
|
|
* * new_level - The new security level that will become our current level
|
|
*/
|
|
/datum/controller/subsystem/security_level/proc/set_level(new_level)
|
|
new_level = istext(new_level) ? new_level : number_level_to_text(new_level)
|
|
if(new_level == current_security_level.name) // If we are already at the desired level, do nothing
|
|
return
|
|
|
|
var/datum/security_level/selected_level = available_levels[new_level]
|
|
|
|
if(!selected_level)
|
|
CRASH("set_level was called with an invalid security level([new_level])")
|
|
|
|
level_announce(selected_level, current_security_level.number_level) // We want to announce BEFORE updating to the new level
|
|
|
|
SSsecurity_level.current_security_level = selected_level
|
|
|
|
if(selected_level.looping_sound)
|
|
wait = selected_level.looping_sound_interval
|
|
can_fire = TRUE
|
|
else
|
|
can_fire = FALSE
|
|
|
|
if(SSshuttle.emergency.mode == SHUTTLE_CALL || SSshuttle.emergency.mode == SHUTTLE_RECALL) // By god this is absolutely shit
|
|
SSshuttle.emergency.alert_coeff_change(selected_level.shuttle_call_time_mod)
|
|
|
|
SEND_SIGNAL(src, COMSIG_SECURITY_LEVEL_CHANGED, selected_level.number_level)
|
|
SSnightshift.check_nightshift()
|
|
SSblackbox.record_feedback("tally", "security_level_changes", 1, selected_level.name)
|
|
|
|
/**
|
|
* Returns the current security level as a number
|
|
*/
|
|
/datum/controller/subsystem/security_level/proc/get_current_level_as_number()
|
|
return ((!initialized || !current_security_level) ? SEC_LEVEL_GREEN : current_security_level.number_level) //Send the default security level in case the subsystem hasn't finished initializing yet
|
|
|
|
/**
|
|
* Returns the current security level as text
|
|
*/
|
|
/datum/controller/subsystem/security_level/proc/get_current_level_as_text()
|
|
return ((!initialized || !current_security_level) ? "green" : current_security_level.name)
|
|
|
|
/**
|
|
* Converts a text security level to a number
|
|
*
|
|
* Arguments:
|
|
* * level - The text security level to convert
|
|
*/
|
|
/datum/controller/subsystem/security_level/proc/text_level_to_number(text_level)
|
|
var/datum/security_level/selected_level = available_levels[text_level]
|
|
return selected_level?.number_level
|
|
|
|
/**
|
|
* Converts a number security level to a text
|
|
*
|
|
* Arguments:
|
|
* * level - The number security level to convert
|
|
*/
|
|
/datum/controller/subsystem/security_level/proc/number_level_to_text(number_level)
|
|
for(var/iterating_level_text in available_levels)
|
|
var/datum/security_level/iterating_security_level = available_levels[iterating_level_text]
|
|
if(iterating_security_level.number_level == number_level)
|
|
return iterating_security_level.name
|