mirror of
https://github.com/zeldaret/botw
synced 2026-07-30 15:53:56 -04:00
ksys/res: Start implementing GParamList
Incomplete because many of the sub-objects have their constructors inlined into the GParamList parse function...
This commit is contained in:
@@ -0,0 +1,24 @@
|
||||
#pragma once
|
||||
|
||||
#include <heap/seadDisposer.h>
|
||||
|
||||
namespace ksys {
|
||||
|
||||
namespace res {
|
||||
class GParamList;
|
||||
}
|
||||
|
||||
namespace act {
|
||||
|
||||
// FIXME: incomplete
|
||||
class ActorParamMgr {
|
||||
SEAD_SINGLETON_DISPOSER(ActorParamMgr)
|
||||
public:
|
||||
void init(sead::Heap* heap, sead::Heap* debug_heap);
|
||||
|
||||
res::GParamList* getDummyGParamList() const;
|
||||
};
|
||||
|
||||
} // namespace act
|
||||
|
||||
} // namespace ksys
|
||||
@@ -1 +0,0 @@
|
||||
#include "KingSystem/Resource/GeneralParamList/resGParamListObject.h"
|
||||
@@ -87,6 +87,7 @@ enum class GParamListObjType {
|
||||
AirWall = 0x4D,
|
||||
Motorcycle = 0x4E,
|
||||
};
|
||||
inline constexpr size_t NumGParamListObjTypes = 1 + 0x4E;
|
||||
|
||||
/// Base class for GeneralParamList parameter objects.
|
||||
/// @bug This should have a virtual destructor...
|
||||
@@ -94,6 +95,8 @@ class GParamListObject : public sead::hostio::Node {
|
||||
public:
|
||||
virtual const char* getName() const = 0;
|
||||
|
||||
agl::utl::ParameterObj& getObj() { return mObj; }
|
||||
|
||||
protected:
|
||||
agl::utl::ParameterObj mObj;
|
||||
};
|
||||
|
||||
@@ -0,0 +1,98 @@
|
||||
#pragma once
|
||||
|
||||
#include "KingSystem/Resource/GeneralParamList/resGParamListObject.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
template <GParamListObjType>
|
||||
struct GParamListObjTypeTraits;
|
||||
|
||||
#define KSYS_DECLARE_GPARAM_TRAIT_(NAME) \
|
||||
template <> \
|
||||
struct GParamListObjTypeTraits<GParamListObjType::NAME> { \
|
||||
using type = class GParamListObject##NAME; \
|
||||
};
|
||||
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(System)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(General)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Enemy)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(EnemyLevel)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(EnemyRace)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(AttackInterval)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(EnemyShown)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(BindBone)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Attack)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(WeaponCommon)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(WeaponThrow)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Sandworm)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(SmallSword)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Rod)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(LargeSword)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Spear)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Shield)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Bow)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(WeaponOption)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(MasterSword)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GuardianMiniWeapon)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Player)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Camera)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Grab)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Armor)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ArmorEffect)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ArmorHead)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ArmorUpper)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ShiekerStone)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(SeriesArmor)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Liftable)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Item)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Rupee)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Arrow)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Bullet)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(CureItem)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(CookSpice)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(LumberjackTree)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Npc)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(NpcEquipment)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Zora)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Traveler)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Prey)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(AnimalFollowOffset)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ExtendedEntity)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(BindActor)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(EatTarget)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(AnimalUnit)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Insect)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Fish)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Rope)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Horse)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(HorseUnit)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(HorseObject)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(HorseRider)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(HorseCreator)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GiantArmorSlot)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GiantArmor)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Guardian)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(MonsterShop)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Swarm)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GelEnemy)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Nest)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Wizzrobe)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(StalEnemy)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GuardianMini)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ClothReaction)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Global)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Beam)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(AutoGen)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(ChemicalType)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Golem)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(HorseTargetedInfo)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(WolfLink)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Event)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(GolemIK)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(PictureBook)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(AirWall)
|
||||
KSYS_DECLARE_GPARAM_TRAIT_(Motorcycle)
|
||||
|
||||
#undef KSYS_DECLARE_GPARAM_TRAIT_
|
||||
|
||||
} // namespace ksys::res
|
||||
@@ -1 +1,57 @@
|
||||
#include "KingSystem/Resource/resResourceGParamList.h"
|
||||
#include <KingSystem/ActorSystem/actActorParamMgr.h>
|
||||
#include <agl/Utils/aglParameter.h>
|
||||
#include <prim/seadRuntimeTypeInfo.h>
|
||||
#include "KingSystem/Resource/GeneralParamList/resGParamListObject.h"
|
||||
#include "KingSystem/Resource/GeneralParamList/resGParamListTraits.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
void GParamList::doCreate_(u8*, u32, sead::Heap*) {}
|
||||
|
||||
template <GParamListObjType Type>
|
||||
KSYS_ALWAYS_INLINE void GParamList::add(const agl::utl::ResParameterList& list,
|
||||
const sead::SafeString& name, sead::Heap* heap,
|
||||
GParamList* dummy_list) {
|
||||
const auto pobj = agl::utl::getResParameterObj(list, name);
|
||||
if (pobj.ptr()) {
|
||||
using T = typename GParamListObjTypeTraits<Type>::type;
|
||||
|
||||
auto* obj = new (heap) T;
|
||||
if (obj)
|
||||
addObj(&obj->getObj(), obj->getName());
|
||||
|
||||
mObjects[s32(Type)] = obj;
|
||||
|
||||
} else {
|
||||
mObjects[s32(Type)] = dummy_list ? dummy_list->mObjects[s32(Type)] : nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool GParamList::parse_(u8* data, size_t, sead::Heap* heap) {
|
||||
GParamList* dummy_list = nullptr;
|
||||
if (!sead::IsDerivedFrom<DummyGParamList>(this) && act::ActorParamMgr::instance())
|
||||
dummy_list = act::ActorParamMgr::instance()->getDummyGParamList();
|
||||
|
||||
mObjects.allocBufferAssert(NumGParamListObjTypes, heap);
|
||||
|
||||
const agl::utl::ResParameterArchive archive{data};
|
||||
|
||||
// TODO: System, etc.
|
||||
|
||||
if (data)
|
||||
applyResParameterArchive(archive);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void GParamList::finalize_() {}
|
||||
|
||||
void DummyGParamList::doCreate_(u8*, u32, sead::Heap*) {}
|
||||
|
||||
bool DummyGParamList::parse_(u8* data, size_t size, sead::Heap* heap) {
|
||||
GParamList::parse_(data, size, heap);
|
||||
return true;
|
||||
}
|
||||
|
||||
} // namespace ksys::res
|
||||
|
||||
@@ -1 +1,46 @@
|
||||
#pragma once
|
||||
|
||||
#include <container/seadBuffer.h>
|
||||
#include "KingSystem/Resource/GeneralParamList/resGParamListObject.h"
|
||||
#include "KingSystem/Resource/resResource.h"
|
||||
#include "KingSystem/Utils/ParamIO.h"
|
||||
#include "KingSystem/Utils/Types.h"
|
||||
|
||||
namespace ksys::res {
|
||||
|
||||
class GParamList : public ParamIO, public Resource {
|
||||
SEAD_RTTI_OVERRIDE(GParamList, Resource)
|
||||
public:
|
||||
GParamList() : ParamIO("bgparamlist", 0) {}
|
||||
~GParamList() override = default;
|
||||
|
||||
bool ParamIO_m0() override { return false; }
|
||||
void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override;
|
||||
bool needsParse() const override { return true; }
|
||||
|
||||
protected:
|
||||
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
|
||||
void finalize_() override;
|
||||
|
||||
private:
|
||||
template <GParamListObjType Type>
|
||||
void add(const agl::utl::ResParameterList& list, const sead::SafeString& name, sead::Heap* heap,
|
||||
GParamList* dummy_list);
|
||||
|
||||
sead::Buffer<GParamListObject*> mObjects;
|
||||
};
|
||||
KSYS_CHECK_SIZE_NX150(GParamList, 0x2c0);
|
||||
|
||||
class DummyGParamList : public GParamList {
|
||||
SEAD_RTTI_OVERRIDE(DummyGParamList, GParamList)
|
||||
public:
|
||||
using GParamList::GParamList;
|
||||
~DummyGParamList() override = default;
|
||||
|
||||
void doCreate_(u8* buffer, u32 bufferSize, sead::Heap* heap) override;
|
||||
|
||||
private:
|
||||
bool parse_(u8* data, size_t size, sead::Heap* heap) override;
|
||||
};
|
||||
|
||||
} // namespace ksys::res
|
||||
|
||||
Reference in New Issue
Block a user