[−][src]Crate coffee
Coffee is an opinionated 2D game engine focused on simplicity, explicitness, and type-safety.
Features
- Responsive, customizable GUI
- Declarative, type-safe loading screens with progress tracking
- Built-in debug view with performance metrics
- Fixed, deterministic timestep
- Explicit, easy to use, hardware-accelerated 2D graphics API
- Multiplatform support leveraging OpenGL, Vulkan, Metal, D3D11, and D3D12
- Explicit and efficient batched draws
- Mesh support
- Texture array support
- Off-screen rendering
- TrueType font rendering
- Gamepad support
Check out the repository and the examples for more details!
Usage
To get started, implement the Game
trait. Then, call Game::run
with
some WindowSettings
to run your game.
Here is a minimal example that will open a window:
use coffee::graphics::{Color, Frame, Window, WindowSettings}; use coffee::load::Task; use coffee::{Game, Result, Timer}; fn main() -> Result<()> { MyGame::run(WindowSettings { title: String::from("A caffeinated game"), size: (1280, 1024), resizable: true, fullscreen: false, maximized: false, }) } struct MyGame { // Your game state and assets go here... } impl Game for MyGame { type Input = (); // No input data type LoadingScreen = (); // No loading screen fn load(_window: &Window) -> Task<MyGame> { // Load your game assets here. Check out the `load` module! Task::succeed(|| MyGame { /* ... */ }) } fn draw(&mut self, frame: &mut Frame, _timer: &Timer) { // Clear the current frame frame.clear(Color::BLACK); // Draw your game here. Check out the `graphics` module! } }
Modules
graphics | Draw your game with an explicit 2D graphics API. |
input | Allow players to interact with your game. |
load | Load your game assets with type-safety and build loading screens with consistent progress tracking. |
ui | Build a responsive graphical user interface for your game. |
Structs
Debug | A bunch of performance information about your game. It can be drawn! |
Timer | The timer of your game state. |
Enums
Error | An error in the engine. |
Traits
Game | The entrypoint of the engine. It describes your game logic. |
Type Definitions
Result | A convenient result with a locked |