MineBrush.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #define MINEBRUSH_CPP
  2. /*************************************************************************************************\
  3. MineBrush.cpp : Implementation of the MineBrush component.
  4. //---------------------------------------------------------------------------//
  5. // Copyright (C) Microsoft Corporation. All rights reserved. //
  6. //===========================================================================//
  7. \*************************************************************************************************/
  8. #include "MineBrush.h"
  9. #include "EditorObjectMgr.h"
  10. #include "Move.h"
  11. bool MineBrush::beginPaint()
  12. {
  13. if ( !pAction )
  14. pAction = new MineAction();
  15. return true;
  16. }
  17. Action* MineBrush::endPaint()
  18. {
  19. Action* pRetAction = NULL;
  20. if (pAction)
  21. {
  22. if ( pAction->mineInfoList.Count() )
  23. pRetAction = pAction;
  24. else
  25. {
  26. delete pAction;
  27. }
  28. }
  29. pAction = NULL;
  30. return pRetAction;
  31. }
  32. bool MineBrush::paint( Stuff::Vector3D& worldPos, int screenX, int screenY )
  33. {
  34. long tileC;
  35. long tileR;
  36. land->worldToTile( worldPos, tileR, tileC );
  37. if (!( tileR < Terrain::realVerticesMapSide || tileR > -1
  38. || tileC < Terrain::realVerticesMapSide || tileC > -1 )) {
  39. return false;
  40. }
  41. long cellRow;
  42. long cellCol;
  43. land->worldToCell(worldPos, cellRow, cellCol);
  44. if (1 == GameMap->getMine(cellRow, cellCol)) {
  45. return true;
  46. }
  47. MineAction::CTileMineInfo info;
  48. info.row = tileR;
  49. info.column = tileC;
  50. info.mineState = GameMap->getMine( tileR, tileC);
  51. pAction->AddChangedTileMineInfo( info );
  52. GameMap->setMine(cellRow, cellCol, 1);
  53. return true;
  54. }
  55. bool MineBrush::canPaint( Stuff::Vector3D& worldPos, int screenX, int screenY, int flags )
  56. {
  57. return true;
  58. }
  59. bool MineBrush::canPaintSelection( )
  60. {
  61. return land->hasSelection();
  62. }
  63. Action* MineBrush::applyToSelection()
  64. {
  65. MineAction* pRetAction = new MineAction();
  66. for ( int i = 0; i < land->realVerticesMapSide; ++i )
  67. {
  68. for ( int j = 0; j < land->realVerticesMapSide; ++j )
  69. {
  70. if ( land->isVertexSelected( j, i ) )
  71. {
  72. MineAction::CTileMineInfo info;
  73. info.row = j;
  74. info.column = i;
  75. info.mineState = GameMap->getMine( j, i );
  76. pRetAction->AddChangedTileMineInfo( info );
  77. GameMap->setMine( j, i, 1 );
  78. }
  79. }
  80. }
  81. return pRetAction;
  82. }
  83. bool MineBrush::MineAction::undo()
  84. {
  85. for ( MINE_INFO_LIST::EIterator iter = mineInfoList.Begin();
  86. !iter.IsDone(); iter++ )
  87. {
  88. // get current values
  89. unsigned long lMineState = GameMap->getMine( (*iter).row, (*iter).column );
  90. // reset to old values
  91. GameMap->setMine( (*iter).row, (*iter).column, (*iter).mineState );
  92. // save current valuds
  93. (*iter).mineState = lMineState;
  94. }
  95. return true;
  96. }
  97. bool MineBrush::MineAction::redo()
  98. {
  99. return undo();
  100. }
  101. void MineBrush::MineAction::AddChangedTileMineInfo( CTileMineInfo& info )
  102. {
  103. for( MINE_INFO_LIST::EIterator iter = mineInfoList.Begin();
  104. !iter.IsDone(); iter++ )
  105. {
  106. if ( info.row == (*iter).row && info.column == (*iter).column )
  107. return;
  108. }
  109. mineInfoList.Append( info );
  110. }
  111. //*************************************************************************************************
  112. // end of file ( MineBrush.cpp )