This commit is contained in:
Crizomb 2025-06-10 17:40:16 +02:00
commit f698a38c7e
585 changed files with 118338 additions and 0 deletions

View file

@ -0,0 +1,77 @@
#include "Game.hpp"
#include <string>
#include <iostream>
#include <math.h>
const sf::Time Game::TimePerFrame = sf::seconds(1.f / 60.f);
Game::Game() {
assert(mFont.openFromFile("media/Sansation.ttf"));
// We do not need to do mStatisticsText.setFont(mFont); as mStatisticsText is
// initialized with a reference to mFont
mStatisticsText.setPosition({5.f, 5.f});
mStatisticsText.setCharacterSize(10);
}
void Game::run() {
sf::Clock clock;
sf::Time timeSinceLastUpdate = sf::Time::Zero;
AudioEmitter audioEmitter = AudioEmitter();
audioEmitter.generateMusic();
bool generated = false;
mWindow.setVerticalSyncEnabled(true);
while (mWindow.isOpen()) {
sf::Time elapsedTime = clock.restart();
timeSinceLastUpdate += elapsedTime;
while (timeSinceLastUpdate > TimePerFrame) {
if (32.f - fmod(audioEmitter.getTime(), 32.f) < audioEmitter.timeBeforeNewGeneration) {
if (!generated) {
audioEmitter.generateMusic();
generated = true;
}
} else {
generated = false;
}
timeSinceLastUpdate -= TimePerFrame;
processEvents(audioEmitter);
audioEmitter.audioUpdate();
update(TimePerFrame);
}
updateStatistics(audioEmitter);
render();
}
}
void Game::processEvents(AudioEmitter& audioEmitter) {
while (const std::optional event = mWindow.pollEvent()) {
if (const auto *keyPressed = event->getIf<sf::Event::KeyPressed>()) {
mTarget.handlePlayerInput(keyPressed->code, true);
} else if (const auto *keyReleased =
event->getIf<sf::Event::KeyReleased>()) {
mTarget.handlePlayerInput(keyReleased->code, false);
} else if (event->is<sf::Event::Closed>()) {
audioEmitter.audioEnd();
mWindow.close();
}
}
}
void Game::update(const sf::Time elapsedTime) { mTarget.update(elapsedTime); }
void Game::render() {
mWindow.clear();
mTarget.drawCurrent(mWindow);
mWindow.draw(mStatisticsText);
mWindow.display();
}
void Game::updateStatistics(AudioEmitter& audioEmitter) {
mStatisticsText.setString(std::format(
"Mesure = {}\nBeat = {} us", ceil(audioEmitter.getTime()/8.f),
ceil(fmod(audioEmitter.getTime(),8.f))));
mStatisticsUpdateTime -= sf::seconds(1.0f);
mStatisticsNumFrames = 0;
}