Skip to main content

run

Function run 

Source
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}