GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(имяфункции в классе/другом классе, время в мс, true/false (повторять не повторять), параметр, параметр итп);
имяфункции в классе/другом классе - например CallLater(player.G, время в мс, параметр, параметр итп);
Нужно помнить - если идет вызов функции которая должна вернуть значение, то она его не вернет - тк некуда
Однако, если в параметрах функции есть параметр out (один из вариантов передачи содержимого из функции), то если Вы укажете в параметрах вызова переменную класса,
она будет изменена по завершению выполнения вызываемой функции, но если Вы укажете локальную переменную функции - это вызовет ошибку!
На фпс сервера влияет значительно
Не рекомендуется в пределах одного класса запускать параллельно более 1 повторяющегося вызова
Я вообще рекомендую не использовать
CALL_CATEGORY_GAMEPLAY - Используется в основном на клиенте - вызов происходит только когда игрок подключен к серверу/запущен оффлайн (по моим наблюдениям)
На сервере выполняется только когда к серверу подключен хотя бы 1 игрок
Имеет низший приоритет
CALL_CATEGORY_SYSTEM - будет выполняться всегда, независимо не от чего
Имеет более низкий приоритет, чем очереди OnUpdate, класса Timer и других, поэтому иногда выполнение может произойти с задержкой
Дополнение
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Call(имяфункции, параметр, параметр)
Вызывается функцию в следующем фрейме в соответствующем контексте - с CALL_CATEGORY_GAMEPLAY используется только на клиенте, на сервере аналогично CallLater
На фпс сервера влияет мало
GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).Remove(имя функуции) - изымает функцию из шедулера если включено повторение выполнения или вызов еще не произошел
Timer.
Отдельный класс, предназначенный гарантированного выполнения вызываемой с задержкой или повторением функwии - по умолчанию контекст CALL_CATEGORY_SYSTEM
Пример
ref Timer mytimer; (в классе)
mytimer = new Timer; (или new Timer(CALL_CATEGORY_SYSTEM))
mytimer.Run(время в секундах,this , "имяфункции в классе", набор параметров (либо null), true/false (повторять/не повторять))
Выполнит с задержкой или будет выполнять с повторением функцию из текущего класса (this) или другого (указать вместо this имя соответствующего класса)
Параметры передаются - либо через набор параметров (класс Param) либо указать null и использовать для этого переменные класса
Вообще в файлах есть масса примеров
Пример Call и CallLater;
class MyClass
{
bool m_State;
int m_time = 10000;
void MyClass
{
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).Call(Init);
}
void Init
{
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(myfunc, 1000, false);
}
void myfunc()
{
if (!m_State)
{
GetGame().GetCallQueue(CALL_CATEGORY_GAMEPLAY).CallLater(myfunc, m_time, false);
}
else
{
Print ("m_State = true. FINISH!");
}
}
void SetStateTrue()
{
m_State = true;
}
}
Примерт Timer
class MyClass
{
bool m_State;
int m_time = 10;
ref Timer mytimer;
void MyClass
{
Init();
}
void Init
{ mytimer = new Timer;
mytimer.Run(10,this,"myfunc",null,true);
}
void myfunc()
{
if (m_State)
{
Print ("m_State = true. FINISH!");
mytimer.Stop();
}
}
void SetStateTrue()
{
m_State = true;
}
}
Есть еще масса вариантов использования
А еще есть AnimationTimer
И можно создавать свои таймеры инжектируя свои функции в очередь OnUpdate (наивысший приоритет)
и еще варианты
PS Если гдет ошибся -сорри - бухосапиенс )))