И как вообще реализовать такое? Очередь и демон? Крон скрип или что то другое?
Например у нас 0 энергии из 10. Мы знаем, что скорость восстановления 1 энергии = 2 секунды. Получается восстанавливается 0,5 э/с.
Перед началом восстановления энергии мы записываем таймштамп начала восстановления.
Сам таймер делаем на клиенте, вида примерно такого:
var energy = {$energy};
var coef = {$coef};
var timer = setInterval(function(){
if(energy!=totalenergy){
energy = energy + coef;
}else{
clearTimer(timer);
}
}, 1000);
Вместо $coef подставляем 0.5 э/с. Вместо {$energy} подставляем текущее количество энергии, в данном случае 0;
Что происходит, если пользователь обновил страницу, например через 8 секунд?
В php смотрим таймштамп начала восстановления энергии и отнимаем его от текущего таймштампа - узнаем сколько прошло секунд с момента начала восстановления - 8 секунд. Умножаем на коэффициент 8*0.5, узнаем что с момента посленего обновления страницы восстановилось 4 энергии. Отправляем эти данные в клиент. Снова записываем таймштамп.
var energy = 4;
var coef = 0.5;
var timer = setInterval(function(){
if(energy!=totalenergy){
energy = energy + coef;
}else{
clearTimer(timer);
}
}, 1000);
Пользовался подобным способом в проекте, там был таймер отсчета, но суть та-же.