Visuel notes

This commit is contained in:
Crizomb 2025-06-13 21:31:16 +02:00
parent e2fb0d911a
commit 05f8b11dec
14 changed files with 137 additions and 50 deletions

View file

@ -1,4 +1,9 @@
#include "Game.hpp"
#include "AudioEmitter.hpp"
#include "NoteSprite.hpp"
#include "NoteTile.hpp"
#include "TilePattern.hpp"
#include <SFML/Graphics/Color.hpp>
#include <iostream>
#include <math.h>
#include <string>
@ -7,41 +12,41 @@ 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;
void generateTilePatternAndMusic(AudioEmitter &audio_emitter) {
generateTilePattern(audio_emitter.generateMusic(), audio_emitter);
}
processEvents(audioEmitter);
audioEmitter.audioUpdate();
update(TimePerFrame);
bool updateAudio(AudioEmitter &audioEmitter, bool generated) {
if (32.f - fmod(audioEmitter.getTimeTempo(), 32.f) <
audioEmitter.timeBeforeNewGeneration) {
if (!generated) {
generateTilePatternAndMusic(audioEmitter);
generated = true;
}
} else {
generated = false;
}
return generated;
}
void Game::run() {
AudioEmitter audioEmitter = AudioEmitter();
generateTilePatternAndMusic(audioEmitter);
bool generated = false;
mWindow.setFramerateLimit(60);
while (mWindow.isOpen()) {
updateStatistics(audioEmitter);
render();
generated = updateAudio(audioEmitter, generated);
processEvents(audioEmitter);
audioEmitter.audioUpdate();
update(TimePerFrame);
updateStatistics(audioEmitter);
}
}
@ -62,7 +67,8 @@ void Game::processEvents(AudioEmitter &audioEmitter) {
void Game::update(const sf::Time elapsedTime) { mTarget.update(elapsedTime); }
void Game::render() {
mWindow.clear();
mWindow.clear(sf::Color::Yellow);
NoteTile::update(1.0 / 60, mWindow);
mTarget.drawCurrent(mWindow);
mWindow.draw(mStatisticsText);
mWindow.display();
@ -70,8 +76,8 @@ void Game::render() {
void Game::updateStatistics(AudioEmitter &audioEmitter) {
mStatisticsText.setString(std::format(
"Mesure = {}\nBeat = {} us", ceil(audioEmitter.getTime() / 8.f),
ceil(fmod(audioEmitter.getTime(), 8.f))));
"Mesure = {}\nBeat = {} us", ceil(audioEmitter.getTimeTempo() / 8.f),
ceil(fmod(audioEmitter.getTimeTempo(), 8.f))));
mStatisticsUpdateTime -= sf::seconds(1.0f);
mStatisticsNumFrames = 0;