// visualinfo.h #ifndef _EFFECT_VISUALINFO_H_ #define _EFFECT_VISUALINFO_H_ #include "../typedef.h" // ½ºÇÁ¶óÀÌÆ® struct St_ElementCreate_Sprite { WzID m_wiTexture; // ÅØ½ºÃ³ ID float m_fScale; // ½ºÄÉÀÏ bool m_blUseUVAni; // ¾Ö´Ï¸ÞÀÌ¼Ç »ç¿ë ¿©ºÎ long m_lnWidth; // °¡·Î Å©±â long m_lnHeight; // ¼¼·Î Å©±â long m_lnTotalFrame; // ÃÑ ÇÁ·¹ÀÓ °³¼ö long m_lnTickAni; // ¾Ö´Ï¸ÞÀÌ¼Ç ½Ã°£ °£°Ý bool m_blUseLoop; // ·çÇÁ »ç¿ë ¿©ºÎ long m_lnStartFrame; // ½ÃÀÛ ÇÁ·¹ÀÓ ¹øÈ£ EST_BILLBOARD_TYPE m_eBillboardType; WzVector m_wvDirect; // »ç¿ë ¾È ÇÔ bool m_blDirApply; // ¹æÇâ Àû¿ë ¿©ºÎ WzVector m_wvVertex[4]; // Á¡µé(ºôº¸µå ŸÀÔÀÌ ¾Æ´Ñ °æ¿ì) float m_fOffset; // Ä«¸Þ¶ó ¹æÇâÀ¸·Î ¿ÀÇÁ¼Â float m_fMakeOffsetX; // Á߽ɿ¡¼­ XÃà ¿ÀÇÁ¼Â (0~1) float m_fMakeOffsetY; // Á߽ɿ¡¼­ YÃà ¿ÀÇÁ¼Â bool m_blUseStartFrameRand; // ·£´ý ½ÃÀÛ ÇÁ·¹ÀÓ »ç¿ë ¿©ºÎ BYTE m_byInterpolateRate; // ¾Ö´Ïº¸°£ ºñÀ² }; // ¸Þ½Ã struct St_ElementCreate_Mesh { WzID m_wiMesh; // ¸Þ½Ã ID WzID m_wiAnimation; // ¾Ö´Ï¸ÞÀÌ¼Ç ¹øÈ£ float m_fSize; // Å©±â EST_BILLBOARD_TYPE m_eBillboardType; // ºôº¸µå ŸÀÔ }; // üÀÎ struct St_ElementCreate_Chain { WzID m_wiTexture; // ÅØ½ºÃ³ ID int m_iNumTail; // ²¿¸® °³¼ö float m_fThickness; // µÎ²² }; // Ç÷§ üÀÎ struct St_ElementCreate_FlatChain { WzID m_wiTexture; // ÅØ½ºÃ³ ID WzVector m_wvPos2; // »ç¿ë ¾È ÇÔ int m_iNumTail; // ²¿¸® °³¼ö }; // µ¥Ä® struct St_ElementCreate_Decal { WzID m_wiTexture; // ÅØ½ºÃ³ ID WzVector m_wvNormal; // Normal º¤ÅÍ WzVector m_wvUp; // Up º¤ÅÍ float m_fSize; // ¼öÆò ³ÐÀÌ float m_fHeight; // ³ôÀÌ }; // ³¯¾¾ struct St_ElementCreate_Weather { WzID m_wiTexture; // ÅØ½ºÃ³ ID float m_fScale; // ½ºÇÁ¶óÀÌÆ® Å©±â float m_fDistance; // °ø°£ Å©±â long m_lnDensityCnt; // ¹Ðµµ EST_BILLBOARD_TYPE m_eBillboardType; // ºôº¸µå ŸÀÔ bool m_blDirApply; // ¹æÇâ Àû¿ë ¿©ºÎ }; //------------------------------------------------------------------------------ /** @struct St_Visual_Info */ struct St_Visual_Info { ENUM_BLEND_OP m_eBlendOP; ENUM_EELEMENT_TYPE eType; union { St_ElementCreate_Sprite Sprite; St_ElementCreate_Mesh Mesh; St_ElementCreate_Chain Chain; St_ElementCreate_FlatChain FlatChain; St_ElementCreate_Decal Decal; St_ElementCreate_Weather WeatherObj; }; St_RandomInfo m_sRandElementSize; // »ý¼ºÀÚ St_Visual_Info() { Initialize(); } // ÃʱâÈ­ void Initialize() { // ÇöÀç±îÁö´Â memsetÀ¸·Î ÃʱâÈ­ ÇØµµ ¾ÈÀüÇÏ´Ù. // ÀÌÈÄ, »õ·Ó°Ô ¸â¹ö º¯¼ö¸¦ Ãß°¡ÇѴٰųª ÇÏ´Â °æ¿ì´Â // memsetÀ» ÇØµµ µÇ´ÂÁö »ìÆì ºÁ¾ß ÇÑ´Ù. memset( this, 0, sizeof( St_Visual_Info ) ); m_eBlendOP = EBOP_NONE; eType = EET_NONE; // xxx: °ø¿ëü º¯¼ö¸¦ ÀÌ·¸°Ô ÃʱâÈ­ ÇÑ´Ù´Â°Ô ¿µ ÂóÂóÇÏÁö¸¸ // ±×·¸´Ù°í ÀÌ°É Á¦°ÅÇÏ¸é ¾î¶² ÀÏÀÌ ¹ú¾îÁú Áö ¾Ë ¼ö°¡ ¾ø±â¿¡ // ÀÏ´ÜÀº ±×³É °£´Ù. ¿£Áø¸¸ »ý°¢ÇÏ¸é ·Îµù ºÎºÐ¿¡¼­ µû·Îµû·Î // ÃʱâÈ­ ÇØ ÁÖ¸é µÇÁö¸¸, ÀÌÆåÆ® ÅøÀº?;; // ½ºÇÁ¶óÀÌÆ® ÃʱâÈ­ SetVector( &Sprite.m_wvVertex[0], -0.5f, 0.5f, 0.0f ); SetVector( &Sprite.m_wvVertex[1], -0.5f, -0.5f, 0.0f ); SetVector( &Sprite.m_wvVertex[2], 0.5f, 0.5f, 0.0f ); SetVector( &Sprite.m_wvVertex[3], 0.5f, -0.5f, 0.0f ); SetVector( &Sprite.m_wvDirect, 0.0f, 0.0f, 1.0f ); Sprite.m_fMakeOffsetX = 0.5f; Sprite.m_fMakeOffsetY = 0.5f; Sprite.m_eBillboardType = EB_ALL; // ¸Þ½Ã ÃʱâÈ­ Mesh.m_fSize = 1.0f; Mesh.m_eBillboardType = EB_UNUSE; // ·£´ý »çÀÌÁî m_sRandElementSize.m_fMinValue = 1.0f; m_sRandElementSize.m_fMaxValue = 1.0f; } // operator = St_Visual_Info& operator = ( const St_Visual_Info& rhs ) { if( &rhs != this ) { // ÇöÀç±îÁö´Â memcpy·Î º¹»ç ÇØµµ ¾ÈÀüÇÏ´Ù. // ÀÌÈÄ, »õ·Ó°Ô ¸â¹ö º¯¼ö¸¦ Ãß°¡ÇѴٰųª ÇÏ´Â °æ¿ì´Â // memcpyÀ» ÇØµµ µÇ´ÂÁö »ìÆì ºÁ¾ß ÇÑ´Ù. memcpy( this, &rhs, sizeof( St_Visual_Info ) ); } return *this; } }; #endif // _EFFECT_VISUALINFO_H_