init
This commit is contained in:
commit
f698a38c7e
585 changed files with 118338 additions and 0 deletions
77
SimpleGame/src/Source/Game.cpp
Normal file
77
SimpleGame/src/Source/Game.cpp
Normal 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;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue