forked from metin2/client
253 lines
6.4 KiB
C++
253 lines
6.4 KiB
C++
#pragma once
|
||
|
||
#include "PythonBackground.h"
|
||
|
||
class CPythonMiniMap : public CScreen, public CSingleton<CPythonMiniMap>
|
||
{
|
||
public:
|
||
enum
|
||
{
|
||
EMPIRE_NUM = 4,
|
||
|
||
MINI_WAYPOINT_IMAGE_COUNT = 12,
|
||
WAYPOINT_IMAGE_COUNT = 15,
|
||
TARGET_MARK_IMAGE_COUNT = 2,
|
||
};
|
||
enum
|
||
{
|
||
TYPE_OPC,
|
||
TYPE_OPCPVP,
|
||
TYPE_OPCPVPSELF,
|
||
TYPE_NPC,
|
||
TYPE_MONSTER,
|
||
TYPE_WARP,
|
||
TYPE_WAYPOINT,
|
||
TYPE_PARTY,
|
||
TYPE_EMPIRE,
|
||
TYPE_EMPIRE_END = TYPE_EMPIRE + EMPIRE_NUM,
|
||
TYPE_TARGET,
|
||
TYPE_COUNT,
|
||
};
|
||
|
||
public:
|
||
CPythonMiniMap();
|
||
virtual ~CPythonMiniMap();
|
||
|
||
void Destroy();
|
||
bool Create();
|
||
|
||
bool IsAtlas();
|
||
bool CanShow();
|
||
bool CanShowAtlas();
|
||
|
||
void SetMiniMapSize(float fWidth, float fHeight);
|
||
void SetScale(float fScale);
|
||
void ScaleUp();
|
||
void ScaleDown();
|
||
|
||
void SetCenterPosition(float fCenterX, float fCenterY);
|
||
|
||
void Update(float fCenterX, float fCenterY);
|
||
void Render(float fScreenX, float fScreenY);
|
||
|
||
void Show();
|
||
void Hide();
|
||
|
||
bool GetPickedInstanceInfo(float fScreenX, float fScreenY, std::string & rReturnName, float * pReturnPosX, float * pReturnPosY, DWORD * pdwTextColor);
|
||
|
||
// Atlas
|
||
bool LoadAtlas();
|
||
void UpdateAtlas();
|
||
void RenderAtlas(float fScreenX, float fScreenY);
|
||
void ShowAtlas();
|
||
void HideAtlas();
|
||
|
||
bool GetAtlasInfo(float fScreenX, float fScreenY, std::string & rReturnString, float * pReturnPosX, float * pReturnPosY, DWORD * pdwTextColor, DWORD * pdwGuildID);
|
||
bool GetAtlasSize(float * pfSizeX, float * pfSizeY);
|
||
|
||
void AddObserver(DWORD dwVID, float fSrcX, float fSrcY);
|
||
void MoveObserver(DWORD dwVID, float fDstX, float fDstY);
|
||
void RemoveObserver(DWORD dwVID);
|
||
|
||
// WayPoint
|
||
void AddWayPoint(BYTE byType, DWORD dwID, float fX, float fY, std::string strText, DWORD dwChrVID=0);
|
||
void RemoveWayPoint(DWORD dwID);
|
||
|
||
// SignalPoint
|
||
void AddSignalPoint(float fX, float fY);
|
||
void ClearAllSignalPoint();
|
||
|
||
void RegisterAtlasWindow(PyObject* poHandler);
|
||
void UnregisterAtlasWindow();
|
||
void OpenAtlasWindow();
|
||
void SetAtlasCenterPosition(int x, int y);
|
||
|
||
// NPC List
|
||
void ClearAtlasMarkInfo();
|
||
void RegisterAtlasMark(BYTE byType, const char * c_szName, long lx, long ly);
|
||
|
||
// Guild
|
||
void ClearGuildArea();
|
||
void RegisterGuildArea(DWORD dwID, DWORD dwGuildID, long x, long y, long width, long height);
|
||
DWORD GetGuildAreaID(DWORD x, DWORD y);
|
||
|
||
// Target
|
||
void CreateTarget(int iID, const char * c_szName);
|
||
void CreateTarget(int iID, const char * c_szName, DWORD dwVID);
|
||
void UpdateTarget(int iID, int ix, int iy);
|
||
void DeleteTarget(int iID);
|
||
|
||
protected:
|
||
void __Initialize();
|
||
void __SetPosition();
|
||
void __LoadAtlasMarkInfo();
|
||
|
||
void __RenderWayPointMark(int ixCenter, int iyCenter);
|
||
void __RenderMiniWayPointMark(int ixCenter, int iyCenter);
|
||
void __RenderTargetMark(int ixCenter, int iyCenter);
|
||
|
||
void __GlobalPositionToAtlasPosition(long lx, long ly, float * pfx, float * pfy);
|
||
|
||
protected:
|
||
// Atlas
|
||
typedef struct
|
||
{
|
||
BYTE m_byType;
|
||
DWORD m_dwID; // For WayPoint
|
||
float m_fX;
|
||
float m_fY;
|
||
float m_fScreenX;
|
||
float m_fScreenY;
|
||
float m_fMiniMapX;
|
||
float m_fMiniMapY;
|
||
DWORD m_dwChrVID;
|
||
std::string m_strText;
|
||
} TAtlasMarkInfo;
|
||
|
||
// GuildArea
|
||
typedef struct
|
||
{
|
||
DWORD dwGuildID;
|
||
long lx, ly;
|
||
long lwidth, lheight;
|
||
|
||
float fsxRender, fsyRender;
|
||
float fexRender, feyRender;
|
||
} TGuildAreaInfo;
|
||
|
||
struct SObserver
|
||
{
|
||
float fCurX;
|
||
float fCurY;
|
||
float fSrcX;
|
||
float fSrcY;
|
||
float fDstX;
|
||
float fDstY;
|
||
|
||
DWORD dwSrcTime;
|
||
DWORD dwDstTime;
|
||
};
|
||
|
||
// ij<><C4B3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>Ʈ
|
||
typedef struct
|
||
{
|
||
float m_fX;
|
||
float m_fY;
|
||
UINT m_eNameColor;
|
||
} TMarkPosition;
|
||
|
||
typedef std::vector<TMarkPosition> TInstanceMarkPositionVector;
|
||
typedef TInstanceMarkPositionVector::iterator TInstancePositionVectorIterator;
|
||
|
||
protected:
|
||
bool __GetWayPoint(DWORD dwID, TAtlasMarkInfo ** ppkInfo);
|
||
void __UpdateWayPoint(TAtlasMarkInfo * pkInfo, int ix, int iy);
|
||
|
||
protected:
|
||
float m_fWidth;
|
||
float m_fHeight;
|
||
|
||
float m_fScale;
|
||
|
||
float m_fCenterX;
|
||
float m_fCenterY;
|
||
|
||
float m_fCenterCellX;
|
||
float m_fCenterCellY;
|
||
|
||
float m_fScreenX;
|
||
float m_fScreenY;
|
||
|
||
float m_fMiniMapRadius;
|
||
|
||
// <20><> <20><EFBFBD>...
|
||
LPDIRECT3DTEXTURE8 m_lpMiniMapTexture[AROUND_AREA_NUM];
|
||
|
||
// <20>̴ϸ<CCB4> Ŀ<><C4BF>
|
||
CGraphicImageInstance m_MiniMapFilterGraphicImageInstance;
|
||
CGraphicExpandedImageInstance m_MiniMapCameraraphicImageInstance;
|
||
|
||
// ij<><C4B3><EFBFBD><EFBFBD> <20><>ũ
|
||
CGraphicExpandedImageInstance m_PlayerMark;
|
||
CGraphicImageInstance m_WhiteMark;
|
||
|
||
TInstanceMarkPositionVector m_PartyPCPositionVector;
|
||
TInstanceMarkPositionVector m_OtherPCPositionVector;
|
||
TInstanceMarkPositionVector m_NPCPositionVector;
|
||
TInstanceMarkPositionVector m_MonsterPositionVector;
|
||
TInstanceMarkPositionVector m_WarpPositionVector;
|
||
std::map<DWORD, SObserver> m_kMap_dwVID_kObserver;
|
||
|
||
bool m_bAtlas;
|
||
bool m_bShow;
|
||
|
||
CGraphicVertexBuffer m_VertexBuffer;
|
||
CGraphicIndexBuffer m_IndexBuffer;
|
||
|
||
D3DXMATRIX m_matIdentity;
|
||
D3DXMATRIX m_matWorld;
|
||
D3DXMATRIX m_matMiniMapCover;
|
||
|
||
bool m_bShowAtlas;
|
||
CGraphicImageInstance m_AtlasImageInstance;
|
||
D3DXMATRIX m_matWorldAtlas;
|
||
CGraphicExpandedImageInstance m_AtlasPlayerMark;
|
||
|
||
float m_fAtlasScreenX;
|
||
float m_fAtlasScreenY;
|
||
|
||
DWORD m_dwAtlasBaseX;
|
||
DWORD m_dwAtlasBaseY;
|
||
|
||
float m_fAtlasMaxX;
|
||
float m_fAtlasMaxY;
|
||
|
||
float m_fAtlasImageSizeX;
|
||
float m_fAtlasImageSizeY;
|
||
|
||
typedef std::vector<TAtlasMarkInfo> TAtlasMarkInfoVector;
|
||
typedef TAtlasMarkInfoVector::iterator TAtlasMarkInfoVectorIterator;
|
||
typedef std::vector<TGuildAreaInfo> TGuildAreaInfoVector;
|
||
typedef TGuildAreaInfoVector::iterator TGuildAreaInfoVectorIterator;
|
||
TAtlasMarkInfoVectorIterator m_AtlasMarkInfoVectorIterator;
|
||
TAtlasMarkInfoVector m_AtlasNPCInfoVector;
|
||
TAtlasMarkInfoVector m_AtlasWarpInfoVector;
|
||
|
||
// WayPoint
|
||
CGraphicExpandedImageInstance m_MiniWayPointGraphicImageInstances[MINI_WAYPOINT_IMAGE_COUNT];
|
||
CGraphicExpandedImageInstance m_WayPointGraphicImageInstances[WAYPOINT_IMAGE_COUNT];
|
||
CGraphicExpandedImageInstance m_TargetMarkGraphicImageInstances[TARGET_MARK_IMAGE_COUNT];
|
||
CGraphicImageInstance m_GuildAreaFlagImageInstance;
|
||
TAtlasMarkInfoVector m_AtlasWayPointInfoVector;
|
||
TGuildAreaInfoVector m_GuildAreaInfoVector;
|
||
|
||
// SignalPoint
|
||
struct TSignalPoint
|
||
{
|
||
D3DXVECTOR2 v2Pos;
|
||
unsigned int id;
|
||
};
|
||
std::vector<TSignalPoint> m_SignalPointVector;
|
||
|
||
PyObject* m_poHandler;
|
||
}; |