Added full bank and sample external loading

This commit is contained in:
KiritoDv
2023-09-15 20:47:05 -06:00
parent dc644cc2ae
commit 6315d3fdd4
32 changed files with 6335 additions and 1000 deletions
+59
View File
@@ -1,6 +1,11 @@
#include "Engine.h"
#include "ImguiUI.h"
#include "port/importer/AnimationFactory.h"
#include "port/importer/AudioBankFactory.h"
#include "port/importer/AudioSampleFactory.h"
#include "audio/internal.h"
#include "banks_table.h"
#include "sequences_table.h"
#include <iostream>
#include <Fast3D/gfx_pc.h>
@@ -15,6 +20,8 @@ GameEngine::GameEngine(){
this->context->GetWindow()->SetTargetFps(30);
this->context->GetWindow()->SetMaximumFrameLatency(1);
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Anim, "Animation", std::make_shared<CubeOS::AnimationFactory>());
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Bank, "Bank", std::make_shared<CubeOS::AudioBankFactory>());
this->context->GetResourceManager()->GetResourceLoader()->RegisterResourceFactory(LUS::ResourceType::Audio, "Audio", std::make_shared<CubeOS::AudioSampleFactory>());
}
void GameEngine::Create(){
@@ -50,4 +57,56 @@ extern "C" uint32_t GameEngine_GetSampleRate() {
extern "C" float GameEngine_GetAspectRatio() {
return gfx_current_dimensions.aspect_ratio;
}
extern "C" CtlEntry* GameEngine_LoadBank(uint8_t bankId) {
auto engine = GameEngine::Instance;
if(bankId > (sizeof(gBankTable) / sizeof(gBankTable[0]))){
return nullptr;
}
if(engine->banks.contains(bankId)){
return engine->banks[bankId];
}
auto ctl = static_cast<CtlEntry *>(ResourceGetDataByName(gBankTable[bankId]));
engine->banks[bankId] = ctl;
return ctl;
}
extern "C" uint8_t GameEngine_IsBankLoaded(uint8_t bankId) {
auto engine = GameEngine::Instance;
GameEngine_LoadBank(bankId);
return engine->banks.contains(bankId);
}
extern "C" void GameEngine_UnloadBank(uint8_t bankId) {
auto engine = GameEngine::Instance;
if(engine->banks.contains(bankId)){
engine->banks.erase(bankId);
}
}
extern "C" AudioBankSample* GameEngine_LoadSequence(uint8_t seqId) {
auto engine = GameEngine::Instance;
if(seqId > (sizeof(gSequenceTable) / sizeof(gSequenceTable[0]))){
return nullptr;
}
if(engine->samples.contains(seqId)){
return engine->samples[seqId];
}
auto sample = static_cast<AudioBankSample *>(ResourceGetDataByName(gSequenceTable[seqId]));
engine->samples[seqId] = sample;
return sample;
}
extern "C" uint8_t GameEngine_IsSequenceLoaded(uint8_t seqId) {
auto engine = GameEngine::Instance;
GameEngine_LoadSequence(seqId);
return engine->samples.contains(seqId);
}
extern "C" void GameEngine_UnloadSequence(uint8_t seqId) {
auto engine = GameEngine::Instance;
if(engine->samples.contains(seqId)){
engine->samples.erase(seqId);
}
}