mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
68 lines
2.3 KiB
Plaintext
68 lines
2.3 KiB
Plaintext
//////////////////////////////////
|
|
// /vg/ MODULARIZED DELAYS - by N3X15
|
|
//////////////////////////////////
|
|
|
|
// Reduces duplicated code by quite a bit.
|
|
/datum/delay_controller
|
|
// Delay clamps (for adminbus, effects)
|
|
var/min_delay = 0.3
|
|
var/max_delay = ARBITRARILY_LARGE_NUMBER //See setup.dm, 12
|
|
|
|
var/next_allowed = 0
|
|
|
|
/datum/delay_controller/New(var/min,var/max)
|
|
min_delay=min
|
|
max_delay=max
|
|
|
|
/datum/delay_controller/proc/setDelay(var/delay)
|
|
next_allowed = world.time + clamp(delay,min_delay,max_delay)
|
|
|
|
/datum/delay_controller/proc/addDelay(var/delay)
|
|
var/current_delay = max(0,next_allowed - world.time)
|
|
setDelay(current_delay+delay)
|
|
|
|
// Proxy for delayNext*(), to reduce duplicated code.
|
|
/datum/delay_controller/proc/delayNext(var/delay, var/additive)
|
|
if(additive)
|
|
addDelay(delay)
|
|
else
|
|
setDelay(delay)
|
|
|
|
/datum/delay_controller/proc/blocked()
|
|
return next_allowed > world.time
|
|
|
|
// Constructor args are currently all the same, but placed here for ease of tuning.
|
|
/client // Yep, clients are snowflakes.
|
|
// Walking speed is 7, as is grab speed.
|
|
var/datum/delay_controller/move_delayer = new (0.3,ARBITRARILY_LARGE_NUMBER) // /mob/delayNextMove()
|
|
/mob
|
|
var/datum/delay_controller/click_delayer = new (1,ARBITRARILY_LARGE_NUMBER) // (Handled in Click())
|
|
var/datum/delay_controller/attack_delayer = new (1,ARBITRARILY_LARGE_NUMBER) // delayNextAttack() See setup.dm, 12
|
|
var/datum/delay_controller/special_delayer = new (1,ARBITRARILY_LARGE_NUMBER) // delayNextSpecial()
|
|
var/datum/delay_controller/throw_delayer = new (3,ARBITRARILY_LARGE_NUMBER) // delayNextThrow()
|
|
var/datum/delay_controller/clong_delayer = new (10,ARBITRARILY_LARGE_NUMBER) // CLONG, clong!
|
|
|
|
// Convenience procs.
|
|
/mob/proc/delayNextMove(var/delay, var/additive=0)
|
|
if(client)
|
|
client.move_delayer.delayNext(delay,additive)
|
|
|
|
/mob/proc/delayNextAttack(var/delay, var/additive=0)
|
|
attack_delayer.delayNext(delay,additive)
|
|
|
|
/mob/proc/delayNextSpecial(var/delay, var/additive=0)
|
|
special_delayer.delayNext(delay,additive)
|
|
|
|
/mob/proc/delayNextThrow(var/delay, var/additive=0)
|
|
throw_delayer.delayNext(delay,additive)
|
|
|
|
/mob/proc/delayNext(var/types, var/delay, var/additive=0)
|
|
if(types & DELAY_MOVE)
|
|
delayNextMove(delay,additive)
|
|
if(types & DELAY_ATTACK)
|
|
delayNextAttack(delay,additive)
|
|
if(types & DELAY_SPECIAL)
|
|
delayNextSpecial(delay,additive)
|
|
if(types & DELAY_THROW)
|
|
delayNextThrow(delay,additive)
|