mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 17:47:43 +00:00
Work on CFBStreamedCompression; defined 24-bit ANIM3 format
This commit is contained in:
71
Runtime/Character/CFBStreamedCompression.hpp
Normal file
71
Runtime/Character/CFBStreamedCompression.hpp
Normal file
@@ -0,0 +1,71 @@
|
||||
#ifndef __URDE_CFSTREAMEDCOMPRESSION_HPP__
|
||||
#define __URDE_CFSTREAMEDCOMPRESSION_HPP__
|
||||
|
||||
#include "RetroTypes.hpp"
|
||||
#include "CToken.hpp"
|
||||
#include "CAnimPOIData.hpp"
|
||||
#include "zeus/CVector3f.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
class IObjectStore;
|
||||
|
||||
class CFBStreamedCompression
|
||||
{
|
||||
friend class CFBStreamedAnimReader;
|
||||
friend class CFBStreamedAnimReaderTotals;
|
||||
friend class CFBStreamedPairOfTotals;
|
||||
|
||||
struct Header
|
||||
{
|
||||
u32 unk0;
|
||||
float duration;
|
||||
float interval;
|
||||
u32 rootBoneId;
|
||||
u32 unk2;
|
||||
u32 rotDiv;
|
||||
float translationMult;
|
||||
u32 boneChannelCount;
|
||||
u32 unk3;
|
||||
|
||||
void read(CInputStream& in)
|
||||
{
|
||||
/* unk0 */
|
||||
unk0 = in.readUint32Big();
|
||||
/* duration */
|
||||
duration = in.readFloatBig();
|
||||
/* interval */
|
||||
interval = in.readFloatBig();
|
||||
/* rootBoneId */
|
||||
rootBoneId = in.readUint32Big();
|
||||
/* unk2 */
|
||||
unk2 = in.readUint32Big();
|
||||
/* rotDiv */
|
||||
rotDiv = in.readUint32Big();
|
||||
/* translationMult */
|
||||
translationMult = in.readFloatBig();
|
||||
/* boneChannelCount */
|
||||
boneChannelCount = in.readUint32Big();
|
||||
/* unk3 */
|
||||
unk3 = in.readUint32Big();
|
||||
}
|
||||
};
|
||||
|
||||
u32 x0_scratchSize;
|
||||
ResId x4_evnt;
|
||||
TLockedToken<CAnimPOIData> x8_evntToken;
|
||||
std::unique_ptr<u32[]> xc_rotsAndOffs;
|
||||
zeus::CVector3f x14_rootOffset;
|
||||
|
||||
static u8* ReadBoneChannelDescriptors(u8* out, CInputStream& in);
|
||||
static std::unique_ptr<u32[]> GetRotationsAndOffsets(u32 words, CInputStream& in);
|
||||
static u32 ComputeBitstreamWords(const u8* chans);
|
||||
public:
|
||||
CFBStreamedCompression(CInputStream& in, IObjectStore& objStore);
|
||||
CCharAnimTime GetAnimationDuration() const { return reinterpret_cast<const Header*>(xc_rotsAndOffs.get())->duration; }
|
||||
const TLockedToken<CAnimPOIData>& GetPOIToken() const { return x8_evntToken; }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // __URDE_CFSTREAMEDCOMPRESSION_HPP__
|
||||
Reference in New Issue
Block a user