public void update() { long startTime = TimeUtils.nanoTime(); Gdx.app.log(TAG, " -- Begining of Update tick (" + requestQueue.size() + ") --"); RayCastRequest rr = requestQueue.poll(); while(rr != null && TimeUtils.timeSinceNanos(startTime) < budgetTime * 1000000000f){ //budgetTime * seconds to nano world.rayCast(rr.callback, rr.point1, rr.point2); Gdx.app.log(TAG, " " + rr.point1 + " - " + rr.point2 + " processed at (" + (TimeUtils.timeSinceNanos(startTime) / 1000000000f) + ") with priority: " + rr.priority); rr = requestQueue.poll(); } Gdx.app.log(TAG, " -- End of Update tick --"); }
@Override public void render(float delta) { float elapsedTime = MathUtils.nanoToSec * TimeUtils.timeSinceNanos(startTime); viewport.apply(); Gdx.gl.glClearColor(0, 0, 0, 1); Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); shapeRenderer.setProjectionMatrix(viewport.getCamera().combined); shapeRenderer.begin(ShapeType.Line); shapeRenderer.setColor(1, 1, 1, 1); for (Rectangle rectangle : rectangles) { shapeRenderer.rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height); } for (OscillatingCircle oscillatingCircle : circles) { Circle circle = oscillatingCircle.getCurrentCircle(elapsedTime); boolean colliding = false; for (Rectangle rectangle : rectangles) { if (areColliding(rectangle, circle)) { colliding = true; break; } } if (colliding) { shapeRenderer.setColor(1, 0, 0, 1); } else { shapeRenderer.setColor(0, 1, 0, 1); } shapeRenderer.circle(circle.x, circle.y, circle.radius, circleSegments); } shapeRenderer.end(); }