-
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Jim Buck edited this page Jan 3, 2023
·
17 revisions
Create a simple but powerful framework for building code-first games and simulations.
Inspired by XNA/Monogame, Bevy, and flecs.
The core game API, including asset loading, configuration, game loop, etc.
- Built around de facto .NET standards (host builder, DI, logging etc.)
- Scenes
- Defines scope for DI.
- Configured via same host builder API.
- Unit Tests
- Game Loop
- Stages (
startup
,run
,shutdown
). -
startup
andshutdown
are single phased. -
run
is multi-phased (called every game loop).-
pre-update
,update
,post-update
,pre-render
,render
,post-render
-
- Unit Tests
- Stages (
- Events
- Simple, game loop-based system (events have max 0-1 frame delay).
- Listeners track previously "seen" events.
- Easy to test and conceptualize.
- Input
- Mouse
- Raw state
- Position and scroll (delta).
- Set position/center.
- Keyboard
- Raw State (up, down, pressed, released)
- Modifiers (
ctrl
,shift
, etc.) - Combos
- Typing Events (for text inputs)
- Gamepad: TBD
- Mouse
- Asset Loader
- Allows assets to be loaded from disk/network.
- File system loading (local files, zipped resource packs)
- Network loading (server-provided resource packs, transfer versioned packs to local directory then load as normal).
- Tracks import progress
- Specify a set of assets and it will return an
AssetLoader
instance to track the progress of the assets. - Code generation to provide intellisense for the specified assets.
- Allows UI to show loading indicator/progress.
- Returns reference to asset or a fallback (audio, texture, video, data, etc.)
- Specify a set of assets and it will return an
- Allows assets to be loaded from disk/network.
- Graphics
- Sprite Batch
- Simple API for batch drawing 2D graphics.
- Automatically batch based on texture slots.
- Batch Analysis in debug mode?
- Renderer
- Raw vertex/index/texture buffers
- StaticMesh Support
- DynamicMesh Support
- AnimatedMesh Support
- Material-based rendering
- Render graph?
- Sprite Batch
- Sound API
- Audio Emitters (produces sound, optionally located in "world").
- Audio Receiver (listens to sound, optionally forwards to physical device (headphones).
An extensible and performant entity component system.
- Simple, ergonomic API
- Performance Benchmarks (using "standard" ECS Benchmarks)
- Entity relationships (parent child, etc.)
-
EntityCommandBuffer
for thread-safe operations. - Change detection in queries.
- Simple but extensible system architecture.
Simple and performant system for multi-threaded processing.
- Standalone but pairs well with ECS
- Adds additional classes/utils in
Kyber.ECS
.
- Adds additional classes/utils in
- JobService -
- JobScheduler -
A collection of helper utilities.
- Logging
- Fast console logger
- Append-only FS logger (for easy way for external tools to react to events in game)
- Config/Save Data
- Read/Write files (text, json, yaml, binary)
- Create/Delete folders
- Metrics
- Scoped/grouped by name (paths supported)
- Track numerical data (min, max, count, sum, etc.)
- Configurable history for displaying in graphs.
A built-in server for multi-player and web-based companions (logs, maps, stats, etc.)
- App approval scheme (API key, read and read/write)
- GraphQL server for external tools.
- Logs (subscription, query)
- ECS Data (query entities, view component data, etc.)
- ECS modifications (create entities and modify components, for read/write only).
- Metrics (FPS, UPS, Memory, system timings, game-specific metrics, etc.)
- Network utilities for common multiplayer tasks.