I rewrote the whole threading and caching backend. It is now robust and predictable. And most of all I can query the progress while it is processing - Which is nice when working with a library of > 250.000 files.

The gallery is now searchable.
The viewer now shows the original with color coded frames.

Added an atlas editor where you can adjust the rows and cols and can generate frames based on this. It also removes empty frames.

#mipgam #godot #gdscript #godottool

I am adding core features for a release on itch.io.

One of those is proper loading and saving your projects.

I built my own file dialog that allows to provide a regex filter for the filenames. It only shows files that match this filter and strips away the extension and a prefix.

This way I can only show my project files without showing anything else.

#godot #gdscript #godottool #mipgam

As usual multithreading starts simple and then becomes a bit of a headache.

I am scanning and parsing roughly 500.000 files for spritesheet information or guessing the spritesheet by analysing the image.

Scanning the file tree takes 2 seconds.
Guessing atlas structure works well with a couple of thousand files but slows down when I do it for the full 500k.

Need to do some refactoring and add better controls for the cache and parsing request system.

#godot #gdscript #mipgam #godottool

The first version of the gallery component is working. Yay!

In the project file you define the source folders and the file-, cache-, atlas- and gallery managers parse them in multiple threads.

The gallery component displays the parsed assets in a grid allowing you to browse and display them.

In the video you can see me correct some of the extracted/guessed atlas information in real time and the animations are changing accordingly.

#mipgam #godot #gdscript #godottool

Frame guessing for sprite sheets without meta information is working!

And the debug visualization looks awesome! 😎

(When there are no json or txt files that provid meta information I try to guess it using the bitmap class through alpha mask and polygon extraction.)

#godot #gdscript #godottool #mipgam

If there are no meta information available I am going to guess the frames by extracting polygons.

Using these bitmap functions you can convert an image alpha to a bitmap alpha mask. The bitmap can create polygons based on the transparent boundaries.

Bitmap.create_from_image_alpha
Bitmap.opaque_to_polygons

#godot #gdscript #godottool #mipgam

Added a new Atlas Info inspector to the right panel. Showing the extracted meta information like columns, rows, layers and frames.

My custom tab container can now also be collapsed and expanded.

next: make a condensed tree view where I show single file folders one layer up to reduce the amount of clicking.

backlog: Then add a gallery to show animated sprites in a grid.

#godot #gdscript #godottool #mipgam

The tool can now parse different metadata sources to determine the frame-information for a given image file.

Currently implemented are #aseprite json, list as txt and cols & rows encoded in the filename. Adding more when I come across them in my #pixelart library.

The tool uses the extracted frames to animate the file when you select it in the explorer panel.

next: display the animations in a grid if the tool detects multiple layers and/or rows.

#godot #gdscript #godottool #mipgam

Added the first iteration of the library explorer. It uses the library paths defined in the project settings.

Building the file and folder cache for roughly 38.000 folders and 500.000 files takes around 2 seconds.

After that everything runs against the cache.

The file manager and cache manager are threaded. I like how clean the threading implementation is in gdscript.

#godot #gdscript #godottool

The memory/object test is kind of relaxing to watch 😎

#godot #gdscript #godottool