Level.cpp
上传用户:pfmy85
上传日期:2007-01-07
资源大小:22k
文件大小:4k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. // Level.cpp: implementation of the CLevel class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Isotest.h"
  6. #include "Level.h"
  7. #ifdef _DEBUG
  8. #undef THIS_FILE
  9. static char THIS_FILE[]=__FILE__;
  10. #define new DEBUG_NEW
  11. #endif
  12. //////////////////////////////////////////////////////////////////////
  13. // Construction/Destruction
  14. //////////////////////////////////////////////////////////////////////
  15. CLevel::CLevel()
  16. {
  17. m_pHero = NULL;
  18. m_pMapTile = NULL;
  19. m_pMap = NULL;
  20. m_pFrameWnd = NULL;
  21. }
  22. CLevel::~CLevel()
  23. {
  24. if (m_pHero!= NULL)
  25. {
  26. delete m_pHero;
  27. m_pHero = NULL;
  28. }
  29. if (m_pMapTile!=NULL)
  30. {
  31. delete m_pMapTile;
  32. m_pMapTile = NULL;
  33. }
  34. if (m_pMap != NULL)
  35. {
  36. delete m_pMap;
  37. m_pMap = NULL;
  38. }
  39. if (m_pFrameWnd != NULL)
  40. {
  41. delete m_pFrameWnd;
  42. m_pFrameWnd = NULL;
  43. }
  44. }
  45. bool CLevel::LoadLevel(CDDDevice* pDDDevice, LPCTSTR  lpszFileName, 
  46. CPackFileManager*  pPackFileManager/* = NULL*/)
  47. {
  48. CProfile profile;
  49. profile.Open(lpszFileName, pPackFileManager);
  50. CString strName;
  51. int i;
  52. // Load map tile
  53. strName = profile.GetProfileString("MapInfo", "TileSrc");
  54. m_pMapTile = new CDDDIBSurface;
  55. if (m_pMapTile == NULL)
  56. goto ErrExit;
  57. if (!m_pMapTile->Create(pDDDevice, strName, pPackFileManager))
  58. goto ErrExit;
  59. m_pMapTile->SetRGBColorKey();
  60. // Load map
  61. strName = profile.GetProfileString("MapInfo", "MapData");
  62. m_pMap = new CDXIsoMap;
  63. if (m_pMap == NULL)
  64. goto ErrExit;
  65. if (!m_pMap->Create(m_pMapTile, strName, pPackFileManager))
  66. goto ErrExit;
  67. // Load Frame Window
  68. strName = profile.GetProfileString("FrameInfo", "FrameSrc");
  69. m_pFrameWnd = new CDDDIBSurface;
  70. if (m_pFrameWnd == NULL)
  71. goto ErrExit;
  72. if (!m_pFrameWnd->Create(pDDDevice, strName, pPackFileManager))
  73. goto ErrExit;
  74. // m_pFrameWnd->SetRGBColorKey(0x0);
  75. // Load Hero
  76. POINT ptHero[CHero::ACTION_CNT];
  77. for (i=0; i<CHero::ACTION_CNT; i++)
  78. {
  79. strName.Format("%s_W", CHero::m_szHeroAction[i]);
  80. strName.MakeUpper();
  81. ptHero[i].x = profile.GetProfileInt("HeroInfo", strName, 0);
  82. strName.Format("%s_H", CHero::m_szHeroAction[i]);
  83. strName.MakeUpper();
  84. ptHero[i].y = profile.GetProfileInt("HeroInfo", strName, 0);
  85. }
  86. strName = profile.GetProfileString("HeroInfo", "SpriteSrc");
  87. m_pHero = new CHero;
  88. if (m_pHero == NULL)
  89. goto ErrExit;
  90. if (!m_pHero->Create(pDDDevice, strName, ptHero, pPackFileManager))
  91. goto ErrExit;
  92. RECT rect;
  93. rect.left = profile.GetProfileInt("FrameInfo", "Right_Left", 0);
  94. rect.top = profile.GetProfileInt("FrameInfo", "Right_Top", 0);
  95. rect.right = profile.GetProfileInt("FrameInfo", "Right_Right", 0);
  96. rect.bottom = profile.GetProfileInt("FrameInfo", "Right_Bottom", 0);
  97. SetViewRect(&rect);
  98. // Load map's initialize position
  99. m_pMap->MoveTo(profile.GetProfileInt("MapInfo", "InitPosX",0),
  100. profile.GetProfileInt("MapInfo", "InitPosY", 0));
  101. return true;
  102. ErrExit:
  103. ASSERT(FALSE);
  104. if (m_pFrameWnd != NULL)
  105. {
  106. delete m_pFrameWnd;
  107. m_pFrameWnd = NULL;
  108. }
  109. if (m_pHero!= NULL)
  110. {
  111. delete m_pHero;
  112. m_pHero = NULL;
  113. }
  114. if (m_pMapTile!=NULL)
  115. {
  116. delete m_pMapTile;
  117. m_pMapTile = NULL;
  118. }
  119. if (m_pMap != NULL)
  120. {
  121. delete m_pMap;
  122. m_pMap = NULL;
  123. }
  124. return false;
  125. }
  126. void CLevel::Render(CDDSurface* pDestSurface, __int64 nTime, LPRECT rcView/*=NULL*/)
  127. {
  128. m_pFrameWnd->Draw(pDestSurface, 0, 0);
  129. if (rcView == NULL)
  130. {
  131. m_pMap->Draw(pDestSurface);
  132. m_pHero->Draw(pDestSurface);
  133. }
  134. else
  135. {
  136. m_pMap->Draw(pDestSurface, rcView);
  137. m_pHero->Draw(pDestSurface, rcView);
  138. }
  139. m_pMap->DrawAbove(pDestSurface, m_pHero->m_nPosX, m_pHero->m_nPosY);
  140. m_pHero->ServeIt(nTime);
  141. }
  142. void CLevel::SetViewRect(LPRECT lprcView)
  143. {
  144. ASSERT(lprcView != NULL);
  145. memcpy(&m_rcView, lprcView, sizeof(RECT));
  146. m_pMap->SetViewRect(lprcView);
  147. m_pHero->SetViewRect(lprcView);
  148. }