public void moveToTarget() {
		if (!isAlive())
			return;
		TileContainer[][] tileMatrix = Map.getInstance().getTileMatrix();

		int dx = Math.abs(x1 - getX());
		int dy = Math.abs(y1 - getY());
		double r = (dy + 0.) / (dx + 0.);
		int mx = 0, my = 0;
		if (r > Math.sqrt(3)) {
			mx = 0;
			my = (int) Math.signum(y1 - getY());	
		} else if (r > 1. / Math.sqrt(3)) {
			mx = (int) Math.signum(x1 - getX());
			my = (int) Math.signum(y1 - getY());
		} else {
			mx = (int) Math.signum(x1 - getX());
			my = 0;
		}
		int X = getX() + mx, Y = getY() + my;

		if ((!tileMatrix[X][Y].getTile().isWalkable()
				|| Math.hypot(X - x0, Y - y0) > radius 
				|| (getX() == x1 && getY() == y1))) {
			dissipate(X, Y);
			return;
		}
		if (tileMatrix[X][Y].getCreatures().size() > 0 
				&& !tileMatrix[X][Y].getCreatures().get(0).equals(author)) {
			dissipate(X, Y);
			return;
		}
		tryToMoveTo(X, Y);
	}