From 1757ef67dc07c6615a2fbd11abf15e5b5f0beb71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sandro=20Sobczy=C5=84ski?= Date: Wed, 4 Nov 2020 22:33:16 +0100 Subject: [PATCH] moved floors audio logic from audio class --- src/engine/include/models/audio_listener.hpp | 1 + src/engine/include/modules/audio.hpp | 2 +- src/engine/modules/audio.cpp | 10 +++---- src/samples/floors/floors.cpp | 28 +++++++++++++++---- src/samples/floors/floors.hpp | 5 +++- src/samples/floors/managers/floor_manager.hpp | 2 +- src/samples/floors/managers/light_manager.hpp | 2 +- 7 files changed, 35 insertions(+), 15 deletions(-) diff --git a/src/engine/include/models/audio_listener.hpp b/src/engine/include/models/audio_listener.hpp index df2f411..1fcdeef 100644 --- a/src/engine/include/models/audio_listener.hpp +++ b/src/engine/include/models/audio_listener.hpp @@ -17,6 +17,7 @@ class AudioListener public: virtual ~AudioListener(){}; virtual void onAudioTick() = 0; + virtual void onAudioFinish() = 0; private: }; diff --git a/src/engine/include/modules/audio.hpp b/src/engine/include/modules/audio.hpp index 78750b3..4d8644f 100644 --- a/src/engine/include/modules/audio.hpp +++ b/src/engine/include/modules/audio.hpp @@ -56,7 +56,7 @@ private: void loadModules(); void initAUDSRV(); - int ret, played; + int ret; char chunk[2048]; FILE *wav; audsrv_fmt_t format; diff --git a/src/engine/modules/audio.cpp b/src/engine/modules/audio.cpp index 66892e4..845af05 100644 --- a/src/engine/modules/audio.cpp +++ b/src/engine/modules/audio.cpp @@ -133,7 +133,6 @@ void Audio::loadSong(char *t_filename) else { fseek(wav, 0x30, SEEK_SET); - played = 0; songLoaded = 1; PRINT_LOG("Song loaded!"); } @@ -216,15 +215,14 @@ void Audio::work() isTrackDone = true; return; } - played++; - if ((played + 20) % 41 == 0 && addedListeners) - for (u32 i = 0; i < addedListeners; i++) - listeners[i]->onAudioTick(); + for (u32 i = 0; i < addedListeners; i++) + listeners[i]->onAudioTick(); } else { PRINT_LOG("Song " SONG_NAME " finished. Running again..."); - played = 0; + for (u32 i = 0; i < addedListeners; i++) + listeners[i]->onAudioFinish(); fseek(wav, 0x30, SEEK_SET); isTrackDone = false; } diff --git a/src/samples/floors/floors.cpp b/src/samples/floors/floors.cpp index c9450d6..bbc7003 100644 --- a/src/samples/floors/floors.cpp +++ b/src/samples/floors/floors.cpp @@ -17,7 +17,10 @@ const u8 FLOORS_COUNT = 64; // Temp change it also in floor_manager.hpp Floors::Floors(Engine *t_engine) - : engine(t_engine), floorManager(FLOORS_COUNT), camera(&t_engine->screen) {} + : engine(t_engine), floorManager(FLOORS_COUNT), camera(&t_engine->screen) +{ + audioTicks = 0; +} Floors::~Floors() {} @@ -28,11 +31,10 @@ Floors::~Floors() {} void Floors::onInit() { engine->renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); - engine->audio.init(2); - engine->audio.addListener(&floorManager); - engine->audio.addListener(&lightManager); + engine->audio.init(1); + engine->audio.addListener(this); engine->audio.loadSong("NF-CHILL.WAV"); - engine->audio.setVolume(1); + engine->audio.setVolume(100); engine->audio.play(); texRepo = engine->renderer->getTextureRepository(); texRepo->addByMesh("warrior/", player.mesh); @@ -54,3 +56,19 @@ void Floors::onUpdate() for (u8 i = 0; i < FLOORS_COUNT; i++) engine->renderer->drawByPath3(floorManager.floors[i].mesh, lightManager.bulbs, lightManager.bulbsCount); } + +void Floors::onAudioTick() +{ + if ((++audioTicks + 20) % 41 == 0) + { + floorManager.onAudioTick(); + lightManager.onAudioTick(); + } + if (audioTicks > 10000) + audioTicks = 0; +} + +void Floors::onAudioFinish() +{ + audioTicks = 0; +} diff --git a/src/samples/floors/floors.hpp b/src/samples/floors/floors.hpp index 09447fc..4652233 100644 --- a/src/samples/floors/floors.hpp +++ b/src/samples/floors/floors.hpp @@ -20,7 +20,7 @@ #include "objects/player.hpp" #include "./camera.hpp" -class Floors : public Game +class Floors : public Game, AudioListener { public: @@ -29,10 +29,13 @@ public: void onInit(); void onUpdate(); + void onAudioTick(); + void onAudioFinish(); Engine *engine; private: + u32 audioTicks; TextureRepository *texRepo; LightManager lightManager; FloorManager floorManager; diff --git a/src/samples/floors/managers/floor_manager.hpp b/src/samples/floors/managers/floor_manager.hpp index 04cf7be..a6033a2 100644 --- a/src/samples/floors/managers/floor_manager.hpp +++ b/src/samples/floors/managers/floor_manager.hpp @@ -20,7 +20,7 @@ class Player; // Forward definition #include "../objects/floor.hpp" /** Class which is maintaining floors objects */ -class FloorManager : public AudioListener +class FloorManager { public: diff --git a/src/samples/floors/managers/light_manager.hpp b/src/samples/floors/managers/light_manager.hpp index dfaefd7..dbc3bf8 100644 --- a/src/samples/floors/managers/light_manager.hpp +++ b/src/samples/floors/managers/light_manager.hpp @@ -15,7 +15,7 @@ #include /** Class which is maintaining floors objects */ -class LightManager : public AudioListener +class LightManager { public: