pub fn run(
title: &str,
update: impl FnMut(&mut Context) + 'static,
) -> Result<()>Expand description
The quickest way to start: a whole game as one closure that runs every frame.
use audio_code::prelude::*;
fn main() -> audio_code::Result<()> {
let mut score = 0;
audio_code::run("Clicker", move |ctx| {
if ctx.once("intro") {
ctx.speak("Press space as often as you can. Escape quits.");
}
if ctx.pressed(Key::Space) {
score += 1;
ctx.audio.play_tone(400.0 + score as f32 * 10.0, 0.05);
}
if ctx.pressed(Key::Escape) {
ctx.speak(format!("Your score: {score}"));
ctx.quit();
}
})
}When the game grows, move to Scenes.
Examples found in repository?
examples/clicker.rs (lines 11-36)
8fn main() -> audio_code::Result<()> {
9 let mut score = 0;
10
11 audio_code::run("Clicker", move |ctx| {
12 if ctx.once("intro") {
13 let best: u32 = ctx.storage.get_or("best", 0);
14 ctx.speak(format!("Press space as often as you can in ten seconds. Your best is {best}. Go!"));
15 ctx.time.after("end", 10.0);
16 }
17
18 if ctx.time.is_scheduled("end") && ctx.pressed(Key::Space) {
19 score += 1;
20 ctx.audio.play_tone(300.0 + score as f32 * 15.0, 0.05);
21 }
22
23 if ctx.time.fired("end") {
24 let best: u32 = ctx.storage.get_or("best", 0);
25 if score > best {
26 ctx.storage.set("best", score);
27 ctx.ui.message("result", format!("{score} presses. New record!"));
28 } else {
29 ctx.ui.message("result", format!("{score} presses. Your best is {best}."));
30 }
31 }
32
33 if ctx.ui.closed("result") || ctx.pressed(Key::Escape) {
34 ctx.quit();
35 }
36 })
37}