@Override
    public void run() {
        loader.run();
        java.util.List<ThreeTuple<Vector2, Vector2, Vector2>> coords = parse(loader.image);
        textures = new SimpleTexture[coords.size()];
        Collections.sort(coords, new Comparator<ThreeTuple<Vector2, Vector2, Vector2>>() {
            @Override
            public int compare(ThreeTuple<Vector2, Vector2, Vector2> o1, ThreeTuple<Vector2, Vector2, Vector2> o2) {
                int xResultLocation = Double.compare(o1.one.x, o2.one.x);
                int yResultLocation = Double.compare(o1.one.y, o2.one.y);
                if (xResultLocation < 0) {
                    return yResultLocation;
                } else if (xResultLocation > 0) {
                    return yResultLocation;
                }
                return yResultLocation;
            }
        });
        // Sort the list of coordinates, so that it organizes them in order of x position, then y position. So
        // it should basically be like flattening all of the rows into a long line.
        // Then figure out some way of organizing things into orderly columns/rows, so we can have a "square"
        // grid to grab images from. Then just turn all of these into a texture of arrays and set the variable
        // to that array.
        for (int i = 0; i < coords.size(); i++) {
            ThreeTuple<Vector2, Vector2, Vector2> tt = coords.get(i);
            textures[i] = new SimpleTexture(loader.texture.getTarget(),
                    loader.texture.getName(),
                    loader.texture.getManagerHandle(),
                    tt.three.x, tt.three.y,
                    tt.one.x, tt.one.x + tt.two.x, tt.one.y, tt.one.y + tt.two.y);
//            System.err.println( "Location: " + tt.one + ", Size: " + tt.two +
//                    ", realSize:" + tt.three );
        }

        // Destroy the image we were using, as we don't need it anymore.
        loader.image.flush();
    }