@Override
    public void processOneGameTick(long lastFrameTime) {
        entityManager = LLP.entityManager;
        buffer = new BufferedImage(400, 400, BufferedImage.TYPE_INT_RGB);
        long offsetX = 0;
        long offsetY = 0;
        if (LLP.player != null) {
            offsetX = entityManager.getComponent(LLP.player, Position.class).x - 200 * LLP.DETAIL_FACTOR;
            offsetY = entityManager.getComponent(LLP.player, Position.class).y - 200 * LLP.DETAIL_FACTOR;
        }
        Set<UUID> set = new HashSet<>(entityManager.getAllEntitiesPossessingComponent(Renderable.class));
        for (UUID u : set) {
            Graphics g = buffer.getGraphics();
            if (entityManager.hasComponent(u, Position.class)) {
                Position p = entityManager.getComponent(u, Position.class);
                if (entityManager.hasComponent(u, Sprite.class)) {
                    Sprite s = entityManager.getComponent(u, Sprite.class);
                    BufferedImage i = ((BufferedImage) LLP.spritesheets.get(s.spritesheet)).getSubimage(s.x, s.y, s.width, s.height);
                    if (entityManager.hasComponent(u, Fill.class)) {
                        if (entityManager.hasComponent(u, Collidable.class)) {
                            Collidable c = entityManager.getComponent(u, Collidable.class);
                            Rectangle r = new Rectangle((int) ((p.x - s.xOffset - offsetX) / LLP.DETAIL_FACTOR), (int) ((p.y - s.yOffset - offsetY) / LLP.DETAIL_FACTOR), s.width, s.height);
                            TexturePaint t = new TexturePaint(i, r);
                            Graphics2D g2 = (Graphics2D) g;
                            g2.setPaint(t);
                            g2.fillRect((int) ((p.x - s.xOffset - offsetX) / LLP.DETAIL_FACTOR), (int) ((p.y - s.yOffset - offsetY) / LLP.DETAIL_FACTOR), (int) (c.width / LLP.DETAIL_FACTOR), (int) (c.height / LLP.DETAIL_FACTOR));
                        }
                    } else {
                        g.drawImage(i, (int) ((p.x - s.xOffset - offsetX) / LLP.DETAIL_FACTOR), (int) ((p.y - s.yOffset - offsetY) / LLP.DETAIL_FACTOR), null);
                    }
                } else {
                    if (entityManager.hasComponent(u, Collidable.class)) {
                        Collidable c = entityManager.getComponent(u, Collidable.class);
                        g.setColor(Color.red);
                        g.fillRect((int) (p.x / LLP.DETAIL_FACTOR), (int) (p.y / LLP.DETAIL_FACTOR), (int) (c.width / LLP.DETAIL_FACTOR), (int) (c.height / LLP.DETAIL_FACTOR));
                    }
                }
            }
        }
    }