#ifndef __URDE_CSKINNEDMODEL_HPP__ #define __URDE_CSKINNEDMODEL_HPP__ #include "CToken.hpp" #include "CModel.hpp" #include "optional.hpp" namespace urde { class CModel; class CSkinRules; class CCharLayoutInfo; class CPoseAsTransforms; class CVertexMorphEffect; class IObjectStore; class CSkinnedModel { std::unique_ptr m_modelInst; TLockedToken x4_model; TLockedToken x10_skinRules; TLockedToken x1c_layoutInfo; public: enum class EDataOwnership { Zero, One }; CSkinnedModel(const TLockedToken& model, const TLockedToken& skinRules, const TLockedToken& layoutInfo); CSkinnedModel(IObjectStore& store, ResId model, ResId skinRules, ResId layoutInfo, EDataOwnership ownership); const TLockedToken& GetModel() const {return x4_model;} const TLockedToken& GetSkinRules() const {return x10_skinRules;} const TLockedToken& GetLayoutInfo() const {return x1c_layoutInfo;} void Calculate(const CPoseAsTransforms& pose, const std::experimental::optional&); void Draw(const CModelFlags& drawFlags) const; }; class CMorphableSkinnedModel : public CSkinnedModel { public: CMorphableSkinnedModel(IObjectStore& store, ResId model, ResId skinRules, ResId layoutInfo, EDataOwnership ownership); }; } #endif // __URDE_CSKINNEDMODEL_HPP__