void debug(const char *s, ...) { va_list va; va_start(va, s); debugHelper(s, va); va_end(va); }
void debugN(int level, const char *s, ...) { va_list va; if (level > gDebugLevel) return; va_start(va, s); debugHelper(s, va, false); va_end(va); }
void debugCN(uint32 debugChannels, const char *s, ...) { va_list va; // Debug level 11 turns on all special debug level messages if (gDebugLevel != 11) if (!(Common::gDebugLevelsEnabled & debugChannels)) return; va_start(va, s); debugHelper(s, va, false); va_end(va); }
//----------------------------------------------------------------------- // WinMain //----------------------------------------------------------------------- int APIENTRY WinMain(HINSTANCE _hInstance, HINSTANCE _hPrevInstance, LPSTR _lpCmdLine, int _nCmdShow) { // Register the window class WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, APPLICATION_NAME, NULL }; RegisterClassEx(&wc); // Calcular el tamano de nuestra ventana RECT rc = { 0, 0, 800, 600 }; AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); // Create the application's window HWND hWnd = CreateWindow(APPLICATION_NAME, APPLICATION_NAME, WS_OVERLAPPEDWINDOW, 100, 100, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, wc.hInstance, NULL); // Añadir aquí el Init de la applicacioón s_Context.CreateContext(hWnd, 800, 600); ShowWindow(hWnd, SW_SHOWDEFAULT); s_Context.CreateBackBuffer(hWnd, 800, 600); s_Context.InitStates(); { CDebugRender debugRender(s_Context.GetDevice()); CInputManagerImplementation inputManager(hWnd); CInputManager::SetCurrentInputManager(&inputManager); inputManager.LoadCommandsFromFile("Data\\input.xml"); CDebugHelperImplementation debugHelper(s_Context.GetDevice()); CDebugHelper::SetCurrentDebugHelper(&debugHelper); CApplication application(&debugRender, &s_Context); UpdateWindow(hWnd); MSG msg; ZeroMemory(&msg, sizeof(msg)); // Añadir en el while la condición de salida del programa de la aplicación DWORD m_PreviousTime = timeGetTime(); bool hasFocus = true; while (msg.message != WM_QUIT) { if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { if (!debugHelper.Update(msg.hwnd, msg.message, msg.wParam, msg.lParam)) { bool WasDown = false, IsDown = false, Alt = false; switch (msg.message) { case WM_SETFOCUS: hasFocus = true; inputManager.SetFocus(true); break; case WM_KILLFOCUS: hasFocus = false; inputManager.SetFocus(false); break; case WM_SYSKEYDOWN: case WM_SYSKEYUP: case WM_KEYDOWN: case WM_KEYUP: WasDown = ((msg.lParam & (1 << 30)) != 0); IsDown = ((msg.lParam & (1 << 31)) == 0); Alt = ((msg.lParam & (1 << 29)) != 0); if (WasDown != IsDown) { if (IsDown) { bool consumed = false; switch (msg.wParam) { case VK_RETURN: if (Alt) { WINDOWPLACEMENT windowPosition = { sizeof(WINDOWPLACEMENT) }; GetWindowPlacement(msg.hwnd, &windowPosition); ToggleFullscreen(msg.hwnd, windowPosition); consumed = true; } break; case VK_ESCAPE: PostQuitMessage(0); consumed = true; break; case VK_F4: if (Alt) { PostQuitMessage(0); consumed = true; } break; } if (consumed) { break; } } } if (!hasFocus || !inputManager.KeyEventReceived(msg.wParam, msg.lParam)) { TranslateMessage(&msg); DispatchMessage(&msg); } break; case WM_MOUSEMOVE: if (hasFocus) { int xPosAbsolute = GET_X_LPARAM(msg.lParam); int yPosAbsolute = GET_Y_LPARAM(msg.lParam); inputManager.UpdateCursor(xPosAbsolute, yPosAbsolute); } else { TranslateMessage(&msg); DispatchMessage(&msg); } break; default: TranslateMessage(&msg); DispatchMessage(&msg); } } } else { inputManager.BeginFrame(); DWORD l_CurrentTime = timeGetTime(); float m_ElapsedTime = (float)(l_CurrentTime - m_PreviousTime)*0.001f; m_PreviousTime = l_CurrentTime; application.Update(m_ElapsedTime); application.Render(); inputManager.EndFrame(); } } UnregisterClass(APPLICATION_NAME, wc.hInstance); } // Añadir una llamada a la alicación para finalizar/liberar memoria de todos sus datos s_Context.Dispose(); return 0; }
//----------------------------------------------------------------------- // WinMain //----------------------------------------------------------------------- int APIENTRY WinMain(HINSTANCE _hInstance, HINSTANCE _hPrevInstance, LPSTR _lpCmdLine, int _nCmdShow) { _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); //_CrtSetBreakAlloc(143430); new CEngine(); CEngine& engine = CEngine::GetSingleton(); //*/ // Register the window class WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, APPLICATION_NAME, NULL }; RegisterClassEx(&wc); // Calcular el tamano de nuestra ventana RECT rc = { 0, 0, WIDTH, HEIGHT }; AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, FALSE); // Create the application's window HWND hWnd = CreateWindow(APPLICATION_NAME, APPLICATION_NAME, WS_OVERLAPPEDWINDOW, 100, 100, rc.right - rc.left, rc.bottom - rc.top, NULL, NULL, wc.hInstance, NULL); // Añadir aquí el Init de la applicacioón engine.Init(); engine.getPhysXManager()->InitPhysx(); CContextManager& context = *(CEngine::GetSingleton().getContextManager()); context.CreateContext(hWnd, WIDTH, HEIGHT); ShowWindow(hWnd, SW_SHOWDEFAULT); context.CreateBackBuffer(hWnd, WIDTH, HEIGHT); #ifndef _DEBUG ToggleFullscreen( hWnd ); #endif CPlayer *videoPlayer = NULL; // Initialize the player object. HRESULT hr = CPlayer::CreateInstance(hWnd, hWnd, &videoPlayer); CEngine::GetSingleton().setPlayerManager(videoPlayer); engine.getTextureManager()->Init(); engine.getDebugRender()->Init(); engine.getEffectsManager()->load("Data\\effects.xml"); engine.getRenderableObjectTechniqueManager()->Load("Data\\pool_renderable_objects.xml"); engine.getMaterialManager()->load("Data\\materials.xml"); engine.getCookedMeshManager()->SetCookedMeshPath("Cache\\Cooked\\"); engine.getStaticMeshManager()->Load("Data\\static_meshes.xml"); engine.getAnimatedMeshManager()->Load("Data\\animated_models.xml"); engine.getParticleManager()->Load("Data\\particle_classes.xml"); engine.getLightManager()->Load("Data\\lights.xml"); engine.getSceneRendererCommandManager()->Load("Data\\scene_renderer_commands.xml"); engine.getSceneManager()->Initialize("Data\\Scenes\\"); engine.getSoundManager()->InitAll("Data\\Sound\\Soundbanks\\SoundbanksInfo.xml", "Data\\Sound\\speakers.xml"); { CInputManagerImplementation inputManager(hWnd); CInputManager::SetCurrentInputManager(&inputManager); inputManager.LoadCommandsFromFile("Data\\input.xml"); engine.getCinematicManager()->LoadFilesInDir("Data\\Animations\\"); //#ifdef _DEBUG CDebugHelperImplementation debugHelper(context.GetDevice()); CDebugHelper::SetCurrentDebugHelper(&debugHelper); //#endif CApplication application(&context); engine.setApplication( &application ); engine.getScriptManager()->Initialize("Data\\scripting.xml"); engine.getComponentManager()->FirstInitialization(); UpdateWindow(hWnd); MSG msg; ZeroMemory(&msg, sizeof(msg)); HCURSOR cursor = LoadCursor( NULL, IDC_ARROW ); SetCursor( cursor ); // Añadir en el while la condición de salida del programa de la aplicación auto previousTime = std::chrono::high_resolution_clock::now(); bool hasFocus = true; bool first = true; while (msg.message != WM_QUIT && !application.ShouldQuit()) { if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) { if (!debugHelper.Update(msg.hwnd, msg.message, msg.wParam, msg.lParam)) { TranslateMessage(&msg); DispatchMessage(&msg); } } else { if (! CEngine::GetSingleton().getPlayerManager()->IsVideoPlaying()) { inputManager.BeginFrame(); auto now = std::chrono::high_resolution_clock::now(); double l_ElapsedTime = std::chrono::duration_cast<std::chrono::microseconds>( ( now - previousTime ) ).count() * 0.000001; CEngine::GetSingleton().getTimerManager()->m_elapsedTime = l_ElapsedTime; previousTime = now; application.Update(l_ElapsedTime); application.Render(); application.PostRender( l_ElapsedTime ); inputManager.EndFrame(); } else { inputManager.BeginFrame(); if (inputManager.IsActionActive("MOUSE_RELEASED")) { CEngine::GetSingleton().getPlayerManager()->Stop(); } inputManager.EndFrame(); } } } } CEngine::ReleaseSingleton(); UnregisterClass(APPLICATION_NAME, wc.hInstance); return 0; }