OpenClonk
StdMeshInstance::AttachedMesh Class Reference

#include <StdMesh.h>

Collaboration diagram for StdMeshInstance::AttachedMesh:
[legend]

Classes

class  Denumerator
 

Public Types

typedef Denumerator *(* DenumeratorFactoryFunc) ()
 

Public Member Functions

 AttachedMesh ()
 
 AttachedMesh (unsigned int number, StdMeshInstance *parent, StdMeshInstance *child, bool own_child, Denumerator *denumerator, unsigned int parent_bone, unsigned int child_bone, const StdMeshMatrix &transform, uint32_t flags)
 
 ~AttachedMesh ()
 
bool SetParentBone (const StdStrBuf &bone)
 
bool SetChildBone (const StdStrBuf &bone)
 
void SetAttachTransformation (const StdMeshMatrix &transformation)
 
const StdMeshMatrixGetFinalTransformation () const
 
uint32_t GetFlags () const
 
void CompileFunc (StdCompiler *pComp, DenumeratorFactoryFunc Factory)
 
void DenumeratePointers ()
 
bool ClearPointers (class C4Object *pObj)
 
unsigned int GetParentBone () const
 
unsigned int GetChildBone () const
 

Static Public Member Functions

template<typename T >
static DenumeratorDenumeratorFactory ()
 

Public Attributes

uint32_t Number {0}
 
StdMeshInstanceParent {nullptr}
 
StdMeshInstanceChild {nullptr}
 
bool OwnChild {true}
 
DenumeratorChildDenumerator {nullptr}
 

Friends

class StdMeshInstance
 
class StdMeshUpdate
 

Detailed Description

Definition at line 483 of file StdMesh.h.

Member Typedef Documentation

◆ DenumeratorFactoryFunc

typedef Denumerator*(* StdMeshInstance::AttachedMesh::DenumeratorFactoryFunc) ()

Definition at line 499 of file StdMesh.h.

Constructor & Destructor Documentation

◆ AttachedMesh() [1/2]

StdMeshInstance::AttachedMesh::AttachedMesh ( )
default

◆ AttachedMesh() [2/2]

StdMeshInstance::AttachedMesh::AttachedMesh ( unsigned int  number,
StdMeshInstance parent,
StdMeshInstance child,
bool  own_child,
Denumerator denumerator,
unsigned int  parent_bone,
unsigned int  child_bone,
const StdMeshMatrix transform,
uint32_t  flags 
)

Definition at line 975 of file StdMesh.cpp.

976  :
977  Number(number), Parent(parent), Child(child), OwnChild(own_child), ChildDenumerator(denumerator),
978  ParentBone(parent_bone), ChildBone(child_bone), AttachTrans(transform), Flags(flags),
979  FinalTransformDirty(true)
980 {
981  MapBonesOfChildToParent(parent->GetMesh().GetSkeleton(), child->GetMesh().GetSkeleton());
982 }
const StdMeshSkeleton & GetSkeleton() const
Definition: StdMesh.h:203
StdMeshInstance * Child
Definition: StdMesh.h:511
Denumerator * ChildDenumerator
Definition: StdMesh.h:513
StdMeshInstance * Parent
Definition: StdMesh.h:510
const StdMesh & GetMesh() const
Definition: StdMesh.h:622

References StdMeshInstance::GetMesh(), and StdMesh::GetSkeleton().

Here is the call graph for this function:

◆ ~AttachedMesh()

StdMeshInstance::AttachedMesh::~AttachedMesh ( )

Definition at line 984 of file StdMesh.cpp.

985 {
986  if (OwnChild)
987  delete Child;
988  delete ChildDenumerator;
989 }

Member Function Documentation

◆ ClearPointers()

bool StdMeshInstance::AttachedMesh::ClearPointers ( class C4Object pObj)

Definition at line 1057 of file StdMesh.cpp.

1058 {
1059  return ChildDenumerator->ClearPointers(pObj);
1060 }
virtual bool ClearPointers(class C4Object *pObj)
Definition: StdMesh.h:496

◆ CompileFunc()

void StdMeshInstance::AttachedMesh::CompileFunc ( StdCompiler pComp,
DenumeratorFactoryFunc  Factory 
)

Definition at line 1017 of file StdMesh.cpp.

1018 {
1019  if(pComp->isDeserializer())
1020  {
1021  FinalTransformDirty = true;
1022  ChildDenumerator = Factory();
1023  }
1024 
1025  const StdBitfieldEntry<uint8_t> AM_Entries[] =
1026  {
1027  { "MatchSkeleton", AM_MatchSkeleton },
1028  { "DrawBefore", AM_DrawBefore },
1029  { nullptr, 0 }
1030  };
1031 
1032  pComp->Value(mkNamingAdapt(Number, "Number"));
1033  pComp->Value(mkNamingAdapt(ParentBone, "ParentBone")); // TODO: Save as string
1034  pComp->Value(mkNamingAdapt(ChildBone, "ChildBone")); // TODO: Save as string (note we can only resolve this in DenumeratePointers then!)
1035  pComp->Value(mkNamingAdapt(mkMatrixAdapt(AttachTrans), "AttachTransformation"));
1036 
1037  uint8_t dwSyncFlags = static_cast<uint8_t>(Flags);
1038  pComp->Value(mkNamingAdapt(mkBitfieldAdapt(dwSyncFlags, AM_Entries), "Flags", 0u));
1039  if(pComp->isDeserializer()) Flags = dwSyncFlags;
1040 
1041  pComp->Value(mkParAdapt(*ChildDenumerator, this));
1042 }
StdBitfieldAdapt< T > mkBitfieldAdapt(T &rVal, const StdBitfieldEntry< T > *pNames)
Definition: StdAdaptors.h:985
StdParameterAdapt< T, P > mkParAdapt(T &&rObj, P &&rPar)
Definition: StdAdaptors.h:490
StdNamingAdapt< T > mkNamingAdapt(T &&rValue, const char *szName)
Definition: StdAdaptors.h:92
Definition: StdAdaptors.h:883
void Value(const T &rStruct)
Definition: StdCompiler.h:161
virtual bool isDeserializer()
Definition: StdCompiler.h:53

References StdMeshInstance::AM_DrawBefore, StdMeshInstance::AM_MatchSkeleton, StdCompiler::isDeserializer(), mkBitfieldAdapt(), mkNamingAdapt(), mkParAdapt(), and StdCompiler::Value().

Here is the call graph for this function:

◆ DenumeratePointers()

void StdMeshInstance::AttachedMesh::DenumeratePointers ( )

Definition at line 1044 of file StdMesh.cpp.

1045 {
1047 
1048  assert(Child != nullptr);
1049  Child->AttachParent = this;
1050 
1051  MapBonesOfChildToParent(Parent->GetMesh().GetSkeleton(), Child->GetMesh().GetSkeleton());
1052 
1053  if(OwnChild)
1055 }
virtual void DenumeratePointers(AttachedMesh *attach)
Definition: StdMesh.h:495
void DenumeratePointers()
Definition: StdMesh.cpp:1674
AttachedMesh * AttachParent
Definition: StdMesh.h:661

◆ DenumeratorFactory()

template<typename T >
static Denumerator* StdMeshInstance::AttachedMesh::DenumeratorFactory ( )
inlinestatic

Definition at line 502 of file StdMesh.h.

502 { return new T; }

◆ GetChildBone()

unsigned int StdMeshInstance::AttachedMesh::GetChildBone ( ) const
inline

Definition at line 526 of file StdMesh.h.

526 { return ChildBone; }

◆ GetFinalTransformation()

const StdMeshMatrix& StdMeshInstance::AttachedMesh::GetFinalTransformation ( ) const
inline

Definition at line 518 of file StdMesh.h.

518 { return FinalTrans; }

◆ GetFlags()

uint32_t StdMeshInstance::AttachedMesh::GetFlags ( ) const
inline

Definition at line 519 of file StdMesh.h.

519 { return Flags; }

Referenced by StdMeshInstance::GetBoneCount(), and StdMeshInstance::GetBoneTransform().

Here is the caller graph for this function:

◆ GetParentBone()

unsigned int StdMeshInstance::AttachedMesh::GetParentBone ( ) const
inline

Definition at line 525 of file StdMesh.h.

525 { return ParentBone; }

◆ SetAttachTransformation()

void StdMeshInstance::AttachedMesh::SetAttachTransformation ( const StdMeshMatrix transformation)

Definition at line 1011 of file StdMesh.cpp.

1012 {
1013  AttachTrans = transformation;
1014  FinalTransformDirty = true;
1015 }

◆ SetChildBone()

bool StdMeshInstance::AttachedMesh::SetChildBone ( const StdStrBuf bone)

Definition at line 1001 of file StdMesh.cpp.

1002 {
1003  const StdMeshBone* bone_obj = Child->GetMesh().GetSkeleton().GetBoneByName(bone);
1004  if (!bone_obj) return false;
1005  ChildBone = bone_obj->Index;
1006 
1007  FinalTransformDirty = true;
1008  return true;
1009 }
unsigned int Index
Definition: StdMesh.h:32
const StdMeshBone * GetBoneByName(const StdStrBuf &name) const
Definition: StdMesh.cpp:388

References StdMeshBone::Index.

Referenced by StdMeshUpdate::Update().

Here is the caller graph for this function:

◆ SetParentBone()

bool StdMeshInstance::AttachedMesh::SetParentBone ( const StdStrBuf bone)

Definition at line 991 of file StdMesh.cpp.

992 {
993  const StdMeshBone* bone_obj = Parent->GetMesh().GetSkeleton().GetBoneByName(bone);
994  if (!bone_obj) return false;
995  ParentBone = bone_obj->Index;
996 
997  FinalTransformDirty = true;
998  return true;
999 }

References StdMeshBone::Index.

Friends And Related Function Documentation

◆ StdMeshInstance

friend class StdMeshInstance
friend

Definition at line 485 of file StdMesh.h.

◆ StdMeshUpdate

friend class StdMeshUpdate
friend

Definition at line 486 of file StdMesh.h.

Member Data Documentation

◆ Child

StdMeshInstance* StdMeshInstance::AttachedMesh::Child {nullptr}

◆ ChildDenumerator

Denumerator* StdMeshInstance::AttachedMesh::ChildDenumerator {nullptr}

Definition at line 513 of file StdMesh.h.

◆ Number

uint32_t StdMeshInstance::AttachedMesh::Number {0}

◆ OwnChild

bool StdMeshInstance::AttachedMesh::OwnChild {true}

◆ Parent


The documentation for this class was generated from the following files: