Repository navigation
1.21.0
A tree that says what each folder is for
Fox grew one folder at a time, and the names stopped matching the contents. core/ held nine autoload services and five base classes side by side. libs/ mixed static helpers, free to move, with autoload services whose every move breaks sixteen project.godot files. The word "store" meant an in-app-purchase store in one folder and a place holding state in another. Shaders lived in three folders, none of them named for shaders. Seven files were referenced by nothing at all.
Every folder now says what it is for: autoloads/ for services a game wires by path, libs/ for the nine static helpers, screens/ for the base classes a game extends, iap/ for in-app purchases, shaders/ for paint, tools/ for dev tools, and core/ for what is left.
Every consumer was repaired in the same batch as the move that broke it: 13 games, the coucarel creations and the representation templates, each one loading headless with no new error.
There is no functional regression: 1.21.0 is 1.20.0 with a tree you can navigate, and the version keeps climbing the same ladder.
Breaking changes
Every consumer of fox must update the paths it hardcodes. A class_name costs nothing, and an ext_resource carrying a uid= follows on its own. What breaks is bare paths: [autoload] lines, preload() string literals, and ext_resource lines with no uid=.
| was | is now |
|---|---|
res://fox/stores/appstore.gd, playstore.gd |
res://fox/iap/… |
res://fox/libs/{controls,keyboard,gesture,hot-reload,generate,frame-probe}.gd |
res://fox/autoloads/… |
res://fox/core/{screen,screen-3d,popup,responsive,viewport-resize}.gd |
res://fox/screens/… |
res://fox/components/blur.gdshader, behaviours/{simple-blur.gdshader,outline.tres,saturation-material.tres,disintegrate-material.tres}, components/splash/splash-electric.gdshader |
res://fox/shaders/… |
res://fox/components/controls-test/… |
res://fox/tools/controls-test/… |
interactiveArea2D, dropArea2D, multitouchArea files |
interactive-area-2d, drop-area-2d, multitouch-area |
The node names inside those scenes are unchanged: $interactiveArea2D and get_node('interactiveArea2D') keep working, because those names are the public contract.
After updating, run Godot --headless --path . --import once. Moving a class_name file leaves the class cache stale, and a stale cache reports Could not resolve super class "FoxScreen" for a file that is perfectly fine.
Generate also stops opening res://assets/name-elements.json at script load. The path is now the project setting fox/generate/name_elements_path, defaulting to the old value, read on first use and guarded: a project without that file logs a warning instead of paying for it at boot.
changelog
- #23 chore: move frame-probe and config-store to fox/libs
- #24 docs: document holo-draw-utils, menu-navigator and config-store
- #25 chore: remove seven dead shaders and the unused splash animation
- #26 refactor: extract fox/screens out of fox/core
- #27 refactor: group every shader and material in fox/shaders
- #28 chore: move controls-test from components to tools
- #29 refactor: rename fox/stores to fox/iap
- #30 refactor: rename the camelCase behaviour areas to kebab-case
- #31 refactor: split the autoload services out of fox/libs
- #32 fix: stop hardcoding a game asset path in the Generate autoload
No issue is closed by this release.
Full changelog: v1.20.0...v1.21.0