## Blade

---
# Engine: API
- ~~ECS~~
- ~~hierarchy~~
- ~~Vulkan~~
- ~~composability~~
- +ergonomics
---
## Engine: Init
```rust
engine.set_environment_map(...);
engine.set_gravity(...);
let body = engine.add_object(...);
let wheel = engine.add_object(...);
let joint = engine.add_joint(body, wheel, ...);
```
---
## Engine: Update
```rust
engine.apply_linear_impulse(body, ...);
engine.apply_angular_impulse(wheel, ...);
engine.set_joint_motor(joint, ...);
engine.teleport_object(body, ...);
engine.populate_hud(egui);
engine.render(...);
```
---
### Engine: Query
```rust
engine.get_object_transform(body, blade::Prediction);
```
---
## Demo

---
## API Stability
Abstracting away dependencies isn't always easy:
* [mint](https://github.com/kvark/mint) is your friend
* [raw-window-handle](https://github.com/rust-windowing/raw-window-handle) is good
* but it doesn't expose other useful things, like the size or DPI
* [rapier3d](https://github.com/dimforge/rapier) is ok, quite verbose
* [egui](https://github.com/emilk/egui) is almost impossible to abstract
---
# Future work
Proper game?
Graphics features:
- less noise
- specular reflection
- global illumination
- local lights
---
## Release
[blade-0.2](https://crates.io/crates/blade)
---
{"description":"Blade scene editing.","slideOptions":"{\"theme\":\"serif\",\"transition\":\"fade\"}","title":"Blade-Engine","contributors":"[{\"id\":\"979e994f-8a6f-4ba5-b86c-9af3abd000ad\",\"add\":1918,\"del\":350}]"}