5 releases
0.0.5 | Aug 4, 2020 |
---|---|
0.0.3 | Aug 3, 2020 |
0.0.2 | Aug 2, 2020 |
0.0.1 | Aug 2, 2020 |
0.0.0 | Aug 2, 2020 |
#1114 in Game dev
3MB
284 lines
Mochi 🍡
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 that this library has extended to do some really common graphics operations.
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
- touch
- screen rotation
- atlases
- animated sprites
Limitations
- Only support for for 8bpc RGBA png images
Example
[dependencies]
mochi = "0.0"
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 version="1.0" encoding="UTF-8"?>
<gresources>
<gresource prefix="/pong">
<file>ball.png</file>
<file>paddle.png</file>
</gresource>
</gresources>
Build into a gresource
file that Glib can understand:
glib-compile-resources game.xml
Inline the bytes of the game.gresource
into your code during init:
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.
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 or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (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.
Dependencies
~18MB
~410K SLoC