#ifndef __CCAMERASCRIPT_H__ #define __CCAMERASCRIPT_H__ #include #include #include #include #include #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 m_lstEvent; vector m_lstPosSpline; bool m_bCreateSpline; vector 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