Files
Client/GameTools/CHARACTERACTIONCONTROL/CCameraScript.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

148 lines
4.0 KiB
C++

#ifndef __CCAMERASCRIPT_H__
#define __CCAMERASCRIPT_H__
#include <d3d8.h>
#include <d3dx8.h>
#include <vector>
#include <windows.h>
#include <string.h>
#include "matrix.h"
using namespace std;
enum C_INTERPOLATION {
C_LINE, // Linear
C_BEZIER1, // Bezier (제어점 3)
C_BEZIER2, // Bezier (제어점 4)
C_NOTINTERPOLATION, // 보간 없음
};
#define CAMERAEVENTEMPTY -1
#define CAMERAZEROFRAME 0.0f
#define CAMERASCRIPTVERSION 1.0f
#define CAMERAFRAMESTEP 30.0f
#define CAMERASPLINEUNIT 100
class CCameraScript {
private:
// 시퀀스 unit
class CCameraEvent {
public:
int m_iIndex; // 시퀀스 인덱스
int m_iInterpolation; // 전 Event와의 보간 방법 선택
float m_fFrame; // 시작으로 부터의 프레임
D3DXVECTOR3 m_vecControlPoint[2]; // 베지어 곡선 Control Point
D3DXVECTOR3 m_vecCameraPos;
D3DXVECTOR3 m_vecCameraLook;
D3DXVECTOR3 m_vecCameraUp;
int m_iPosStart; // Pos Spline 에서의 시작 index
int m_iPosEnd; // Pos Spline 에서의 종료 index
int m_iLookStart; // Look Spline 에서의 시작 index
int m_iLookEnd; // Look Spline 에서의 종료 index
CCameraEvent() {
m_iIndex = CAMERAEVENTEMPTY;
m_iInterpolation = C_LINE;
m_fFrame = CAMERAZEROFRAME;
m_vecCameraPos = D3DXVECTOR3(0.0f,0.0f,0.0f);
m_vecCameraUp = D3DXVECTOR3(0.0f,0.0f,0.0f);
m_vecCameraLook = D3DXVECTOR3(0.0f,0.0f,0.0f);
m_iPosStart = CAMERAEVENTEMPTY;
m_iPosEnd = CAMERAEVENTEMPTY;
m_iLookStart = CAMERAEVENTEMPTY;
m_iLookEnd = CAMERAEVENTEMPTY;
}
~CCameraEvent() {}
};
vector<CCameraEvent> m_lstEvent;
vector<D3DXVECTOR3> m_lstPosSpline;
bool m_bCreateSpline;
vector<D3DXVECTOR3> m_lstLookSpline;
bool m_bCreateLookSpline;
int m_iInsertLook;
int m_iEventNum;
int m_iBeforeEvent;
float m_fRunFrame; // 시작한 다음의 지나간 시간 frame
D3DXMATRIX m_matBeforeView;
CCameraEvent m_CurrentEvent; // 현재 프레임에 맞는, Event Unit
D3DXMATRIX m_matCurrentFrame; // 현재 Frame View Matrix
LPDIRECT3DDEVICE8 m_pDevice; // Direct3D Device
DWORD m_dwBeforeTick;
DWORD m_dwCurrentTick;
bool m_bStart;
matrix m_matBeforePos;
matrix m_matBeforeView2;
int m_iFixCount;
bool m_bBackWord;
D3DXVECTOR3 m_vecCameraInitPos;
D3DXVECTOR3 m_vecCameraInitLook;
bool m_bInitPos;
public:
CCameraScript();
~CCameraScript();
void InitCameraScript(bool bInitPos = false,D3DXVECTOR3 vecInitPos = D3DXVECTOR3(0.0f,0.0f,0.0f),D3DXVECTOR3 vecInitLook = D3DXVECTOR3(0.0f,0.0f,0.0f));
void InitFrame();
int InsertEvent(D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp,float fFrame,int iInterpol);
void InsertLookPos(D3DXVECTOR3 vecLook);
void FixEvent(int iEvent,D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp);
void FixEvent(int iEvent,D3DXVECTOR3 vecPos,D3DXVECTOR3 vecLook,D3DXVECTOR3 vecUp,float fFrame,int iInterpol);
void FixLook(int iEvent,D3DXVECTOR3 vecLook);
void DeleteEvent(float fFrame,int iInterpol);
void DeleteEvent(int iIndex);
bool SaveScript(char *strFileName);
bool LoadScript(char *strFileName);
void CreateSpline();
void PlayScript(int iRoll,int iLoop,bool bFixPos);
void Rewind();
void Fowind();
void Jump(int iEvent); //iEvent로 jump
void SetPlay(bool bFlag,bool bBack = false,bool bStartPos = false);
D3DXVECTOR3 GetVecPos() { return m_CurrentEvent.m_vecCameraPos; }
D3DXVECTOR3 GetVecLook() { return m_CurrentEvent.m_vecCameraLook; }
D3DXVECTOR3 GetVecUp() { return m_CurrentEvent.m_vecCameraUp; }
D3DXMATRIX GetCurrentViewMat() { return m_matCurrentFrame; }
int GetCameraEventCnt() { return m_lstEvent.size(); }
void RenderPos_Up();
void RenderLook();
void RenderLine();
void RenderPosSpline();
void RenderLookSpline();
bool ISPlay() { return m_bStart;}
int GetExistEventNum() { return m_iEventNum;}
int GetFixCount(int &iIndex,float &fFrame);
void ReWindFix();
void FoWindFix();
void BackWordEvent();
};
#endif