summaryrefslogtreecommitdiffstats
path: root/src/animation/AnimBlendClumpData.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/animation/AnimBlendClumpData.h')
-rw-r--r--src/animation/AnimBlendClumpData.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/animation/AnimBlendClumpData.h b/src/animation/AnimBlendClumpData.h
new file mode 100644
index 00000000..955578f0
--- /dev/null
+++ b/src/animation/AnimBlendClumpData.h
@@ -0,0 +1,57 @@
+#pragma once
+
+#include "AnimBlendList.h"
+
+
+// TODO: put somewhere else
+struct AnimBlendFrameData
+{
+ enum {
+ IGNORE_ROTATION = 2,
+ IGNORE_TRANSLATION = 4,
+ VELOCITY_EXTRACTION = 8,
+ VELOCITY_EXTRACTION_3D = 0x10,
+ };
+
+ uint8 flag;
+ RwV3d resetPos;
+#ifdef PED_SKIN
+ union {
+ RwFrame *frame;
+ RpHAnimStdKeyFrame *hanimframe;
+ };
+ int32 nodeID;
+#else
+ RwFrame *frame;
+#endif
+};
+#ifndef PED_SKIN
+static_assert(sizeof(AnimBlendFrameData) == 0x14, "AnimBlendFrameData: error");
+#endif
+
+
+class CAnimBlendClumpData
+{
+public:
+ CAnimBlendLink link;
+ int32 numFrames;
+#ifdef PED_SKIN
+ int32 modelNumber; // doesn't seem to be used
+#endif
+ CVector *pedPosition;
+ // order of frames is determined by RW hierarchy
+ AnimBlendFrameData *frames;
+
+ CAnimBlendClumpData(void);
+ ~CAnimBlendClumpData(void);
+ void SetNumberOfFrames(int n);
+#ifdef PED_SKIN
+ void SetNumberOfBones(int n) { SetNumberOfFrames(n); }
+#endif
+ void ForAllFrames(void (*cb)(AnimBlendFrameData*, void*), void *arg);
+
+
+ CAnimBlendClumpData *ctor(void) { return ::new (this) CAnimBlendClumpData(); }
+ void dtor(void) { this->CAnimBlendClumpData::~CAnimBlendClumpData(); }
+};
+static_assert(sizeof(CAnimBlendClumpData) == 0x14, "CAnimBlendClumpData: error");