예제 #1
0
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();
}