mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user