⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gm_world.h

📁 混乱竞技场的全套代码,客户端资源可以网上搜
💻 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 + -