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

游戏引擎

开发平台:

Visual C++

  1. // SpriteManager.cpp: implementation of the CSpriteManager class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "SpriteManager.h"
  6. #include "texmanager.h"
  7. #include "gamesetting.h"
  8. #include "input.h"
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. CSpriteManager::CSpriteManager()
  13. {
  14. m_numSoldier=0;
  15. m_cSprite=NULL;
  16. m_bFreeze=false;
  17.     m_bNoVisible=false;
  18. m_bNoHarm=false;
  19. }
  20. CSpriteManager::~CSpriteManager()
  21. {
  22. if(m_cSprite!=NULL)
  23. {
  24. delete [] m_cSprite;
  25. m_cSprite=NULL;
  26. }
  27. }
  28. bool CSpriteManager::InitSpriteManager()
  29. {
  30. CTexManager cTex;
  31. //////// model
  32. if(!m_cSoldier.InitSMFLoader("model/soldier/soldier.smf",cTex.GetTextureID(TEX_SOILDER),1))
  33. {
  34.     MessageBox(0, "loader soilder error", "Error", MB_OK | MB_ICONERROR);
  35. return FALSE;
  36.     }
  37. if(!m_cWeapon.InitSMFLoader("model/soldier/weapon.smf",cTex.GetTextureID(TEX_WEAPON),1))
  38. {
  39.     MessageBox(0, "loader weapon error", "Error", MB_OK | MB_ICONERROR);
  40. return FALSE;
  41.     }
  42. m_numSoldier=m_cHmap.m_numSoldier;
  43. m_cSprite=new CSprite [m_numSoldier];
  44. for(int i=0;i<m_numSoldier;i++)
  45. {
  46.     m_cSprite[i].InitSprite(i,m_cHmap.m_soldierPos[i],m_cHmap.m_soldierRot[i], &m_cSoldier,&m_cWeapon);
  47. }
  48. return true;
  49. }
  50. void  CSpriteManager::RenderSprites()
  51. {
  52.     UpdateSpriteManager();
  53. unsigned char oldColor[4];
  54. unsigned char color[4];
  55. int scrX=CGameSetting::m_iScrWidth/2;
  56. int scrY=CGameSetting::m_iScrHeight/2;
  57. glReadPixels(scrX,scrY,1,1,GL_RGB,GL_UNSIGNED_BYTE,oldColor);
  58. m_cHmap.m_focusState=FOCUS_GROUND;
  59. int dieID=-1;
  60. for(int i=0;i<m_numSoldier;i++)
  61. {
  62.      m_cSprite[i].RenderSprite(m_bNoHarm);
  63. if(dieID == -1 && m_cHmap.m_bAttack)
  64. {
  65.         glReadPixels(scrX,scrY,1,1,GL_RGB,GL_UNSIGNED_BYTE,color);
  66.     if(oldColor[0]!=color[0]|| oldColor[1]!=color[1] || oldColor[2]!=color[2] )
  67. {
  68.     m_cHmap.m_focusState=FOCUS_BODY;
  69.     dieID=i;
  70.                 m_cSprite[i].Injure();  
  71. }
  72. }
  73. m_cSprite[i].UpdateSprite(m_bFreeze,m_bNoVisible);
  74. }
  75. m_cHmap.GetFocusPos();
  76. }
  77. void CSpriteManager::UpdateSpriteManager()
  78. {
  79. for(int i=0;i<m_numSoldier;i++)
  80. {
  81.      m_cHmap.m_soldierRot[i]=m_cSprite[i].m_Camera.m_CamRotY;
  82. m_cHmap.m_soldierHealth[i]=m_cSprite[i].m_Health;
  83. }
  84. if(CInput::m_keys['F'])
  85. {
  86. CInput::m_keys['F']=false;
  87.     m_bFreeze=!m_bFreeze;
  88. }
  89. if(CInput::m_keys['V'])
  90. {
  91. CInput::m_keys['V']=false;
  92.     m_bNoVisible=!m_bNoVisible;
  93. }
  94. if(CInput::m_keys['N'])
  95. {
  96. CInput::m_keys['N']=false;
  97.     m_bNoHarm=!m_bNoHarm;
  98. }
  99. }
  100. void  CSpriteManager::ResetAllSprite()
  101. {
  102. for(int i=0;i<m_numSoldier;i++)
  103. {
  104.     m_cSprite[i].ResetSpriteState();
  105. }
  106. }
  107. bool CSpriteManager::IsAllDeath()
  108. {
  109. for(int i=0;i<m_numSoldier;i++)
  110. {
  111.      if(m_cSprite[i].m_Health>0)return false;
  112. }
  113. return true;
  114. }