@@ -230,17 +230,14 @@ std::vector<const Unit *> Game::getCellUnits(int row, int col) {
230
230
}
231
231
232
232
const Path *Game::getShortestPathToCell (const Player* from_player,const Cell* cell) {
233
- int pathID = shortestPath2Cell[from_player->getPlayerId ()][cell->getRow ()][cell->getCol ()];
234
- if (pathID == -1 )
235
- return nullptr ;
236
- return path_ptr_by_pathId (pathID);
233
+ return getShortestPathToCell (from_player, cell->getRow (), cell->getCol ());
237
234
}
238
235
239
236
const Path *Game::getShortestPathToCell (const Player* from_player, int row, int col) {
240
237
int pathID = shortestPath2Cell[from_player->getPlayerId ()][row][col];
241
238
if (pathID == -1 )
242
239
return nullptr ;
243
- return path_ptr_by_pathId ( pathID);
240
+ return path_from_player_by_pathId (from_player-> player_id_ , pathID);
244
241
}
245
242
246
243
@@ -561,6 +558,20 @@ const Path *Game::path_ptr_by_pathId(int pathId) {
561
558
assert (0 );
562
559
}
563
560
561
+ const Path *Game::path_from_player_by_pathId (int player_id, int path_id) {
562
+ for (const Path *path : players_[player_id].getPathsFromPlayer ())
563
+ if (path->getId () == path_id)
564
+ return path;
565
+ for (const Path *path : players_[give_friends_id (player_id)].getPathsFromPlayer ())
566
+ if (path->getId () == path_id)
567
+ return path;
568
+ for (const Path *path: map_.getPaths ())
569
+ if (path->getId () == path_id)
570
+ return path;
571
+
572
+ Logger::Get (LogLevel_ERROR) << " Game::path_from_player_by_pathId:: Wrong pathId" << std::endl;
573
+ assert (0 );
574
+ }
564
575
565
576
const Spell *Game::give_spell_by_typeId (int spell_id) const {
566
577
for (const Spell *_spell: this ->spells_ ){
@@ -605,17 +616,9 @@ void Game::calcShortestPaths() {
605
616
606
617
int Game::calcShortestPathToCell (const Player *from_player, int row, int col) {
607
618
608
- // First check if it's on a friends path
609
619
int friend_id = give_friends_id (from_player->player_id_ );
610
- for (int i = 0 ; i < from_player->path_to_friend ->getCells ().size (); i++){
611
- if (from_player->path_to_friend ->getCells ()[i]->getRow () == row &&
612
- from_player->path_to_friend ->getCells ()[i]->getCol () == col){
613
- // Find the players friend
614
- return players_[friend_id].getPathsFromPlayer ()[0 ]->getId ();
615
- }
616
- }
617
620
618
- // Second check if it's on a enemies friends path
621
+ // First check if it's on a enemies friends path
619
622
std::vector<const Path *> player_paths = from_player->getPathsFromPlayer ();
620
623
std::vector<const Path *> friend_paths = players_[friend_id].getPathsFromPlayer ();
621
624
size_t min = 0x7fffffff ;
@@ -667,7 +670,7 @@ int Game::calcShortestPathToCell(const Player *from_player, int row, int col) {
667
670
}
668
671
}
669
672
670
- // Third check the paths form the player
673
+ // Second check the paths form the player
671
674
for (const Path *path : player_paths) {
672
675
for (size_t i = 0 ; i < path->getCells ().size (); i++) {
673
676
if (path->getCells ()[i]->getRow () == row &&
@@ -680,6 +683,15 @@ int Game::calcShortestPathToCell(const Player *from_player, int row, int col) {
680
683
}
681
684
}
682
685
686
+ // Third check if it's on a friends path
687
+ for (int i = 0 ; i < from_player->path_to_friend ->getCells ().size (); i++){
688
+ if (from_player->path_to_friend ->getCells ()[i]->getRow () == row &&
689
+ from_player->path_to_friend ->getCells ()[i]->getCol () == col){
690
+ // Find the players friend
691
+ return players_[friend_id].getPathsFromPlayer ()[0 ]->getId ();
692
+ }
693
+ }
694
+
683
695
// Forth check the paths form the players friend
684
696
for (const Path *path : friend_paths) {
685
697
for (size_t i = 0 ; i < path->getCells ().size (); i++) {
0 commit comments