Files
2026-06-01 12:46:52 +02:00

101 lines
2.2 KiB
C++

#pragma once
#include <mmo/ArType.h>
#include "K3DTypes.h"
#include "KViewport.h"
#include "SGameAvatarAddOnMgr.h"
class K3DRenderDevice;
class SGameCircleShadowPrimitive;
namespace
{
LPCSTR SHADOW_TEXTURE_NAME = "shadow_avatar_low.dds";
const int SHADOW_SEGMENT_COUNT = 2;
const int SHADOW_SEGMENET_INDEX_COUNT = (SHADOW_SEGMENT_COUNT - 1) * (SHADOW_SEGMENT_COUNT - 1) * 2;
}
class SCircleShadowCommonInfo
{
private:
K3DTexture* m_pTexture;
K3DINDEXED_WATER* m_pIndexed;
SCircleShadowCommonInfo()
{
// Index Initialize
m_pIndexed = new K3DINDEXED_WATER[SHADOW_SEGMENET_INDEX_COUNT];
K3DINDEXED_WATER* pIndexed = m_pIndexed;
for(int h = 0; h < (SHADOW_SEGMENT_COUNT-1); h++)
{
for( int w = 0; w < (SHADOW_SEGMENT_COUNT-1); w++)
{
pIndexed->a = (WORD)((SHADOW_SEGMENT_COUNT*h)+w);
pIndexed->b = (WORD)((SHADOW_SEGMENT_COUNT*h)+w+1);
pIndexed->c = (WORD)((SHADOW_SEGMENT_COUNT*(h+1))+w);
pIndexed++;
pIndexed->a = (WORD)((SHADOW_SEGMENT_COUNT*h)+w+1);
pIndexed->b = (WORD)((SHADOW_SEGMENT_COUNT*(h+1))+w+1);
pIndexed->c = (WORD)((SHADOW_SEGMENT_COUNT*(h+1))+w);
pIndexed++;
}
}
NX3LoadPack loadpack;
loadpack.Init();
m_pTexture = KTextureManager::GetManager()->GetTexture( SHADOW_TEXTURE_NAME, &loadpack, true, KTextureManager::GetManager()->GetMipMapBiasLevel() );
m_pTexture->AddRef();
}
public:
static SCircleShadowCommonInfo& GetInstance();
~SCircleShadowCommonInfo()
{
Destroy();
}
void Destroy()
{
SAFE_RELEASE( m_pTexture );
SAFE_DELETE_ARRAY( m_pIndexed );
}
public:
const K3DINDEXED_WATER* GetCircleShadowIndexBuffer()
{
return m_pIndexed;
}
K3DTexture* GetCircleShadowTexture()
{
return m_pTexture;
}
};
class SGameCircleShadowFX : public SGameAvatarAddOnMgr
{
public:
SGameCircleShadowFX();
virtual ~SGameCircleShadowFX();
void Initialize();
void Render( class KViewportObject** ppViewportList, int nViewportCount );
void Refresh();
private:
SGameCircleShadowPrimitive* m_pPrimitive;
K3DBLENDEDBUMPVERTEX* m_pVertex;
float m_fScale;
float m_fWidthLength;
float m_fHeightLength;
float m_fWidthCenter;
float m_fHeightCenter;
K3DVector m_vPos;
};