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();
}