// Update the demo void Demo::Update() { Demo* pDemo = Demo::privGetInstance(); UNUSED(pDemo); // Need to keep track of elapsed time static clock_t currTime; currTime = clock(); static clock_t lastTime = currTime; float elapsedTime = (float) (currTime - lastTime) / CLOCKS_PER_SEC; elapsedTime; lastTime = currTime; // Max frame time if (elapsedTime >= 0.05f) elapsedTime = 0.05f; // First check to see if time is slowed pDemo->privCheckSlowTime(elapsedTime); // Move at one tenth speed if so if (pDemo->timeSlowed) { elapsedTime *= 0.10f; } // Adjust crosshair position pDemo->privMoveCrosshairs(elapsedTime); // Fire bullet pDemo->privFireBullet(elapsedTime); // update our bullet pDemo->bullet.Update(elapsedTime); // update our bricks for (int i = 0; i < NUM_BRICKS; i++) { pDemo->bricks[i].Update(elapsedTime); } // Check for any collisions and handle them pDemo->privCheckCollisions(elapsedTime); // Check if space bar is pressed // If so reset the demo short space = GetKeyState(0x20); bool spacePressed = (space & 0x80) != 0; if (spacePressed) pDemo->privReset(); };
// Run the demo void Demo::Run() { // Get the instance Demo *p = Demo::privGetInstance(); p->running = true; p->privReset(); // Main message loop MSG msg = { 0 }; // Game Loop until an exit while (p->running) { // Check messages if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); if (WM_QUIT == msg.message) { p->Quit(); continue; } } else { // called once per frame, update data, transformations, etc p->Update(); // called once per frame, only do rendering here p->Draw(); } } };