How boz0o0/ampersand-engine works
Ampersand is a modular C++20 game engine with a sparse-set ECS, plus an optional desktop editor for game-folder JSON. A game configures its folder and asks SceneManager to load configuration and scenes; the engine’s modules provide ECS, input, physics, rendering, audio, networking, and scripting capabilities. The editor opens a project, presents its files and scene/entity/resource data for editing, then saves dirty documents. Dashed links mark likely runtime integration whose call sites were not shown; sampled excerpts do not establish a complete engine frame loop.
Main entry points: Scheduler.cpp System scheduler · Panels.cpp Editor panels · SceneManager.cpp Scene manager · main.cpp Editor app
Components 22
Project Editor
- Editor app
editor/src/main.cpp - Editor UI
editor/src/Editor.cpp - Editor panels
editor/src/Panels.cpp - JSON widgets
editor/src/Widgets.cpp - Project documents
editor/src/Project.cpp - Editor types
editor/src/Types.cpp
Scene Authoring
- Game folder
- Scene manager
engine/src/scene/resources/SceneManager.cpp - Scene serializers
engine/include/ampersand/scene/serialization/Serializers.hpp - Resource loaders
engine/src/scene/loaders
Engine Core
- ECS world
engine/src/core/ecs/World.cpp - System scheduler
engine/src/core/ecs/Scheduler.cpp
Gameplay Modules
- Input manager
engine/src/input/resources/InputManager.cpp - Physics systems
engine/src/physics/systems/CollisionSystem.cpp - Render systems
engine/src/render/systems/RenderSystem.cpp - Animation system
engine/src/render/systems/AnimationSystem.cpp - Audio system
engine/src/audio/systems/AudioSystem.cpp - Scripting system
engine/src/scripting/systems/ScriptingSystem.cpp
Platform I/O
- UDP networking
engine/src/net/UdpSocket.cpp - SFML renderer
engine/src/render/SfmlRenderer.cpp - SFML audio
engine/src/audio/SfmlAudioEngine.cpp
Other components
- Game developer
Connections 27
- Game developer → Editor app: opens editor
- Editor app → Editor UI: runs
editor/src/main.cpp - Editor UI → Editor panels: draws panels
- Editor panels → Project documents: edits documents
editor/src/Panels.cpp - Editor panels → JSON widgets: uses widgets
- Editor panels → Editor types: gets type data
editor/src/Panels.cpp - Project documents → Game folder: reads and saves
- Game developer → Game folder: provides game data
- Game folder → Scene manager: loads config
- Scene manager → ECS world: creates entities
engine/src/scene/resources/SceneManager.cpp - Scene manager → Scene serializers: uses serialization
- Scene manager → Resource loaders: registers builtins
- ECS world → System scheduler: runs systems
- System scheduler → Input manager: dispatches system
- System scheduler → Physics systems: dispatches system
- System scheduler → Render systems: dispatches system
- System scheduler → Animation system: dispatches system
- System scheduler → Audio system: dispatches system
- System scheduler → Scripting system: dispatches system
- Render systems → SFML renderer: renders through
- Audio system → SFML audio: plays through
- Game developer → UDP networking: uses optional module
- Game developer → Input manager: uses module
- Game developer → Physics systems: uses module
- Game developer → SFML renderer: uses module
- Game developer → SFML audio: uses module
- Game developer → Scripting system: uses optional module