#ifndef __URDE_CCHARACTERFACTORY_HPP__ #define __URDE_CCHARACTERFACTORY_HPP__ #include "IFactory.hpp" #include "IObjFactory.hpp" #include "CToken.hpp" #include "CSimplePool.hpp" #include "CAnimationSet.hpp" namespace urde { class CSimplePool; class CAnimCharacterSet; class CCharacterInfo; class CCharLayoutInfo; class CAdditiveAnimationInfo; class CTransitionDatabaseGame; class CAnimationManager; class CTransitionManager; class CAllFormatsAnimSource; class CAnimData; class CCharacterFactory : public IObjFactory { public: class CDummyFactory : public IFactory { public: CFactoryFnReturn Build(const SObjectTag&, const CVParamTransfer&); void BuildAsync(const SObjectTag&, const CVParamTransfer&, IObj**); void CancelBuild(const SObjectTag&); bool CanBuild(const SObjectTag&); const SObjectTag* GetResourceIdByName(const char*) const; FourCC GetResourceTypeById(ResId id) const; }; private: std::vector x4_charInfoDB; std::vector> x14_charLayoutInfoDB; std::shared_ptr x24_sysContext; std::shared_ptr x28_animMgr; std::shared_ptr x2c_transMgr; std::vector> x30_animSourceDB; std::vector> x40_additiveInfo; CAdditiveAnimationInfo x50_defaultAdditiveInfo; std::vector> x58_animResources; ResId x68_selfId; CDummyFactory x6c_dummyFactory; CSimplePool x70_cacheResPool; static std::vector GetCharacterInfoDB(const CAnimCharacterSet& ancs); static std::vector> GetCharLayoutInfoDB(CSimplePool& store, const std::vector& chars); public: CCharacterFactory(CSimplePool& store, const CAnimCharacterSet& ancs, ResId); std::unique_ptr CreateCharacter(int charIdx, bool loop, const TLockedToken& factory, int defaultAnim) const; ResId GetEventResourceIdForAnimResourceId(ResId animId) const; }; } #endif // __URDE_CCHARACTERFACTORY_HPP__