www.pudn.com > Game_11.rar > GameApp.h


// GameApp.h: interface for the GameApp class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_) 
#define AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_ 
 
#pragma comment (lib,"d3dx9.lib") 
#pragma comment (lib,"d3d9.lib") 
#pragma comment (lib,"dinput8.lib") 
#pragma comment (lib,"winmm.lib") 
#pragma comment (lib,"dxguid.lib") 
 
#include  
#include  
#include  
#include  
#include  
#include "SkinMesh.h" 
#include "Camera.h" 
#include "Terrain.h" 
#include  
#include "cube.h" 
#include "unit.h" 
#include "Sound.h" 
 
using namespace std; 
 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
 
#define D3DFVF_SCREENOBJECT	D3DFVF_XYZ|D3DFVF_TEX1	//坐标信息 
#define SAFE_RELEASE(p) if(p) {p->Release();p=NULL;} 
 
class CScreenObject 
{ 
 
private: 
	struct D3DVERTEX 
	{ 
		float	x,y,z;									//坐标信息 
		float	tu,tv; 
	}; 
protected: 
	float mWidth,mHeight; 
	float x,y; 
 
	LPDIRECT3DDEVICE9			m_pDevice; 
	LPDIRECT3DTEXTURE9			m_pTexture;				//材质 
	LPDIRECT3DVERTEXBUFFER9		m_pVB; 
 
public: 
	CScreenObject(LPDIRECT3DDEVICE9 pDevice, 
			char *strTexture,float width=0,float height=0) 
	{ 
		D3DSURFACE_DESC	surfDes; 
		x=0; 
		y=0; 
 
		m_pDevice=pDevice; 
		D3DXCreateTextureFromFile(m_pDevice,strTexture,	&m_pTexture); 
		m_pTexture->GetLevelDesc(0,&surfDes); 
		if(width==0)	mWidth	=surfDes.Width	; 
			else mWidth=width; 
		if(height==0)	mHeight	=surfDes.Height	; 
			else mHeight=height;  
 
		m_pDevice->CreateVertexBuffer(4*sizeof(D3DVERTEX), 
			D3DUSAGE_SOFTWAREPROCESSING,D3DFVF_SCREENOBJECT,  
			D3DPOOL_DEFAULT, &m_pVB,NULL); 
		    
		D3DVERTEX VB[]= 
		{ 
			0,			0,		1.0f,	0.0f,0.0f, 
			mWidth,		0,		1.0f,	1.0f,0.0f, 
			0,		-mHeight,	1.0f,	0.0f,1.0f, 
			mWidth,	-mHeight,	1.0f,	1.0f,1.0f 
		}; 
 
		D3DVERTEX *pVertices; 
 
		m_pVB->Lock(0,sizeof(VB),(void**)&pVertices,D3DLOCK_DISCARD); 
			memcpy(pVertices,VB,sizeof(VB));	 
		m_pVB->Unlock(); 
	}; 
 
	~CScreenObject() 
	{ 
		SAFE_RELEASE(m_pVB); 
		SAFE_RELEASE(m_pTexture); 
	}; 
	float getX(){return x;}; 
	float getY(){return y;}; 
	 
	void MoveRelative(float dx,float dy,float widthLim=0.0f,float heightLim=0.0f) 
	{ 
		x+=dx;	 if(widthLim!=0 && x<=-widthLim/2  || x>=widthLim/2)  x-=dx; 
		y+=dy;	if(heightLim!=0 && y<=-heightLim/2 || y>=heightLim/2) y-=dy; 
	}; 
	void MoveTo(float toX,float toY) 
	{ 
		x=toX;y=toY; 
	 
	}; 
	void Render() 
	{		 
			D3DXMATRIX matWorld; 
			D3DXMatrixTranslation(&matWorld, x, y, 1.0f); 
			//D3DXMatrixRotationY(&matWorld,0); 
			m_pDevice->SetTransform(D3DTS_WORLD,&matWorld); 
		m_pDevice->SetTexture(0, m_pTexture); 
		m_pDevice->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE); 
 
			m_pDevice->SetFVF(D3DFVF_SCREENOBJECT); 
			m_pDevice->SetStreamSource(0,m_pVB,0,sizeof(D3DVERTEX));	//顶点来源 
 
			if(m_pTexture)	m_pDevice->SetTexture(0,m_pTexture); 
			m_pDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);	 
	 
	} 
 
 
 
}; 
 
typedef list  UnitList; 
 
class GameApp   
{ 
public: 
	GameApp(HWND gamehwnd,HINSTANCE hInstance); 
	virtual ~GameApp(); 
//	LRESULT CALLBACK GameApp::WndProc( HWND hwnd, UINT message, 
//								  WPARAM wParam, LPARAM lParam); 
	 
	LRESULT FrameStart(); 
	LRESULT Run(); 
	LRESULT InitGame(); 
 
	LRESULT InitD3D(); 
	LRESULT InitDInput(); 
	LRESULT EndDInput(); 
 
	LRESULT ProcessDI(); 
 
 
	LRESULT ClearD3D(); 
	LRESULT SetMatrices(); 
 
 
	LRESULT InitScene(); 
	LRESULT Render(); 
	LRESULT	Update(); 
	BOOL	LoadScene(char *strMapFile); 
protected: 
 
 
	char m_strKeyState[256]; 
	DIMOUSESTATE m_MouseState; 
 
	HINSTANCE			mhInstance; 
	HWND				hwnd; 
	LPDIRECT3D9			m_pD3D; 
	LPDIRECT3DDEVICE9	m_pD3DDevice; 
	D3DSURFACE_DESC   m_d3dsdBackBuffer;  
 
	LPDIRECTINPUT8		m_pDInput; 
	LPDIRECTINPUTDEVICE8	m_pDInputKB; 
	LPDIRECTINPUTDEVICE8	m_pDInputMouse; 
 
	CCamera			*m_pCamera; 
	CTerrain		*m_pTerrain; 
	CScreenObject	*m_pCursor; 
	CScreenObject	*m_pPanel; 
	CUnit			*m_pCursorIdicator; 
	CUnit			*m_pHero; 
 
	UnitList	m_ObjList; 
 
	CCube		*pCube; 
	CWaveMidi	*m_pSound; 
 
 
}; 
 
 
 
 
 
#endif // !defined(AFX_GAMEAPP_H__831ECC45_F71E_440D_BA26_63D95BBDD88E__INCLUDED_)