Crates.io | emscripten-functions |
lib.rs | emscripten-functions |
version | 0.2.3 |
source | src |
created_at | 2023-08-26 07:34:32.184881 |
updated_at | 2024-09-26 01:37:30.623205 |
description | Rust-friendly bindings to various emscripten system functions |
homepage | https://github.com/ALEX11BR/emscripten-functions |
repository | https://github.com/ALEX11BR/emscripten-functions |
max_upload_size | |
id | 955398 |
size | 31,907 |
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
For more examples and tips for emscripten in rust refer to my main project's README.
Using the emscripten_functions::emscripten::run_script
family of functions you can run the javascript you need in your web app.
// 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()
)
);
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.
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 that has image handling can be found here.