Artur
2021-06-16 01:16:08 +03:00
parent f3e16b298b
commit a430dc4d4d
3 changed files with 37 additions and 11 deletions

View File

@@ -145,6 +145,7 @@
cloud_program["rules"] = rules
if(LAZYLEN(rules))
cloud_program["has_rules"] = TRUE
cloud_program["all_rules_required"] = P.all_rules_required
var/list/extra_settings = P.get_extra_settings_frontend()
cloud_program["extra_settings"] = extra_settings
@@ -233,6 +234,15 @@
investigate_log("[key_name(usr)] removed rule [rule.display()] from program [P.name] in cloud #[current_view]", INVESTIGATE_NANITES)
. = TRUE
if("toggle_rule_logic")
var/datum/nanite_cloud_backup/backup = get_backup(current_view)
if(backup)
playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE)
var/datum/component/nanites/nanites = backup.nanites
var/datum/nanite_program/P = nanites.programs[text2num(params["program_id"])]
P.all_rules_required = !P.all_rules_required
investigate_log("[key_name(usr)] edited rule logic for program [P.name] into [P.all_rules_required ? "All" : "Any"] in cloud #[current_view]", INVESTIGATE_NANITES)
. = TRUE
/datum/nanite_cloud_backup
var/cloud_id = 0

View File

@@ -53,6 +53,7 @@
//Rules
//Rules that automatically manage if the program's active without requiring separate sensor programs
var/list/datum/nanite_rule/rules = list()
var/all_rules_required = TRUE //Whether all rules are required for positive condition or any of specified
/// Corruptable - able to have code/configuration changed
var/corruptable = TRUE
@@ -108,6 +109,7 @@
for(var/R in rules)
var/datum/nanite_rule/rule = R
rule.copy_to(target)
target.all_rules_required = all_rules_required
if(istype(target,src))
copy_extra_settings_to(target)
@@ -206,11 +208,15 @@
//If false, disables active and passive effects, but doesn't consume nanites
//Can be used to avoid consuming nanites for nothing
/datum/nanite_program/proc/check_conditions()
if (!LAZYLEN(rules))
return TRUE
for(var/R in rules)
var/datum/nanite_rule/rule = R
if(!rule.check_rule())
if(!all_rules_required && rule.check_rule())
return TRUE
if(all_rules_required && !rule.check_rule())
return FALSE
return TRUE
return all_rules_required ? TRUE : FALSE
//Constantly procs as long as the program is active
/datum/nanite_program/proc/active_effect()

View File

@@ -196,7 +196,7 @@ export const NaniteCloudBackupDetails = (props, context) => {
!!has_program && (
<Button
icon="upload"
content="Upload From Disk"
content="Upload Program from Disk"
color="good"
onClick={() => act('upload_program')} />
)
@@ -222,14 +222,24 @@ export const NaniteCloudBackupDetails = (props, context) => {
mt={-2}
title="Rules"
level={2}
buttons={(!!can_rule
&& <Button
icon="plus"
content="Add Rule from Disk"
color="good"
onClick={() => act('add_rule', {
program_id: program.id,
})} />
buttons={(
<>
{!!can_rule && (
<Button
icon="plus"
content="Add Rule from Disk"
color="good"
onClick={() => act('add_rule', {
program_id: program.id,
})} />
)}
<Button
icon={program.all_rules_required ? 'check-double' : 'check'}
content={program.all_rules_required ? 'Meet all' : 'Meet any'}
onClick={() => act('toggle_rule_logic', {
program_id: program.id,
})} />
</>
)}>
{program.has_rules ? (
rules.map(rule => (