mara2/src/lib.rs

90 lines
2.2 KiB
Rust

#[cfg(feature = "buddy-alloc")]
mod alloc;
mod sh0rk;
mod sprites;
use fastrand::Rng;
use sh0rk::{palette, sys::*, Point, Direction::{self, *}};
static mut GAME: Game = Game::new();
struct Game {
frame_count: u32,
prev_gamepad: u8,
rng: Option<Rng>,
mai_position: Point,
mara_position: Point,
mara_frame: u32,
mara_dir: Direction,
}
impl Game {
const fn new() -> Self {
Self {
frame_count: 0,
prev_gamepad: 0,
rng: None,
mai_position: Point { x: 76, y: 48 },
mara_position: Point { x: 0, y: 64 },
mara_frame: 0,
mara_dir: Right,
}
}
fn update(&mut self) {
self.frame_count += 1;
palette::set_draw_color(2);
text("Mara: Sh0rk of\nJustice 2\npowered by:\nsh0rk engine v0", 10, 10);
palette::set_draw_color(3);
text("From Within, 2022", 10, 144);
sprites::MAI.draw(self.mai_position, 0);
if self.frame_count % 15 == 0 {
self.mara_frame = if self.mara_frame == 1 { 0 } else { 1 };
}
if self.frame_count % 4 == 0 {
if self.mara_dir == Right && self.mara_position.x >= 144 {
self.mara_dir = Down;
}
if self.mara_dir == Down && self.mara_position.y >= 120 {
self.mara_dir = Left;
}
if self.mara_dir == Left && self.mara_position.x <= 0 {
self.mara_dir = Up;
}
if self.mara_dir == Up && self.mara_position.y <= 64 {
self.mara_dir = Right;
}
const SPEED: i32 = 2;
match self.mara_dir {
Left => self.mara_position.x -= SPEED,
Right => self.mara_position.x += SPEED,
Up => self.mara_position.y -= SPEED,
Down => self.mara_position.y += SPEED,
};
}
sprites::MARA.draw(
self.mara_dir,
self.mara_frame,
self.mara_position,
0,
);
}
}
#[no_mangle]
unsafe fn start() {
palette::en4();
GAME.rng = Some(Rng::with_seed(420));
}
#[no_mangle]
unsafe fn update() {
GAME.update();
}