From 4e685db14da99aa56cab8d9593e5e80512648002 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 21 Dec 2020 20:55:28 +0100 Subject: [PATCH] [MIRROR] Make singularity dissipation use delta time (#2257) * Make singularity dissipation use delta time (#55612) About The Pull Request Converts singularity's dissipation code to use delta time instead of assuming it'll always be the same. Numbers were based on the previous code given a delta_time of 2. * Make singularity dissipation use delta time Co-authored-by: Jared-Fogle <35135081+Jared-Fogle@users.noreply.github.com> --- code/modules/power/singularity/singularity.dm | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 1b3efb9a657..68c0638e3f5 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -19,9 +19,12 @@ var/allowed_size = 1 var/energy = 100 //How strong are we? var/dissipate = TRUE //Do we lose energy over time? - var/dissipate_delay = 10 - var/dissipate_track = 0 - var/dissipate_strength = 1 //How much energy do we lose? + /// How long should it take for us to dissipate in seconds? + var/dissipate_delay = 20 + /// How much energy do we lose every dissipate_delay? + var/dissipate_strength = 1 + /// How long its been (in seconds) since the last dissipation + var/time_since_last_dissipiation = 0 var/event_chance = 10 //Prob for event each tick var/move_self = TRUE var/consumed_supermatter = FALSE //If the singularity has eaten a supermatter shard and can go to stage six @@ -129,21 +132,23 @@ if(3) energy -= round(((energy+1)/4),1) -/obj/singularity/process() +/obj/singularity/process(delta_time) if(current_size >= STAGE_TWO) if(prob(event_chance))//Chance for it to run a special event TODO:Come up with one or two more that fit event() - dissipate() + dissipate(delta_time) check_energy() -/obj/singularity/proc/dissipate() - if(!dissipate) +/obj/singularity/proc/dissipate(delta_time) + if (!dissipate) return - if(dissipate_track >= dissipate_delay) - src.energy -= dissipate_strength - dissipate_track = 0 - else - dissipate_track++ + + time_since_last_dissipiation += delta_time + + // Uses a while in case of especially long delta times + while (time_since_last_dissipiation >= dissipate_delay) + energy -= dissipate_strength + time_since_last_dissipiation -= dissipate_delay /obj/singularity/proc/expand(force_size) var/temp_allowed_size = src.allowed_size @@ -167,7 +172,7 @@ new_grav_pull = 4 new_consume_range = 0 dissipate_delay = 10 - dissipate_track = 0 + time_since_last_dissipiation = 0 dissipate_strength = 1 if(STAGE_TWO) if(check_cardinals_range(1, TRUE)) @@ -179,7 +184,7 @@ new_grav_pull = 6 new_consume_range = 1 dissipate_delay = 5 - dissipate_track = 0 + time_since_last_dissipiation = 0 dissipate_strength = 5 if(STAGE_THREE) if(check_cardinals_range(2, TRUE)) @@ -191,7 +196,7 @@ new_grav_pull = 8 new_consume_range = 2 dissipate_delay = 4 - dissipate_track = 0 + time_since_last_dissipiation = 0 dissipate_strength = 20 if(STAGE_FOUR) if(check_cardinals_range(3, TRUE)) @@ -203,7 +208,7 @@ new_grav_pull = 10 new_consume_range = 3 dissipate_delay = 10 - dissipate_track = 0 + time_since_last_dissipiation = 0 dissipate_strength = 10 if(STAGE_FIVE)//this one also lacks a check for gens because it eats everything current_size = STAGE_FIVE