441 lines
12 KiB
C++
441 lines
12 KiB
C++
#pragma once
|
|
|
|
#include "../eterLib/MSApplication.h"
|
|
#include "../eterLib/Input.h"
|
|
#include "../eterLib/Profiler.h"
|
|
#include "../eterLib/GrpDevice.h"
|
|
#include "../eterLib/NetDevice.h"
|
|
#include "../eterLib/GrpLightManager.h"
|
|
#include "../EffectLib/EffectManager.h"
|
|
#include "../gamelib/RaceManager.h"
|
|
#include "../gamelib/ItemManager.h"
|
|
#include "../gamelib/FlyingObjectManager.h"
|
|
#include "../gamelib/GameEventManager.h"
|
|
#include "../milesLib/SoundManager.h"
|
|
|
|
#include "PythonEventManager.h"
|
|
#include "PythonPlayer.h"
|
|
#include "PythonNonPlayer.h"
|
|
#include "PythonMiniMap.h"
|
|
#include "PythonIME.h"
|
|
#include "PythonItem.h"
|
|
#include "PythonShop.h"
|
|
#include "PythonExchange.h"
|
|
#include "PythonChat.h"
|
|
#include "PythonTextTail.h"
|
|
#include "PythonSkill.h"
|
|
#include "PythonSystem.h"
|
|
//#include "PythonNetworkDatagram.h"
|
|
#include "PythonNetworkStream.h"
|
|
#include "PythonCharacterManager.h"
|
|
#include "PythonQuest.h"
|
|
#include "PythonMessenger.h"
|
|
#include "PythonSafeBox.h"
|
|
#include "PythonGuild.h"
|
|
|
|
#include "GuildMarkDownloader.h"
|
|
#include "GuildMarkUploader.h"
|
|
|
|
#include "AccountConnector.h"
|
|
|
|
#include "ServerStateChecker.h"
|
|
#include "AbstractApplication.h"
|
|
#include "MovieMan.h"
|
|
|
|
class CPythonApplication : public CMSApplication, public CInputKeyboard, public IAbstractApplication
|
|
{
|
|
public:
|
|
enum EDeviceState
|
|
{
|
|
DEVICE_STATE_FALSE,
|
|
DEVICE_STATE_SKIP,
|
|
DEVICE_STATE_OK,
|
|
};
|
|
|
|
enum ECursorMode
|
|
{
|
|
CURSOR_MODE_HARDWARE,
|
|
CURSOR_MODE_SOFTWARE,
|
|
};
|
|
|
|
enum ECursorShape
|
|
{
|
|
CURSOR_SHAPE_NORMAL,
|
|
CURSOR_SHAPE_ATTACK,
|
|
CURSOR_SHAPE_TARGET,
|
|
CURSOR_SHAPE_TALK,
|
|
CURSOR_SHAPE_CANT_GO,
|
|
CURSOR_SHAPE_PICK,
|
|
|
|
CURSOR_SHAPE_DOOR,
|
|
CURSOR_SHAPE_CHAIR,
|
|
CURSOR_SHAPE_MAGIC, // Magic
|
|
CURSOR_SHAPE_BUY, // Buy
|
|
CURSOR_SHAPE_SELL, // Sell
|
|
|
|
CURSOR_SHAPE_CAMERA_ROTATE, // Camera Rotate
|
|
CURSOR_SHAPE_HSIZE, // Horizontal Size
|
|
CURSOR_SHAPE_VSIZE, // Vertical Size
|
|
CURSOR_SHAPE_HVSIZE, // Horizontal & Vertical Size
|
|
|
|
CURSOR_SHAPE_COUNT,
|
|
|
|
// 안정적인 네이밍 변환을 위한 임시 enumerate
|
|
NORMAL = CURSOR_SHAPE_NORMAL,
|
|
ATTACK = CURSOR_SHAPE_ATTACK,
|
|
TARGET = CURSOR_SHAPE_TARGET,
|
|
CAMERA_ROTATE = CURSOR_SHAPE_CAMERA_ROTATE,
|
|
CURSOR_COUNT = CURSOR_SHAPE_COUNT,
|
|
};
|
|
|
|
enum EInfo
|
|
{
|
|
INFO_ACTOR,
|
|
INFO_EFFECT,
|
|
INFO_ITEM,
|
|
INFO_TEXTTAIL,
|
|
};
|
|
|
|
enum ECameraControlDirection
|
|
{
|
|
CAMERA_TO_POSITIVE = 1,
|
|
CAMERA_TO_NEGITIVE = -1,
|
|
CAMERA_STOP = 0,
|
|
};
|
|
|
|
enum
|
|
{
|
|
CAMERA_MODE_NORMAL = 0,
|
|
CAMERA_MODE_STAND = 1,
|
|
CAMERA_MODE_BLEND = 2,
|
|
|
|
EVENT_CAMERA_NUMBER = 101,
|
|
};
|
|
|
|
struct SCameraSpeed
|
|
{
|
|
float m_fUpDir;
|
|
float m_fViewDir;
|
|
float m_fCrossDir;
|
|
|
|
SCameraSpeed() : m_fUpDir(0.0f), m_fViewDir(0.0f), m_fCrossDir(0.0f) {}
|
|
};
|
|
|
|
public:
|
|
CPythonApplication();
|
|
virtual ~CPythonApplication();
|
|
|
|
public:
|
|
void ShowWebPage(const char* c_szURL, const RECT& c_rcWebPage);
|
|
void MoveWebPage(const RECT& c_rcWebPage);
|
|
void HideWebPage();
|
|
|
|
bool IsWebPageMode();
|
|
|
|
public:
|
|
void NotifyHack(const char* c_szFormat, ...);
|
|
void GetInfo(UINT eInfo, std::string* pstInfo);
|
|
void GetMousePosition(POINT* ppt);
|
|
|
|
static CPythonApplication& Instance()
|
|
{
|
|
assert(ms_pInstance != NULL);
|
|
return *ms_pInstance;
|
|
}
|
|
|
|
void Loop();
|
|
void Destroy();
|
|
void Clear();
|
|
void Exit();
|
|
void Abort();
|
|
|
|
void SetMinFog(float fMinFog);
|
|
void SetFrameSkip(bool isEnable);
|
|
void SkipRenderBuffering(DWORD dwSleepMSec);
|
|
|
|
bool Create(PyObject* poSelf, const char* c_szName, int width, int height, int Windowed);
|
|
bool CreateDevice(int width, int height, int Windowed, int bit = 32, int frequency = 0);
|
|
|
|
void UpdateGame();
|
|
void RenderGame();
|
|
|
|
bool Process();
|
|
|
|
void UpdateClientRect();
|
|
|
|
bool CreateCursors();
|
|
void DestroyCursors();
|
|
|
|
void SafeSetCapture();
|
|
void SafeReleaseCapture();
|
|
|
|
BOOL SetCursorNum(int iCursorNum);
|
|
void SetCursorVisible(BOOL bFlag, bool bLiarCursorOn = false);
|
|
BOOL GetCursorVisible();
|
|
bool GetLiarCursorOn();
|
|
void SetCursorMode(int iMode);
|
|
int GetCursorMode();
|
|
int GetCursorNum() { return m_iCursorNum; }
|
|
|
|
void SetMouseHandler(PyObject * poMouseHandler);
|
|
|
|
int GetWidth();
|
|
int GetHeight();
|
|
|
|
void SetGlobalCenterPosition(LONG x, LONG y);
|
|
void SetCenterPosition(float fx, float fy, float fz);
|
|
void GetCenterPosition(TPixelPosition * pPixelPosition);
|
|
void SetCamera(float Distance, float Pitch, float Rotation, float fDestinationHeight);
|
|
void GetCamera(float * Distance, float * Pitch, float * Rotation, float * DestinationHeight);
|
|
void RotateCamera(int iDirection);
|
|
void PitchCamera(int iDirection);
|
|
void ZoomCamera(int iDirection);
|
|
void MovieRotateCamera(int iDirection);
|
|
void MoviePitchCamera(int iDirection);
|
|
void MovieZoomCamera(int iDirection);
|
|
void MovieResetCamera();
|
|
void SetViewDirCameraSpeed(float fSpeed);
|
|
void SetCrossDirCameraSpeed(float fSpeed);
|
|
void SetUpDirCameraSpeed(float fSpeed);
|
|
float GetRotation();
|
|
float GetPitch();
|
|
|
|
void SetFPS(int iFPS);
|
|
void SetServerTime(time_t tTime);
|
|
time_t GetServerTime();
|
|
time_t GetServerTimeStamp();
|
|
float GetGlobalTime();
|
|
float GetGlobalElapsedTime();
|
|
|
|
float GetFaceSpeed() { return m_fFaceSpd; }
|
|
float GetAveRenderTime() { return m_fAveRenderTime; }
|
|
DWORD GetCurRenderTime() { return m_dwCurRenderTime; }
|
|
DWORD GetCurUpdateTime() { return m_dwCurUpdateTime; }
|
|
DWORD GetUpdateFPS() { return m_dwUpdateFPS; }
|
|
DWORD GetRenderFPS() { return m_dwRenderFPS; }
|
|
DWORD GetLoad() { return m_dwLoad; }
|
|
DWORD GetFaceCount() { return m_dwFaceCount; }
|
|
|
|
void SetConnectData(const char * c_szIP, int iPort);
|
|
void GetConnectData(std::string & rstIP, int & riPort);
|
|
|
|
void RunIMEUpdate();
|
|
void RunIMETabEvent();
|
|
void RunIMEReturnEvent();
|
|
void RunPressExitKey();
|
|
|
|
void RunIMEChangeCodePage();
|
|
void RunIMEOpenCandidateListEvent();
|
|
void RunIMECloseCandidateListEvent();
|
|
void RunIMEOpenReadingWndEvent();
|
|
void RunIMECloseReadingWndEvent();
|
|
|
|
void EnableSpecialCameraMode();
|
|
void SetCameraSpeed(int iPercentage);
|
|
|
|
bool IsLockCurrentCamera();
|
|
void SetEventCamera(const SCameraSetting & c_rCameraSetting);
|
|
void BlendEventCamera(const SCameraSetting & c_rCameraSetting, float fBlendTime);
|
|
void SetDefaultCamera();
|
|
|
|
void SetCameraSetting(const SCameraSetting & c_rCameraSetting);
|
|
void GetCameraSetting(SCameraSetting * pCameraSetting);
|
|
void SaveCameraSetting(const char * c_szFileName);
|
|
bool LoadCameraSetting(const char * c_szFileName);
|
|
|
|
void SetForceSightRange(int iRange);
|
|
|
|
|
|
public:
|
|
int OnLogoOpen(char* szName);
|
|
int OnLogoUpdate();
|
|
void OnLogoRender();
|
|
void OnLogoClose();
|
|
|
|
protected:
|
|
IGraphBuilder* m_pGraphBuilder; // Graph Builder
|
|
IBaseFilter* m_pFilterSG; // Sample Grabber 필터
|
|
ISampleGrabber* m_pSampleGrabber; // 영상 이미지 캡처를 위한 샘플 그래버
|
|
IMediaControl* m_pMediaCtrl; // Media Control
|
|
IMediaEventEx* m_pMediaEvent; // Media Event
|
|
IVideoWindow* m_pVideoWnd; // Video Window
|
|
IBasicVideo* m_pBasicVideo;
|
|
BYTE* m_pCaptureBuffer; // 영상 이미지를 캡처한 버퍼
|
|
LONG m_lBufferSize; // Video 버퍼 크기 변수
|
|
CGraphicImageTexture* m_pLogoTex; // 출력할 텍스쳐
|
|
bool m_bLogoError; // 영상 읽기 상태
|
|
bool m_bLogoPlay;
|
|
|
|
int m_nLeft, m_nRight, m_nTop, m_nBottom;
|
|
|
|
|
|
protected:
|
|
LRESULT WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam);
|
|
|
|
void OnCameraUpdate();
|
|
|
|
void OnUIUpdate();
|
|
void OnUIRender();
|
|
|
|
void OnMouseUpdate();
|
|
void OnMouseRender();
|
|
|
|
void OnMouseWheel(int nLen);
|
|
void OnMouseMove(int x, int y);
|
|
void OnMouseMiddleButtonDown(int x, int y);
|
|
void OnMouseMiddleButtonUp(int x, int y);
|
|
void OnMouseLeftButtonDown(int x, int y);
|
|
void OnMouseLeftButtonUp(int x, int y);
|
|
void OnMouseLeftButtonDoubleClick(int x, int y);
|
|
void OnMouseRightButtonDown(int x, int y);
|
|
void OnMouseRightButtonUp(int x, int y);
|
|
void OnSizeChange(int width, int height);
|
|
void OnKeyDown(int iIndex);
|
|
void OnKeyUp(int iIndex);
|
|
void OnIMEKeyDown(int iIndex);
|
|
|
|
int CheckDeviceState();
|
|
|
|
BOOL __IsContinuousChangeTypeCursor(int iCursorNum);
|
|
|
|
void __UpdateCamera();
|
|
|
|
void __SetFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
|
|
void __MinimizeFullScreenWindow(HWND hWnd, DWORD dwWidth, DWORD dwHeight);
|
|
|
|
|
|
protected:
|
|
CTimer m_timer;
|
|
|
|
CLightManager m_LightManager;
|
|
CSoundManager m_SoundManager;
|
|
CFlyingManager m_FlyingManager;
|
|
CRaceManager m_RaceManager;
|
|
CGameEventManager m_GameEventManager;
|
|
CItemManager m_kItemMgr;
|
|
CMovieMan m_MovieManager;
|
|
|
|
UI::CWindowManager m_kWndMgr;
|
|
CEffectManager m_kEftMgr;
|
|
CPythonCharacterManager m_kChrMgr;
|
|
|
|
CServerStateChecker m_kServerStateChecker;
|
|
CPythonGraphic m_pyGraphic;
|
|
CPythonNetworkStream m_pyNetworkStream;
|
|
//CPythonNetworkDatagram m_pyNetworkDatagram;
|
|
CPythonPlayer m_pyPlayer;
|
|
CPythonIME m_pyIme;
|
|
CPythonItem m_pyItem;
|
|
CPythonShop m_pyShop;
|
|
CPythonExchange m_pyExchange;
|
|
CPythonChat m_pyChat;
|
|
CPythonTextTail m_pyTextTail;
|
|
CPythonNonPlayer m_pyNonPlayer;
|
|
CPythonMiniMap m_pyMiniMap;
|
|
CPythonEventManager m_pyEventManager;
|
|
CPythonBackground m_pyBackground;
|
|
CPythonSkill m_pySkill;
|
|
CPythonResource m_pyRes;
|
|
CPythonQuest m_pyQuest;
|
|
CPythonMessenger m_pyManager;
|
|
CPythonSafeBox m_pySafeBox;
|
|
CPythonGuild m_pyGuild;
|
|
|
|
CGuildMarkManager m_kGuildMarkManager;
|
|
CGuildMarkDownloader m_kGuildMarkDownloader;
|
|
CGuildMarkUploader m_kGuildMarkUploader;
|
|
CAccountConnector m_kAccountConnector;
|
|
|
|
CGraphicDevice m_grpDevice;
|
|
CNetworkDevice m_netDevice;
|
|
|
|
CPythonSystem m_pySystem;
|
|
|
|
|
|
PyObject * m_poMouseHandler;
|
|
D3DXVECTOR3 m_v3CenterPosition;
|
|
|
|
unsigned int m_iFPS;
|
|
float m_fAveRenderTime;
|
|
DWORD m_dwCurRenderTime;
|
|
DWORD m_dwCurUpdateTime;
|
|
DWORD m_dwLoad;
|
|
DWORD m_dwWidth;
|
|
DWORD m_dwHeight;
|
|
|
|
protected:
|
|
// Time
|
|
DWORD m_dwLastIdleTime;
|
|
DWORD m_dwStartLocalTime;
|
|
time_t m_tServerTime;
|
|
time_t m_tLocalStartTime;
|
|
float m_fGlobalTime;
|
|
float m_fGlobalElapsedTime;
|
|
|
|
/////////////////////////////////////////////////////////////
|
|
// Camera
|
|
SCameraSetting m_DefaultCameraSetting;
|
|
SCameraSetting m_kEventCameraSetting;
|
|
|
|
int m_iCameraMode;
|
|
float m_fBlendCameraStartTime;
|
|
float m_fBlendCameraBlendTime;
|
|
SCameraSetting m_kEndBlendCameraSetting;
|
|
|
|
float m_fRotationSpeed;
|
|
float m_fPitchSpeed;
|
|
float m_fZoomSpeed;
|
|
float m_fCameraRotateSpeed;
|
|
float m_fCameraPitchSpeed;
|
|
float m_fCameraZoomSpeed;
|
|
|
|
SCameraPos m_kCmrPos;
|
|
SCameraSpeed m_kCmrSpd;
|
|
|
|
BOOL m_isSpecialCameraMode;
|
|
// Camera
|
|
/////////////////////////////////////////////////////////////
|
|
|
|
float m_fFaceSpd;
|
|
DWORD m_dwFaceSpdSum;
|
|
DWORD m_dwFaceSpdCount;
|
|
|
|
DWORD m_dwFaceAccCount;
|
|
DWORD m_dwFaceAccTime;
|
|
|
|
DWORD m_dwUpdateFPS;
|
|
DWORD m_dwRenderFPS;
|
|
DWORD m_dwFaceCount;
|
|
|
|
DWORD m_dwLButtonDownTime;
|
|
DWORD m_dwLButtonUpTime;
|
|
|
|
typedef std::map<int, HANDLE> TCursorHandleMap;
|
|
TCursorHandleMap m_CursorHandleMap;
|
|
HANDLE m_hCurrentCursor;
|
|
|
|
BOOL m_bCursorVisible;
|
|
bool m_bLiarCursorOn;
|
|
int m_iCursorMode;
|
|
bool m_isWindowed;
|
|
bool m_isFrameSkipDisable;
|
|
|
|
// Connect Data
|
|
std::string m_strIP;
|
|
int m_iPort;
|
|
|
|
static CPythonApplication* ms_pInstance;
|
|
|
|
bool m_isMinimizedWnd;
|
|
bool m_isActivateWnd;
|
|
BOOL m_isWindowFullScreenEnable;
|
|
|
|
DWORD m_dwStickyKeysFlag;
|
|
DWORD m_dwBufSleepSkipTime;
|
|
int m_iForceSightRange;
|
|
|
|
protected:
|
|
int m_iCursorNum;
|
|
int m_iContinuousCursorNum;
|
|
};
|