private void UpdateFOV(LinkedList<Rectangle> walls)
	{
		ps.clear();
		fov = new Polygon();
		float tX = (float) (getPos().X - 50 * old_sign.X);
		float tY = (float) (getPos().Y - 50 * old_sign.Y);
		fov.addPoint(tX, tY);
		fov.addPoint((float) (tX - fovW), (float) (tY + fovH));
		fov.addPoint((float) (tX + fovW), (float) (tY + fovH));
		fov = (Polygon) fov.transform(Transform.createRotateTransform((float) ((Math.atan2(-speed.X, speed.Y))), tX, tY));

		for (Rectangle w : walls)
		{
			Shape s = new org.newdawn.slick.geom.Rectangle(w.x, w.y, w.width, w.height);

			if (fov.intersects(s) || fov.contains(s))
			{
				Line[] lines = new Line[4];
				lines[0] = new Line(w.x, w.y, w.x + w.width, w.y);
				lines[1] = new Line(w.x, w.y, w.x, w.y + w.height);
				lines[2] = new Line(w.x + w.width, w.y, w.x + w.width, w.y + w.height);
				lines[3] = new Line(w.x, w.y + w.height, w.x + w.width, w.y + w.height);

				for (Line l : lines)
				{
					Polygon poly = new Polygon();
					float xB, yB;
					float ratio = 4;
					poly.addPoint(l.x0, l.y0);
					poly.addPoint(l.x1, l.y1);

					xB = l.x1 - tX + l.x1;
					yB = l.y1 - tY + l.y1;

					xB = ratio * xB + (1 - ratio) * l.x1;
					yB = ratio * yB + (1 - ratio) * l.y1;

					poly.addPoint(xB, yB);

					xB = l.x0 - tX + l.x0;
					yB = l.y0 - tY + l.y0;

					xB = ratio * xB + (1 - ratio) * l.x0;
					yB = ratio * yB + (1 - ratio) * l.y0;

					poly.addPoint(xB, yB);

					ps.add(poly);
				}
			}
		}
	}