@@ -57,6 +57,19 @@ class Playstate : public our::State {
5757 gameplay::PlayOverlayStats overlayStats;
5858 gameplay::PlayerHUDSystem playerHud;
5959 gameplay::WeaponSwitcherSystem weaponSwitcher;
60+ bool waitFirstFrame = false ;
61+
62+ void renderFrame (float dt) {
63+ renderer.render (&world, getApp ()->getFrameBufferSize ());
64+ enemyHealthBars.render (&world, getApp (), uiRenderer, activeCamera, collisionSystem);
65+ playerHud.render (&world, playerEntity, getApp ()->getFrameBufferSize (), &textRenderer, enemySpawner,
66+ overlayStats.score );
67+
68+ float aimTarget = cameraController.isAiming () ? 1 .0f : 0 .0f ;
69+ float aimSpeed = cameraController.getAimSpeed ();
70+ aimBlend = glm::mix (aimBlend, aimTarget, glm::clamp (aimSpeed * dt, 0 .0f , 1 .0f ));
71+ crosshair.render (getApp (), uiRenderer, aimBlend);
72+ }
6073
6174 void displayFPS () const {
6275 ImGui::SetNextWindowPos (ImVec2 (10 .0f , 10 .0f ), ImGuiCond_Always);
@@ -130,12 +143,19 @@ class Playstate : public our::State {
130143 crosshair.deserialize (config);
131144 overlayStats = {};
132145 weaponSwitcher.initialize (&world, playerEntity);
146+ waitFirstFrame = true ;
133147 }
134148
135149 void onDraw (double deltaTime) override {
136150 float dt = static_cast <float >(deltaTime);
137151 our::Keyboard& keyboard = getApp ()->getKeyboard ();
138152
153+ if (waitFirstFrame) {
154+ waitFirstFrame = false ;
155+ renderFrame (0 .0f );
156+ return ;
157+ }
158+
139159 if (overlay.handleActiveFrame (deltaTime)) return ;
140160
141161 if (keyboard.justPressed (GLFW_KEY_ESCAPE )) {
@@ -236,17 +256,7 @@ class Playstate : public our::State {
236256 getApp ()->getAudioSystem ().update (&world);
237257 billboardSystem.update (&world, activeCamera ? activeCamera->getOwner () : nullptr );
238258
239- // Rendering
240- renderer.render (&world, getApp ()->getFrameBufferSize ());
241- enemyHealthBars.render (&world, getApp (), uiRenderer, activeCamera, collisionSystem);
242- playerHud.render (&world, playerEntity, getApp ()->getFrameBufferSize (), &textRenderer, enemySpawner,
243- overlayStats.score );
244-
245- // HUD
246- float aimTarget = cameraController.isAiming () ? 1 .0f : 0 .0f ;
247- float aimSpeed = cameraController.getAimSpeed ();
248- aimBlend = glm::mix (aimBlend, aimTarget, glm::clamp (aimSpeed * dt, 0 .0f , 1 .0f ));
249- crosshair.render (getApp (), uiRenderer, aimBlend);
259+ renderFrame (dt);
250260#ifdef COLLISION_DEBUG_DRAW
251261 if (keyboard.justPressed (GLFW_KEY_F3 )) {
252262 collisionSystem.setDebugDrawEnabled (!collisionSystem.isDebugDrawEnabled ());
0 commit comments