diff options
| author | Mica White <botahamec@outlook.com> | 2026-07-06 14:59:20 -0400 |
|---|---|---|
| committer | Mica White <botahamec@outlook.com> | 2026-07-06 14:59:20 -0400 |
| commit | 07018cb37b278dbd73c864a662454f1cf9d33457 (patch) | |
| tree | 5796096d60f6e09d35498b567c596d42b9c32baf | |
| parent | e8f85e4a723b772c099a3c03a6cb721c48561e4b (diff) | |
Patch GameManifest through ScriptContext
| -rw-r--r-- | examples/snake.rs | 3 | ||||
| -rw-r--r-- | src/main.rs | 49 | ||||
| -rw-r--r-- | src/scene.rs | 5 | ||||
| -rw-r--r-- | src/script.rs | 8 |
4 files changed, 15 insertions, 50 deletions
diff --git a/examples/snake.rs b/examples/snake.rs index 49ea212..d62e3ba 100644 --- a/examples/snake.rs +++ b/examples/snake.rs @@ -139,12 +139,12 @@ fn main() { let mut time = TimeContext::new(); let mut context = ScriptContext { + manifest: &manifest, buffer: &mut buffer, input: &input, time: &time, }; switch_scenes( - &manifest.scenes, &mut scripts, &mut context, &mut files, @@ -161,6 +161,7 @@ fn main() { } Event::Render => { let mut context = ScriptContext { + manifest: &manifest, buffer, input: &input, time: &time, diff --git a/src/main.rs b/src/main.rs index d39b0f8..2978393 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,9 +1,8 @@ -use std::{io::BufWriter, time::SystemTime}; +use std::io::BufWriter; -use crossterm::{event::KeyCode, style::ContentStyle}; use mimalloc::MiMalloc; use tortuise::{ - buffer::{Buffer, Cell, Event}, + buffer::{Buffer, Event}, file::FileManager, input::InputManager, scene::switch_scenes, @@ -14,47 +13,6 @@ use tortuise::{ #[global_allocator] static GLOBAL: MiMalloc = MiMalloc; -fn get_timestamp() -> u128 { - SystemTime::UNIX_EPOCH.elapsed().unwrap().as_nanos() -} - -fn init_first_frame(_: &mut ScriptContext, state: &mut Box<[u8]>) { - *state = Box::from(get_timestamp().to_ne_bytes()); -} - -fn render_frame_rate(ctx: &mut ScriptContext, state: &mut Box<[u8]>) { - puffin::profile_function!(); - let end = get_timestamp(); - let last_frame_start = u128::from_ne_bytes(*state.as_array().unwrap()); - let frame_time = end - last_frame_start + 1; - let digits = [ - frame_time % 1_000_000 / 100_000, - frame_time % 100_000 / 10_000, - frame_time % 10_000 / 1_000, - frame_time % 1_000 / 100, - frame_time % 100 / 10, - frame_time % 10, - ]; - ctx.buffer.cells.clear(); - for (x, digit) in digits.into_iter().enumerate() { - ctx.buffer.cells.push(Cell { - character: char::from_digit(digit as u32, 10).unwrap(), - x: x as u16, - y: 0, - z: 0, - style: ContentStyle::new(), - }); - } - *state = Box::from(end.to_ne_bytes()); -} - -fn exit_on_escape(ctx: &mut ScriptContext, _: &mut Box<[u8]>) { - puffin::profile_function!(); - if ctx.input.is_key_pressed_this_frame(KeyCode::Esc) { - ctx.exit(); - } -} - fn main() { let mut files = FileManager::default(); let wasm_runner = WasmRunner::new(); @@ -70,13 +28,13 @@ fn main() { let mut time = TimeContext::new(); let mut scripts = ScriptManager::new(&manifest.scripts); let mut context = ScriptContext { + manifest: &manifest, buffer: &mut buffer, input: &input, time: &time, }; switch_scenes( - &manifest.scenes, &mut scripts, &mut context, &mut files, @@ -97,6 +55,7 @@ fn main() { Event::Render => { buffer.cells.clear(); let mut context = ScriptContext { + manifest: &manifest, buffer, input: &input, time: &time, diff --git a/src/scene.rs b/src/scene.rs index 28a4e6a..af6b84e 100644 --- a/src/scene.rs +++ b/src/scene.rs @@ -58,7 +58,6 @@ pub fn is_scene_loaded( } pub fn switch_scenes( - scenes: &[Scene], scripts: &mut ScriptManager, context: &mut ScriptContext<'_>, files: &mut FileManager, @@ -75,7 +74,7 @@ pub fn switch_scenes( } let mut needed_scripts = FxHashSet::default(); - let scene = &scenes[new]; + let scene = &context.manifest.scenes[new]; for script_id in &scene.scripts.required { needed_scripts.insert(*script_id); scripts.activate_script(*script_id, context, wasm_runner, files); @@ -85,7 +84,7 @@ pub fn switch_scenes( scripts.preload_script(*script_id, files, wasm_runner); } for scene_to_preload in &scene.preload_scenes { - let scene_to_preload = &scenes[*scene_to_preload]; + let scene_to_preload = &context.manifest.scenes[*scene_to_preload]; for script_id in &scene_to_preload.scripts.required { needed_scripts.insert(*script_id); scripts.preload_script(*script_id, files, wasm_runner); diff --git a/src/script.rs b/src/script.rs index 2de50f5..4429b9c 100644 --- a/src/script.rs +++ b/src/script.rs @@ -2,7 +2,12 @@ use std::path::Path; use rustc_hash::FxHashMap; -use crate::{buffer::Buffer, file::FileManager, input::InputManager, time::TimeContext}; +use crate::{ + buffer::Buffer, + file::{FileManager, GameManifest}, + input::InputManager, + time::TimeContext, +}; mod wasm; @@ -18,6 +23,7 @@ pub struct WasmRunner { } pub struct ScriptContext<'a> { + pub manifest: &'a GameManifest, pub buffer: &'a mut Buffer, pub input: &'a InputManager, pub time: &'a TimeContext, |
