1#include "ResourceManager.hh"
3#include "game/system/RaceConfig.hh"
9static const char *
const RESOURCE_PATHS[] = {
15void *ResourceManager::getFile(
const char *filename,
size_t *size, ArchiveId
id) {
16 s32 idx =
static_cast<s32
>(id);
17 return m_archives[idx]->isLoaded() ? m_archives[idx]->getFile(filename, size) :
nullptr;
21void *ResourceManager::getBsp(Vehicle vehicle,
size_t *size) {
24 const char *name = GetVehicleName(vehicle);
25 snprintf(buffer,
sizeof(buffer),
"/bsp/%s.bsp", name);
27 return m_archives[0]->isLoaded() ? m_archives[0]->getFile(buffer, size) :
nullptr;
36 filename = RESOURCE_PATHS[idx];
39 if (!m_archives[idx]->isLoaded() && filename) {
40 m_archives[idx]->load(filename);
43 return m_archives[idx];
49 snprintf(buffer,
sizeof(buffer),
"Race/Course/%s", COURSE_NAMES[
static_cast<s32
>(courseId)]);
50 m_archives[1]->load(buffer);
62 s_instance = EGG::egg_new<ResourceManager>();
67void ResourceManager::DestroyInstance() {
69 auto *instance = s_instance;
71 EGG::egg_delete(instance);
75ResourceManager::ResourceManager() {
76 m_archives =
static_cast<MultiDvdArchive **
>(
77 EGG::egg_alloc(ARCHIVE_COUNT *
sizeof(MultiDvdArchive *)));
78 for (u8 i = 0; i < ARCHIVE_COUNT; i++) {
79 m_archives[i] = Create(i);
84ResourceManager::~ResourceManager() {
87 WARN(
"ResourceManager instance not explicitly handled!");
95 return EGG::egg_new<MultiDvdArchive>();
Highest level abstraction for archive management and subsequent file retrieval.
High-level handling for generic system operations, such as input reading, race configuration,...