Files
Client/Engine/Effect/CLightning.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

203 lines
4.2 KiB
C++

#ifndef __CLIGHTNING_H__
#define __CLIGHTNING_H__
#include <d3dx8.h>
#include <d3d8.h>
#include <time.h>
#include <vector>
#include "texture.h"
#include "BaseDataDefine.h"
#define LIGHTHALFWIDTH 10.0f
// lightning 을 표현 하는 plane 방식
enum PLANE {
LPLANE_ONE, // one plane
LPLANE_CROSS, //십자 plane
LPLANE_X, // X자 plane
};
enum LIGHTNINGVALUE { // 어떤종류 인지 : 0 라이트닝, 궤적, 1 베지어 곡선
LV_LIGHTNING,
LV_BEZIER,
};
using namespace std;
class CLightning {
public:
class CLightVertex {
public:
float x,y,z;
DWORD color;
float s,t;
CLightVertex() {
x = y = z = 0.0f;
color = D3DCOLOR_ARGB(255,255,255,255);
s = t = 0.0f;
}
~CLightVertex() {}
};
class CBezierInfo { // Bezier Line 관련 Data
public:
float m_fControl;
float m_fControlHeight;
float m_fSpeed;
float m_fAccel;
float m_fStartEndLength;
float m_fFade;
float m_fLimitLength;
float m_ft;
int m_iAxis;
int m_iEndSpeed;
int m_iEndAccel;
int m_iUvMode;
CBezierInfo() {
m_fControl = 0.5;
m_fControlHeight = 30.0f;
m_fSpeed = 0.0f;
m_fAccel = 0.0f;
m_fStartEndLength = 0.0f;
m_fFade = 0.0f;
m_fLimitLength = 0.0f;
m_ft = 0.05f;
m_iAxis = 0;
m_iEndSpeed = 0;
m_iEndAccel = 0;
m_iUvMode = 0;
}
};
// Bezier Point List
vector<D3DXVECTOR3> m_BezierPointList;
// 기준점 및 렌덤점 포인터
D3DXVECTOR3 *m_PointList;
int m_EndCount;
int m_PointNum;
// 한 퀴드의 width
float m_QuadHalfWidth;
// insert 된 point
int m_InsertCount;
// render 된 count
int m_RenderCount;
int m_MaxRenderCount;
LPDIRECT3DDEVICE8 m_Device;
//가로 플랜
LPDIRECT3DVERTEXBUFFER8 *m_Vert;
// 세로 플랜
LPDIRECT3DVERTEXBUFFER8 *m_VerticalVert;
// 세로 플랜 2
LPDIRECT3DVERTEXBUFFER8 *m_VerticalVert2;
int m_VertNum;
CTexture *m_Texture;
int m_TexNum;
//shake value 최소치
float m_ShakeMin;
//shake value 최대치
float m_ShakeMax;
DWORD m_Color;
float m_Alpha;
bool m_bFadeOut;
float m_FadeSpeed;
// uv ani 를 위한 증가치
float m_UvAni;
// 업데이트시 증가되는 uv 단위양
float m_UnitUv;
// 십자, 1자 플랜 인지 결정
int m_PlaneValue;
// 이팩트 end setting
bool m_bSetEndEffect;
// 줄어드는 속도
int m_EndUnit;
int m_LightningValue;
// Bezier Value
CBezierInfo m_Bezier;
bool m_bCrash; // 충돌한 light beam 인가?
bool m_bEndInput;
int m_iAlpha; // 충돌한 light beam alpha value
CLightVertex *tmp_Vertex;
CLightVertex *tmp_Vertex2;
CLightVertex *tmp_Vertex3;
CLightning(LPDIRECT3DDEVICE8 );
CLightning(int ,LPDIRECT3DDEVICE8 );
CLightning();
~CLightning();
//wheel이 세팅되어 있는 esf 에서 wheel 이 더이상 업데이트 되지 않을때 setting
// render2에 영향을 줌
void SetEffectEnd(bool s,int end) {m_bSetEndEffect = s; m_EndUnit = end;}
void SetUnitUv(float s) {m_UnitUv = s;}
void SetSize(float s) {m_QuadHalfWidth = s;}
void SetDevice(LPDIRECT3DDEVICE8 device) {m_Device = device;}
void SetShakeValue(float smin,float smax) {m_ShakeMin = smin;
m_ShakeMax = smax;}
void CreateList(int );
void DeleteList();
void InsertPoint(float ,float ,float );
void InsertPoint(D3DXVECTOR3 );
void InsertEmptyPoint(float ,float ,float );
void SetStartPoint(float ,float ,float );
void SetVertNum(int n) {m_VertNum = n;}
void SetFadeStart(bool t) {m_bFadeOut = t;}
void SetFadeSpeed(float s) { m_FadeSpeed = s;}
bool GetEnd();
void SetEnd();
void SetEndPoint(float ,float ,float );
void SetRandPoint();
bool SetBezierPoint(); //Bezier Curve Point Setting
void SetColor(DWORD c) {m_Color = c;}
void SetColor();
void SetPlaneValue(int k) { m_PlaneValue = k;}
void CreateTexture(int );
void SetTexture(int ,char *);
void CreateVertexBuffer();
void SetVertexBuffer(int ,int wheelvalue = 0 );
void SetBezierBuffer(int ,int wheelvalue = 0 );
void Render(int blendmode);
void SetCrash(bool b) { m_bCrash = b;} // Crash Check Setting Func
// wheel (궤적 그리는 루틴)
void Render2(int blendmode);
bool UpdateLightning(D3DXVECTOR3 &pos,bool bCrash);
void SetLightningValue(int t) { m_LightningValue = t;}
void SetBezierControl(float control,float height,float speed,float accel,float length,
float fade,float limitlength,int axis,int endspeed,int endaccel,int uv);
D3DXVECTOR3 GetBezierLastPos();
};
#endif