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

89 lines
3.1 KiB
C++

#ifndef _BONELIGHTBIND_HDR_
#define _BONELIGHTBIND_HDR_
// the storable in file structure for permanent data in CBoneLightBindInfo
struct CBoneLightBindDesc
{
unsigned m_nDLightFlags; // additional flags that DLight receives (maybe light or heatsource)
unsigned m_nBone; // the bone to which the binding is made
Vec3 m_vPos; // position of the light in the bone CS
CryQuat m_qRot; // orientation of the light within the bone CS
LightTypes m_nType; // one of the LightTypes values
CFColor m_rgbColor; // RGB color
float m_fIntensity; // multiplier value
float m_fHotSpotSize; // for spot and direct lights hotspot value
float m_fFalloffSize; // for spot and direct lights falloff value
float m_fNearAttenStart; // near attenuation ranges
float m_fNearAttenEnd;
float m_fFarAttenStart; // far attenuation ranges
float m_fFarAttenEnd;
Vec3 m_vDirection; //spot light direction
// for better alignment, these flags are at the end of the structure
bool m_bOn; // light is on
bool m_bUseNearAtten; // near atten. on
bool m_bUseFarAtten; // far atteniation
bool m_bShadow; // shadow is on
};
//////////////////////////////////////////////////////////////////////////
// the structure describing binding of a light to a bone.
// refers to the bone by the id, and contains the whole info about the ligtht
class CBoneLightBindInfo: public CBoneLightBindDesc
{
public:
CBoneLightBindInfo()
{m_nBone = 0;}
// initializes this from the structures found in the cgf file
void load (const SBoneLightBind&, const LIGHT_CHUNK_DESC&, const char* szLightName, float fScale);
void scale (float fScale);
// returns the index of the bone to which the light source is bound
unsigned getBone() const {return m_nBone;}
// initializes the given DLight structure out of the given bone instance
// this is one-time call that is only required after construction of the DLight to initialize its constant parameters
void initDLight (CDLight& DLight);
// per-frame update of the DLight structure. Updates the light position and radius
void updateDLight (const Matrix44& matParentBone, float fRadiusMultiplier, CDLight& DLight);
// returns true if this light source is local (affects only the character)
bool isLocal()const;
bool isHeatSource()const;
bool isLightSource()const;
// returns the priority to sort
int getPriority()const;
bool operator < (const CBoneLightBindInfo& rRight)const
{
return getPriority() < rRight.getPriority();
}
// Serialization to/from memory buffer.
// if the buffer is NULL, and bSave is true, returns the required buffer size
// otherwise, tries to save/load from the buffer, returns the number of bytes written/read
// or 0 if the buffer is too small or some error occured
unsigned Serialize (bool bSave, void* pBuffer, unsigned nSize);
const char* getLightImageCStr()const {return m_strLightImage.c_str();}
protected:
string m_strLightImage; //spot light texture
// the following members are not serialized:
Matrix44 m_matLight; // transform matrix of the light in the bone CS
void constructMatLight();
};
#endif