#game #game-engine #server-client #packet #physics #pbr #code-first

nightly ira

A general-purpose, code-first game engine

5 unstable releases

0.3.0 Jun 24, 2024
0.1.0 Jun 14, 2024
0.0.6 Jun 14, 2024
0.0.3 Jun 6, 2024
0.0.1 Jun 3, 2024

#1997 in Game dev

Download history 6/week @ 2024-07-27 9/week @ 2024-09-21

306 downloads per month

MIT license

120KB
3.5K SLoC

Ira

A general-purpose, code-first game engine.

Features

  • PBR rendering and lighting with wgpu for graphics
  • Simple packaging system for game assets with ira_drum
    • glTF 2.0 support
    • OBJ support
  • Physics with rapier
  • Built-in multiplayer support with custom packet support
  • Headless server, client, and server-client support

Examples

struct App {
  car: InstanceRef,
}

impl ira::App for App {
  fn on_init(_window: &mut Window) -> Drum {
    Drum::from_path("car.drum").unwrap()
  }

  fn on_ready(ctx: &mut Context) -> Self {
    Self {
      car: ctx.add_instance(0, Instance::builder().up(Vec3::Z))
    }
  }

  fn on_update(&mut self, ctx: &mut Context, delta: Duration) {
    self.car.update(ctx, |i, p| i.rotate_y(p, delta.as_secs_f32() * PI * 0.25));
  }
}

fn main() -> Result<(), EventLoopError> {
  Game::<App>::default().run()
}

More examples can be found in the examples directory.

Preparing assets

The ira tool can be used to pack various game assets (glTF, etc.) into a single Drum.

See the ira_cli documentation for more information.

Screenshots

License

Licensed under the MIT license.

Dependencies

~17–53MB
~1M SLoC