Skip to content

Commit 73db6c6

Browse files
authored
fix: prevent gameplay from starting behind loading screen (#76)
1 parent 1e2b574 commit 73db6c6

2 files changed

Lines changed: 23 additions & 11 deletions

File tree

src/common/application.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,8 @@ int our::Application::run(int run_for_frames) {
393393
nextState = nullptr;
394394
// Initialize the new scene
395395
currentState->onInitialize(sharedContextWindow);
396+
397+
last_frame_time = glfwGetTime();
396398
}
397399

398400
++current_frame;

src/states/play-state.hpp

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)