📄 gm_world.h
字号:
// GM_World.h: interface for the GM_World class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_GM_World_H__5FD0350F_399D_4A58_B002_2499C6FF7BCD__INCLUDED_)
#define AFX_GM_World_H__5FD0350F_399D_4A58_B002_2499C6FF7BCD__INCLUDED_
#include "GM_Object.h" // Added by ClassView
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define DRAW_GRID_NONE 0x00000000
#define DRAW_GRID_FRAME 0x00000001
#define DRAW_GRID_OBJECT 0x00000002
//#define DRAW_GRID_
#define TERRAIN_FLAG_BLOCK 0xf1000000
#define TERRAIN_FLAG_BARRIER 0xf2000000
typedef std::map<float, GM_Object*, std::greater<float> > OBJ_MAP;
class GM_World
{
#pragma pack(push, 1)
struct _MESH_NODE //格子渲染信息节点
{
FLOAT xFlat; //映射平面坐标
FLOAT yFlat;
FLOAT xRough; //实际坐标
FLOAT yRough;
FLOAT height; //高度
FLOAT light; //亮度 0.0~2.0
};
#pragma pack(pop)
LONG m_num_grid_width; //场景格子坐标规格
LONG m_num_grid_height;
LONG m_scene_width; //场景规格
LONG m_scene_height;
float m_fXOriginalPix; //当前可见场景基点(中间变量)
float m_fYOriginalPix;
DWORD m_dwSceneTime; //场景时间
DWORD m_dwSceneStepTime; //场景步速(单步运行时用)
DWORD m_dwSceneBaseTime; //场景时间基准(中间变量)
DWORD m_dwSceneStopTime; //^
//节点表
std::vector<_MESH_NODE> m_aNode;
//物体表
//terrain
std::vector<FLAG> m_aTerrain;
std::map<INDEX, std::vector<GM_Object*> > m_mapObject;
// std::multimap<INDEX, GM_Object* > m_mapObject;
ID m_idObjFocus;
// earthquake
float m_quake_grade;
float m_quake_time;
float m_simsky_height;
public:
std::map<ID, GM_Object*> m_apObject;
BOOL TestActiveRange(LONG x, LONG y);
void DeleteObject(ID id);
GM_Object* GetObject(ID id);
VOID CalcMinimap();
VOID SetMinimapUI(GM_UI_Minimap* pUIMinimap);
virtual VOID ReleaseSource();
virtual HRESULT RestoreSource();
BOOL CreateWorld(const char* strBackground);
BOOL CreateWorld(int width, int height);
GRECT m_rcOriginalPix;
GRECT m_rcOriginalCell;
VOID PlaceTerrainBarrier(LONG nX, LONG nY);
VOID PlaceTerrainBlock(LONG nX, LONG nY);
VOID TriggerThunderPoint(LONG px, LONG py);
VOID TriggerEarthquake(float fGrade = 0.0f, float time_sec = 0.0f);
VOID TriggerRaining(LONG rain, BOOL bThunder = false );
VOID TriggerThunder(float m_rate = 3.5f, BOOL bLighting = false);
VOID GetRangeDirectionObject(OBJ_MAP &map, LONG nX, LONG nY, float range, GM_Object* obj_shit=NULL);
VOID GetRangeAngleObject(OBJ_MAP &map, LONG nX, LONG nY, float range, GM_Object* obj_shit=NULL);
VOID SetDrawGridFlag(DWORD flag=DRAW_GRID_NONE);
BOOL AddObject(GM_Object* pObject);
BOOL PlaceObjectInPoint(GM_Object* pObject);
GM_World(CGsEngine* pEngine);
virtual ~GM_World();
VOID Cleanup();
// DWORD GetPassTime() { return m_pEnginem_dwPassTime; }
CGsEngine* GetGsEngine() { return m_pEngine; }
LONG GetCellWidth() { return m_cell_width; }
LONG GetCellHeight() { return m_cell_height; }
float GetCellRate() { return m_cell_rate; }
LONG GetNumGridWidth() { return m_num_grid_width; }
LONG GetNumGridHeight() { return m_num_grid_height; }
LONG GetWidthPix() { return m_scene_width; }
LONG GetHeightPix() { return m_scene_height; }
LONG GetViewWidthPix() { return m_pEngine->GetRenderWidth(); }
LONG GetViewHeightPix() { return m_pEngine->GetRenderHeight(); }
FLOAT GetSimSkyHeight() { return m_simsky_height; }
LPGSANI GetBackGroup() { return &m_background; }
FLOAT GetFlatHeight(int nX, int nY);
FLOAT GetRoughHeight(int nX, int nY);
VOID GetOriginal(LONG& nX, LONG& nY);
VOID SetOriginal(LONG nX, LONG nY);
VOID FocusTo(LONG nX, LONG nY);
VOID MoveView(LONG nXspeed, LONG nYspeed);
VOID SetFocusObject(GM_Object* pObject);
VOID SetActiveRange(LONG range) {m_active_range = range;}
VOID IndexToGrid(INDEX index, LONG &nX, LONG &nY);
INDEX GridToIndex(LONG nX, LONG nY);
VOID GridCenter(LONG& nX, LONG& nY);
int GridNodeIndexU(int nX, int nY);
int GridNodeIndexC(int nX, int nY);
int GridNodeIndexD(int nX, int nY);
//pick
VOID PickFlatGrid(LONG& nX, LONG& nY);
VOID PickRoughGrid(LONG& nX, LONG& nY);
VOID PickFlatToRough(LONG& nX, LONG& nY);
VOID PickRoughToFlat(LONG& nX, LONG& nY);
VOID PickSimSkyToScene(float &fX, float &fY, float &fZ, float* pfS=NULL);
int select_obj(std::vector<GM_Object*>&obj_array, LONG x, LONG y);
BOOL InitScene(int width, int height);
BOOL CreateRoughMesh();
virtual BOOL Update();
virtual HRESULT Render();
protected:
virtual BOOL OnUpdateViewport();
virtual VOID OnSizeChanged();
virtual VOID OnThunder() { return; }
virtual HRESULT DrawGrid();
private:
VOID _CalcOriginal();
public:
GPOINT m_mouse_grid;
protected:
int m_cell_width;
int m_cell_height;
float m_cell_rate;
LONG m_active_range;
DWORD m_flag_grid_drawing;
CGsEngine* m_pEngine;
GSANI m_background;
GM_UI_Minimap* m_ptr_ui_minimap;
};
#endif // !defined(AFX_GM_World_H__5FD0350F_399D_4A58_B002_2499C6FF7BCD__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -