www.pudn.com > GameEngine.rar > GameEngine_EnergyBar.cpp, change:2005-09-17,size:3580b


#include "..\GameEngine_Common.h" 
#include "..\GameEngine_SceneManager\GameEngine_SceneManager.h" 
#include "..\GameEngine_VertexBuffer\GameEngine_VertexBuffer.h" 
#include "GameEngine_EnergyBar.h" 
 
CGameEngine_EnergyBar::CGameEngine_EnergyBar(int Width,int Height,CGameEngine_SceneManager* pGameSceneManager){ 
	m_Width=Width; 
	m_Height=Height; 
	m_pGameSceneManager=pGameSceneManager; 
	m_pEnergyBarVB=NULL; 
} 
 
CGameEngine_EnergyBar::~CGameEngine_EnergyBar(){ 
	Closedown(); 
} 
 
void CGameEngine_EnergyBar::Update(int PosX,int PosY,int Progress,D3DCOLOR Color){ 
	if(m_pEnergyBarVB!=NULL) 
		m_pEnergyBarVB->Closedown();  //保证数据是新的 
	// 
	m_pEnergyBarVB=new CGameEngine_VertexBuffer(m_pGameSceneManager); 
	m_pEnergyBarVB->Create(12,ENERGYBAR_FVF); 
	m_pEnergyBarVB->Lock(0,12); 
	ENERGYBARVERTEX* pVertexData=(ENERGYBARVERTEX*)m_pEnergyBarVB->GetVBDataPt(); 
	//外框 
	pVertexData->x=(float)PosX; 
	pVertexData->y=(float)PosY; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(255,255,0); 
	pVertexData++; 
	// 
	pVertexData->x=(float)(PosX+m_Width); 
	pVertexData->y=(float)PosY; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(255,255,0); 
	pVertexData++; 
	// 
	pVertexData->x=(float)PosX; 
	pVertexData->y=(float)PosY+m_Height; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(255,255,0); 
	pVertexData++;	 
	// 
	pVertexData->x=(float)(PosX+m_Width); 
	pVertexData->y=(float)(PosY+m_Height); 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(255,255,0); 
	pVertexData++; 
	//内框 
	pVertexData->x=(float)PosX+2.0f; 
	pVertexData->y=(float)PosY+2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(0,0,0); 
	pVertexData++; 
	// 
	pVertexData->x=(float)(PosX+m_Width)-2.0f; 
	pVertexData->y=(float)PosY+2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(0,0,0); 
	pVertexData++; 
	// 
	pVertexData->x=(float)PosX+2.0f; 
	pVertexData->y=(float)(PosY+m_Height)-2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(0,0,0); 
	pVertexData++; 
	// 
	pVertexData->x=(float)(PosX+m_Width)-2.0f; 
	pVertexData->y=(float)(PosY+m_Height)-2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=D3DCOLOR_XRGB(0,0,0); 
	pVertexData++; 
	//进度框 
	if(Progress>m_Width) 
		Progress=m_Width; 
	pVertexData->x=(float)PosX+2.0f; 
	pVertexData->y=(float)PosY+2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=Color; 
	pVertexData++; 
	// 
	pVertexData->x=(float)(PosX+Progress)-2.0f; 
	pVertexData->y=(float)PosY+2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=Color; 
	pVertexData++; 
	// 
	pVertexData->x=(float)PosX+2.0f; 
	pVertexData->y=(float)(PosY+m_Height)-2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=Color; 
	pVertexData++; 
	// 
	pVertexData->x=(float)(PosX+Progress)-2.0f; 
	pVertexData->y=(float)(PosY+m_Height)-2.0f; 
	pVertexData->z=0.0f; 
	pVertexData->rhw=1.0f; 
	pVertexData->diffuse=Color; 
	// 
	m_pEnergyBarVB->Unlock(); 
} 
 
void CGameEngine_EnergyBar::Render(){ 
	m_pEnergyBarVB->SendData(); 
	m_pEnergyBarVB->Render(0,2,D3DPT_TRIANGLESTRIP);  //内框 
	m_pEnergyBarVB->Render(4,2,D3DPT_TRIANGLESTRIP);  //外框 
	m_pEnergyBarVB->Render(8,2,D3DPT_TRIANGLESTRIP);  //进度框 
} 
 
void CGameEngine_EnergyBar::Closedown(){ 
	m_pGameSceneManager=NULL; 
	m_pEnergyBarVB->Closedown();	 
}