DragonNest/Common/EternityEngine/EtSwordTrail.h
2024-12-19 09:48:26 +08:00

86 lines
2.3 KiB
C++

#pragma once
#include "etbaseeffect.h"
class CEtSwordTrail;
typedef CSmartPtr< CEtSwordTrail > EtSwordTrailHandle;
class CEtRNS
{
protected:
struct splineData
{
D3DXVECTOR3 position;
D3DXVECTOR3 velocity;
float distance;
};
std::vector<splineData> m_nodes;
float m_maxDistance;
int m_nodeCount;
int m_maxCount;
public:
D3DXVECTOR3 GetPositionOnCubic(const D3DXVECTOR3 &startPos, const D3DXVECTOR3 &startVel, const D3DXVECTOR3 &endPos, const D3DXVECTOR3 &endVel, float time);
void Init( int maxCount_ );
void AddNode(const D3DXVECTOR3 &pos);
float GetDistance(int index) { return m_nodes[index].distance;}
D3DXVECTOR3 GetVelocityDir( int index ) { return m_nodes[index].velocity;}
virtual void BuildSpline();
D3DXVECTOR3 GetPosition(float time);
int Count() { return m_maxCount;}
D3DXVECTOR3 GetStartVelocity(int index);
D3DXVECTOR3 GetEndVelocity(int index);
};
#define MAX_SWORD_TRAIL_VERTEX 300
class CEtSwordTrail : public CEtBaseEffect
{
public:
CEtSwordTrail(void);
virtual ~CEtSwordTrail(void);
protected:
float m_fLifeTime;
EtColor m_SwordColor;
struct TrailSet
{
std::vector< EtVector3 > vecPosition;
std::vector< float > vecTime;
std::vector< EtVector3 > vecPositionResult;
std::vector< EtVector2 > vecTimeResult;
CEtRNS spline[ 2 ];
int nDummyIndex[ 2 ];
CEtMeshStream *pMeshStream;
};
std::vector< TrailSet > m_Trails;
static EtMaterialHandle s_hMaterial;
static EtIndexBuffer *s_pCommonIndexBuffer;
EtAniObjectHandle m_hParent;
bool m_bAdd;
bool m_bPrevAdd;
int m_nAddIndex;
int m_nTechniqueIndex;
float m_fElapsedTime;
float m_fTotalTime;
float m_fFinishTime;
int m_nLengthTime;
public:
void Initialize( EtAniObjectHandle hAniObject, EtTextureHandle hTexture, EtTextureHandle hNormalTexture, float fLifeTime, float fMinSegment = 50.0f );
void SetSwordColor( EtColor &SwordColor ) { m_SwordColor = SwordColor; }
void CreateVertexBuffer( CEtMeshStream *pMeshStream );
void CopyVertexBuffer();
void AddPoint( int nIndex, int nLengtTime ); // -1 À̸é ÀüºÎ Ãß°¡, 0 ÀÌ»óÀ̸é ÇØ´çÀ妽º¸¸ Ãß°¡.
virtual void Render( float fElapsedTime );
void SetTechniqueIndex( int nTechIndex ) { m_nTechniqueIndex = nTechIndex; }
void ProcessAdd();
void ChangeTexture( EtTextureHandle hTexture, EtTextureHandle hNormalTexture );
static void InitializeEffect();
static void FinializeEffect();
};