Apparatus is a game engine that takes its inspiration from a number of sources including Dragonfly, olcPixelGameEngine and Arcade, amongst others.
Implement the Game
trait and tell the Apparatus
to run
your struct:
```rust use anyhow::Result; use log::info;
use apparatus::color::Color; use apparatus::engine::apparatus::{Apparatus, ApparatusSettings}; use apparatus::engine::game::Game; use apparatus::engine::key::Key; use apparatus::errors::ApparatusError; use apparatus::maths::clamp;
struct Example { color: Color, }
impl Game for Example {
fn oncreate(app: &Apparatus) -> Result
let game = Example { color };
Ok(game)
}
fn on_update(&mut self, app: &mut Apparatus) {
info!("updating");
let dt = app.elapsed_time();
if app.is_key_held(Key::Up) {
let r = clamp(
0.0,
self.color.r() as f32 + (100.0 * dt.as_secs_f32()),
255.0,
) as u8;
let g = clamp(
0.0,
self.color.g() as f32 + (100.0 * dt.as_secs_f32()),
255.0,
) as u8;
let b = clamp(
0.0,
self.color.b() as f32 + (100.0 * dt.as_secs_f32()),
255.0,
) as u8;
self.color = Color::rgba(r, g, b, 255);
}
if app.is_key_held(Key::Down) {
let r = clamp(
0.0,
self.color.r() as f32 - (50.0 * dt.as_secs_f32()),
255.0,
) as u8;
let g = clamp(
0.0,
self.color.g() as f32 - (50.0 * dt.as_secs_f32()),
255.0,
) as u8;
let b = clamp(
0.0,
self.color.b() as f32 - (50.0 * dt.as_secs_f32()),
255.0,
) as u8;
self.color = Color::rgba(r, g, b, 255);
}
info!("rendering");
app.clear(self.color);
}
}
fn main() -> Result<()> {
let engine = Apparatus::new("Getting Started", ApparatusSettings::default())?;
engine.run::
Ok(())
}
```
See the examples for more in-depth usage.
Run tests from the command line with cargo:
commandline
cargo test
Apparatus is in very early development and does not currently follow semver. Neither does it commit to a minimum supported Rust version.