emscripten-functions

Crates.ioemscripten-functions
lib.rsemscripten-functions
version0.2.3
sourcesrc
created_at2023-08-26 07:34:32.184881
updated_at2024-09-26 01:37:30.623205
descriptionRust-friendly bindings to various emscripten system functions
homepagehttps://github.com/ALEX11BR/emscripten-functions
repositoryhttps://github.com/ALEX11BR/emscripten-functions
max_upload_size
id955398
size31,907
Popa Ioan Alexandru (ALEX11BR)

documentation

README

emscripten-functions

crates.io badge

This crate contains various emscripten system functions (made with rust-native parameter and return value types) that make programming in rust for emscripten targets easier. Functions based on ones from the following emscripten headers are available:

  • emscripten
  • console

Examples

For more examples and tips for emscripten in rust refer to my main project's README.

Run javascript from rust

Using the emscripten_functions::emscripten::run_script family of functions you can run the javascript you need in your web app.

Example

// The `.escape_unicode()` method makes it safe to pass untrusted user input.
run_script(
    format!(
        r##"
            document.querySelector("#this-is-secure").innerHTML = "{}"
        "##,
        "untrusted user input".escape_unicode()
    )
);

Main loop control

If you need to run a loop function over and over, emscripten has its own main loop managing system. Using the emscripten_functions::emscripten::set_main_loop and emscripten_functions::emscripten::set_main_loop_with_arg functions you can run your rust functions as main loops, with full control over the main loop running parameters.

Example

struct GameData {
    level: u32,
    score: u32
}
let mut game_data = GameData {
    level: 1,
    score: 0
}

set_main_loop_with_arg(|data| {
    if data.score < data.level {
        data.score += 1;
    } else {
        data.score = 0;
        data.level += 1;
    }

    // Here you call your display to screen functions.
    // For demonstration purposes I chose `println!`.
    println!("Score {}, level {}", data.score, data.level);
}, game_data, 0, true);

An SDL game example

An SDL game example that has image handling can be found here.

Commit count: 27

cargo fmt