# Mochi :dango:
A game engine oriented toward low power mobile linux phones/tablets. It's written in Rust and uses Gtk and Cairo! All drawing is done with an [Cairo Context](https://gtk-rs.org/docs/cairo/struct.Context.html) that this library has extended to do some really [common graphics operations](https://docs.rs/mochi/latest/mochi/trait.MochiCairoExt.html).
This project is super alpha but *usable*. If you want to join in, feel free to open up an issue or make a PR!
## Features
- [x] touch
- [x] screen rotation
- [x] atlases
- [ ] animated sprites
## Limitations
- Only support for for 8bpc RGBA png images
## Example
![pong](screenshots/pong.jpg)
```
[dependencies]
mochi = "0.0"
```
```rust
init(include_bytes!("game.gresource"));
let img_mochi = image_from_resource("/game/mochi.png");
let img_mochi_eaten = image_from_resource("/game/mochi_eaten.png");
run_game(move |window, ctx, pointer, delta_time| {
if pointer.is_down() {
ctx.draw_image_centered(window.width / 2.0, window.height / 2.0, img_mochi_eaten);
} else {
ctx.draw_image_centered(window.width / 2.0, window.height / 2.0, img_mochi);
}
});
```
## How to build a game
Mochi works off resources put into a Glib resource file. This is pretty simple to do. Just make an xml file that references your images:
```xml
ball.png
paddle.png
```
Build into a `gresource` file that Glib can understand:
```rust
glib-compile-resources game.xml
```
Inline the bytes of the `game.gresource` into your code during init:
```rust
init(include_bytes!("game.gresource"));
```
Now your game has everything it needs in it's binary! The images can be acquired as needed using the resource paths you setup.
```rust
let img_ball = image_from_resource("/pong/ball.png");
```
## Dependencies
for gtk/cairo:
```
```
for sound:
```
sudo dnf install openal-soft-devel libsndfile-devel
```
## Running out of memory while compiling on PinePhone?
You can expand your swap using zram
```
sudo swapoff /dev/zram0
sudo zramctl --reset /dev/zram0
sudo zramctl --find --size 2048M
sudo mkswap /dev/zram0
sudo swapon /dev/zram0
```
## License
This project is licensed under either of
* Apache License, Version 2.0, ([LICENSE_APACHE](LICENSE_APACHE) or
http://www.apache.org/licenses/LICENSE-2.0)
* MIT license ([LICENSE_MIT](LICENSE_MIT) or
http://opensource.org/licenses/MIT)
at your option.
### Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in `mochi` by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.