enderalse/source/fs.dll/skse64/skse64/NiInterpolators.h

343 lines
7.5 KiB
C++

#pragma once
#include "skse64/NiObjects.h"
#include "skse64/NiTypes.h"
/**** hierarchy ****************************************************************
*
* NiInterpolator
* NiBlendInterpolator
* NiBlendTransformInterpolator
* NiBlendFloatInterpolator
* NiBlendAccumTransformInterpolator
* BSBlendTreadTransfInterpolator
* NiBlendQuaternionInterpolator
* NiBlendPoint3Interpolator
* NiBlendColorInterpolator
* NiBlendBoolInterpolator
* NiKeyBasedInterpolator
* NiFloatInterpolator
* NiColorInterpolator
* NiPathInterpolator
* NiTransformInterpolator
* BSRotAccumTransfInterpolator
* BSTreadTransfInterpolator
* NiQuaternionInterpolator
* NiPoint3Interpolator
* NiBoolInterpolator
* NiBoolTimelineInterpolator
* NiLookAtInterpolator
* NiBSplineInterpolator
* NiBSplineTransformInterpolator
* NiBSplineCompTransformInterpolator
* NiBSplinePoint3Interpolator
* NiBSplineCompPoint3Interpolator
* NiBSplineFloatInterpolator
* NiBSplineCompFloatInterpolator
* NiBSplineColorInterpolator
* NiBSplineCompColorInterpolator
*
****/
// NiInterpolator and children
class NiObjectNET;
class NiQuaternion;
class NiPoint3;
class NiColorA;
class NiQuatTransform;
class NiAVObjectPalette;
class NiAnimationKey;
class NiFloatData;
class NiColorData;
class NiPosData;
// 0C
class NiInterpolator : public NiObject
{
public:
// work functions
virtual bool Update(float delta, NiObjectNET * target, NiQuatTransform * data);
virtual bool Update(float delta, NiObjectNET * target, NiColorA * data);
virtual bool Update(float delta, NiObjectNET * target, NiPoint3 * data);
virtual bool Update(float delta, NiObjectNET * target, NiQuaternion * data);
virtual bool Update(float delta, NiObjectNET * target, float * data);
virtual bool Update(float delta, NiObjectNET * target, bool * data);
// query functions
virtual bool IsBoolValueSupported(void) const;
virtual bool IsFloatValueSupported(void) const;
virtual bool IsQuaternionValueSupported(void) const;
virtual bool IsPoint3ValueSupported(void) const;
virtual bool IsColorAValueSupported(void) const;
virtual bool IsTransformValueSupported(void) const;
virtual void Collapse(); // ??
virtual void GetActiveTimeRange(float * start, float * end) const;
virtual void GuaranteeTimeRange(float start, float end);
virtual NiInterpolator * GetSequenceInterpolator(float start, float end);
virtual bool ResolveDependencies(NiAVObjectPalette * palette);
virtual bool SetUpDependencies(void);
virtual bool AlwaysUpdate(void) const;
virtual UInt32 Unk_34(void);
float m_fLastTime; // 08
};
// 30
class NiBlendInterpolator : public NiInterpolator
{
public:
virtual UInt8 AddInterpInfo(NiInterpolator * interpolator, float weight, SInt8 priority, float easeSpinner);
virtual NiPointer <NiInterpolator> RemoveInterpInfo(UInt8 idx);
virtual bool InterpolatorIsCorrectType(NiInterpolator * interpolator); // pure virtual
virtual bool ReallocateArrays(void);
// 18
struct InterpArrayItem
{
NiPointer <NiInterpolator> m_spInterpolator; // 00
float m_fWeight; // 04
float m_fNormalizedWeight; // 08
UInt8 m_cPriority; // 0C
float m_fEaseSpinner; // 10
float m_fUpdateTime; // 14
};
UInt8 m_uFlags; // 0C
UInt8 m_ucArraySize; // 0D
UInt8 m_ucInterpCount; // 0E
UInt8 m_ucSingleIdx; // 0F
SInt8 m_cHighPriority; // 10
SInt8 m_cNextHighPriority; // 11
UInt8 pad12[2]; // 12
InterpArrayItem * m_pkInterpArray; // 14
NiInterpolator * m_pkSingleInterpolator; // 18
float m_fWeightThreshold; // 1C
float m_fSingleTime; // 20
float m_fHighSumOfWeights; // 24
float m_fNextHighSumOfWeights; // 28
float m_fHighEaseSpinner; // 2C
};
// 30
class NiBlendTransformInterpolator : public NiBlendInterpolator
{
public:
};
// 34
class NiBlendFloatInterpolator : public NiBlendInterpolator
{
public:
float m_fFloatValue; // 30
};
// 58
class NiBlendAccumTransformInterpolator : public NiBlendInterpolator
{
public:
UInt8 unk30[0x58 - 0x30]; // 30
};
// 34
class BSBlendTreadTransfInterpolator : public NiBlendInterpolator
{
public:
float unk30; // 30
};
// 40
class NiBlendQuaternionInterpolator : public NiBlendInterpolator
{
public:
NiQuaternion m_kQuaternionValue; // 30
};
// 40
class NiBlendPoint3Interpolator : public NiBlendInterpolator
{
public:
NiPoint3 m_kPoint3Value; // 30
bool m_bValidValue; // 3C
};
// 44
class NiBlendColorInterpolator : public NiBlendInterpolator
{
public:
NiColorA m_kColorValue; // 30
bool m_bValidValue; // 40
};
// 34
class NiBlendBoolInterpolator : public NiBlendInterpolator
{
public:
bool m_bBoolValue; // 30
};
// 0C
class NiKeyBasedInterpolator : public NiInterpolator
{
public:
virtual UInt16 GetKeyChannelCount(void) const;
virtual UInt32 GetKeyCount(UInt16 channel) const;
virtual UInt32 GetKeyType(UInt16 channel) const;
virtual UInt32 GetKeyContent(UInt16 channel) const;
virtual NiAnimationKey * GetKeyArray(UInt16 channel) const;
virtual UInt8 GetKeyStride(UInt16 channel) const;
virtual bool GetChannelPosed(UInt16 channel) const;
};
// 18
class NiFloatInterpolator : public NiKeyBasedInterpolator
{
public:
float m_fFloatValue; // 0C
NiPointer <NiFloatData> m_spFloatData; // 10
UInt32 m_uiLastIdx; // 14
};
// 24
class NiColorInterpolator : public NiKeyBasedInterpolator
{
public:
NiColorA m_kColorValue; // 0C
NiPointer <NiColorData> m_spColorData; // 1C
UInt32 m_uiLastIdx; // 20
};
// 5C
class NiPathInterpolator : public NiKeyBasedInterpolator
{
public:
UInt16 m_uFlags; // 0C
UInt8 pad0E[2]; // 0E
UInt32 m_uiLastPathIdx; // 10
UInt32 m_uiLastPctIdx; // 14
NiPointer <NiPosData> m_spPathData; // 18
NiPointer <NiFloatData> m_spPctData; // 1C
mutable float * m_pfPartialLength; // 20
mutable float m_fTotalLength; // 24
float m_fBankAngle; // 28
float m_fSmoothing; // 2C
UInt16 m_sFollowAxis; // 30
UInt8 pad32[2]; // 32
float m_fMaxCurvature; // 34
UInt32 m_eBankDir; // 38
NiQuaternion m_kRotation; // 3C
NiPoint3 m_kPosition; // 4C
float m_fLastTime; // 58
};
//STATIC_ASSERT(sizeof(NiPathInterpolator) == 0x5C);
// ### remainder are placeholder
// 38
class NiTransformInterpolator : public NiKeyBasedInterpolator
{
public:
};
// 48
class BSRotAccumTransfInterpolator : public NiTransformInterpolator
{
public:
};
// 24
class BSTreadTransfInterpolator : public NiKeyBasedInterpolator
{
public:
};
//
class NiQuaternionInterpolator : public NiKeyBasedInterpolator
{
public:
};
//
class NiPoint3Interpolator : public NiKeyBasedInterpolator
{
public:
};
//
class NiBoolInterpolator : public NiKeyBasedInterpolator
{
public:
};
//
class NiBoolTimelineInterpolator : public NiBoolInterpolator
{
public:
};
//
class NiLookAtInterpolator : public NiInterpolator
{
public:
};
//
class NiBSplineInterpolator : public NiInterpolator
{
public:
};
//
class NiBSplineTransformInterpolator : public NiBSplineInterpolator
{
public:
};
//
class NiBSplineCompTransformInterpolator : public NiBSplineTransformInterpolator
{
public:
};
//
class NiBSplinePoint3Interpolator : public NiBSplineInterpolator
{
public:
};
//
class NiBSplineCompPoint3Interpolator : public NiBSplinePoint3Interpolator
{
public:
};
//
class NiBSplineFloatInterpolator : public NiBSplineInterpolator
{
public:
};
//
class NiBSplineCompFloatInterpolator : public NiBSplineFloatInterpolator
{
public:
};
//
class NiBSplineColorInterpolator : public NiBSplineInterpolator
{
public:
};
//
class NiBSplineCompColorInterpolator : public NiBSplineColorInterpolator
{
public:
};