Files
FC1/CryAnimation/CryCharFxTrail.h
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

84 lines
2.8 KiB
C++

#ifndef _CRY_ANIMATION_CRY_CHAR_FX_TRAIL_HDR_
#define _CRY_ANIMATION_CRY_CHAR_FX_TRAIL_HDR_
#include <CryCharFxTrailParams.h>
#include "CryCharRenderElement.h"
// SFX : sword trail
// The trail is composed of quads, which are formed with an index buffer referring to
// "extrusion lines" in the vertex buffer. Extrusion line is (e.g. 2) vertices describing
// the sword line in one of the previous frames. All this forms a circular queue of entries
// Each entry has:
// 2(currently) vertices in the vertex buffer
// 1 float in the time history
//
// The circular queue moves BACKward (the head is circularly decremented)
class CryCharFxTrail: public ICryCharFxTrail
{
public:
CryCharFxTrail(class CryModelState* pState, const CryCharFxTrailParams& params);
~CryCharFxTrail();
//! Renderer calls this function to allow update the video vertex buffers right before the rendering
void ProcessSkinning (const Vec3& t, const Matrix44& mtxModel, int nTemplate, int nLod=-1, bool bForceUpdate=false);
// returns true if the given submesh is visible
bool IsVisible() {return m_bVisible;}
// depending on bVisible, either makes the submesh visible or invisible
void SetVisible(bool bVisible = true) {m_bVisible = bVisible;}
// adds the render data to the renderer, so that the current decals can be rendered
void AddRenderData (CCObject *pObj, const SRendParams & rRendParams);
void Render (const struct SRendParams & RendParams, Matrix44& mtxObjMatrix, struct CryCharInstanceRenderParams& rCharParams);
// returns the memory usage by this object into the sizer
// TODO: use
void GetMemoryUsage (ICrySizer* pSizer);
// gets called upon Deform() of the model state
void Deform (const Matrix44* pBones);
protected:
// updates the system vertex buffer and the queue of entries/times
void UpdateEntries(const Matrix44* pBones);
void UpdateIndices();
// returns the tail entry, return value is invalid if m_numEntries == 0
unsigned getTailEntry() const {return (m_nHeadEntry + m_numEntries - 1) % numMaxEntries();}
// max number of history entries
unsigned numMaxEntries() const {return m_Params.numMaxQuads+1;}
unsigned numVertices()const {return m_Params.numVerts * numMaxEntries();}
protected:
CryCharFxTrailParams m_Params;
bool m_bVisible;
CryCharRenderElement m_RE;
// the length of the trail history in the system vertex buffer
// (number of vertices per extrusion line) * (length of history) = (total number of vertices in sysbuffer)
// currently , only 2 verts per extrusion line are supported
unsigned m_numEntries;
// the starting entry in the history queue
unsigned m_nHeadEntry;
// last frame when the deform was called
int m_nLastFrameDeform;
// the shader of the trail
IShader *m_pShader;
// array [maxEntries] of times of each entry forming
TElementaryArray<float> m_pTimes;
CryModelState* m_pParent;
};
TYPEDEF_AUTOPTR(CryCharFxTrail);
#endif