#include "KingSystem/Resource/resResourceGParamList.h" #include #include #include "KingSystem/ActorSystem/actActorParamMgr.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObject.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttack.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectAttackInterval.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectBindBone.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemy.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyLevel.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyRace.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectEnemyShown.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectGeneral.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectSystem.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectWeaponCommon.h" #include "KingSystem/Resource/GeneralParamList/resGParamListObjectWeaponThrow.h" #include "KingSystem/Resource/GeneralParamList/resGParamListTraits.h" namespace ksys::res { void GParamList::doCreate_(u8*, u32, sead::Heap*) {} template 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; 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(this) && act::ActorParamMgr::instance()) dummy_list = act::ActorParamMgr::instance()->getDummyGParamList(); mObjects.allocBufferAssert(NumGParamListObjTypes, heap); const agl::utl::ResParameterArchive archive{data}; add(archive.getRootList(), "System", heap, dummy_list); add(archive.getRootList(), "General", heap, dummy_list); add(archive.getRootList(), "Enemy", heap, dummy_list); add(archive.getRootList(), "EnemyLevel", heap, dummy_list); add(archive.getRootList(), "EnemyRace", heap, dummy_list); add(archive.getRootList(), "AttackInterval", heap, dummy_list); add(archive.getRootList(), "EnemyShown", heap, dummy_list); add(archive.getRootList(), "BindBone", heap, dummy_list); add(archive.getRootList(), "Attack", heap, dummy_list); add(archive.getRootList(), "WeaponCommon", heap, dummy_list); add(archive.getRootList(), "WeaponThrow", heap, dummy_list); // TODO: the rest 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