• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Union.Timer - краткое описание класса

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Назначение: циклические таймеры
Определение: Timer

- Операторы
Код:
TimerBlock& operator[]( const uint& index )
    Создает или возвращает таймер с заданным индексом index

TimerBlock& operator[]( const void* index )
    Создает или возвращает таймер с заданным индексом index

- Методы
Код:
void ClearUnused()
    Вызывается в цикле, в котором работает таймер. Удаляет все неиспользуемые блоки.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
Назначение: элементы циклический тймеров
Определение: TimerBlock

- Конструкторы
Код:
TimerBlock()
    Создает нулевой блок.

TimerBlock( const uint& index )
    Создает блок с индексом index.

- Методы
Код:
bool Await( const uint& delay = 100, const bool& firstCallIsWorking = false )
    Проверяет, прошло ли delay миллисекунд с предыдущего возврата истины.
    Следующее время на итерацию засекается относительно последнего обращения к функции.
    Если firstCallIsWorking, то первое обращение к методу сразу возвращает истину.
    
uint AwaitExact( const uint& delay = 100, const bool& firstCallIsWorking = false )
    Отличие от первой функции заключается в том, что функция возвращает количество прошедших за период итераций, если таймер быстрее цикла.
    При этом время на следующую итерацию засекается относительно самой первой итерации этого блока.
    Если firstCallIsWorking, то первое обращение к методу сразу возвращает истину.

void Suspend( const bool& suspend )
    Ставит таймер на паузу, если suspend = true. И снимает с пауны, если suspend = false;

uint TimeHasPassed()
    Возвращает количество оставшегося времени до завершения текущей итерации.

TimerBlock& TimeAppend( const uint& delay )
    Прибавляет к текущей задержке таймера delay миллисекунд.

TimerBlock& ResetTime()
    Сбрасывает засеченные значения таймера.

void Delete()
    Помечает таймер на удаление методом ClearUnused.
 

Gratt


Модостроитель
Регистрация
14 Ноя 2014
Сообщения
3.301
Благодарности
4.636
Баллы
625
- Пример использования таймера
C++:
void Game_Loop() {
    static Timer timer;
    timer.ClearUnused();

    // Выполнять прибавку маны каждые 100мс для таймера по индексу player
    if( timer[player].Await( 100 ) )
        if( player->attribute[NPC_ATR_MANA] < player->attribute[NPC_ATR_MANAMAX] )
            player->attribute[NPC_ATR_MANA]++;

    // Выполнять прибавку здоровье каждую секунду для таймера по индексу 0
    if( timer[0u].AwaitExact( 1000, true ) )
        if( player->attribute[NPC_ATR_HITPOINTS] < player->attribute[NPC_ATR_HITPOINTSMAX] )
            player->attribute[NPC_ATR_HITPOINTS]++;
}
 
Сверху Снизу