Files
Client/Engine/Effect/EffMeshloader.h
LGram16 e067522598 Initial commit: ROW Client source code
Game client codebase including:
- CharacterActionControl: Character and creature management
- GlobalScript: Network, items, skills, quests, utilities
- RYLClient: Main client application with GUI and event handlers
- Engine: 3D rendering engine (RYLGL)
- MemoryManager: Custom memory allocation
- Library: Third-party dependencies (DirectX, boost, etc.)
- Tools: Development utilities

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 16:24:34 +09:00

233 lines
4.8 KiB
C++

#ifndef __EFFECTMESH_H__
#define __EFFECTMESH_H__
#define BUF_SIZE 256
#include <vector>
#include "EffAseDefine.h"
#include "texture.h"
#include "BaseDataDefine.h"
#include <d3dx8.h>
#include <d3d8.h>
#define EFF_FILE "GEMDatafile"
#define VOT 1.0f
using namespace std;
class CEffectMesh {
public:
CEffectMesh();
~CEffectMesh();
bool LoadWadfile(char *filename,LPDIRECT3DDEVICE8 );
float Render(LPDIRECT3DDEVICE8 ,D3DXVECTOR3 );
D3DXMATRIX RotateObject(LPDIRECT3DDEVICE8 ,int object_index,float frame,D3DXMATRIX *w);
D3DXMATRIX TranslateObject(LPDIRECT3DDEVICE8 d_device,int object_index,float frame,D3DXMATRIX *w);
D3DXMATRIX ScaleObject(LPDIRECT3DDEVICE8 ,int object_index,float frame,D3DXMATRIX *w);
int vertex_interpolation(int object_index,float now_frame);
void Change_Vertexbuffer(int object_index);
void SetObjectColor(int obj_num,int r,int g,int b,int a);
void Create_Vertex(int i,LPDIRECT3DDEVICE8 );
void CreateTexture(LPDIRECT3DDEVICE8 device);
void CreateAniTexture(LPDIRECT3DDEVICE8 device,int obj_num);
void LoadSubface(int object_index);
void SetTexAniFrame(int object_index,float frame);
void SetStartTexAni(int object_index,float frame);
void StartTexAni(bool b) {m_texanistart = b;}
void SetPickColor(int object_index,int r,int g,int b,int a);
//picking 되어있는 object 의 index
void SetPickNum(int n) {pick_index = n;}
void SetNullTexture(bool b) {m_NullTexture = b;}
float UpdateMesh();
void SetFrame(float f);
void SetColor(int r,int g,int b,int a) {Color = D3DCOLOR_ARGB(a,r,g,b);}
// alpha : 0~255
float GetMaxframe() {return max_frame;}
int GetObjectNum(){return Model.object_num;}
void SetAlpha(int );
void SetLoop(bool b) {m_Loop = b; }
void StartAni(bool b) {m_Start = b;}
void SetBlend(DWORD s,DWORD d) {SrcBlend = s; DstBlend = d;}
bool GetStart() {return m_Start;}
// 프레임 증가율 조정
void SetVot(float n) {vot = n;}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// in class
///////////////////////////////////////////////////////////////////////////////////////////////////////
class WadFace {
public:
vector<int> sub;
int sub_num;
};
class WadTexture {
public:
vector<LPDIRECT3DTEXTURE8 *> tex;
int tex_num;
};
class custom_vertex{
public:
float x,y,z;
float nx,ny,nz;
float s,t;
};
class custom_vertex2{
public:
float x,y,z;
};
class AseFace{
public:
int vertex_index[4];
int coord_index[3];
};
class AseMaterial{
public:
char texture_name[255];
char texture_file[255];
BYTE color[3];
// standard ot multy/sub
int mat_class;
AseMaterial *sub;
int sub_num;
float fcolor[3];
int tex_id;
float u_tile;
float v_tile;
float u_offset;
float v_offset;
};
class AseRotKey{
public:
int frame_num;
float x,y,z,w;
};
class AsePosKey{
public:
int frame_num;
float x,y,z;
};
class AseScaleKey{
public:
int frame_num;
float x,y,z;
};
class AseMorphObject{
public:
D3DXVECTOR3 *vertex;
D3DXVECTOR2 *texcoord;
D3DXVECTOR3 *normal;
AseFace *face;
int keynum;
};
class AseObject{
public:
int material_id;
int vertex_num;
int face_num;
int texcoord_num;
bool btexture;
bool bmorph;
//bilboard mesh
bool bBil;
// bilboard2 mesh
bool bBil2;
// texture change ani.
bool bTexani;
// morphing 시작 프레임
bool bMorphStart;
// texture random change ani.
bool bRandTex;
//cull face
bool bCull;
// Ani texture num
int AniTexNum;
bool bZ;
// 이제 불러져야할 tex index
int current_tex;
char object_name[255];
char parent_name[255];
bool bparent;
D3DXVECTOR3 *vertex;
D3DXVECTOR2 *texcoord;
D3DXVECTOR3 *normal;
bool bnormal;
//object 별 RGBA
DWORD ObjectColor;
DWORD ObjectPickColor;
// ani texture
CTexture *anitexture;
D3DXMATRIX matrix;
D3DXVECTOR3 pos;
D3DXVECTOR3 rot_axis;
float rot_angle;
vector<AseRotKey> rot_key;
vector<AseMorphObject> morph;
int morph_num;
vector<AsePosKey> pos_key;
int pos_keyNum;
//
vector<AseScaleKey> scale_key;
int scale_KeyNum;
int rot_keyNum;
D3DXVECTOR3 scale;
D3DXVECTOR3 scale_axis;
D3DXQUATERNION *rot_quatkey;
AseFace *face;
float texstart_frame;
float texchange_frame;
};
class AseModel {
public:
int object_num;
int material_num;
vector<AseObject> pobject;
vector<AseMaterial> pmaterial;
};
AseModel Model;
//////////////////////////////////////////////////////////////////////////////////////////////////////
private:
LPDIRECT3DVERTEXBUFFER8 *object;
CTexture *texture;
int pick_index;
int texture_count;
DWORD Color;
WadFace *object_sub;
custom_vertex *vert;
D3DXVECTOR3 *vert2;
float frame;
float max_frame;
DWORD SrcBlend,DstBlend;
int vot;
// ani loop 돌지 안돌지
bool m_Loop;
// ani 시작한 상태인지 아닌지..
bool m_Start;
bool m_texanistart;
bool m_NullTexture;
FILE *wadfile;
};
#endif