ksys/res: Add Event resource classes

This commit is contained in:
Léo Lam
2021-06-15 18:14:57 +02:00
parent 7d8607f9e3
commit c81229dabf
6 changed files with 148 additions and 40 deletions
+2
View File
@@ -196,4 +196,6 @@ target_sources(uking PRIVATE
Event/resResourceDemo.cpp
Event/resResourceDemo.h
Event/resResourceEventFlow.cpp
Event/resResourceEventFlow.h
)
@@ -1,7 +1,20 @@
#include "KingSystem/Resource/Event/resResourceDemo.h"
#include "KingSystem/Resource/resEntryFactory.h"
#include "KingSystem/Resource/resSystem.h"
namespace ksys::res {
void Demo::registerFactory(sead::Heap* heap) {
auto* rm = sead::ResourceMgr::instance();
if (!rm)
return;
if (rm->getDefaultFactory() != rm->findFactory("bdemo"))
return;
res::registerEntryFactory(new (heap) EntryFactory<Demo>(1.0, sizeof(Demo)), "bdemo");
}
Demo::Demo() : agl::utl::IParameterIO(".bdemo", 0) {}
void Demo::doCreate_(u8* buffer, u32, sead::Heap*) {
@@ -12,6 +12,8 @@ class Demo : public sead::DirectResource, public agl::utl::IParameterIO {
public:
Demo();
static void registerFactory(sead::Heap* heap);
void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override;
agl::utl::ParameterObj mDemoSettingObj;
@@ -0,0 +1,44 @@
#include "KingSystem/Resource/Event/resResourceEventFlow.h"
#include <evfl/ResEventFlowFile.h>
#include "KingSystem/Resource/resEntryFactory.h"
#include "KingSystem/Resource/resSystem.h"
namespace ksys::res {
void EventFlowchart::registerFactory(sead::Heap* heap) {
registerEntryFactory(new (heap) EntryFactory<EventFlowchart>(1.0, sizeof(EventFlowchart)),
"bfevfl");
}
void EventFlowchart::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) {
m_res = evfl::ResEventFlowFile::ResCast(buffer);
}
void EventFlowchart::onDestroy_() {
if (m_res) {
m_res->Unrelocate();
m_res = nullptr;
}
}
EventFlowchart::~EventFlowchart() = default;
void EventTimeline::registerFactory(sead::Heap* heap) {
registerEntryFactory(new (heap) EntryFactory<EventTimeline>(1.0, sizeof(EventTimeline)),
"bfevtm");
}
void EventTimeline::doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) {
m_res = evfl::ResEventFlowFile::ResCast(buffer);
}
void EventTimeline::onDestroy_() {
if (m_res) {
m_res->Unrelocate();
m_res = nullptr;
}
}
EventTimeline::~EventTimeline() = default;
} // namespace ksys::res
@@ -0,0 +1,47 @@
#pragma once
#include "KingSystem/Resource/resResource.h"
namespace evfl {
struct ResEventFlowFile;
}
namespace ksys::res {
class EventFlowchart : public Resource {
SEAD_RTTI_OVERRIDE(EventFlowchart, Resource)
public:
EventFlowchart() = default;
~EventFlowchart() override;
static void registerFactory(sead::Heap* heap);
evfl::ResEventFlowFile* getRes() const { return m_res; }
private:
void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
void onDestroy_() override;
evfl::ResEventFlowFile* m_res = nullptr;
};
class EventTimeline : public Resource {
SEAD_RTTI_OVERRIDE(EventTimeline, Resource)
public:
EventTimeline() = default;
~EventTimeline() override;
static void registerFactory(sead::Heap* heap);
evfl::ResEventFlowFile* getRes() const { return m_res; }
private:
void doCreate_(u8* buffer, u32 buffer_size, sead::Heap* heap) override;
void onDestroy_() override;
evfl::ResEventFlowFile* m_res = nullptr;
};
} // namespace ksys::res