#pragma once #include #include "RetroTypes.hpp" #include "IOStreams.hpp" #include "IFactory.hpp" namespace urde { struct SObjectTag; class CVParamTransfer; class IObj; class CFactoryMgr { std::unordered_map m_factories; std::unordered_map m_memFactories; public: CFactoryFnReturn MakeObject(const SObjectTag& tag, urde::CInputStream& in, const CVParamTransfer& paramXfer, CObjectReference* selfRef); bool CanMakeMemory(const urde::SObjectTag& tag) const; CFactoryFnReturn MakeObjectFromMemory(const SObjectTag& tag, std::unique_ptr&& buf, int size, bool compressed, const CVParamTransfer& paramXfer, CObjectReference* selfRef); void AddFactory(FourCC key, FFactoryFunc func) {m_factories[key] = func;} void AddFactory(FourCC key, FMemFactoryFunc func) {m_memFactories[key] = func;} enum class ETypeTable : u8 { CLSN, CMDL, CSKR, ANIM, CINF, TXTR, PLTT, FONT, ANCS, EVNT, MADF, MLVL, MREA, MAPW, MAPA, SAVW, SAVA, PART, WPSC, SWHC, DPSC, ELSC, CRSC, AFSM, DCLN, AGSC, ATBL, CSNG, STRG, SCAN, PATH, DGRP, HMAP, CTWK, FRME, HINT, MAPU, DUMB, OIDS, Invalid = 127 }; static ETypeTable FourCCToTypeIdx(FourCC fcc); static FourCC TypeIdxToFourCC(ETypeTable fcc); }; }