summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--examples/snake.rs3
-rw-r--r--src/main.rs49
-rw-r--r--src/scene.rs5
-rw-r--r--src/script.rs8
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,