metaforce/Runtime/Graphics/CSkinnedModel.hpp

53 lines
1.5 KiB
C++
Raw Normal View History

2016-04-13 06:07:23 +00:00
#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<CBooModel> m_modelInst;
2016-04-14 21:42:47 +00:00
TLockedToken<CModel> x4_model;
TLockedToken<CSkinRules> x10_skinRules;
TLockedToken<CCharLayoutInfo> x1c_layoutInfo;
public:
2016-04-15 03:02:21 +00:00
enum class EDataOwnership
{
Zero,
One
};
CSkinnedModel(const TLockedToken<CModel>& model,
const TLockedToken<CSkinRules>& skinRules,
const TLockedToken<CCharLayoutInfo>& layoutInfo);
2016-04-15 03:02:21 +00:00
CSkinnedModel(IObjectStore& store, ResId model, ResId skinRules,
ResId layoutInfo, EDataOwnership ownership);
2016-04-14 21:42:47 +00:00
const TLockedToken<CModel>& GetModel() const {return x4_model;}
const TLockedToken<CSkinRules>& GetSkinRules() const {return x10_skinRules;}
const TLockedToken<CCharLayoutInfo>& GetLayoutInfo() const {return x1c_layoutInfo;}
void Calculate(const CPoseAsTransforms& pose, const std::experimental::optional<CVertexMorphEffect>&);
2016-04-14 21:42:47 +00:00
void Draw(const CModelFlags& drawFlags) const;
};
2016-04-15 03:02:21 +00:00
class CMorphableSkinnedModel : public CSkinnedModel
{
public:
CMorphableSkinnedModel(IObjectStore& store, ResId model, ResId skinRules,
ResId layoutInfo, EDataOwnership ownership);
};
}
2016-04-13 06:07:23 +00:00
#endif // __URDE_CSKINNEDMODEL_HPP__