diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 09f4e5a0835..e7cfc8a9a81 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -47,17 +47,33 @@ if(.) //damage was dealt new /obj/effect/temp_visual/impact_effect/ion(loc) +/// Subtype of shields that repair over time after sustaining integrity damage /obj/structure/emergency_shield/regenerating name = "energy shield" desc = "An energy shield used to let ships through, but keep out the void of space." max_integrity = 400 + /// How much integrity is healed per second (per process multiplied by seconds per tick) + var/heal_rate_per_second = 5 -/obj/structure/emergency_shield/regenerating/emp_act(severity) - return +/obj/structure/emergency_shield/regenerating/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) -/obj/structure/emergency_shield/regenerating/process(delta_time) - if(get_integrity() < max_integrity) - repair_damage(5 * delta_time) +/obj/structure/emergency_shield/regenerating/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/structure/emergency_shield/regenerating/take_damage(damage, damage_type, damage_flag, sound_effect, attack_dir) + . = ..() + if(.) + // We took some damage so we'll start processing to heal said damage. + START_PROCESSING(SSobj, src) + +/obj/structure/emergency_shield/regenerating/process(seconds_per_tick) + var/repaired_amount = repair_damage(heal_rate_per_second * seconds_per_tick) + if(repaired_amount <= 0) + // 0 damage repaired means we're at the max integrity, so don't need to process anymore + STOP_PROCESSING(SSobj, src) /obj/structure/emergency_shield/cult name = "cult barrier" @@ -65,8 +81,9 @@ max_integrity = 100 icon_state = "shield-red" -/obj/structure/emergency_shield/cult/emp_act(severity) - return +/obj/structure/emergency_shield/cult/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_SELF) /obj/structure/emergency_shield/cult/narsie name = "sanguine barrier"