Fixes some nanite issues (#48112)

* fixes boolean parameters

* fixes nanite extra setting copying

* better extra settings display in crowd controller

* actually copies

* actually actually copy

* d

* rebuild

* fix incorrect function definition being used
This commit is contained in:
Rob Bailey
2019-12-06 15:16:31 +01:00
committed by AnturK
parent 8efa6479ce
commit 88cb666fd2
8 changed files with 42 additions and 15 deletions
@@ -8,6 +8,9 @@
/datum/nanite_extra_setting/proc/set_value(value)
src.value = value
/datum/nanite_extra_setting/proc/get_copy()
return
//I made the choice to send the name as part of the parameter instead of storing it directly on
//this datum as a way of avoiding duplication of data between the containing assoc list
//and this datum.
@@ -10,10 +10,13 @@
/datum/nanite_extra_setting/boolean/set_value(value)
if(isnull(value))
value = !value
src.value = !src.value
return
. = ..()
/datum/nanite_extra_setting/boolean/get_copy()
return new /datum/nanite_extra_setting/boolean(value, true_text, false_text)
/datum/nanite_extra_setting/boolean/get_frontend_list(name)
return list(list(
"name" = name,
@@ -18,6 +18,9 @@
return
src.value = CLAMP(value, min, max)
/datum/nanite_extra_setting/number/get_copy()
return new /datum/nanite_extra_setting/number(value, min, max, unit)
/datum/nanite_extra_setting/number/get_frontend_list(name)
return list(list(
"name" = name,
@@ -7,6 +7,9 @@
/datum/nanite_extra_setting/text/set_value(value)
src.value = trim(value)
/datum/nanite_extra_setting/text/get_copy()
return new /datum/nanite_extra_setting/text(value)
/datum/nanite_extra_setting/text/get_frontend_list(name)
return list(list(
"name" = name,
@@ -6,6 +6,9 @@
value = initial
src.types = types
/datum/nanite_extra_setting/type/get_copy()
return new /datum/nanite_extra_setting/type(value, types)
/datum/nanite_extra_setting/type/get_frontend_list(name)
return list(list(
"name" = name,
@@ -11,7 +11,7 @@
var/trigger_cost = 0 //Amount of nanites required to trigger
var/trigger_cooldown = 50 //Deciseconds required between each trigger activation
var/next_trigger = 0 //World time required for the next trigger activation
var/program_flags = NONE
var/passive_enabled = FALSE //If the nanites have an on/off-style effect, it's tracked by this var
@@ -28,7 +28,7 @@
//The following vars are customizable
var/activated = TRUE //If FALSE, the program won't process, disables passive effects, can't trigger and doesn't consume nanites
var/timer_restart = 0 //When deactivated, the program will wait X deciseconds before self-reactivating. Also works if the program begins deactivated.
var/timer_shutdown = 0 //When activated, the program will wait X deciseconds before self-deactivating. Also works if the program begins activated.
var/timer_trigger = 0 //[Trigger only] While active, the program will attempt to trigger once every x deciseconds.
@@ -82,7 +82,7 @@
target.timer_restart = timer_restart
target.timer_shutdown = timer_shutdown
target.timer_trigger = timer_trigger
target.timer_trigger_delay = timer_trigger_delay
target.timer_trigger_delay = timer_trigger_delay
target.activation_code = activation_code
target.deactivation_code = deactivation_code
target.kill_code = kill_code
@@ -92,11 +92,11 @@
for(var/R in rules)
var/datum/nanite_rule/rule = R
rule.copy_to(target)
if(istype(target,src))
copy_extra_settings_to(target)
///Register extra settings by overriding this.
///Register extra settings by overriding this.
///extra_settings[name] = new typepath() for each extra setting
/datum/nanite_program/proc/register_extra_settings()
return
@@ -121,7 +121,11 @@
///Copy of the list instead of direct reference for obvious reasons
/datum/nanite_program/proc/copy_extra_settings_to(datum/nanite_program/target)
target.extra_settings = extra_settings.Copy()
var/list/copy_list = list()
for(var/ns_name in extra_settings)
var/datum/nanite_extra_setting/extra_setting = extra_settings[ns_name]
copy_list[ns_name] = extra_setting.get_copy()
target.extra_settings = copy_list
/datum/nanite_program/proc/on_add(datum/component/nanites/_nanites)
nanites = _nanites
@@ -162,7 +166,7 @@
activate()
timer_restart_next = 0
return
if(timer_shutdown_next && world.time > timer_shutdown_next)
deactivate()
timer_shutdown_next = 0
@@ -171,7 +175,7 @@
trigger()
timer_trigger_next = world.time + timer_trigger
if(timer_trigger_delay_next && world.time > timer_trigger_delay_next)
if(timer_trigger_delay_next && world.time > timer_trigger_delay_next)
trigger(delayed = TRUE)
timer_trigger_delay_next = 0