public static void main(final String[] args) throws LWJGLException,
			IOException
	{
		System.setProperty("org.lwjgl.util.Debug", "true");

		Display.setDisplayMode(new DisplayMode(800, 600));
		Display.setResizable(true);
		Display.create();

		final Shader vertexShader = Shader
				.buildShader(
						"C:\\Users\\Adam\\git\\liars-and-the-faithful\\detective\\src\\main\\resources\\testVert.glsl",
						ShaderType.VERTEX);
		final Shader fragmentShader = Shader
				.buildShader(
						"C:\\Users\\Adam\\git\\liars-and-the-faithful\\detective\\src\\main\\resources\\testFrag.glsl",
						ShaderType.FRAGMENT);
		final Program program = Program.getProgramForShaders(vertexShader,
				fragmentShader);
		final Texture woodTexture = TextureFactory
				.loadTexture("C:\\Users\\Adam\\git\\liars-and-the-faithful\\detective\\src\\main\\resources\\wood.png");

		final Texture playerTexture = TextureFactory
				.loadTexture("C:\\Users\\Adam\\git\\liars-and-the-faithful\\detective\\src\\main\\resources\\player.png");
		final ArrayList<Rectangle> rects = new ArrayList<>(7);
		rects.add(new Rectangle(0, 0, 35, 55));
		rects.add(new Rectangle(35, 0, 35, 55));
		rects.add(new Rectangle(70, 0, 35, 55));
		rects.add(new Rectangle(105, 0, 35, 55));
		rects.add(new Rectangle(140, 0, 35, 55));
		rects.add(new Rectangle(175, 0, 35, 55));
		final Animation animation = new Animation(playerTexture, rects);
		final AnimatedSprite animatedSprite = new AnimatedSprite(animation,
				150, true);

		final Uniform projectionMatrix = program.getUniform("projectionMatrix");

		final List<Drawable> tiles = new ArrayList<>();
		float currentYOffset = 0.0f;
		for (int y = 0; y < 10; y++)
		{
			float currentXOffset = 0.0f;
			for (int x = 0; x < 13; x++)
			{
				final Drawable tile = new TileDrawable(64.0f, new Vector2f(
						currentXOffset, currentYOffset), woodTexture);
				currentXOffset += 64.f;
				tiles.add(tile);
			}
			currentYOffset += 64.f;
		}

		program.start();
		MatrixUtil.setOrthoMatrixForUniform(projectionMatrix, 0.0f,
				Display.getWidth(), Display.getHeight(), 0.0f);
		program.stop();

		long lastTime = System.currentTimeMillis();

		glEnable(GL_BLEND);
		glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

		animatedSprite.start();
		while (!Display.isCloseRequested())
		{
			program.start();
			if (Display.wasResized())
			{
				resize(Display.getWidth(), Display.getHeight(),
						projectionMatrix);
			}

			glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
			glClear(GL_COLOR_BUFFER_BIT);

			final long deltaTime = System.currentTimeMillis() - lastTime;
			lastTime = System.currentTimeMillis();

			for (final Drawable tile : tiles)
			{
				tile.update(deltaTime);
				tile.draw();
			}

			animatedSprite.update(deltaTime);
			animatedSprite.draw();

			program.stop();
			Display.update();
		}

		Display.destroy();
	}