SpriteManager.cpp
上传用户:sycq158
上传日期:2008-10-22
资源大小:15361k
文件大小:2k
源码类别:

游戏

开发平台:

Visual C++

  1. // SpriteManager.cpp: implementation of the CSpriteManager class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include <list>
  5. #include "DSUtil.h"
  6. #include "ddutil.h"
  7. #include "Sprite.h"
  8. #include "SpriteManager.h"
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. CSpriteManager::CSpriteManager()
  13. {
  14. }
  15. CSpriteManager::~CSpriteManager()
  16. {
  17. }
  18. void CSpriteManager::Update()
  19. {
  20. std::list<CSprite*>::iterator iSprite;
  21. for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++)
  22. (*iSprite)->Update();
  23. }
  24. void CSpriteManager::AddSprite(CSprite *pSprite)
  25. {
  26. pSprite->m_Movement.m_pfnCollision = m_pfnCollision;
  27. pSprite->m_Movement.m_pfnFindPath  = m_pfnFindPath;
  28. m_pSpriteList.push_front(pSprite);
  29. }
  30. void CSpriteManager::Draw(LPDIRECTDRAWSURFACE7 pdds)
  31. {
  32. std::list<CSprite*>::iterator iSprite;
  33. for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++)
  34. (*iSprite)->Draw(pdds);
  35. }
  36. void CSpriteManager::RemoveSprite(CSprite *pSprite)
  37. {
  38. m_pSpriteList.remove(pSprite);
  39. }
  40. void CSpriteManager::SetCollAndPathFn(bool (__cdecl *pfnCollision)(RECT&), void (__cdecl *pfnFindPath)(CSprite *))
  41. {
  42. m_pfnCollision = pfnCollision;
  43. m_pfnFindPath = pfnFindPath;
  44. }
  45. bool CSpriteManager::IsHit(RECT &rc)
  46. {
  47. std::list<CSprite*>::iterator iSprite;
  48. for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++) {
  49. if ((*iSprite)->m_Movement.m_nInvulnerable==0 && (*iSprite)->IsHit(rc) == true) {
  50. return true;
  51. }
  52. }
  53. return false;
  54. }
  55. int CSpriteManager::KillSpritesColliWith(CSprite* pSprite)
  56. {
  57. std::list<CSprite*>::iterator iSprite;
  58. int nHit = 0;
  59. for ( iSprite = m_pSpriteList.begin(); iSprite != m_pSpriteList.end(); iSprite++) {
  60. if (pSprite->IsHit((*iSprite)->GetRect()) == true) {
  61. long nState = (*iSprite)->GetState();
  62. if (nState != ST_DEAD && nState !=ST_KILL) {
  63. (*iSprite)->SetState(ST_KILL);
  64. nHit++;
  65. }
  66. }
  67. }
  68. return nHit;
  69. }
  70. void CSpriteManager::Destroy()
  71. {
  72. m_pSpriteList.erase(m_pSpriteList.begin(),m_pSpriteList.end());
  73. }