Table of Contents
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.
Getting started
The core
Drawing
Scenes
User interface
Games and the editor
- Playing a Game
- Projects
- The Editor
- The File System Dock
- The Script Screen
- The REPL
- The Debugger
- Lisp Text
- Code Services
- Project Manager
- Undo and Redo
- Exporting
The project