Files
Client/GameTools/Effect/CGemRender.h
LGram16 dd97ddec92 Restructure repository to include all source folders
Move git root from Client/ to src/ to track all source code:
- Client: Game client source (moved to Client/Client/)
- Server: Game server source
- GameTools: Development tools
- CryptoSource: Encryption utilities
- database: Database scripts
- Script: Game scripts
- rylCoder_16.02.2008_src: Legacy coder tools
- GMFont, Game: Additional resources

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 20:17:20 +09:00

442 lines
8.6 KiB
C++
Raw Permalink Blame History

#ifndef __CGEMRENDER_H__
#define __CGEMRENDER_H__
#include <stdio.h>
#include "texture.h"
#include "BaseDataDefine.h"
#include <d3dx8.h>
#include <d3d8.h>
#define BUF_SIZE 256
#define VOT 1.0f
#define GEM_HEADER "GemDataFile\n"
class CGemRender {
public:
void SetClearBuffer(bool b);
bool m_bClearBuffer;
class GemTexture {
public:
CTexture *m_Tex;
int TexNum;
GemTexture() {
m_Tex = NULL;
TexNum = 0;
}
~GemTexture() {
if(m_Tex) {
/* if(TexNum >1)
delete[] m_Tex;
else*/
delete[] m_Tex;
}
}
};
class GemSubFace{
public:
int *sub;
int *sub_mat;
int sub_num;
GemSubFace() {
sub = NULL;
sub_mat = NULL;
sub_num = 0;
}
~GemSubFace() {
delete[] sub;
delete[] sub_mat;
}
};
class GemVertex{
public:
float x,y,z;
float nx,ny,nz;
float s,t;
GemVertex() {
x = y = z = 0.0f;
nx = ny = nz = 0.0f;
s = t = 0.0f;
}
~GemVertex() {}
};
class GemRotKey {
public:
int frame;
D3DXVECTOR4 rot;
GemRotKey() {
frame = 0;
rot.x = rot.y = rot.z = rot.w = 0.0f;
}
~GemRotKey(){
}
};
class GemPosKey{
public:
int frame;
bool bez;
D3DXVECTOR3 pos;
D3DXVECTOR3 intan;
D3DXVECTOR3 outtan;
GemPosKey() {
frame = 0;
bez = false;
pos.x = pos.y = pos.z = 0.0f;
intan.x = intan.y = intan.z = 0.0f;
outtan.x = outtan.y = outtan.z = 0.0f;
}
~GemPosKey(){
}
};
class GemScaleKey{
public:
int frame;
D3DXVECTOR3 scale;
GemScaleKey() {
frame = 0;
scale.x = scale.y = scale.z= 1.0f;
}
~GemScaleKey(){
}
};
class GemVisKey{
public:
int frame;
float vis;
GemVisKey(){
frame = 0;
vis = 1.0f;
}
~GemVisKey(){
}
};
class GemObject {
public:
char m_Name[BUF_SIZE];
char m_ParentName[BUF_SIZE];
bool m_bParent;
D3DXMATRIX m_TmMatrix;
// vertex info
D3DXVECTOR2 *m_Coord;
D3DXVECTOR3 *m_CoordFace;
D3DXVECTOR3 *m_Vert;
D3DXVECTOR4 *m_Face;
D3DXVECTOR3 *m_Fnormal;
D3DXVECTOR3 *m_Normal;
int m_MatId;
int m_Frame;
int m_CoordNum;
int m_iVertexStartCount;
int m_VertexNum;
int m_FaceNum;
// anikey info
int m_RotKeyNum;
int m_PosKeyNum;
int m_ScaleKeyNum;
int m_VisKeyNum;
//morphing
int m_MorphNum;
// <20>߰<EFBFBD><DFB0><EFBFBD><EFBFBD><EFBFBD>
bool m_Bil1;
bool m_Bil2;
bool m_Bil3;
// multy uv ani
bool m_Multy;
bool m_TexAni;
bool m_RandAni;
bool m_RandStartTexAni; //<2F><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ٸ<EFBFBD> <20>ؽ<EFBFBD><D8BD><EFBFBD> <20>ִ<EFBFBD> flag
bool m_RandStartSetting; //start <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD><EFBFBD>
bool m_Zenable;
bool m_Opacity;
//<2F><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> texture <20><><EFBFBD><EFBFBD>
int m_AniTextureNum;
int m_CurrentAniTexture;
int m_BeforeAniTexture;
int m_Red;
int m_Green;
int m_Blue;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
bool m_bH;
// cullmode on flag
bool m_bCull;
float m_AniChangeFrame;
//tex ani start frame
float m_StartTexAniFrame;
bool m_Zbuffer;
bool m_bDecal;
GemObject *m_Morph;
GemVisKey *m_Vis;
GemScaleKey *m_Scale;
GemPosKey *m_Pos;
GemRotKey *m_Rot;
DWORD m_Color;
// vertex buffer <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> vert pointer
GemVertex *m_VertexBuffer;
bool m_bInterpol;
GemObject() {
m_Multy = false;
m_RotKeyNum = m_PosKeyNum = m_ScaleKeyNum = m_VisKeyNum = 0;
m_Vis = NULL;
m_Scale = NULL;
m_Pos = NULL;
m_Rot = NULL;
m_Red = m_Green = m_Blue = 255;
m_bH = false;
//morphing vertex
m_Morph = NULL;
m_MorphNum = 0;
m_StartTexAniFrame = 0.0f;
m_Zbuffer = false;
m_Zenable = false;
m_bCull = false;
m_Color = D3DCOLOR_ARGB(255,255,255,255);
m_MatId = -1;
m_Frame = -1;
m_VertexNum = 0;
m_FaceNum = 0;
m_CoordNum =0;
m_Coord = NULL;
m_CoordFace = NULL;
m_Vert = NULL;
m_Face = NULL;
m_Fnormal = NULL;
m_Normal = NULL;
m_bParent = false;
m_Bil1 = m_Bil2 = m_Bil3 = false;
m_TexAni = false;
m_RandAni = false;
m_RandStartTexAni = false;
m_RandStartSetting = false;
m_Opacity = false;
m_AniChangeFrame = 0.0f;
m_AniTextureNum = 0;
m_CurrentAniTexture = 0;
m_BeforeAniTexture = 0;
D3DXMatrixIdentity(&m_TmMatrix);
memset(m_Name,0,sizeof(char)*BUF_SIZE);
memset(m_ParentName,0,sizeof(char)*BUF_SIZE);
m_VertexBuffer = NULL;
m_bInterpol = true;
m_bDecal = false;
m_iVertexStartCount = 0;
}
~GemObject() {
if(m_Scale != NULL)
delete[] m_Scale;
if(m_Vis != NULL)
delete[] m_Vis;
if(m_Vert != NULL)
delete[] m_Vert;
if(m_Face != NULL)
delete[] m_Face;
if(m_Coord != NULL)
delete[] m_Coord;
if(m_CoordFace != NULL)
delete[] m_CoordFace;
if(m_Fnormal != NULL)
delete[] m_Fnormal;
if(m_Normal != NULL)
delete[] m_Normal;
if(m_Rot)
delete[] m_Rot;
if(m_Pos)
delete[] m_Pos;
if(m_Morph)
delete[] m_Morph;
if(m_VertexBuffer)
delete[] m_VertexBuffer;
}
};
class GemMaterial {
public:
char m_TextureName[BUF_SIZE];
int m_SubNum;
GemMaterial *m_Sub;
GemMaterial() {
memset(m_TextureName,0,BUF_SIZE);
m_Sub = NULL;
m_SubNum = 0;
}
~GemMaterial() {
if(m_SubNum)
delete[] m_Sub;
}
};
CGemRender();
~CGemRender();
void SetTransMatrix(D3DXMATRIX m) {m_TrMatrix = m;}
bool CheckPosition(D3DXVECTOR3 center,D3DXVECTOR3 user);
void SetXrot(float rot) { m_Xrot = rot;}
void SetYrot(float rot) { m_Yrot = rot;}
void SetZrot(float rot) { m_Zrot = rot;}
void ScaleAni(int object_index,D3DXMATRIX &);
void PosAni(int object_index,D3DXMATRIX &);
void RotAni(int object_index,D3DXMATRIX &);
bool LoadGemFile(char *,LPDIRECT3DDEVICE8 ,bool bVisibility = true);
bool LoadUvFile(char *);
bool LoadMorph(int );
void MsgPrint(char *);
void SetInitBuffer();
void SetVertexBuffer(int index,GemVertex *ppTmp);
void SetDecalBuffer(int index); // Vertex Buffer <20><> <20><><EFBFBD><EFBFBD>
void SetDecalBufferInit(int index); // Decal Buffer Init
void SetStartFrame(float s);
void SetCash(bool b) { m_bCash = b;}
void Render();
void RenderObject(int object_index,GemVertex **ppTmp);
void Update();
void Update(D3DXVECTOR3 center,D3DXVECTOR3 user);
void UnUpdate();
bool VertexInterpolation(int index);
void LoadSubFace(int object_index);
void LoadTexture();
// set zbuffer cullface all object
void SetCullZbuffer(bool );
// my effect setting
void SetMine(bool t);
void LoadTexAni(int object_index);
bool VisAni(int object_index);
void CreateAniTm(int index,D3DXMATRIX &,D3DXMATRIX &);
void SetChangeAniFrame(int object_index,float f);
void SetStartTexAniFrame(int object_index,float f);
int GetMaxFrame() {return (m_EndF / m_UnitF);}
// effect scale setting func
void SetScale(float x,float y,float z);
void SetEffectPos(float x,float y,float z);
void SetEffectPos(D3DXVECTOR3 pos);
void SetCurrentFrame(float f);
void SetCurrentFrame(float f,int *,DWORD *,bool *,bool update = false);
void SetSrcBlend(DWORD s) {m_SrcBlend = s;}
void SetDstBlend(DWORD d) {m_DstBlend = d;}
void SetBlend(DWORD s,DWORD d) { m_SrcBlend = s; m_DstBlend = d;}
void SetColor(int object_index,int r,int g,int b);
void SetNullTexture(bool b) {m_bNullTexture = b;}
void SetPickObject(int index);
void SetVot(float v) {m_Vot = v;}
void SetLoop(bool b) {m_bLoop = b;}
int GetObjectNum() {return m_ObjectNum;}
void SetStartTexAni(bool b) {m_bTexAni = b;}
void SetAxis(D3DXMATRIX & );
void GetAxis(float ,float ,float ,float );
void GetAxis(D3DXQUATERNION tmp) {m_AxisSet = true; m_Axis = tmp;}
// ANI MESH USE
void SetRandAni(bool b) {m_RandAni = b;}
void SetRandAniMax(float s) {m_RandAniMax = s;}
void SetRandAniMin(float s) {m_RandAniMin = s;}
void SetSwitchAni(bool b) {m_SwitchAni = b;}
void SetAniRad(float r) {m_AniRad = r;}
// light <20><><EFBFBD><EFBFBD> mesh
void SetLight(bool b) {m_bLight = b;}
void SetVertexMorphData(int i);
char *GetFileName() {return m_FileName;}
FILE *m_GemFile;
//multy uv
int m_bMulty;
int m_StartF;
int m_EndF;
int m_UnitF;
int m_ObjectNum;
int m_PickObject;
int m_MatNum;
bool m_bNullTexture;
bool m_bLoop;
bool m_bCash;
bool m_bTexAni;
bool m_Mine;
bool m_bDecal;
DWORD m_SrcBlend,m_DstBlend;
float m_CurrentF;
LPDIRECT3DDEVICE8 m_Device;
D3DXMATRIX m_Scale;
D3DXMATRIX m_TrMatrix;
D3DXVECTOR3 m_Pos;
D3DXQUATERNION global;
D3DXQUATERNION m_Axis;
bool m_AxisSet;
//ANI MESH
float m_Xrot,m_Yrot,m_Zrot;
bool m_RandAni;
float m_RandAniMax;
float m_RandAniMin;
float m_AniRad;
bool m_SwitchAni;
bool m_StartSwitch;
GemMaterial *m_Mtl;
GemObject *m_Object;
GemSubFace *m_Sub;
LPDIRECT3DVERTEXBUFFER8 m_ObjectVertex;
int m_iTotalVertexNum;
int m_iTotalFaceNum;
GemTexture *m_Texture;
GemTexture *m_TexAni;
int m_TexNum;
float m_Vot;
//// vertex buffer <20><><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD> <20>ʿ<EFBFBD><CABF><EFBFBD> vert pointer
//GemVertex *m_Vert;
int VbufferNum;
// multy uv ani
CGemRender *m_Multy;
bool m_bLight;
char m_FileName[256];
};
#endif