www.pudn.com > 林海血原源代码.zip > Rifle.cpp
// Rifle.cpp: implementation of the CRifle class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Rifle.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRifle::CRifle()
{
m_bHit=false;
}
CRifle::~CRifle()
{
}
bool CRifle::LunchBullet(int id,VERTEX startPos,float rotx,float roty,NORMAL direction)
{
m_id=id;
m_bulletPos=startPos;
m_rotX=rotx;
m_rotY=roty;
m_direction = direction;
CalcDestinationPos();
if(m_bHit)
{
m_bltParticle.InitParticle(EXPLOSION_P,startPos);
}
///////////////Draw Bullet Track//////////////////////
glDisable(GL_TEXTURE_2D);
glColor3f(0.6f,0.7f,0.75f);
glBegin(GL_LINES);
glVertex3f(startPos.xpos, startPos.ypos, startPos.zpos);
glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos, m_bulletPos.zpos);
/*
glVertex3f(startPos.xpos, startPos.ypos, startPos.zpos);
glVertex3f(m_bulletPos.xpos+2, m_bulletPos.ypos+2, m_bulletPos.zpos);
glVertex3f(startPos.xpos, startPos.ypos, startPos.zpos);
glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos+5, m_bulletPos.zpos+2);
glVertex3f(startPos.xpos, startPos.ypos, startPos.zpos);
glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos-6, m_bulletPos.zpos);
*/ glEnd();
////
return true;
}
void CRifle::CalcDestinationPos()
{
float deltaH=8;
float step=1;
m_bHit=false;
int count=0;
while(deltaH >0 && count<1000)
{
// step=deltaH*0.5f;
m_bulletPos.xpos+=m_direction.nx*step;
m_bulletPos.ypos+=m_direction.ny*step;
m_bulletPos.zpos+=m_direction.nz*step;
deltaH=m_bulletPos.ypos-m_cHmap.GetHeight(&m_bulletPos);
count++;
}
if(deltaH<0)
{
m_bHit=true;
}
}
void CRifle::DrawRifleShot()
{
if(!m_bHit)return;
glPushMatrix();
glTranslatef(m_bulletPos.xpos,m_bulletPos.ypos,m_bulletPos.zpos);
glRotatef(*m_cHmap.m_pViewRotY, 0.0f,1.0f,0.0f);
glRotatef(-*m_cHmap.m_pViewRotX, 1.0f,0.0f,0.0f);
m_bltParticle.DrawParticles(m_bulletPos);
glPopMatrix();
}