Skip to content
Jim Buck edited this page Jan 3, 2023 · 17 revisions

Mission

Create a simple but powerful framework for building code-first games and simulations.

Inspired by XNA/Monogame, Bevy, and flecs.

Modules

Kyber

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 and shutdown are single phased.
    • run is multi-phased (called every game loop).
      • pre-update, update, post-update, pre-render, render, post-render
    • Unit Tests
  • 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
  • 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.)
  • 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?
  • Sound API
    • Audio Emitters (produces sound, optionally located in "world").
    • Audio Receiver (listens to sound, optionally forwards to physical device (headphones).

Kyber.ECS

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.

Kyber.Jobs

Simple and performant system for multi-threaded processing.

  • Standalone but pairs well with ECS
    • Adds additional classes/utils in Kyber.ECS.
  • JobService -
  • JobScheduler -

Kyber.Utils

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.

Kyber.Server (Kyber.Net)

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.
Clone this wiki locally