public void Update(Rectangle playerRect, double visibility)
	{
		// No need to update when not moving
		// -> No collisions, no change of angles, no change of position
		if (move != Move.IdleStand)
		{
			angle = (float) Math.toDegrees(Math.atan2(speed.X, -speed.Y));

			Vector2 sign = new Vector2(1, 1);
			sign.X = signOf(speed.X);
			if (sign.X == 0)
				sign.X = old_sign.X;
			sign.Y = signOf(speed.Y);
			if (sign.Y == 0)
				sign.Y = old_sign.Y;

			collision.x = (int) (pos.X + sign.X * size * 0.5f);
			collision.y = (int) (pos.Y + sign.Y * size * 0.5f);

			old_sign = sign;

			Vector2 newVel = speed.GetMul(moveSpeed * 0.5);

			stand_walk.setSpeed((float) newVel.GetLength() * 0.55f);

			// Movements
			pos.X += (newVel.X);
			pos.Y += (newVel.Y);

		}

		UpdateFOV(walls);

		if (fov.contains(playerRect.x, playerRect.y) && !PlayerHidden(playerRect.x, playerRect.y))
		{
			if (visibility >= 0.8f)
				// "PLAYER IS FULLY VISIBLE (guards alerted on sight)";
				state = State.Alerted;
			else if (visibility >= 0.35f)
				// "YOU ARE VISIBLE (guards will investigate on sight)";
				state = State.Suspicious;
			else if (visibility >= 0.15f)
				// "PLAYER IS PARTIALLY VISIBLE (guards will investigate if moving)";
				state = State.Suspicious;
			else if (visibility >= 0.055f)
				// "PLAYER IS ALMOST INVISIBLE (noise and movements will locate you and guards might investigate)";
				state = State.Suspicious;
			else
				// "YOU'RE INVISIBLE"
				state = State.Normal;
		}
	}