Rifle.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Rifle.cpp: implementation of the CRifle class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Rifle.h"
  6. //////////////////////////////////////////////////////////////////////
  7. // Construction/Destruction
  8. //////////////////////////////////////////////////////////////////////
  9. CRifle::CRifle()
  10. {
  11. m_bHit=false;
  12. }
  13. CRifle::~CRifle()
  14. {
  15. }
  16. bool CRifle::LunchBullet(int id,VERTEX  startPos,float rotx,float roty,NORMAL direction)
  17. {
  18. m_id=id;
  19.     m_bulletPos=startPos;
  20. m_rotX=rotx;
  21. m_rotY=roty;
  22.     m_direction = direction;
  23. CalcDestinationPos();
  24.   
  25. if(m_bHit)
  26. {
  27.     m_bltParticle.InitParticle(EXPLOSION_P,startPos);
  28.   }
  29.     ///////////////Draw Bullet Track//////////////////////
  30.     glDisable(GL_TEXTURE_2D);
  31. glColor3f(0.6f,0.7f,0.75f);
  32. glBegin(GL_LINES);
  33.     glVertex3f(startPos.xpos,    startPos.ypos,    startPos.zpos);
  34.     glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos, m_bulletPos.zpos);
  35. /*
  36.     glVertex3f(startPos.xpos,    startPos.ypos,    startPos.zpos);
  37.     glVertex3f(m_bulletPos.xpos+2, m_bulletPos.ypos+2, m_bulletPos.zpos);
  38.     glVertex3f(startPos.xpos,    startPos.ypos,    startPos.zpos);
  39.     glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos+5, m_bulletPos.zpos+2);
  40.     glVertex3f(startPos.xpos,    startPos.ypos,    startPos.zpos);
  41.     glVertex3f(m_bulletPos.xpos, m_bulletPos.ypos-6, m_bulletPos.zpos);
  42.  */  glEnd();
  43.     //// 
  44. return true;
  45. }
  46. void  CRifle::CalcDestinationPos()
  47. {
  48. float deltaH=8;
  49. float step=1;
  50.     m_bHit=false;
  51. int   count=0;
  52. while(deltaH >0 && count<1000)
  53. {   
  54. // step=deltaH*0.5f;
  55.         m_bulletPos.xpos+=m_direction.nx*step;
  56.         m_bulletPos.ypos+=m_direction.ny*step;
  57.         m_bulletPos.zpos+=m_direction.nz*step;
  58. deltaH=m_bulletPos.ypos-m_cHmap.GetHeight(&m_bulletPos);
  59. count++;
  60. }
  61. if(deltaH<0)
  62. {
  63. m_bHit=true;
  64. }
  65. }
  66. void CRifle::DrawRifleShot()
  67. {
  68. if(!m_bHit)return;
  69.     glPushMatrix();
  70. glTranslatef(m_bulletPos.xpos,m_bulletPos.ypos,m_bulletPos.zpos);
  71. glRotatef(*m_cHmap.m_pViewRotY,  0.0f,1.0f,0.0f);
  72. glRotatef(-*m_cHmap.m_pViewRotX,  1.0f,0.0f,0.0f);
  73.         m_bltParticle.DrawParticles(m_bulletPos);
  74.     glPopMatrix();
  75. }