void Logic::processGhostMovement(Ghost &ghost, Maze &maze) { if(ghost.getWay().size() == 0) return; if(ghost.isPointReached()) ghost.iter = 0; int X = 0; int Y = 0; //_movingVector.setXY(0,0); if(ghost.iter != ghost.getWay().size() -1) { ghost.setIsPointReached(false); if(ghost.getWay()[ghost.iter]->direction == Direction::UP || ghost.getWay()[ghost.iter]->direction == Direction::LEFT) { X = ghost.getBoundingBox().bottom.x; Y = ghost.getBoundingBox().bottom.y; } else if(ghost.getWay()[ghost.iter]->direction == Direction::DOWN || ghost.getWay()[ghost.iter]->direction == Direction::RIGHT) { X = ghost.getBoundingBox().top.x; Y = ghost.getBoundingBox().top.y; } if(X != ghost.getWay()[ghost.iter + 1]->m_x || Y != ghost.getWay()[ghost.iter + 1]->m_y) { switch(ghost.getWay()[ghost.iter]->direction) { case Direction::UP: ghost.setDirection(Direction::UP); break; case Direction::DOWN: ghost.setDirection(Direction::DOWN); break; case Direction::LEFT: ghost.setDirection(Direction::LEFT); break; case Direction::RIGHT: ghost.setDirection(Direction::RIGHT); break; } } else { ++ghost.iter; ghost.setPosition(X,Y); } } if(ghost.getPosition().x == ghost.getWay()[ghost.getWay().size() - 1]->m_x && ghost.getPosition().y == ghost.getWay()[ghost.getWay().size() - 1]->m_y) { ghost.setIsPointReached(true); } if(ghost.getPosition() == ghost.getDestinationPoint()) { ghost.setDirection(Direction::STOP); } ghost.setMovingVector(); }