-
-
Notifications
You must be signed in to change notification settings - Fork 682
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Ports datumized security levels & converts to Subsytem (#11186)
* security subystem * security level datums * fix sounds * night lighting * gupdate * 515
- Loading branch information
1 parent
ef8a6bc
commit 83154a7
Showing
35 changed files
with
384 additions
and
204 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
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])") | ||
|
||
if(SSnightshift.can_fire && (selected_level.number_level >= SEC_LEVEL_RED || current_security_level.number_level >= SEC_LEVEL_RED)) | ||
SSnightshift.next_fire = world.time + 7 SECONDS // Fire nightshift after the security level announcement is complete | ||
|
||
announce_security_level(selected_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) | ||
SSblackbox.record_feedback("tally", "security_level_changes", 1, selected_level.name) | ||
|
||
/** | ||
* Handles announcements of the newly set security level | ||
* | ||
* Arguments: | ||
* * selected_level - The new security level that has been set | ||
*/ | ||
/datum/controller/subsystem/security_level/proc/announce_security_level(datum/security_level/selected_level) | ||
if(selected_level.number_level > current_security_level.number_level) // We are elevating to this level. | ||
minor_announce(selected_level.elevating_to_announcemnt, "Attention! Security level elevated to [selected_level.name]:", sound_override = selected_level.sound) | ||
else // Going down | ||
minor_announce(selected_level.lowering_to_announcement, "Attention! Security level lowered to [selected_level.name]:", sound_override = selected_level.sound) | ||
|
||
/** | ||
* 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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.