/TGame/TCommon/Gene/Status/GERPGStatus.cpp

http://awoe.googlecode.com/ · C++ · 148 lines · 107 code · 31 blank · 10 comment · 23 complexity · f2b6b83141ca06b3f2706baf786a7bd3 MD5 · raw file

  1. ///////////////////////////////////////////////////////////////////////////////////////////////////
  2. // GERPGStatus.h
  3. // Tuesday, July 20, 2010
  4. // Copyright ?2009, 2010, 8DWorld, Inc. All rights reserved.
  5. //
  6. // $Description$
  7. ///////////////////////////////////////////////////////////////////////////////////////////////////
  8. #include "StdAfx.h"
  9. #include "UGRPGStatus.h"
  10. #include "base/HWBase.h"
  11. #include "Data/StaticUnitDataLoader.h"
  12. #include "Data/StaticDataFactoryIf.h"
  13. #include "Data/Static2DRenderPictureData.h"
  14. #include "Util/MovableTextConstants.h"
  15. #include "Unit/ObserverCliUnit.h"
  16. extern HWBase* GetRootApp();
  17. UGRPGStatus::GERPGStatus(void) :
  18. m_nStatusId(0),
  19. m_pMovablePic(NULL),
  20. m_pSceneNode(NULL),
  21. m_nExistTime(0),
  22. m_ptStart(0,0,0),
  23. m_ptVector(-4, 2, 0)//Test data
  24. {
  25. }
  26. UGRPGStatus::GERPGStatus(int nStatusID) :
  27. m_nStatusId(nStatusID),
  28. m_pMovablePic(NULL),
  29. m_pSceneNode(NULL),
  30. m_nExistTime(0),
  31. m_ptStart(0,0,0),
  32. m_ptVector(0, 0, 50) //Test data
  33. {
  34. }
  35. UGRPGStatus::~UGRPGStatus(void)
  36. {
  37. }
  38. bool GERPGStatus::OnAttach()
  39. {
  40. ObserverCliUnit* pObs = dynamic_cast<ObserverCliUnit*>(m_pUnit->GetObserver());
  41. if (pObs==NULL)
  42. {
  43. return false;
  44. }
  45. m_pSceneNode = pObs->GetSceneNode();
  46. if(NULL == m_pSceneNode)
  47. {
  48. return false;
  49. }
  50. //To create sence node
  51. Ogre::SceneManager* pSceneMgr = GetRootApp()->GetOgreBase()->GetSceneManager();
  52. if(NULL == pSceneMgr)
  53. return false;
  54. IStaticDataLoader* pStaticLoader = g_StaticDataFactory->GetLoader(Static2DRenderPictureData::category);
  55. if(NULL == pStaticLoader)
  56. return false;
  57. Static2DRenderPictureData* p2DPicData = dynamic_cast<Static2DRenderPictureData*>(pStaticLoader->Get(m_nStatusId));
  58. if(NULL == p2DPicData)
  59. return false;
  60. Vector3 unitPos(Vector3::ZERO);
  61. Vector3 vct3ScreenPt;
  62. Ogre::Camera* pCamera = GetRootApp()->GetOgreBase()->GetCamera();
  63. if (pCamera)
  64. {
  65. vct3ScreenPt = pCamera->getProjectionMatrix() * pCamera->getViewMatrix() * unitPos;
  66. }
  67. Vector4 area(p2DPicData->m_TexUV.left, p2DPicData->m_TexUV.top, p2DPicData->m_TexUV.right,p2DPicData->m_TexUV.bottom);
  68. Vector2 init(vct3ScreenPt.x, vct3ScreenPt.y);
  69. Vector2 sizeTex(p2DPicData->m_TexWidth, p2DPicData->m_TexHeight);
  70. Vector2 sizeWin(defaultRenderWindowWidth, defaultRenderWindowHeight);
  71. m_area1 = area;
  72. p2DPicData = dynamic_cast<Static2DRenderPictureData*>(pStaticLoader->Get(1003));
  73. if(NULL == p2DPicData)
  74. return false;
  75. Vector4 area2(p2DPicData->m_TexUV.left, p2DPicData->m_TexUV.top, p2DPicData->m_TexUV.right,p2DPicData->m_TexUV.bottom);
  76. m_area2 = area2;
  77. if(NULL == m_pSceneNode)
  78. return false;
  79. string strName = "UGRPGStatus_";
  80. strName += StringConverter::toString((int)this);
  81. m_pMovablePic = new Movable2DPicture(strName ,p2DPicData->m_TexName, vct3ScreenPt, area, init, sizeTex, sizeWin, RENDER_QUEUE_6, 0, 0, 0, false );
  82. m_pSceneNode->attachObject(m_pMovablePic);
  83. m_nExistTime = m_nTTL;
  84. return true;
  85. }
  86. bool GERPGStatus::OnDetach()
  87. {
  88. if(NULL != m_pSceneNode && NULL != m_pMovablePic)
  89. {
  90. m_pSceneNode->detachObject(m_pMovablePic->getName());
  91. SAFE_DELETE(m_pMovablePic);
  92. }
  93. return true;
  94. }
  95. void GERPGStatus::SetStatusId(int nId)
  96. {
  97. m_nStatusId = nId;
  98. }
  99. bool GERPGStatus::OnUpdate(int nElapse)
  100. {
  101. //if(!__super::OnUpdate(nElapse))
  102. // return false;
  103. return OnUpdatePosition();
  104. }
  105. bool GERPGStatus::OnUpdatePosition()
  106. {
  107. if(NULL == m_pSceneNode || NULL == m_pMovablePic)
  108. return false;
  109. if (m_nExistTime<=40)
  110. {
  111. m_nExistTime++;
  112. Vector3 ptOffset = m_ptVector * (Real(m_nExistTime) / 40);
  113. ptOffset.x = m_ptVector.x;
  114. m_pMovablePic->SetOffset(ptOffset);
  115. }
  116. return true;
  117. }