11 Status
dxtr edited this page 2026-10-20 10:09:08 +02:00

Status

Step 28 is built: doubles for large worlds, in two parts. 28a: a 2D node's position and scale are dvec2s and its rotation a double-float, its transforms dmat3x2s, as are canvas layers' and a viewport's canvas transforms, so that a node a million units out still moves by a hundredth; ranges hold double-floats, as Godot's do, so that the inspector edits such a position exactly; a property may keep its float in a cell (see Resources), so that a double-float changes without allocating, and tweens change such floats in place. 28b: each canvas is drawn through its own transform, worked out in doubles each frame from its node's global transform (see 2D drawing), so that a node far out is drawn as precisely as one near the origin, and moving, turning or stretching a node draws nothing again, but what it drew on the pixels when it moves off them.

Steps 29 to 31 come next, and are 3D: the 3D renderer, the editor's 3D viewport, and glTF with Godot's animation player. Export waits under the Later steps.

Steps 26 and 27 are built. Step 26 is what Pyssel lacked to make a game like a 3D tower-defence game made with Godot, other than 3D, in eight parts. 26a: signals on every object, plain classes defined with define-object included, and a resource copied as Godot's duplicate copies it. 26b: tweens, which change properties over time. 26c: changing the tree's current scene, as change_scene_to_file does. 26d: canvas layers, and a viewport's global canvas transform (see 2D nodes). 26e: the window's stretch mode, Godot's content scale. 26f: colour rects, separators and button groups. 26g: the pointer's wheel as an action's binding, and Godot's built-in ui_ actions, which pyssel/ui's controls act on (see Input and actions). 26h: A* pathfinding, as Godot's AStar2D and AStarGrid2D, in a library of its own, cl-astar, which a game lists in its own stiftfile. Step 27: a render target is drawn only when what it shows changed, so a still scene in a viewport container, as the editor's, and a stretched window's still content keep their pictures.

Step 25, the 2D viewport made Godot's, is built, with what step 22 left open beneath it, in four parts. 25a, the engine: the sync point refuses its engine's own workers, where a call would wait forever; a painter keeps why its pipeline could not be made until its shaders change; an engine's renderers share their pipelines, and clsl keeps the programs it compiled; render targets take Godot's update modes; and canvas items draw again as their nodes stop and resume. 25b, text and icons: text is laid out again into the layout it was, without allocating; glyphs are kept for each scale and freed with the last viewport that draws at it; and icons are rasterized at the scale they are drawn at, sharp at every zoom. 25c, controls and polygons: fill-polygon; controls turned and scaled about their pivot; and the pointer through a viewport's zoom and pan. 25d, the editor: nodes' metadata; each scene's view and snapping kept in .pyssel/views/; the Scene dock's cut, copy and paste; and the 2D viewport whole: the list of the nodes under the pointer, the viewport's menu, an instance opened by a double click, locking and grouping, smart, scale and relative snapping, rulers and guides, the View menu, the Pivot tool and the temporary pivot, the ruler tool, Show Helpers, and a warning icon for a drawing that failed.

Step 24, the File System dock made Godot's, is built: a filter and a sort menu, favorites and folder colours; Godot's menu and keys, which open, make, rename, move, copy and delete files and folders, the files that refer to them, the project's settings, the scenes open and the game's system following, deleted files going to the system's trash; Godot's Create New Scene and Create Script dialogs; a split with a file list of thumbnails, files' previews drawn and kept in the project's .pyssel/thumbnails/; and the system's file manager, other programs and a terminal. With it, pyssel/ui's menus and item lists take icons, tinted, trees colour cells' backgrounds, line edits clear themselves, and the core reads render targets back.

Step 23, the built-in code editor, is built: its last slice, 23d, brought the Debugger dock and inspecting objects.

Step 23 was built in four slices. The first, 23a, brought text edits of any length, whose keystrokes cost what they change, and the code edit, Godot's CodeEdit, with its gutters, colours, folding, completion, hints and the find and replace bar. The second, 23b, Lisp files: Lisp text, read without the reader, with Emacs's indentation; the code services, Pyssel's own, as LispWorks' IDE has them; and the Script screen, where a game's Lisp is opened, edited, compiled with the compiler's notes at their forms, evaluated, followed to its definitions and searched, without Emacs. The third, 23c, the REPL dock, a REPL for the editor's session and one for a game's while it plays. The fourth, 23d, the Debugger dock, where a thread that met an error waits, and the inspector of objects.

Step 22, the editor, is built. Its fourth slice, 22d, the 2D viewport, is the last: each open scene is a tree on the editor's engine that takes no window, which pyssel/ui's new viewport-container shows in the main screen through one of the engine's render targets, zoomed and panned by its root viewport's global canvas transform since step 26; Godot's toolbar of tools and snapping over it; picking into the selection, by the boxes around what canvases draw; and the handles that move, turn, scale and resize nodes, snapping to the grid, each drag one edit. With it, every canvas item draws while its scene is edited, a drawing that fails is marked in the Scene dock, and a node class finds its renderer's painter with canvas-painter wherever it draws. Its third slice, 22c, the scene dock and the inspector, is built: the Scene dock, with the Create New Node dialog; the editor as a program with its project manager, Godot's, with images in pyssel/2d and texture rects in pyssel/ui for its icons, which cl-svgread reads; the Inspector dock, with an editor for each kind of property, resources and value objects edited in place, lists, nodes picked from the scene and a control's Theme Overrides, strings of several lines in pyssel/ui's new text edits, and the resources opened from the File System dock and the project's settings in a history of the project's; the Node dock, with signals, connections and groups; a playing game's tree and live properties; and Pyssel's own icons, which buttons, trees' cells and item lists show in pyssel/ui, its default theme's file dialog among them, and the editor's docks, dialogs, play buttons and project manager. Its second slice, 22b, the shell, is built: projects, with their settings, autoloads, theme and paths relative to their directories, the user interface's settings in sessions, and new-project and open-project; actions, the input map and shortcuts, for buttons and menus' items; histories of edits, for undo and redo; dialogs, Godot's AcceptDialog, ConfirmationDialog and FileDialog, each a window of its own or drawn inside its window, as popups now are too; and the editor's window, edit, with its theme, menus, scene tabs, dock slots, the File System and Output docks, and Play and Stop: one opens a project, opens and saves scenes, and plays them from the editor. Its first slice, 22a, is built: sessions, which hold what each run of a game owns, the resource cache, the default theme and the clipboard of windowless user interfaces among it; bindings for every thread of an engine; send-to-tree, quit, and the window's title and size through the tree; and pyssel/play, which plays a game in your Lisp, in an engine and a session of its own, and breaks into it rather than unwinding it when it hangs. Step 20's standalone runs, games in processes of their own, are gone: exporting, after step 22, will run a game as its players do, from the player image pyssel/export builds. Step 21 before it built the UI toolkit: controls, containers, themes, the widgets of a settings form and of an editor, popups, menus and drag and drop.