Select Git revision
SkyXEngine_Build.cpp
EntityManager.h 3.63 KiB
/***********************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#ifndef __ENTITY_MANAGER_H
#define __ENTITY_MANAGER_H
/*! \file */
#include <gdefines.h>
#include <common/array.h>
#include <chrono>
#include "proptable.h"
typedef std::chrono::system_clock::time_point time_point;
class CBaseEntity;
struct ISXConfig;
/*! Однократно запустить функцию fn через время time
\note Должно вызываться изнутри класса объекта
*/
#define SET_TIMEOUT(fn, time) m_pMgr->setTimeout((void(CBaseEntity::*)(float))&ThisClass::fn, this, time)
/*! Запускать функцию fn через каждые time секунд
Возвращает идентификатор таймера
\note Должно вызываться изнутри класса объекта
*/
#define SET_INTERVAL(fn, time) m_pMgr->setInterval((void(CBaseEntity::*)(float))&ThisClass::fn, this, time)
/*! Отменить интервал по идентификатору
\note Должно вызываться изнутри класса объекта
*/
#define CLEAR_INTERVAL(id) m_pMgr->clearInterval(id)
/*! Отменить таймер по идентификатору
\note Должно вызываться изнутри класса объекта
*/
#define CLEAR_TIMEOUT(id) m_pMgr->clearTimeout(id)
enum TIMEOUT_STATUS
{
TS_WAIT = 0,
TS_DONE,
TS_EMPTY
};
struct timeout_t
{
TIMEOUT_STATUS status;
void(CBaseEntity::*func)(float dt);
CBaseEntity * pEnt;
time_point fStartTime;
time_point fNextTime;
};
struct timeout_output_t
{
TIMEOUT_STATUS status;
named_output_t *pOutput;
time_point fStartTime;
time_point fNextTime;
inputdata_t data;
};
class CEntityManager
{