www.pudn.com > 林海血原源代码.zip > Bullet.cpp
// Bullet.cpp: implementation of the CBullet class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Bullet.h"
#include "texture.h"
#include "math.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBullet::CBullet()
{
m_bulletType=M16;
}
CBullet::~CBullet()
{
}
bool CBullet::InitBullet(VERTEX startPos,float rotx,float roty,NORMAL direction,unsigned int *texResource,int type)
{
m_pTexResource=texResource;
m_bulletType=type;
m_CurPos=startPos;
m_oldPos=startPos;
m_rotX=rotx;
m_rotY=roty;
m_rotZ=0;
m_direction = direction;
m_life=350;
switch(m_bulletType)
{
case M16:
m_Speed=3.0f;
break;
case RIFLE:
m_Speed=3.0f;
break;
case ROCKET:
// m_rocket.InitParticle(startPos,m_pTexResource,BULLET_P,direction);
m_Speed=2.0f;
break;
}
return true;
}
bool CBullet::InitBullet(VERTEX startPos,float rotx,float roty,unsigned int *texResource,int type)
{
m_pTexResource=texResource;
NORMAL direction;
direction.nx=-cosf(rotx*0.0174533f)*sinf(roty*0.0174533f);
direction.ny=-sinf(rotx*0.0174533f);
direction.nz=-cosf(rotx*0.0174533f)*cosf(roty*0.0174533f);
InitBullet(startPos,rotx,roty,direction,m_pTexResource,type);
return true;
}
void CBullet::UpdateBullet()
{
m_oldPos=m_CurPos;
m_CurPos.xpos+=m_direction.nx*m_Speed;
m_CurPos.ypos+=m_direction.ny*m_Speed;
m_CurPos.zpos+=m_direction.nz*m_Speed;
if(m_cHmap.CollideCheck(m_oldPos,m_CurPos,2))
{
m_life=-1;
}
else
{
if(m_bulletType==M16)DrawM16Bullet();
if(m_bulletType==RIFLE)DrawRifleBullet();
if(m_bulletType==ROCKET)DrawRocketBullet();
m_life--;
}
}
void CBullet::DrawRifleBullet()
{
glEnable(GL_TEXTURE_2D);
glDisable(GL_CULL_FACE);
glBindTexture(GL_TEXTURE_2D,m_pTexResource[0] );
glBlendFunc(GL_ONE,GL_ONE);
glEnable(GL_BLEND);
float size=0.1f;
glPushMatrix();
glTranslatef(m_CurPos.xpos,m_CurPos.ypos,m_CurPos.zpos);
glRotatef(m_rotY, 0.0f,1.0f,0.0f);
glRotatef(-m_rotX, 1.0f,0.0f,0.0f);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0,0);
glVertex3f(-size,-size,0);
glTexCoord2f(1,0);
glVertex3f(size,-size,0);
glTexCoord2f(0,1);
glVertex3f(-size,size,0);
glTexCoord2f(1,1);
glVertex3f(size,size,0);
glEnd();
glPopMatrix();
glDisable(GL_BLEND);
glEnable(GL_CULL_FACE);
}
void CBullet::DrawM16Bullet()
{
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D,m_pTexResource[0] );
float size=0.05f;
glPushMatrix();
glTranslatef(m_CurPos.xpos,m_CurPos.ypos,m_CurPos.zpos);
glRotatef(m_rotY, 0.0f,1.0f,0.0f);
// glRotatef(m_rotZ, 0.0f,1.0f,0.0f);
glRotatef(-m_rotX, 1.0f,0.0f,0.0f);
glBegin(GL_TRIANGLE_FAN);
glTexCoord2f(0,1);
glVertex3f(0,0,-size*100);
glTexCoord2f(0,0);
glVertex3f(-size,0,0);
glTexCoord2f(1,0);
glVertex3f(size,0,0);
glTexCoord2f(0,0);
glVertex3f(0,size,0);
glTexCoord2f(1,0);
glVertex3f(-size,0,0);
glEnd();
glPopMatrix();
glEnable(GL_CULL_FACE);
glDisable(GL_BLEND);
}
void CBullet::DrawRocketBullet()
{
// m_rocket.DrawParticles(m_CurPos,m_direction);
}
void CBullet::DrawExplosion()
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glDisable(GL_CULL_FACE);
glBindTexture(GL_TEXTURE_2D,m_pTexResource[3] );
glBlendFunc(GL_ONE,GL_ONE);
glEnable(GL_BLEND);
float size=3.0f;
glPushMatrix();
glTranslatef(m_oldPos.xpos,m_oldPos.ypos,m_oldPos.zpos);
glRotatef(m_rotY, 0.0f,1.0f,0.0f);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0,0);
glVertex3f(-size,0,0);
glTexCoord2f(1,0);
glVertex3f(size,0,0);
glTexCoord2f(0,1);
glVertex3f(-size,2*size,0);
glTexCoord2f(1,1);
glVertex3f(size,2*size,0);
glEnd();
glPopMatrix();
glDisable(GL_BLEND);
glEnable(GL_CULL_FACE);
}
void CBullet::DrawGunFire()
{
glEnable(GL_TEXTURE_2D);
glEnable(GL_ALPHA_TEST);
glDisable(GL_CULL_FACE);
glBlendFunc(GL_ONE,GL_ONE);
glEnable(GL_BLEND);
glBindTexture(GL_TEXTURE_2D,m_pTexResource[3]);
float size=0.05f;
glPushMatrix();
glTranslatef(m_oldPos.xpos,m_oldPos.ypos,m_oldPos.zpos);
glRotatef(m_rotY, 0.0f,1.0f,0.0f);
glRotatef(-m_rotX, 1.0f,0.0f,0.0f);
glBegin(GL_TRIANGLE_STRIP);
glTexCoord2f(0,0);
glVertex3f(-size,-size,0);
glTexCoord2f(1,0);
glVertex3f(size,-size,0);
glTexCoord2f(0,1);
glVertex3f(-size,size,0);
glTexCoord2f(1,1);
glVertex3f(size,size,0);
glEnd();
glPopMatrix();
glDisable(GL_BLEND);
glEnable(GL_CULL_FACE);
}