/
githubmirror
/
vgstation13
Обзор
Документация
Войти
/
githubmirror
/
vgstation13
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
Bleeding-Edge
code/modules/mob/delays.dm
67 строк
2 KB
Exxion
Renamed Clamp() to clamp()
26 окт 2019, 00:18
26 окт 2019, 00:18
4d7a2df
Код
Авторство
О чём код?
////////////////////////////////// // /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)