Core.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251
  1. #ifndef _Core_h_
  2. #define _Core_h_
  3. #include "CoreBase.h"
  4. #include "DllManager.h"
  5. #include "ObjectsDeclarators.h"
  6. #include "ExecutionModule.h"
  7. #include "PerformanceCounters.h"
  8. #include "CoreStorage.h"
  9. class Core : public ICore
  10. {
  11. ClassThread
  12. //Система доступа к регистрационному ключу
  13. class Accessor : public RegistryKeyAccessor
  14. {
  15. protected:
  16. virtual dword & RegistryKey(RegObject * obj){ return Core::GetRegistryKey(obj); };
  17. };
  18. friend Accessor;
  19. static __forceinline dword & GetRegistryKey(RegObject * obj)
  20. {
  21. return ICore::sysRegObjectRegistryKey(obj);
  22. };
  23. struct SysMsgInfo
  24. {
  25. dword name; //Индекс начала имени
  26. dword data; //Индекс начала данных
  27. dword size; //Размер данных
  28. };
  29. struct ErrorRecord
  30. {
  31. dword hash;
  32. string str;
  33. long next;
  34. };
  35. public:
  36. Core(const char * coreModuleNameForSkip);
  37. virtual ~Core();
  38. public:
  39. //Загрузить модули быстрого старта
  40. bool LoadQuickStartModules(const char * quickModules);
  41. //Загрузить модули невошедшие в список быстрого старта
  42. void LoadModules();
  43. //------------------------------------------------------------------------------------------------
  44. //Main functions
  45. //------------------------------------------------------------------------------------------------
  46. public:
  47. //Создать сервис
  48. virtual Service * GetService(const char * service_name);
  49. //Установить уровень исполнения перед началом кадра
  50. virtual void SetStartFrameLevel(Service * s, dword level);
  51. //Установить уровень исполнения после кадра
  52. virtual void SetEndFrameLevel(Service * s, dword level);
  53. //Создать зарегестрированный объект
  54. virtual RegObject * CreateObject(const char * className);
  55. //Установить функцию объекта на исполнение
  56. virtual void SetObjectExecutionFunc(RegObject * obj, const char * group, dword level, ObjectExecution func);
  57. //Удалить обработчик
  58. virtual void DelObjectExecutionFunc(RegObject * obj, ObjectExecution func);
  59. //Удалить все обработчики данного объекта из группы
  60. virtual void DelObjectExecutions(RegObject * obj, const char * group);
  61. //Удалить все обработчики данного объекта
  62. virtual void DelObjectExecutions(RegObject * obj);
  63. //Установить уровень исполнения группы
  64. virtual void SetGroupLevel(const char * group, dword level);
  65. //Получить уровень исполнения группы
  66. virtual dword GetGroupLevel(const char * group);
  67. //Проверить на валидность указатель объекта (зарегистрированного)
  68. virtual bool IsValidateRegObject(RegObject * obj, long * cacheValue = null);
  69. //Найти первый объект по имени
  70. virtual RegObject * FindObject(const char * className);
  71. //Найти все объекты по имени
  72. virtual void FindObject(const char * className, array<Object *> & objects);
  73. //Получить список всех зарегестрированных объектов
  74. virtual void GetRegistryObjectsList(array<string> & objects);
  75. //Получить доступ к корневой папке переменных ядра
  76. virtual ICoreStorageFolder & Storage();
  77. //------------------------------------------------------------------------------------------------
  78. //Time functions
  79. //------------------------------------------------------------------------------------------------
  80. public:
  81. //Получить текущий временной промежуток
  82. virtual float GetDeltaTime();
  83. //Получить текущий временной промежуток без учёта скалирования
  84. virtual float GetNoScaleDeltaTime();
  85. //Установить масштаб времени для всех
  86. virtual void SetTimeScale(float scale);
  87. //Получить масштаб времени для всех
  88. virtual float GetTimeScale();
  89. //Установить масштаб времени для группы
  90. virtual void SetTimeScale(float scale, const char * group);
  91. //Получить масштаб времени для группы
  92. virtual float GetTimeScale(const char * group);
  93. //Установить фиксированный временной отрезок
  94. virtual void SetFixedDeltaTime(float dltTime);
  95. //Получить фиксированный временной отрезок
  96. virtual float GetFixedDeltaTime();
  97. //Разрешить-запретить фиксированный временной отрезок
  98. virtual void EnableFixedDeltaTime(bool isEnable);
  99. //Фиксированный временной отрезок установлен или нет
  100. virtual bool IsFixedDeltaTime();
  101. //Получить текущую скорость в кадрах за секунду
  102. virtual float EngineFps();
  103. //------------------------------------------------------------------------------------------------
  104. //System
  105. //------------------------------------------------------------------------------------------------
  106. public:
  107. //Дать ядру команду
  108. virtual void ExecuteCoreCommand(CoreCommand & cmd);
  109. //Вывести сообщение в системный лог
  110. virtual void _cdecl Trace(const char * format, ...);
  111. //Вывести сообщение в системный лог
  112. virtual void TraceData(const char * format, const void * data);
  113. //Вывести сообщение в системный лог 1 раз
  114. virtual void _cdecl Error(const char * format, ...);
  115. //Активно ли приложение
  116. virtual bool IsActive();
  117. //Завершить работу приложения
  118. virtual void Exit();
  119. //Изменить объём выделеной памяти
  120. virtual void * Reallocate(void * ptr, dword size, const char * fileName, long fileLine);
  121. //Освободить память
  122. virtual void Free(void * ptr, const char * fileName, long fileLine);
  123. //Получить состояние нажатости дебажной кнопки
  124. virtual bool sysDebugKeyState(long id);
  125. //Получить количество системных сообщений, набравшихся за кадр
  126. virtual dword GetSystemMessagesCount();
  127. //Получить системное сообщение
  128. virtual bool GetSystemMessage(dword index, CoreSystemMessage & msg);
  129. //Получить конфигурацию ядер процессора
  130. virtual MultiThreading GetThreadingInfo();
  131. //Удалить из списков регистрации объект
  132. virtual void sysUnregistryObject(RegObject * obj);
  133. //Добавить значение к счётчику, который сбросится с конце кадра
  134. virtual void sysAddPerformanceCounter(const char * name, float value);
  135. //Установить счётчик, который сбросится с конце кадра
  136. virtual void sysSetPerformanceCounter(const char * name, float value);
  137. //Получить количество счётчиков
  138. virtual dword sysGetNumberOfPerformanceCounters();
  139. //Получить имя счётчика
  140. virtual const char * sysGetPerformanceName(long index);
  141. //Получить значение счётчика с предыдущего кадра
  142. virtual float sysGetPerformanceCounter(long index);
  143. //Получить значение счётчика с предыдущего кадра
  144. virtual float sysGetPerformanceCounter(const char * name);
  145. //------------------------------------------------------------------------------------------------
  146. public:
  147. //Кадровое обновление
  148. void Update();
  149. //Активно ли ядро
  150. void SetActive(bool isActive);
  151. //Функция сообщающая о завершении работы
  152. bool IsExit();
  153. //Добавить сообщение в буфер сообщений ядра (при количестве параметров == 0 сообщение пропускается)
  154. void AddSystemMessage(const char * id, const unsigned char * data, unsigned long size);
  155. //Включить-выключить стейт ядра
  156. void SetState(CoreState state, long value);
  157. //Получить стейт ядра
  158. long GetState(CoreState state);
  159. //Создать зарегистрированные сервисы
  160. bool CreateAllServices();
  161. //Получить базу стейтов
  162. CoreStorage & GetCoreStorage();
  163. //------------------------------------------------------------------------------------------------
  164. protected:
  165. //Мэнеджер dll
  166. DllManager dlls;
  167. //Менеджер объектов
  168. ObjectsDeclarators decls;
  169. Accessor accsessor;
  170. //Модуль исполнения
  171. ExecutionModule execution;
  172. //База данных переменных
  173. CoreStorage statesBase;
  174. //Системные сообщения, полученые на текущем кадре
  175. array<byte> messages;
  176. array<SysMsgInfo> messagesInfo;
  177. //Параметры таймера
  178. float dltTime; //Временой промежуток на текущем кадре
  179. float fixedDltTime; //Фиксированный временной отрезок
  180. float scaleDltTime; //Масштабированный временой промежуток на текущем кадре
  181. float timeScale; //Масштаб времени
  182. float fps; //Средняя велечина кадров в секунду
  183. float fpsTime; //Время с прошедшего замера fps
  184. dword frames; //Кадров с прошедшего замера
  185. bool isFixedDltTime; //Фиксированный временной отрезок
  186. bool isHiResTimer; //Если запросы к таймеру прошли удачно, то работает таймер высокого разрешения
  187. dword loResTime; //Текущее время в низком разрешении
  188. LARGE_INTEGER hiResTime; //Текущее время в высоком разрешении
  189. double hiTicksToSeconds; //Коэфициент преобразования тиков в высоком разрешении в секунды
  190. long fixedFPS; //Внешние фиксирование фпс
  191. float fixedFPSDltTime; //Временной отрезок фиксированных фпс
  192. //Флаги
  193. bool isMemCheck; //Включена фоновая проверка памяти
  194. bool isDebugKeys; //Разрешены ли дебажные клавиши
  195. bool isExit; //Флаг выхода
  196. bool isActive; //Переменная состояния активности
  197. MultiThreading mtmode; //Текущий режим многопоточности
  198. //Массив ошибок
  199. array<ErrorRecord> errors;
  200. long errorsEntry[1024];
  201. #ifndef STOP_PROFILES
  202. PerformanceCounters pcnts; //Счётчики профайла
  203. #endif
  204. };
  205. //Получить базу стейтов
  206. inline CoreStorage & Core::GetCoreStorage()
  207. {
  208. return statesBase;
  209. }
  210. #endif