Process procs now properly utilize deltatime when implementing rates, timers and probabilities (#52981)

* Process procs now properly use deltatime when implementing rates, timers and probabilities

* Review fixes

* Geiger counters cleanup

Made hardsuit geiger code more similar to geiger counter code
Geiger counters are more responsive now

* Moved SS*_DT defines to subsystems.dm

* Rebase fix

* Redefined the SS*_DT defines to use the subsystem wait vars

* Implemented suggested changes by @AnturK

* Commented /datum/proc/process about the deltatime stuff

* Send delta_time as a process parameter instead of the defines

Also DTfied acid_processing

* Dtfied new acid component
This commit is contained in:
Donkie
2020-09-08 10:24:05 +02:00
committed by GitHub
parent 671c4666ed
commit 53b212ddf2
159 changed files with 808 additions and 719 deletions
+16 -13
View File
@@ -582,15 +582,18 @@
icon_state = "shield"
var/maxenergy = 1500
var/energy = 1500
var/energy_recharge = 7.5
/// Recharging rate in energy per second
var/energy_recharge = 37.5
var/energy_recharge_cyborg_drain_coefficient = 0.4
var/cyborg_cell_critical_percentage = 0.05
var/mob/living/silicon/robot/host = null
var/datum/proximity_monitor/advanced/dampening_field
var/projectile_damage_coefficient = 0.5
var/projectile_damage_tick_ecost_coefficient = 2 //Lasers get half their damage chopped off, drains 50 power/tick. Note that fields are processed 5 times per second.
/// Energy cost per tracked projectile damage amount per second
var/projectile_damage_tick_ecost_coefficient = 10
var/projectile_speed_coefficient = 1.5 //Higher the coefficient slower the projectile.
var/projectile_tick_speed_ecost = 15
/// Energy cost per tracked projectile per second
var/projectile_tick_speed_ecost = 75
var/list/obj/projectile/tracked
var/image/projectile_effect
var/field_radius = 3
@@ -676,38 +679,38 @@
deactivate_field()
. = ..()
/obj/item/borg/projectile_dampen/process()
process_recharge()
process_usage()
/obj/item/borg/projectile_dampen/process(delta_time)
process_recharge(delta_time)
process_usage(delta_time)
update_location()
/obj/item/borg/projectile_dampen/proc/update_location()
if(dampening_field)
dampening_field.HandleMove()
/obj/item/borg/projectile_dampen/proc/process_usage()
/obj/item/borg/projectile_dampen/proc/process_usage(delta_time)
var/usage = 0
for(var/I in tracked)
var/obj/projectile/P = I
if(!P.stun && P.nodamage) //No damage
continue
usage += projectile_tick_speed_ecost
usage += (tracked[I] * projectile_damage_tick_ecost_coefficient)
usage += projectile_tick_speed_ecost * delta_time
usage += tracked[I] * projectile_damage_tick_ecost_coefficient * delta_time
energy = clamp(energy - usage, 0, maxenergy)
if(energy <= 0)
deactivate_field()
visible_message("<span class='warning'>[src] blinks \"ENERGY DEPLETED\".</span>")
/obj/item/borg/projectile_dampen/proc/process_recharge()
/obj/item/borg/projectile_dampen/proc/process_recharge(delta_time)
if(!istype(host))
if(iscyborg(host.loc))
host = host.loc
else
energy = clamp(energy + energy_recharge, 0, maxenergy)
energy = clamp(energy + energy_recharge * delta_time, 0, maxenergy)
return
if(host.cell && (host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy))
host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient)
energy += energy_recharge
host.cell.use(energy_recharge * delta_time * energy_recharge_cyborg_drain_coefficient)
energy += energy_recharge * delta_time
/obj/item/borg/projectile_dampen/proc/dampen_projectile(obj/projectile/P, track_projectile = TRUE)
if(tracked[P])
@@ -304,7 +304,10 @@
icon_state = "cyborg_upgrade5"
require_module = 1
var/repair_amount = -1
var/repair_tick = 1
/// world.time of next repair
var/next_repair = 0
/// Minimum time between repairs in seconds
var/repair_cooldown = 4
var/on = FALSE
var/powercost = 10
var/datum/action/toggle_action
@@ -354,8 +357,7 @@
update_icon()
/obj/item/borg/upgrade/selfrepair/process()
if(!repair_tick)
repair_tick = 1
if(world.time < next_repair)
return
var/mob/living/silicon/robot/cyborg = toggle_action.owner
@@ -384,7 +386,7 @@
cyborg.cell.use(powercost)
else
cyborg.cell.use(5)
repair_tick = 0
next_repair = world.time + repair_cooldown * 10 // Multiply by 10 since world.time is in deciseconds
if(!TIMER_COOLDOWN_CHECK(src, COOLDOWN_BORG_SELF_REPAIR))
TIMER_COOLDOWN_START(src, COOLDOWN_BORG_SELF_REPAIR, 200 SECONDS)