ExecutionModule.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef _ExecutionModule_h_
  2. #define _ExecutionModule_h_
  3. #include "CoreBase.h"
  4. #include "RegistryKeyAccessor.h"
  5. class ExecutionModule
  6. {
  7. struct ServiceExecute
  8. {
  9. Service * s;
  10. dword level;
  11. };
  12. struct GroupElement
  13. {
  14. RegObject * object;
  15. ObjectExecution func;
  16. dword level;
  17. };
  18. struct Group
  19. {
  20. Group() : elements(_FL_){};
  21. string name;
  22. dword level;
  23. float timeScale;
  24. array<GroupElement> elements;
  25. };
  26. public:
  27. ExecutionModule();
  28. ~ExecutionModule();
  29. void SetAccessor(RegistryKeyAccessor * _accessor);
  30. //-------------------------------------------------------------------------------------------------------
  31. //Работа с менеджером dll
  32. //-------------------------------------------------------------------------------------------------------
  33. public:
  34. //Установить уровень исполнения перед началом кадра
  35. void SetStartFrameLevel(Service * s, dword level = Core_DefaultExecuteLevel);
  36. //Установить уровень исполнения после кадра
  37. void SetEndFrameLevel(Service * s, dword level = Core_DefaultExecuteLevel);
  38. //Установить функцию объекта на исполнение
  39. void SetObjectExecution(RegObject * obj, const char * group, dword level, ObjectExecution func);
  40. //Удалить обработчик
  41. void DelObjectExecution(RegObject * obj, ObjectExecution func);
  42. //Удалить все обработчики данного объекта из группы
  43. void DelObjectExecutions(RegObject * obj, const char * group);
  44. //Удалить все обработчики данного объекта
  45. void DelObjectExecutions(RegObject * obj);
  46. //Установить уровень исполнения группы
  47. void SetGroupLevel(const char * group, dword level);
  48. //Получить уровень исполнения группы
  49. dword GetGroupLevel(const char * group);
  50. //Установить масштаб времени для группы
  51. void SetGroupTimeScale(float scale, const char * group);
  52. //Получить масштаб времени для группы
  53. float GetGroupTimeScale(const char * group);
  54. //Исполнить все сервисы и установленные на исполнение объекты
  55. void Execute(float dltTime);
  56. //-------------------------------------------------------------------------------------------------------
  57. protected:
  58. //Найти индекс группы по имени
  59. long FindGroup(const char * name);
  60. //Установить уровень исполнения сервиса
  61. void SetServiceLevel(array<ServiceExecute> & list, Service * s, dword level);
  62. //-------------------------------------------------------------------------------------------------------
  63. protected:
  64. array<ServiceExecute> startFrame;
  65. array<ServiceExecute> endFrame;
  66. array<Group *> groups;
  67. RegistryKeyAccessor * accessor;
  68. long currentGroup;
  69. long currentObject;
  70. };
  71. #endif