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

167 lines
4.2 KiB
C++

#pragma once
#include "skse64/NiNodes.h"
/**** controllers
* NiTimeController
* BSDoorHavokController
* BSPlayerDistanceCheckController
* NiD3DController
* NiControllerManager
* NiInterpController
* NiSingleInterpController
* NiTransformController
* NiPSysModifierCtlr
* NiPSysEmitterCtlr
* NiPSysModifierBoolCtlr
* NiPSysModifierActiveCtlr
* NiPSysModifierFloatCtlr
* NiPSysInitialRotSpeedVarCtlr
* NiPSysInitialRotSpeedCtlr
* NiPSysInitialRotAngleVarCtlr
* NiPSysInitialRotAngleCtlr
* NiPSysGravityStrengthCtlr
* NiPSysFieldMaxDistanceCtlr
* NiPSysFieldMagnitudeCtlr
* NiPSysFieldAttenuationCtlr
* NiPSysEmitterSpeedCtlr
* NiPSysEmitterPlanarAngleVarCtlr
* NiPSysEmitterPlanarAngleCtlr
* NiPSysEmitterLifeSpanCtlr
* NiPSysEmitterInitialRadiusCtlr
* NiPSysEmitterDeclinationVarCtlr
* NiPSysEmitterDeclinationCtlr
* NiPSysAirFieldSpreadCtlr
* NiPSysAirFieldInheritVelocityCtlr
* NiPSysAirFieldAirFrictionCtlr
* NiFloatInterpController
* NiFlipController
* NiAlphaController
* NiTextureTransformController
* NiLightDimmerController
* NiBoolInterpController
* NiVisController
* NiPoint3InterpController
* NiMaterialColorController
* NiLightColorController
* NiExtraDataController
* NiFloatsExtraDataPoint3Controller
* NiFloatsExtraDataController
* NiFloatExtraDataController
* NiColorExtraDataController
* NiMultiTargetTransformController
* NiGeomMorpherController
* bhkBlendController
* bhkForceController
* NiBSBoneLODController
* NiUVController
* NiPathController
* NiLookAtController
* NiKeyframeManager
* NiBoneLODController
* NiPSysUpdateCtlr
* NiPSysResetOnLoopCtlr
* NiFloatController
* NiRollController
*/
class NiInterpolator;
// 03C
class NiTimeController : public NiObject
{
public:
NiTimeController();
~NiTimeController();
virtual void Start(float time);
virtual void Stop(void);
virtual void Update(float time) = 0;
virtual void SetTarget(NiObjectNET * node);
virtual bool Unk_17(void);
virtual bool Unk_18(void);
virtual void Unk_19(void);
virtual bool Unk_1A(void);
virtual bool Unk_1B(void);
virtual bool Unk_1C(void) = 0;
enum
{
kAnimType_AppTime = 0 << 0,
kAnimType_AppInit = 1 << 0,
kCycleType_Loop = 0 << 1,
kCycleType_Reverse = 1 << 1,
kCycleType_Clamp = 2 << 1,
kActive = 1 << 3,
kPlayBackwards = 1 << 4,
};
UInt16 flags; // 008
UInt8 pad00A[2]; // 00A
float m_fFrequency; // 00C
float m_fPhase; // 010
float m_fLoKeyTime; // 014
float m_fHiKeyTime; // 018
float m_fStartTime; // 01C
float m_fLastTime; // 020
float unk024; // 024 - updated in Unk_19
float unk028; // 028
UInt8 unk02C; // 02C
UInt8 pad02D[3]; // 02D
NiObjectNET * next; // 030 - singly linked list of controllers
NiObject * m_pTarget; // 034 - type is a (wrong) guess; NET has a back controller pointer, but many children assume larger objects
UInt8 unk038; // 038
UInt8 unk039[3]; // 039
};
// 03C
class NiInterpController : public NiTimeController
{
public:
NiInterpController();
~NiInterpController();
virtual UInt16 GetNumInterpolators(void) = 0; // 1D
virtual char * GetInterpolatorName(UInt16 idx) = 0;
virtual UInt16 GetInterpolatorIdx(char * name) = 0;
virtual NiInterpolator * GetInterpolator(UInt16 idx) = 0;
virtual void SetInterpolator(NiInterpolator * _interpolator, UInt16 idx) = 0;
virtual void Unk_22(void);
virtual char * GetName(void);
virtual void Unk_24(UInt16 idx) = 0; // create interpolators
virtual void Unk_25(void) = 0;
virtual void Unk_26(UInt16 idx) = 0; // create blend interpolators
virtual void Unk_27(void) = 0;
virtual void Unk_28(void * arg, UInt16 idx) = 0;
enum
{
kIsManagerControlled = 1 << 5,
};
};
// 040
class NiSingleInterpController : public NiInterpController
{
public:
NiSingleInterpController();
~NiSingleInterpController();
virtual bool Unk_29(void * arg) = 0;
NiInterpolator * interpolator; // 03C
};
// 040
class NiFloatInterpController : public NiSingleInterpController
{
public:
NiFloatInterpController();
~NiFloatInterpController();
virtual void Unk_2A(float * out) = 0;
};