changed little things in the arduboy-rust crate & added gamelogic of drboy

This commit is contained in:
Zenn 2023-08-21 05:24:03 +02:00
parent ae84c66d13
commit 6be633cc9b
10 changed files with 340 additions and 86 deletions

View file

@ -0,0 +1,118 @@
use crate::*;
pub unsafe fn gameloop() {
arduboy.set_cursor(70, 0);
arduboy.print(get_string_addr!(overlay_score));
arduboy.print(p.counter as i16);
match p.live {
3 => sprites::draw_override(0, 0, get_sprite_addr!(overlay_3hearts), 0),
2 => sprites::draw_override(0, 0, get_sprite_addr!(overlay_2hearts), 0),
1 => sprites::draw_override(0, 0, get_sprite_addr!(overlay_1heart), 0),
_ => (),
}
if p.active {
sprites::draw_override(p.rect.x, p.rect.y, p.bitmap, p.bitmap_frame as u8);
}
if p.immortal {
p.immortal_frame_count += 1;
if arduboy.every_x_frames(10) {
p.active = !p.active
}
if p.immortal_frame_count == 60 {
p.immortal_frame_count = 0;
p.immortal = false;
p.active = true
}
}
vec_enemies.iter_mut().for_each(|f| {
if f.active {
sprites::draw_override(f.rect.x * 8, f.rect.y * 8, f.bitmap, f.bitmap_frame);
}
if arduboy.every_x_frames(p.speed as u8) && f.active {
f.move_down();
if f.rect.x < 0 {
f.active = false;
p.live -= 1;
}
}
let frect = Rect {
x: f.rect.x * 8,
y: f.rect.y * 8,
width: 8,
height: 8,
};
if !p.immortal && f.active {
if arduboy.collide_rect(p.rect, frect) {
if p.bitmap_frame as u8 == f.bitmap_frame {
f.active = false;
p.speed_change = false;
p.counter += 1;
} else {
p.live -= 1;
p.immortal = true;
}
}
}
});
if arduboy.every_x_frames((p.speed * 2) as u8) && enemy_count < 30 {
vec_enemies
.push(Enemy {
active: true,
bitmap: get_sprite_addr!(enemies),
bitmap_frame: random_less_than(3) as u8,
rect: Rect {
x: random_between(15, 16) as i16,
y: random_between(1, 8) as i16,
width: 8,
height: 8,
},
})
.unwrap();
enemy_count += 1
}
if p.live == 0 {
p.gamemode = GameMode::Losescreen;
}
arduboy.poll_buttons();
if arduboy.pressed(UP) {
if p.rect.y > 7 {
p.rect.y -= 1;
}
}
if arduboy.pressed(DOWN) {
if p.rect.y < 56 {
p.rect.y += 1;
}
}
if arduboy.pressed(LEFT) {
if p.rect.x > 0 {
p.rect.x -= 1;
}
}
if arduboy.pressed(RIGHT) {
if p.rect.x < 120 {
p.rect.x += 1;
}
}
if arduboy.just_pressed(A) {
p.bitmap_frame += 1;
if p.bitmap_frame > 2 {
p.bitmap_frame = 0
}
}
if arduboy.just_pressed(B) {
p.bitmap_frame -= 1;
if p.bitmap_frame < 0 {
p.bitmap_frame = 2
}
}
if p.counter % 5 == 0 && p.counter != 0 && !p.speed_change {
p.speed_change = true;
p.speed -= 1
}
}
progmem!();