moved floors audio logic from audio class

This commit is contained in:
Sandro Sobczyński
2020-11-04 22:33:16 +01:00
parent efe34c677d
commit 1757ef67dc
7 changed files with 35 additions and 15 deletions
@@ -17,6 +17,7 @@ class AudioListener
public: public:
virtual ~AudioListener(){}; virtual ~AudioListener(){};
virtual void onAudioTick() = 0; virtual void onAudioTick() = 0;
virtual void onAudioFinish() = 0;
private: private:
}; };
+1 -1
View File
@@ -56,7 +56,7 @@ private:
void loadModules(); void loadModules();
void initAUDSRV(); void initAUDSRV();
int ret, played; int ret;
char chunk[2048]; char chunk[2048];
FILE *wav; FILE *wav;
audsrv_fmt_t format; audsrv_fmt_t format;
+4 -6
View File
@@ -133,7 +133,6 @@ void Audio::loadSong(char *t_filename)
else else
{ {
fseek(wav, 0x30, SEEK_SET); fseek(wav, 0x30, SEEK_SET);
played = 0;
songLoaded = 1; songLoaded = 1;
PRINT_LOG("Song loaded!"); PRINT_LOG("Song loaded!");
} }
@@ -216,15 +215,14 @@ void Audio::work()
isTrackDone = true; isTrackDone = true;
return; return;
} }
played++; for (u32 i = 0; i < addedListeners; i++)
if ((played + 20) % 41 == 0 && addedListeners) listeners[i]->onAudioTick();
for (u32 i = 0; i < addedListeners; i++)
listeners[i]->onAudioTick();
} }
else else
{ {
PRINT_LOG("Song " SONG_NAME " finished. Running again..."); 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); fseek(wav, 0x30, SEEK_SET);
isTrackDone = false; isTrackDone = false;
} }
+23 -5
View File
@@ -17,7 +17,10 @@
const u8 FLOORS_COUNT = 64; // Temp change it also in floor_manager.hpp const u8 FLOORS_COUNT = 64; // Temp change it also in floor_manager.hpp
Floors::Floors(Engine *t_engine) 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() {} Floors::~Floors() {}
@@ -28,11 +31,10 @@ Floors::~Floors() {}
void Floors::onInit() void Floors::onInit()
{ {
engine->renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes); engine->renderer->setCameraDefinitions(&camera.worldView, &camera.unitCirclePosition, camera.planes);
engine->audio.init(2); engine->audio.init(1);
engine->audio.addListener(&floorManager); engine->audio.addListener(this);
engine->audio.addListener(&lightManager);
engine->audio.loadSong("NF-CHILL.WAV"); engine->audio.loadSong("NF-CHILL.WAV");
engine->audio.setVolume(1); engine->audio.setVolume(100);
engine->audio.play(); engine->audio.play();
texRepo = engine->renderer->getTextureRepository(); texRepo = engine->renderer->getTextureRepository();
texRepo->addByMesh("warrior/", player.mesh); texRepo->addByMesh("warrior/", player.mesh);
@@ -54,3 +56,19 @@ void Floors::onUpdate()
for (u8 i = 0; i < FLOORS_COUNT; i++) for (u8 i = 0; i < FLOORS_COUNT; i++)
engine->renderer->drawByPath3(floorManager.floors[i].mesh, lightManager.bulbs, lightManager.bulbsCount); 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;
}
+4 -1
View File
@@ -20,7 +20,7 @@
#include "objects/player.hpp" #include "objects/player.hpp"
#include "./camera.hpp" #include "./camera.hpp"
class Floors : public Game class Floors : public Game, AudioListener
{ {
public: public:
@@ -29,10 +29,13 @@ public:
void onInit(); void onInit();
void onUpdate(); void onUpdate();
void onAudioTick();
void onAudioFinish();
Engine *engine; Engine *engine;
private: private:
u32 audioTicks;
TextureRepository *texRepo; TextureRepository *texRepo;
LightManager lightManager; LightManager lightManager;
FloorManager floorManager; FloorManager floorManager;
@@ -20,7 +20,7 @@ class Player; // Forward definition
#include "../objects/floor.hpp" #include "../objects/floor.hpp"
/** Class which is maintaining floors objects */ /** Class which is maintaining floors objects */
class FloorManager : public AudioListener class FloorManager
{ {
public: public:
@@ -15,7 +15,7 @@
#include <models/audio_listener.hpp> #include <models/audio_listener.hpp>
/** Class which is maintaining floors objects */ /** Class which is maintaining floors objects */
class LightManager : public AudioListener class LightManager
{ {
public: public: