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

游戏引擎

开发平台:

Visual C++

  1. // AmmoManager.cpp: implementation of the CAmmoManager class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "AmmoManager.h"
  6. #include "texmanager.h"
  7. #include "math.h"
  8. //////////////////////////////////////////////////////////////////////
  9. // Construction/Destruction
  10. //////////////////////////////////////////////////////////////////////
  11. CAmmoManager::CAmmoManager()
  12. {
  13. }
  14. CAmmoManager::~CAmmoManager()
  15. {
  16. }
  17. bool CAmmoManager::InitAmmoManager()
  18. {
  19. for(int i=0;i<MAXBULLET;i++)
  20. {
  21. m_cHitParticle[i].InitParticle(VERTEX(0,0,0),CTexManager::GetTextureID(TEX_SMOKE_0),
  22.                            20,20,0.1f);
  23. }
  24.     return true;
  25. }
  26. void  CAmmoManager::UpdateAmmoManager()
  27. {
  28. if(m_cHmap.m_bAttack)
  29. {
  30. Fire(VERTEX(float(m_cHmap.m_focusPosX),
  31.             float(m_cHmap.m_focusPosY),
  32.                 float(m_cHmap.m_focusPosZ)));
  33. }
  34. }
  35. void  CAmmoManager::Fire(VERTEX pos)
  36. {
  37. float minlife=1;
  38. int index=0;
  39. for(int i=0;i<MAXBULLET;i++)
  40. {
  41. if(m_cHitParticle[i].m_Life<minlife)
  42. {
  43. minlife=m_cHitParticle[i].m_Life;
  44. index=i;
  45. }
  46. }
  47. m_cHitParticle[index].Reset(VERTEX(pos.xpos,pos.ypos,pos.zpos));
  48. if(m_cHmap.m_focusState==FOCUS_BODY)m_cHitParticle[index].SetSmokeColor(1,0,0);
  49. if(m_cHmap.m_focusState==FOCUS_GROUND)m_cHitParticle[index].SetSmokeColor(0.6f,0.5f,0.1f);
  50. }
  51. void  CAmmoManager::RenderAmmoManager()
  52. {
  53. UpdateAmmoManager();
  54. /////////// 排序
  55.     int   index[MAXBULLET];
  56. float distlist[MAXBULLET];
  57. float temp;
  58. int   tempint;
  59.     float dx,dy,dz;
  60. int numDraw=0;    //本次绘制个数
  61. for(int i=0;i<MAXBULLET;i++)
  62. {
  63. if(m_cHitParticle[i].m_Life>0)
  64. {
  65.             index[numDraw]=i;
  66.         dx=m_cHmap.m_ViewPos.xpos-m_cHitParticle[i].m_pos.xpos;
  67.         dy=m_cHmap.m_ViewPos.ypos-m_cHitParticle[i].m_pos.ypos;
  68.         dz=m_cHmap.m_ViewPos.zpos-m_cHitParticle[i].m_pos.zpos;
  69.     distlist[numDraw]=dx*dx+dy*dy+dz*dz;
  70. numDraw++;
  71. }
  72. }
  73. /////////排序
  74. for( i=1;i<numDraw;i++)
  75. {
  76.         for(int k=0;k<(numDraw-i);k++)
  77. if(distlist[k]<distlist[k+1])
  78. {
  79. temp=distlist[k];
  80. distlist[k]=distlist[k+1];
  81. distlist[k+1]=temp;
  82. tempint=index[k];
  83. index[k]=index[k+1];
  84. index[k+1]=tempint;
  85. }       
  86. }
  87.     ////////按由远到近顺序绘制
  88. for( i=0;i<numDraw;i++)
  89. {
  90. if(m_cHitParticle[index[i]].m_Life>0)
  91. m_cHitParticle[index[i]].Render();
  92. }
  93. }