void Way::fillStepsList(Monster& monster, int index) { monster.emptyStepsList(); monster.addStep(mExitPosition); ++mValueParameter; sf::Vector2i actualPosition(mExitPosition); while(mValueParameter != -1) { if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == mValueParameter)//left { actualPosition.x-=1; monster.addStep(actualPosition); } else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == mValueParameter)//right { actualPosition.x+=1; monster.addStep(actualPosition); } else if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == mValueParameter)//up { actualPosition.y-=1; monster.addStep(actualPosition); } else if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == mValueParameter)//down { actualPosition.y+=1; monster.addStep(actualPosition); } ++mValueParameter; } }
void Way::fillGlobalStepsList(Board& board) { board.emptyGlobalStepsList(); board.addGlobalStep(mExitPosition); ++mValueParameter; sf::Vector2i actualPosition(mExitPosition); while(mValueParameter != -1) { if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == mValueParameter)//left { actualPosition.x-=1; board.addGlobalStep(actualPosition); } else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == mValueParameter)//right { actualPosition.x+=1; board.addGlobalStep(actualPosition); } else if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == mValueParameter)//up { actualPosition.y-=1; board.addGlobalStep(actualPosition); } else if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == mValueParameter)//down { actualPosition.y+=1; board.addGlobalStep(actualPosition); } ++mValueParameter; } }
void MainScene::setViewpointCenter(const Point &position) { Size winSize = Director::getInstance()->getWinSize(); int x = MAX(position.x, winSize.width / 2); int y = MAX(position.y, winSize.height / 2); x = MIN(x, (_tileMap->getMapSize().width * _tileMap->getTileSize().width) - winSize.width / 2); y = MIN(y, (_tileMap->getMapSize().height * _tileMap->getTileSize().height) - winSize.height / 2); Point actualPosition(x, y); Point centerOfView(winSize.width / 2, winSize.height / 2); Point viewPoint = centerOfView - actualPosition; _tileMap->setPosition(viewPoint); }
bool Way::canFind(const Board& board, const sf::Vector2f& pixelsStartPosition) { makeCopy(board); mValueParameter=-1; sf::Vector2i chosenFieldPosition(FieldManager::getInstance().getChosenFieldPosition()); mWorkingBoard[chosenFieldPosition.x][chosenFieldPosition.y]=9; sf::Vector2u actualPosition(static_cast<unsigned>(pixelsStartPosition.x / gi::FIELD_WIDTH), static_cast<unsigned>(pixelsStartPosition.y / gi::FIELD_HEIGHT)); mWorkingBoard[actualPosition.x][actualPosition.y]=mValueParameter; --mValueParameter; std::queue<sf::Vector2u> pointsList; pointsList.push(actualPosition); unsigned int pointsListSize=0; while(pointsList.size() != 0) { pointsListSize=pointsList.size(); for(unsigned int i=0; i < pointsListSize; ++i) { actualPosition=pointsList.front(); pointsList.pop(); if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == 2) // found exit on right field { return true; } else if(mWorkingBoard[actualPosition.x + 1][actualPosition.y] == 0) // right field { mWorkingBoard[actualPosition.x + 1][actualPosition.y]=mValueParameter; pointsList.push(sf::Vector2u(actualPosition.x + 1, actualPosition.y)); } if(mWorkingBoard[actualPosition.x][actualPosition.y + 1] == 0) // down field { mWorkingBoard[actualPosition.x][actualPosition.y + 1]=mValueParameter; pointsList.push(sf::Vector2u(actualPosition.x, actualPosition.y + 1)); } if(mWorkingBoard[actualPosition.x][actualPosition.y - 1] == 0) // up field { mWorkingBoard[actualPosition.x][actualPosition.y - 1]=mValueParameter; pointsList.push(sf::Vector2u(actualPosition.x, actualPosition.y - 1)); } if(actualPosition.x > 1) { if(mWorkingBoard[actualPosition.x - 1][actualPosition.y] == 0) // left field { mWorkingBoard[actualPosition.x - 1][actualPosition.y]=mValueParameter; pointsList.push(sf::Vector2u(actualPosition.x - 1, actualPosition.y)); } } } --mValueParameter; } return false; }