Added framecap

This commit is contained in:
Robin Rottstädt 2023-09-23 23:51:13 +02:00
parent 7cbc525dc6
commit 14992d0939
No known key found for this signature in database
GPG key ID: 630B61F1D46CCE35

View file

@ -14,13 +14,15 @@
#include <paradiso/vector.hpp> #include <paradiso/vector.hpp>
#include <paradiso/window.hpp> #include <paradiso/window.hpp>
#include <unordered_map> #include <chrono>
#include <iomanip> #include <iomanip>
#include <iostream> #include <iostream>
#include <unordered_map>
#include "lib/image_loader.hpp" #include "lib/image_loader.hpp"
const int frame_rate = 60;
struct Background { struct Background {
paradiso::Sprite backgroundLeft; paradiso::Sprite backgroundLeft;
paradiso::Sprite backgroundRight; paradiso::Sprite backgroundRight;
@ -57,7 +59,7 @@ struct Background {
if (sprite->pivot.x() <= -2.0f) { if (sprite->pivot.x() <= -2.0f) {
sprite->pivot.x() += 4.0f; sprite->pivot.x() += 4.0f;
} }
sprite->pivot.x() -= 0.0006f; sprite->pivot.x() -= 0.001f;
shader.set_uniform("pivot", sprite->pivot); shader.set_uniform("pivot", sprite->pivot);
shader.set_uniform("scale", sprite->scale); shader.set_uniform("scale", sprite->scale);
shader.set_uniform("rotation", sprite->rotation); shader.set_uniform("rotation", sprite->rotation);
@ -91,7 +93,7 @@ struct Grass {
if (sprite->pivot.x() <= -2.0f) { if (sprite->pivot.x() <= -2.0f) {
sprite->pivot.x() += 4.0f; sprite->pivot.x() += 4.0f;
} }
sprite->pivot.x() -= 0.005f; sprite->pivot.x() -= 0.035f;
shader.set_uniform("pivot", sprite->pivot); shader.set_uniform("pivot", sprite->pivot);
shader.set_uniform("scale", sprite->scale); shader.set_uniform("scale", sprite->scale);
shader.set_uniform("rotation", sprite->rotation); shader.set_uniform("rotation", sprite->rotation);
@ -114,10 +116,10 @@ struct FlappyBird {
unsigned int flapCounter = 0; // How many ticks since last flap unsigned int flapCounter = 0; // How many ticks since last flap
float velocity = 0.0f; float velocity = 0.0f;
const float max_velocity = 0.02f; const float max_velocity = 0.05f;
const float gravity = -0.0002f; const float gravity = -0.004f;
const float move_up_velocity = 0.0003f; const float move_up_velocity = 0.0055f;
bool move_up = false; bool move_up = false;
bool paused = true; bool paused = true;
@ -209,7 +211,7 @@ struct FlappyBird {
} }
// Update rotation // Update rotation
rotation = velocity * 20.0f; rotation = velocity * 15.0f;
} }
// keyboard handler // keyboard handler
@ -270,6 +272,8 @@ auto main() -> int {
auto flappyBird = FlappyBird{}; auto flappyBird = FlappyBird{};
// timer
// das update führt den hier mitgegebnen Ausdruck innerhalb der internen // das update führt den hier mitgegebnen Ausdruck innerhalb der internen
// Updates des Fensters auf. Es wird hier auch explizit ein bool gefordert // Updates des Fensters auf. Es wird hier auch explizit ein bool gefordert
// damit das update auch zu jederzeit unterbrochen werden kann // damit das update auch zu jederzeit unterbrochen werden kann
@ -278,6 +282,7 @@ auto main() -> int {
.position = paradiso::Point{.x = 0, .y = 0}, .size = size}); .position = paradiso::Point{.x = 0, .y = 0}, .size = size});
ctx.clear(); ctx.clear();
auto t1 = std::chrono::high_resolution_clock::now();
// Keyboard and state change // Keyboard and state change
flappyBird.on_keyboard(w.keyboard_input()); flappyBird.on_keyboard(w.keyboard_input());
@ -288,6 +293,13 @@ auto main() -> int {
grass.draw(shader); grass.draw(shader);
flappyBird.draw(shader); flappyBird.draw(shader);
// wait for frame rate
auto t2 = std::chrono::high_resolution_clock::now();
auto duration =
std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1);
auto wait = std::chrono::microseconds(1000000 / frame_rate) - duration;
std::this_thread::sleep_for(wait);
// Quit // Quit
return !(w.keyboard_input().size() && return !(w.keyboard_input().size() &&
w.keyboard_input().top().key == 'Q'); w.keyboard_input().top().key == 'Q');