XENGINE.cpp 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. #include "..\common_h\coreloader.h"
  2. #include <Xbdm.h>
  3. namespace Game
  4. {
  5. //-------------------------------------------------------------------------------------------
  6. //Log
  7. //-------------------------------------------------------------------------------------------
  8. class Log : public CoreSystemLogReciver
  9. {
  10. public:
  11. Log();
  12. virtual ~Log();
  13. //Принять сообщение
  14. virtual void Out(const char * msg);
  15. public:
  16. static const char * fileName;
  17. };
  18. const char * Log::fileName = "DEVKIT:\\system_log.txt";
  19. Log::Log()
  20. {
  21. DmMapDevkitDrive();
  22. DeleteFile(fileName);
  23. }
  24. Log::~Log()
  25. {
  26. }
  27. //Принять сообщение
  28. void Log::Out(const char * msg)
  29. {
  30. if(!msg || !msg[0]) return;
  31. FILE * file = crt_fopen(fileName, "a+b");
  32. if(file)
  33. {
  34. fseek(file, 0, SEEK_END);
  35. long len = strlen(msg);
  36. fwrite(msg, len, 1, file);
  37. fclose(file);
  38. }
  39. OutputDebugString(msg);
  40. }
  41. //-------------------------------------------------------------------------------------------
  42. //Global data
  43. //-------------------------------------------------------------------------------------------
  44. const char * bootIni = "game:\\xbox.ini";
  45. const char * coreDll = "game:\\systems.xdl";
  46. Log log;
  47. CoreLoader loader;
  48. };
  49. void __cdecl main()
  50. {
  51. /* WIN32_FIND_DATA findData;
  52. HANDLE hFind = ::FindFirstFile("d:\\*", &findData);
  53. if(hFind != INVALID_HANDLE_VALUE)
  54. {
  55. do
  56. {
  57. int i = 0;
  58. }while(::FindNextFile(hFind, &findData));
  59. }*/
  60. /* HANDLE handle = 0;
  61. DWORD err = 0;
  62. handle = ::LoadLibrary("d:\\FileService.xdl");
  63. err = GetLastError();
  64. handle = ::LoadLibrary("d:\\AnimationService.xdl");
  65. err = GetLastError();
  66. handle = ::LoadLibrary("d:\\core.xdl");
  67. err = GetLastError();
  68. */
  69. //Запрашиваем у загрузчика параметры загрузки
  70. Game::loader.GetBootParams(Game::bootIni);
  71. //Создаём ядро
  72. if(!Game::loader.LoadCore(&Game::log, Game::coreDll) || !Game::loader.Manager())
  73. {
  74. DWORD err = GetLastError();
  75. Game::log.Out("Error: Core not loaded!");
  76. //DebugBreak();
  77. return;
  78. }
  79. //Устанавливаем глобальные переменные ядра
  80. if(!Game::loader.Manager()) return;
  81. Game::loader.Manager()->SetVarInt("system.hInstance", (long)0);
  82. Game::loader.Manager()->SetVarInt("system.hWnd", (long)0);
  83. //Заводим заданные сервисы и объекты
  84. if(!Game::loader.DefaultGameInit())
  85. {
  86. Game::log.Out("Error: Game initialization fault!");
  87. // DebugBreak();
  88. return;
  89. }
  90. //Очищаем более ненужные ресурсы
  91. Game::loader.ClearBootData();
  92. Game::log.Out("Storm Engine 3.0 started...");
  93. //Наблюдаем за активностью игры
  94. HANDLE notificationListener = XNotifyCreateListener(XNOTIFY_SYSTEM);
  95. //Основной цикл
  96. while(true)
  97. {
  98. //Опрашиваем джойстики
  99. //JOKER: что бы на 4 -шифта не выходило, т.к. падает в звуке....
  100. /*
  101. for(DWORD i = 0; i < XUSER_MAX_COUNT; i++ )
  102. {
  103. XINPUT_STATE inputState;
  104. if(XInputGetState(i, &inputState) != ERROR_SUCCESS) continue;
  105. if(inputState.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_SHOULDER)
  106. {
  107. if(inputState.Gamepad.bLeftTrigger > 128 && inputState.Gamepad.bRightTrigger > 128)
  108. {
  109. break;
  110. }
  111. }
  112. }
  113. if(i < XUSER_MAX_COUNT)
  114. {
  115. return;
  116. }
  117. */
  118. // try{
  119. //Проверяем текущие состояние системных интерфейсов
  120. DWORD notificationId = 0;
  121. ULONG param = 0;
  122. if(XNotifyGetNext(notificationListener, XN_SYS_UI, &notificationId, &param))
  123. {
  124. if(notificationId == XN_SYS_UI)
  125. {
  126. bool isActiveGame = ((param == 0) ? true : false);
  127. Game::loader.Manager()->SetActive(isActiveGame);
  128. }
  129. }
  130. Game::loader.Manager()->FrameUpdate();
  131. if(Game::loader.Manager()->IsExit())
  132. {
  133. break;
  134. //loader.UnloadCore();
  135. }
  136. // }catch(...){
  137. // }
  138. }
  139. if(notificationListener)
  140. {
  141. CloseHandle(notificationListener);
  142. notificationListener = null;
  143. }
  144. }