PlayCommand.cpp
上传用户:jalin138
上传日期:2022-02-12
资源大小:5720k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #include "PlayCommand.h"
  2. #include "PlayChange.h"
  3. CPlayCommand::CPlayCommand(CSprite* _Vector[],
  4.    ST_GAME_PLAY *_play)
  5. {
  6. m_bChoice = false;
  7. m_pChoice = g_Res->GetSprite( "Choice" );
  8. m_pPlay = _play;
  9. int i = 0;
  10. while ( i < m_pPlay->size*m_pPlay->size )
  11. {
  12. m_vSprite[i] = _Vector[i];
  13. i ++;
  14. }
  15. m_pPlay->nChoice1 = 0;
  16. m_pPlay->nChoice2 = 0;
  17. }
  18. CPlayCommand::~CPlayCommand(void)
  19. {
  20. m_pChoice = NULL;
  21. m_pPlay = NULL;
  22. memset(m_vSprite,NULL,sizeof(m_vSprite));
  23. }
  24. // 状态逻辑接口
  25. bool CPlayCommand::Logic(void)
  26. {
  27. float g_fBegX = 170.0f;
  28. float g_fBegY = 100.0f;
  29. float mouseX = 0, mouseY = 0;
  30. if ( g_Hge->Input_KeyDown(HGEK_LBUTTON) )
  31. {
  32. g_Hge->Input_GetMousePos(&mouseX, &mouseY);
  33. for (int i = 0;i < m_pPlay->size*m_pPlay->size; i ++)
  34. {
  35. int mt_c = i%m_pPlay->size, mt_l = i/m_pPlay->size;
  36. if ( mouseX > g_fBegX + m_pPlay->width*mt_c
  37. && mouseX < g_fBegX + m_pPlay->width*(mt_c+1)
  38. && mouseY > g_fBegY + m_pPlay->width*mt_l
  39. && mouseY < g_fBegY + m_pPlay->width*(mt_l+1) )
  40. {
  41. return CheckChoice( i );
  42. }
  43. }
  44. }
  45. if ( m_bChoice )
  46. {
  47. Move();
  48. }
  49. return false;
  50. }
  51. //检测选择
  52. bool CPlayCommand::CheckChoice(int _n)
  53. {
  54. if ( m_bChoice)
  55. {
  56. if ( m_pPlay->nChoice1 - 1 == _n 
  57. || m_pPlay->nChoice1 + 1 == _n
  58. || m_pPlay->nChoice1 - m_pPlay->size == _n
  59. || m_pPlay->nChoice1 + m_pPlay->size == _n )
  60. {
  61. m_pPlay->nChoice2 = _n;
  62. m_bChoice = false;
  63. return true;
  64. }
  65. // 复位
  66. m_vSprite[m_pPlay->nChoice1]->m_fx = (m_pPlay->nChoice1%m_pPlay->size) * m_pPlay->width 
  67. + 170.0f + m_pPlay->width/2.0f;
  68. m_vSprite[m_pPlay->nChoice1]->m_fy = (m_pPlay->nChoice1/m_pPlay->size) * m_pPlay->width 
  69. + 100.0f + m_pPlay->width/2.0f;
  70. m_pPlay->nChoice1 = _n;
  71. m_bChoice = true;
  72. return false;
  73. }
  74. m_pPlay->nChoice1 = _n;
  75. m_bChoice = true;
  76. return false;
  77. }
  78. // 选择动态
  79. void CPlayCommand::Move(void)
  80. {
  81. static int i = 0;
  82. static float mt_y = 0.0f;
  83. mt_y += 4.0f/m_pPlay->size;
  84. if ( mt_y > m_pPlay->size / 1.6f )
  85. {
  86. mt_y = 0.0f;
  87. i == 0 ? i = 1 : i = 0;
  88. }
  89. if ( i == 0 )
  90. m_vSprite[m_pPlay->nChoice1]->m_fy += 4.0f/m_pPlay->size;
  91. else
  92. m_vSprite[m_pPlay->nChoice1]->m_fy -= 4.0f/m_pPlay->size;
  93. }
  94. // 状态渲染接口
  95. void CPlayCommand::Render(void)
  96. {
  97. #ifdef _DEBUG
  98. g_Font->Print( 10,30, "Play Command" );
  99. #endif
  100. if ( m_bChoice )
  101. {
  102. float m_fsize = m_pPlay->width/73.0f; 
  103. float mf_x = (m_pPlay->nChoice1%m_pPlay->size)*m_pPlay->width
  104. + m_pPlay->width / 2.0f + 170.0f;
  105. float mf_y = (m_pPlay->nChoice1/m_pPlay->size)*m_pPlay->width
  106. + m_pPlay->width / 2.0f + 100.0f;
  107. m_pChoice->RenderEx(mf_x,mf_y,0.0f,m_fsize,m_fsize );
  108. }
  109. }
  110. // 传入场景管理对象,以改变状态
  111. bool CPlayCommand::Handle(CSceneManage *_Manage)
  112. {
  113. if ( NULL == _Manage )
  114. return false;
  115. _Manage->ChangeState( new CPlayChange(m_vSprite,m_pPlay,PLAY_COMMEND) );
  116. return false;
  117. }