2022-10-09 01:13:17 -04:00
|
|
|
#ifndef _CSKINNEDMODEL
|
|
|
|
|
#define _CSKINNEDMODEL
|
2022-09-13 00:26:54 -04:00
|
|
|
|
|
|
|
|
#include "types.h"
|
|
|
|
|
|
2022-11-25 14:41:28 +02:00
|
|
|
#include "Kyoto/TToken.hpp"
|
|
|
|
|
|
|
|
|
|
#include "rstl/auto_ptr.hpp"
|
2026-02-28 00:58:47 -07:00
|
|
|
#include "rstl/optional_object.hpp"
|
2022-11-25 14:41:28 +02:00
|
|
|
|
|
|
|
|
class CModel;
|
2026-02-28 00:58:47 -07:00
|
|
|
class CModelFlags;
|
2022-11-25 14:41:28 +02:00
|
|
|
class CSkinRules;
|
|
|
|
|
class CCharLayoutInfo;
|
2026-02-28 00:58:47 -07:00
|
|
|
class CPoseAsTransforms;
|
2025-04-22 23:57:41 -07:00
|
|
|
class CVector3f;
|
2026-02-28 00:58:47 -07:00
|
|
|
class CVertexMorphEffect;
|
2022-11-25 14:41:28 +02:00
|
|
|
|
2022-09-13 00:26:54 -04:00
|
|
|
class CSkinnedModel {
|
|
|
|
|
public:
|
2026-02-28 00:58:47 -07:00
|
|
|
enum EDataOwnership {
|
|
|
|
|
kDO_Unowned,
|
|
|
|
|
kDO_Owned,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
CSkinnedModel(const CSkinnedModel&);
|
|
|
|
|
CSkinnedModel(const TLockedToken< CModel >&, const TLockedToken< CSkinRules >&,
|
|
|
|
|
const TLockedToken< CCharLayoutInfo >&, EDataOwnership);
|
2022-11-25 14:41:28 +02:00
|
|
|
virtual ~CSkinnedModel();
|
|
|
|
|
|
|
|
|
|
TLockedToken< CModel >& Model() { return x4_model; }
|
|
|
|
|
const TLockedToken< CModel >& GetModel() const { return x4_model; }
|
2026-02-28 00:58:47 -07:00
|
|
|
const TLockedToken< CCharLayoutInfo >& GetLayoutInfo() const { return x1c_layoutInfo; }
|
|
|
|
|
|
|
|
|
|
void CalculateDefault();
|
|
|
|
|
int GetNumPoints() const;
|
|
|
|
|
const CVector3f* GetPositions() const;
|
|
|
|
|
void Calculate(const CPoseAsTransforms&, const rstl::optional_object< CVertexMorphEffect >&,
|
|
|
|
|
const float*, float*);
|
|
|
|
|
void Draw(const CModelFlags&) const;
|
2022-11-25 14:41:28 +02:00
|
|
|
|
|
|
|
|
static void SetPointGeneratorFunc(void*, void (*)(void*, const CVector3f*, const CVector3f*, int));
|
2025-01-30 22:00:30 -07:00
|
|
|
static void ClearPointGeneratorFunc();
|
|
|
|
|
static void RemoveDummySkinnedModelRef();
|
2022-11-25 14:41:28 +02:00
|
|
|
|
2022-09-13 00:26:54 -04:00
|
|
|
private:
|
2022-11-25 14:41:28 +02:00
|
|
|
TLockedToken< CModel > x4_model;
|
|
|
|
|
TLockedToken< CSkinRules > x10_skinRules;
|
|
|
|
|
TLockedToken< CCharLayoutInfo > x1c_layoutInfo;
|
2026-02-28 00:58:47 -07:00
|
|
|
rstl::auto_ptr< float[] > x28_vertWorkspace;
|
|
|
|
|
rstl::auto_ptr< float[] > x30_normalWorkspace;
|
|
|
|
|
bool x38_owned;
|
|
|
|
|
bool x39_disableWorkspaces;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class CSkinnedModelWithAvgNormals {
|
|
|
|
|
CSkinnedModel x0_skinnedModel;
|
2026-03-19 20:55:56 -06:00
|
|
|
uchar x3c_pad[4];
|
2026-02-28 00:58:47 -07:00
|
|
|
const float* x40_avgNormals;
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
const CSkinnedModel& GetSkinnedModel() const { return x0_skinnedModel; }
|
|
|
|
|
const float* GetAvgNormals() const { return x40_avgNormals; }
|
2022-09-13 00:26:54 -04:00
|
|
|
};
|
|
|
|
|
|
2022-10-09 01:13:17 -04:00
|
|
|
#endif // _CSKINNEDMODEL
|