From 2372f0d2546752c341764137af53447dbe20d457 Mon Sep 17 00:00:00 2001 From: me Date: Sat, 20 Dec 2025 00:55:27 +0200 Subject: [PATCH] random flickering screen --- Cargo.lock | 92 ++++++++++++++++++++++++++++++ Cargo.toml | 1 + game.ayin | 2 +- src/runtime/primitive_functions.rs | 13 ++++- 4 files changed, 104 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 38df657..5a4b641 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -116,6 +116,7 @@ dependencies = [ "log", "lyn", "macroquad", + "rand", "thiserror", ] @@ -330,6 +331,18 @@ dependencies = [ "web-sys", ] +[[package]] +name = "getrandom" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "899def5c37c4fd7b2664648c28120ecec138e4d395b459e5ca34f9cce2dd77fd" +dependencies = [ + "cfg-if", + "libc", + "r-efi", + "wasip2", +] + [[package]] name = "gilrs" version = "0.10.10" @@ -660,6 +673,15 @@ dependencies = [ "portable-atomic", ] +[[package]] +name = "ppv-lite86" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85eae3c4ed2f50dcfe72643da4befc30deadb458a9b590d720cde2f2b1e97da9" +dependencies = [ + "zerocopy", +] + [[package]] name = "proc-macro2" version = "1.0.103" @@ -694,6 +716,41 @@ dependencies = [ "proc-macro2", ] +[[package]] +name = "r-efi" +version = "5.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cdb34c158ceb288df11e18b4bd39de994f6657d83847bdffdbd7f346754b0f" + +[[package]] +name = "rand" +version = "0.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6db2770f06117d490610c7488547d543617b21bfa07796d7a12f6f1bd53850d1" +dependencies = [ + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d9a13982dcf210057a8a78572b2217b667c3beacbf3a0d8b454f6f82837d38" +dependencies = [ + "getrandom", +] + [[package]] name = "regex" version = "1.12.2" @@ -878,6 +935,15 @@ version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191" +[[package]] +name = "wasip2" +version = "1.0.1+wasi-0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0562428422c63773dad2c345a1882263bbf4d65cf3f42e90921f787ef5ad58e7" +dependencies = [ + "wit-bindgen", +] + [[package]] name = "wasm-bindgen" version = "0.2.106" @@ -1106,3 +1172,29 @@ name = "windows_x86_64_msvc" version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "wit-bindgen" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59" + +[[package]] +name = "zerocopy" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd74ec98b9250adb3ca554bdde269adf631549f51d8a8f8f0a10b50f1cb298c3" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.8.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d8a8d209fdf45cf5138cbb5a506f6b52522a25afccc534d1475dad8e31105c6a" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] diff --git a/Cargo.toml b/Cargo.toml index 82ee9e1..4b669dc 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,6 +24,7 @@ macroquad = "0.4.14" lyn = "0.1.0" chumsky = "0.11.2" gamepads = "0.1.7" +rand = "0.9.2" [dev-dependencies] insta = "1.44.3" diff --git a/game.ayin b/game.ayin index a80277c..c1855e8 100644 --- a/game.ayin +++ b/game.ayin @@ -5,7 +5,7 @@ let setup = fn() { }; let update = fn(state, input) { - let new = 200; + let new = random_u8(); state.player.position.x = new; return state; }; diff --git a/src/runtime/primitive_functions.rs b/src/runtime/primitive_functions.rs index d346537..16efb1a 100644 --- a/src/runtime/primitive_functions.rs +++ b/src/runtime/primitive_functions.rs @@ -1,16 +1,18 @@ +use rand::prelude::*; + use crate::ast; use crate::interpret::PrimitiveFuncs; -use macroquad::prelude::*; +use macroquad::prelude as mq; pub fn primitive_funcs() -> PrimitiveFuncs { - PrimitiveFuncs::new(vec![("frame_clear", clear)]) + PrimitiveFuncs::new(vec![("frame_clear", clear), ("random_u8", random_u8)]) } fn clear(args: Vec) -> ast::Value { let r = to_u32(args.get(0)); let g = to_u32(args.get(1)); let b = to_u32(args.get(2)); - clear_background(Color::from_rgba(r, g, b, 255)); + mq::clear_background(mq::Color::from_rgba(r, g, b, 255)); ast::UNIT_VALUE } @@ -20,3 +22,8 @@ fn to_u32(value: Option<&ast::Value>) -> u8 { _ => 0, } } + +fn random_u8(_args: Vec) -> ast::Value { + let random: u8 = rand::rng().random::(); + ast::Value::Int(random as i32) +}