DragonNest/Common/EternityEngine/EtSpring.h
Cussrro 47f7895977 Revert "修复编码问题"
This reverts commit 9e69c01767.
2024-12-21 10:04:04 +08:00

73 lines
1.7 KiB
C++

#pragma once
#include <map>
class CEtMassPoint
{
public:
D3DXVECTOR3 Pos;
D3DXVECTOR3 Vel;
D3DXVECTOR3 PrevVel;
D3DXVECTOR3 gravity;
int nSpringCount;
CEtMassPoint *nodes[32];
float NaturalLength[32];
float fPower[32];
bool bLocked;
bool bForceLimit;
DWORD lastForceTime;
public:
CEtMassPoint() {
Vel = D3DXVECTOR3(0,0,0);
PrevVel = D3DXVECTOR3(0,0,0);
gravity = D3DXVECTOR3(0,0,0);
Pos = D3DXVECTOR3(0,0,0);
nSpringCount = 0;
bLocked = false;
bForceLimit = false;
lastForceTime = 0;
memset(NaturalLength, 0, sizeof(NaturalLength));
memset(fPower, 0, sizeof(fPower));
}
public:
void AddSpring(CEtMassPoint *node, float power ) {
nodes[nSpringCount] = node;
NaturalLength[nSpringCount] = D3DXVec3Length( &(Pos - node->Pos) );
fPower[nSpringCount] = power;
nSpringCount++;
}
void AddSpringBoth(CEtMassPoint *node, float power ) {
AddSpring( node, power);
node->AddSpring( this, power );
}
void SetLocked( bool isLocked) {
bLocked = isLocked;
}
void SetGravity( EtVector3 gravity_ ) { gravity = gravity_;}
void Simulate();
};
class CEtSpring
{
public:
CEtSpring();
~CEtSpring(){}
private:
std::vector< CEtMassPoint > m_Masses;
bool m_bEnable;
float m_fStep;
public:
bool IsEnable() { return m_bEnable; }
void Disable() { m_bEnable = false; }
void Create( const char *szFileName, const std::vector< EtMatrix > &InvWorldMatList, std::map<std::string, int> &boneIndexMap );
void InputKeyframe( EtMatrix WorldMat, int nSaveMatIndex );
void Simulate( EtMatrix WorldMat, const std::vector< EtMatrix > &InvWorldMatList );
EtVector3* GetPosition( int nIndex );
EtMatrix GetMatrix( int nIndex, int nChildOffset);
};