summaryrefslogtreecommitdiffstats
path: root/src/animation/AnimBlendClumpData.h
diff options
context:
space:
mode:
authoraap <aap@papnet.eu>2019-06-11 08:59:28 +0200
committeraap <aap@papnet.eu>2019-06-11 08:59:28 +0200
commite7ed4d009636804d5dbe05aae9e7ab23b80fdd37 (patch)
tree4c95f6e07923b5ed0a7046afeb42a1ea2b8693bf /src/animation/AnimBlendClumpData.h
parentMerge branch 'master' of github.com:GTAmodding/re3 (diff)
downloadre3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.gz
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.bz2
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.lz
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.xz
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.tar.zst
re3-e7ed4d009636804d5dbe05aae9e7ab23b80fdd37.zip
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");