pub struct MeowMeowRunner;Expand description
Synchronous wrapper around MeowMeowEvaluator.
Spawns an evaluator thread, sends a script, drains all responses to
completion, and returns the collected EvalOutput. The thread is shut
down and joined before returning.
Implementations§
Source§impl MeowMeowRunner
impl MeowMeowRunner
Sourcepub fn eval(source: &str) -> EvalOutput
pub fn eval(source: &str) -> EvalOutput
Evaluate source without a live ECS world, collecting emitted intents
and errors.
This mode cannot allocate live ComponentIds during evaluation, so
let-bound component expressions stay as ComponentExpr values rather
than becoming live ComponentObject handles.
Times out after 2 seconds if the evaluator stalls.
Examples found in repository?
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("vr-input.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!("[mms] {} intent(s) from vr-input.mms", output.intents.len());
13
14 let world = engine::ecs::World::default();
15 let mut universe = engine::Universe::new(world);
16
17 let scope = engine::ecs::ComponentId::default();
18 for intent in output.intents {
19 universe.command_queue.push_intent_now(scope, intent);
20 }
21
22 universe.systems.process_commands(
23 &mut universe.world,
24 &mut universe.visuals,
25 &mut universe.render_assets,
26 &mut universe.command_queue,
27 );
28
29 engine::Windowing::run_app(universe).expect("Windowing failed");
30}More examples
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("ui-layout.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!(
13 "[mms] {} intent(s) from ui-layout.mms",
14 output.intents.len()
15 );
16
17 let world = engine::ecs::World::default();
18 let mut universe = engine::Universe::new(world);
19
20 let scope = engine::ecs::ComponentId::default();
21 for intent in output.intents {
22 universe.command_queue.push_intent_now(scope, intent);
23 }
24
25 universe.systems.process_commands(
26 &mut universe.world,
27 &mut universe.visuals,
28 &mut universe.render_assets,
29 &mut universe.command_queue,
30 );
31
32 universe.enable_repl();
33 engine::Windowing::run_app(universe).expect("Windowing failed");
34}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("vtuber-desktop.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!(
13 "[mms] {} intent(s) from vtuber-desktop.mms",
14 output.intents.len()
15 );
16
17 let world = engine::ecs::World::default();
18 let mut universe = engine::Universe::new(world);
19
20 let scope = engine::ecs::ComponentId::default();
21 for intent in output.intents {
22 universe.command_queue.push_intent_now(scope, intent);
23 }
24
25 universe.systems.process_commands(
26 &mut universe.world,
27 &mut universe.visuals,
28 &mut universe.render_assets,
29 &mut universe.command_queue,
30 );
31
32 universe.enable_repl();
33 engine::Windowing::run_app(universe).expect("Windowing failed");
34}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("inline-block-layout.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!(
13 "[mms] {} intent(s) from inline-block-layout.mms",
14 output.intents.len()
15 );
16
17 let world = engine::ecs::World::default();
18 let mut universe = engine::Universe::new(world);
19
20 let scope = engine::ecs::ComponentId::default();
21 for intent in output.intents {
22 universe.command_queue.push_intent_now(scope, intent);
23 }
24
25 universe.systems.process_commands(
26 &mut universe.world,
27 &mut universe.visuals,
28 &mut universe.render_assets,
29 &mut universe.command_queue,
30 );
31
32 universe.enable_repl();
33 engine::Windowing::run_app(universe).expect("Windowing failed");
34}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("vtuber-desktop-first-person.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!(
13 "[mms] {} intent(s) from vtuber-desktop-first-person.mms",
14 output.intents.len()
15 );
16
17 let world = engine::ecs::World::default();
18 let mut universe = engine::Universe::new(world);
19
20 let scope = engine::ecs::ComponentId::default();
21 for intent in output.intents {
22 universe.command_queue.push_intent_now(scope, intent);
23 }
24
25 universe.systems.process_commands(
26 &mut universe.world,
27 &mut universe.visuals,
28 &mut universe.render_assets,
29 &mut universe.command_queue,
30 );
31
32 universe.enable_repl();
33 engine::Windowing::run_app(universe).expect("Windowing failed");
34}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let output = scripting::MeowMeowRunner::eval(include_str!("text-input.mms"));
8
9 for error in &output.errors {
10 eprintln!("[mms] {error}");
11 }
12 println!(
13 "[mms] {} intent(s) from text-input.mms",
14 output.intents.len()
15 );
16
17 if !output.errors.is_empty() {
18 std::process::exit(1);
19 }
20
21 let world = engine::ecs::World::default();
22 let mut universe = engine::Universe::new(world);
23
24 let scope = engine::ecs::ComponentId::default();
25 for intent in output.intents {
26 universe.command_queue.push_intent_now(scope, intent);
27 }
28
29 universe.systems.process_commands(
30 &mut universe.world,
31 &mut universe.visuals,
32 &mut universe.render_assets,
33 &mut universe.command_queue,
34 );
35
36 universe.enable_repl();
37 engine::Windowing::run_app(universe).expect("Windowing failed");
38}Sourcepub fn eval_with_timeout(source: &str, timeout: Duration) -> EvalOutput
pub fn eval_with_timeout(source: &str, timeout: Duration) -> EvalOutput
Evaluate source with a caller-provided timeout.
Sourcepub fn eval_with_path(source: &str, path: &str) -> EvalOutput
pub fn eval_with_path(source: &str, path: &str) -> EvalOutput
Evaluate source knowing it came from path (enables relative imports).
Sourcepub fn eval_file(path: &str) -> EvalOutput
pub fn eval_file(path: &str) -> EvalOutput
Read path from disk and evaluate it (enables relative imports).
Examples found in repository?
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6 // A path-aware evaluation is required so the scene can import its MMS preset module.
7 let output = scripting::MeowMeowRunner::eval_file("examples/vtuber-secondary-motion.mms");
8 for error in &output.errors {
9 eprintln!("[mms] {error}");
10 }
11 assert!(
12 output.errors.is_empty(),
13 "MMS evaluation produced errors: {:?}",
14 output.errors
15 );
16
17 let mut universe = engine::Universe::new(engine::ecs::World::default());
18 let scope = engine::ecs::ComponentId::default();
19 for intent in output.intents {
20 universe.command_queue.push_intent_now(scope, intent);
21 }
22 universe.systems.process_commands(
23 &mut universe.world,
24 &mut universe.visuals,
25 &mut universe.render_assets,
26 &mut universe.command_queue,
27 );
28 universe.enable_repl();
29 engine::Windowing::run_app(universe).expect("Windowing failed");
30}More examples
16fn main() {
17 mittens_engine::example_support::ensure_model_assets();
18 utils::logger::init();
19
20 // eval_file passes the path so `import "cat.mms"` resolves relative to
21 // examples/ — do NOT use include_str! here (that loses the path).
22 let output = scripting::MeowMeowRunner::eval_file("examples/mms-module-example.mms");
23
24 for error in &output.errors {
25 eprintln!("[mms] error: {error}");
26 }
27 assert!(
28 output.errors.is_empty(),
29 "MMS evaluation produced errors: {:?}",
30 output.errors,
31 );
32
33 println!("[mms] {} intent(s):", output.intents.len());
34 for intent in &output.intents {
35 if let engine::ecs::IntentValue::SpawnComponentTree { root, .. } = intent {
36 println!(" spawn {}", root.component_type);
37 }
38 }
39
40 let world = engine::ecs::World::default();
41 let mut universe = engine::Universe::new(world);
42
43 let scope = engine::ecs::ComponentId::default();
44 for intent in output.intents {
45 universe.command_queue.push_intent_now(scope, intent);
46 }
47
48 // Camera placed to see the cat from slightly above and in front.
49 example_util::spawn_mms_demo_rig(&mut universe, [0.0, 1.2, 4.5]);
50
51 universe.systems.process_commands(
52 &mut universe.world,
53 &mut universe.visuals,
54 &mut universe.render_assets,
55 &mut universe.command_queue,
56 );
57
58 engine::Windowing::run_app(universe).expect("Windowing failed");
59}21fn main() {
22 mittens_engine::example_support::ensure_model_assets();
23 utils::logger::init();
24
25 let output = scripting::MeowMeowRunner::eval_file("examples/render-graph-diagram.mms");
26
27 for error in &output.errors {
28 eprintln!("[mms] error: {error}");
29 }
30 if !output.errors.is_empty() {
31 eprintln!(
32 "[mms] {} error(s) — scene may be incomplete",
33 output.errors.len()
34 );
35 }
36
37 println!("[mms] {} intent(s) emitted:", output.intents.len());
38 for intent in &output.intents {
39 if let engine::ecs::IntentValue::SpawnComponentTree { root, .. } = intent {
40 println!(" spawn {}", root.component_type);
41 }
42 }
43
44 let world = engine::ecs::World::default();
45 let mut universe = engine::Universe::new(world);
46
47 // Push all MMS-emitted intents into the engine.
48 let scope = engine::ecs::ComponentId::default();
49 for intent in output.intents {
50 universe.command_queue.push_intent_now(scope, intent);
51 }
52
53 // Camera: pulled back and slightly elevated so the full scene is in view.
54 // The emissive orbs above the pedestals are the focal point.
55 example_util::spawn_mms_demo_rig(&mut universe, [0.0, 2.2, 7.0]);
56
57 universe.systems.process_commands(
58 &mut universe.world,
59 &mut universe.visuals,
60 &mut universe.render_assets,
61 &mut universe.command_queue,
62 );
63
64 engine::Windowing::run_app(universe).expect("Windowing failed");
65}Sourcepub fn eval_file_with_timeout(path: &str, timeout: Duration) -> EvalOutput
pub fn eval_file_with_timeout(path: &str, timeout: Duration) -> EvalOutput
Read path from disk and evaluate it (enables relative imports) with a caller-provided timeout.
Examples found in repository?
4fn main() {
5 mittens_engine::example_support::ensure_model_assets();
6 utils::logger::init();
7
8 let output = scripting::MeowMeowRunner::eval_file_with_timeout(
9 "examples/bloom.mms",
10 Duration::from_secs(10),
11 );
12
13 for error in &output.errors {
14 eprintln!("[mms] error: {error}");
15 }
16 assert!(
17 output.errors.is_empty(),
18 "MMS evaluation produced errors: {:?}",
19 output.errors,
20 );
21
22 println!("[mms] {} intent(s) from bloom.mms", output.intents.len());
23
24 let world = engine::ecs::World::default();
25 let mut universe = engine::Universe::new(world);
26
27 let scope = engine::ecs::ComponentId::default();
28 for intent in output.intents {
29 universe.command_queue.push_intent_now(scope, intent);
30 }
31
32 universe.systems.process_commands(
33 &mut universe.world,
34 &mut universe.visuals,
35 &mut universe.render_assets,
36 &mut universe.command_queue,
37 );
38
39 engine::Windowing::run_app(universe).expect("Windowing failed");
40}More examples
4fn main() {
5 mittens_engine::example_support::ensure_model_assets();
6 utils::logger::init();
7
8 let output = scripting::MeowMeowRunner::eval_file_with_timeout(
9 "examples/camera-constraint.mms",
10 Duration::from_secs(10),
11 );
12
13 for error in &output.errors {
14 eprintln!("[mms] error: {error}");
15 }
16 assert!(
17 output.errors.is_empty(),
18 "MMS evaluation produced errors: {:?}",
19 output.errors,
20 );
21
22 println!(
23 "[mms] {} intent(s) from camera-constraint.mms",
24 output.intents.len()
25 );
26
27 let world = engine::ecs::World::default();
28 let mut universe = engine::Universe::new(world);
29
30 let scope = engine::ecs::ComponentId::default();
31 for intent in output.intents {
32 universe.command_queue.push_intent_now(scope, intent);
33 }
34
35 universe.systems.process_commands(
36 &mut universe.world,
37 &mut universe.visuals,
38 &mut universe.render_assets,
39 &mut universe.command_queue,
40 );
41
42 engine::Windowing::run_app(universe).expect("Windowing failed");
43}pub fn load_module_source( source: &str, source_path: Option<&str>, ) -> Result<LoadedMmsModule, String>
pub fn load_module_file(path: &str) -> Result<LoadedMmsModule, String>
pub fn call_mms_module_fn( module: &LoadedMmsModule, name: &str, args: Vec<Value>, channels: Option<&mut EvalChannels>, world_host: Option<&mut World>, emit: Option<&mut dyn SignalEmitter>, ) -> Result<Value, String>
pub fn materialize_mms_module_component( module: &LoadedMmsModule, name: &str, args: Vec<Value>, world_host: Option<&mut World>, emit: Option<&mut dyn SignalEmitter>, ) -> Result<MaterializedCE, String>
pub fn materialize_mms_module_component_in_mode( module: &LoadedMmsModule, name: &str, args: Vec<Value>, world_host: Option<&mut World>, emit: Option<&mut dyn SignalEmitter>, mode: ModuleFactoryEvalMode, ) -> Result<MaterializedCE, String>
pub fn materialize_mms_module_component_from_file( path: &str, name: &str, args: Vec<Value>, world_host: Option<&mut World>, emit: Option<&mut dyn SignalEmitter>, ) -> Result<MaterializedCE, String>
pub fn spawn_mms_module_component_uninitialized( module: &LoadedMmsModule, name: &str, args: Vec<Value>, world: &mut World, emit: &mut dyn SignalEmitter, ) -> Result<ComponentId, String>
pub fn spawn_mms_module_component_uninitialized_with_assets( module: &LoadedMmsModule, name: &str, args: Vec<Value>, world: &mut World, render_assets: Option<&mut RenderAssets>, emit: &mut dyn SignalEmitter, ) -> Result<ComponentId, String>
pub fn spawn_mms_module_component_uninitialized_from_file( path: &str, name: &str, args: Vec<Value>, world: &mut World, emit: &mut dyn SignalEmitter, ) -> Result<ComponentId, String>
pub fn spawn_mms_module_component( module: &LoadedMmsModule, name: &str, args: Vec<Value>, parent: Option<ComponentId>, world: &mut World, emit: &mut dyn SignalEmitter, ) -> Result<ComponentId, String>
pub fn spawn_mms_module_component_from_file( path: &str, name: &str, args: Vec<Value>, parent: Option<ComponentId>, world: &mut World, emit: &mut dyn SignalEmitter, ) -> Result<ComponentId, String>
Sourcepub fn eval_with_world(
source: &str,
world: &mut World,
rx: &mut RxWorld,
emit: &mut dyn SignalEmitter,
) -> EvalOutput
pub fn eval_with_world( source: &str, world: &mut World, rx: &mut RxWorld, emit: &mut dyn SignalEmitter, ) -> EvalOutput
Evaluate source with live world access.
Handles two HostCall kinds during evaluation:
Spawn: spawns the component tree intoworldand returns the rootComponentId.let x = T {}binds aComponentObject(id)instead of a deadComponentExpr.RegisterHandler: installs an MMS function as a scoped signal handler inrx.on(obj, "Click", fn(e) { ... })registers without blocking the evaluator.
Examples found in repository?
2fn main() {
3 mittens_engine::example_support::ensure_model_assets();
4 utils::logger::init();
5 let world = engine::ecs::World::default();
6 let mut universe = engine::Universe::new(world);
7 let src = include_str!("qdebug.mms");
8 let out = scripting::MeowMeowRunner::eval_with_world(
9 src,
10 &mut universe.world,
11 &mut universe.systems.rx,
12 &mut universe.command_queue,
13 );
14 for e in &out.errors {
15 eprintln!("[mms-err] {e}");
16 }
17 println!("intents: {}", out.intents.len());
18 for c in universe.world.all_components() {
19 if let Some(label) = universe.world.component_label(c) {
20 {
21 println!(
22 " comp {:?} type={:?} name={:?}",
23 c,
24 universe.world.component_name(c),
25 label
26 );
27 }
28 }
29 }
30}More examples
10fn main() {
11 mittens_engine::example_support::ensure_model_assets();
12 utils::logger::init();
13
14 let world = engine::ecs::World::default();
15 let mut universe = engine::Universe::new(world);
16
17 let source = include_str!("query-demo.mms");
18 let output = scripting::MeowMeowRunner::eval_with_world(
19 source,
20 &mut universe.world,
21 &mut universe.systems.rx,
22 &mut universe.command_queue,
23 );
24
25 for err in &output.errors {
26 eprintln!("[mms] {err}");
27 }
28 if !output.errors.is_empty() {
29 std::process::exit(1);
30 }
31
32 for intent in output.intents {
33 universe
34 .command_queue
35 .push_intent_now(engine::ecs::ComponentId::default(), intent);
36 }
37
38 universe.systems.process_commands(
39 &mut universe.world,
40 &mut universe.visuals,
41 &mut universe.render_assets,
42 &mut universe.command_queue,
43 );
44
45 universe.enable_repl();
46 engine::Windowing::run_app(universe).expect("Windowing failed");
47}12fn main() {
13 mittens_engine::example_support::ensure_model_assets();
14 utils::logger::init();
15
16 let world = engine::ecs::World::default();
17 let mut universe = engine::Universe::new(world);
18
19 let source = include_str!("component-method-call.mms");
20 let output = scripting::MeowMeowRunner::eval_with_world(
21 source,
22 &mut universe.world,
23 &mut universe.systems.rx,
24 &mut universe.command_queue,
25 );
26
27 for err in &output.errors {
28 eprintln!("[mms] {err}");
29 }
30 if !output.errors.is_empty() {
31 std::process::exit(1);
32 }
33
34 for intent in output.intents {
35 universe
36 .command_queue
37 .push_intent_now(engine::ecs::ComponentId::default(), intent);
38 }
39
40 universe.systems.process_commands(
41 &mut universe.world,
42 &mut universe.visuals,
43 &mut universe.render_assets,
44 &mut universe.command_queue,
45 );
46
47 universe.enable_repl();
48 engine::Windowing::run_app(universe).expect("Windowing failed");
49}9fn main() {
10 mittens_engine::example_support::ensure_model_assets();
11 utils::logger::init();
12
13 let world = engine::ecs::World::default();
14 let mut universe = engine::Universe::new(world);
15
16 // Evaluate the MMS script with live world access.
17 // on() calls inside the script register Click handlers into universe.systems.rx.
18 let source = include_str!("signal-handler.mms");
19 let output = scripting::MeowMeowRunner::eval_with_world(
20 source,
21 &mut universe.world,
22 &mut universe.systems.rx,
23 &mut universe.command_queue,
24 );
25
26 for err in &output.errors {
27 eprintln!("[mms] {err}");
28 }
29 if !output.errors.is_empty() {
30 std::process::exit(1);
31 }
32
33 // Any bare CE emissions from the script (not let-bound) are in output.intents.
34 // Our script only uses let-bindings so this is empty, but handle it anyway.
35 for intent in output.intents {
36 universe
37 .command_queue
38 .push_intent_now(engine::ecs::ComponentId::default(), intent);
39 }
40
41 universe.systems.process_commands(
42 &mut universe.world,
43 &mut universe.visuals,
44 &mut universe.render_assets,
45 &mut universe.command_queue,
46 );
47
48 universe.enable_repl();
49 engine::Windowing::run_app(universe).expect("Windowing failed");
50}Sourcepub fn eval_with_world_at_path(
source: &str,
source_path: Option<&str>,
world: &mut World,
rx: &mut RxWorld,
emit: &mut dyn SignalEmitter,
) -> EvalOutput
pub fn eval_with_world_at_path( source: &str, source_path: Option<&str>, world: &mut World, rx: &mut RxWorld, emit: &mut dyn SignalEmitter, ) -> EvalOutput
Like eval_with_world, but also records the source file path so
import statements resolve relative to it.
Examples found in repository?
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
11 include_str!("mms-tables.mms"),
12 Some("examples/mms-tables.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 &mut universe.command_queue,
16 );
17
18 for error in &output.errors {
19 eprintln!("[mms] {error}");
20 }
21 println!(
22 "[mms] {} intent(s) from mms-tables.mms",
23 output.intents.len()
24 );
25
26 let scope = engine::ecs::ComponentId::default();
27 for intent in output.intents {
28 universe.command_queue.push_intent_now(scope, intent);
29 }
30
31 universe.systems.process_commands(
32 &mut universe.world,
33 &mut universe.visuals,
34 &mut universe.render_assets,
35 &mut universe.command_queue,
36 );
37
38 universe.enable_repl();
39 engine::Windowing::run_app(universe).expect("Windowing failed");
40}More examples
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
11 include_str!("input-xr-gamepad.mms"),
12 Some("examples/input-xr-gamepad.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 &mut universe.command_queue,
16 );
17
18 for error in &output.errors {
19 eprintln!("[mms] {error}");
20 }
21 println!(
22 "[mms] {} intent(s) from input-xr-gamepad.mms",
23 output.intents.len()
24 );
25
26 let scope = engine::ecs::ComponentId::default();
27 for intent in output.intents {
28 universe.command_queue.push_intent_now(scope, intent);
29 }
30
31 universe.systems.process_commands(
32 &mut universe.world,
33 &mut universe.visuals,
34 &mut universe.render_assets,
35 &mut universe.command_queue,
36 );
37
38 universe.enable_repl();
39 engine::Windowing::run_app(universe).expect("Windowing failed");
40}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let source = include_str!("font-size.mms");
11 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
12 source,
13 Some("examples/font-size.mms"),
14 &mut universe.world,
15 &mut universe.systems.rx,
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 println!(
23 "[mms] {} intent(s) from font-size.mms",
24 output.intents.len()
25 );
26
27 for intent in output.intents {
28 universe
29 .command_queue
30 .push_intent_now(engine::ecs::ComponentId::default(), intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 universe.enable_repl();
41 engine::Windowing::run_app(universe).expect("Windowing failed");
42}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
11 include_str!("table-field-reassign.mms"),
12 Some("examples/table-field-reassign.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 &mut universe.command_queue,
16 );
17
18 for error in &output.errors {
19 eprintln!("[mms] {error}");
20 }
21 println!(
22 "[mms] {} intent(s) from table-field-reassign.mms",
23 output.intents.len()
24 );
25
26 let scope = engine::ecs::ComponentId::default();
27 for intent in output.intents {
28 universe.command_queue.push_intent_now(scope, intent);
29 }
30
31 universe.systems.process_commands(
32 &mut universe.world,
33 &mut universe.visuals,
34 &mut universe.render_assets,
35 &mut universe.command_queue,
36 );
37
38 universe.enable_repl();
39 engine::Windowing::run_app(universe).expect("Windowing failed");
40}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let source = include_str!("world-panel.mms");
11 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
12 source,
13 Some("examples/world-panel.mms"),
14 &mut universe.world,
15 &mut universe.systems.rx,
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 println!(
23 "[mms] {} intent(s) from world-panel.mms",
24 output.intents.len()
25 );
26
27 for intent in output.intents {
28 universe
29 .command_queue
30 .push_intent_now(engine::ecs::ComponentId::default(), intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 universe.enable_repl();
41 engine::Windowing::run_app(universe).expect("Windowing failed");
42}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let source = include_str!("padding-demo.mms");
11 let output = scripting::MeowMeowRunner::eval_with_world_at_path(
12 source,
13 Some("examples/padding-demo.mms"),
14 &mut universe.world,
15 &mut universe.systems.rx,
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 println!(
23 "[mms] {} intent(s) from padding-demo.mms",
24 output.intents.len()
25 );
26
27 for intent in output.intents {
28 universe
29 .command_queue
30 .push_intent_now(engine::ecs::ComponentId::default(), intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 universe.enable_repl();
41 engine::Windowing::run_app(universe).expect("Windowing failed");
42}Sourcepub fn eval_with_world_and_assets(
source: &str,
world: &mut World,
rx: &mut RxWorld,
render_assets: &mut RenderAssets,
emit: &mut dyn SignalEmitter,
) -> EvalOutput
pub fn eval_with_world_and_assets( source: &str, world: &mut World, rx: &mut RxWorld, render_assets: &mut RenderAssets, emit: &mut dyn SignalEmitter, ) -> EvalOutput
Evaluate source with live world + render-asset access.
Sourcepub fn eval_with_world_and_assets_at_path(
source: &str,
source_path: Option<&str>,
world: &mut World,
rx: &mut RxWorld,
render_assets: Option<&mut RenderAssets>,
emit: &mut dyn SignalEmitter,
) -> EvalOutput
pub fn eval_with_world_and_assets_at_path( source: &str, source_path: Option<&str>, world: &mut World, rx: &mut RxWorld, render_assets: Option<&mut RenderAssets>, emit: &mut dyn SignalEmitter, ) -> EvalOutput
Like eval_with_world_and_assets, but also records the source file path so
import statements resolve relative to it.
Examples found in repository?
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
11 include_str!("pride.mms"),
12 Some("examples/pride.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 Some(&mut universe.render_assets),
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 assert!(
23 output.errors.is_empty(),
24 "MMS evaluation produced errors: {:?}",
25 output.errors,
26 );
27
28 let scope = engine::ecs::ComponentId::default();
29 for intent in output.intents {
30 universe.command_queue.push_intent_now(scope, intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 engine::Windowing::run_app(universe).expect("Windowing failed");
41}More examples
3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
11 include_str!("clip-shape.mms"),
12 Some("examples/clip-shape.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 Some(&mut universe.render_assets),
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 assert!(
23 output.errors.is_empty(),
24 "MMS evaluation produced errors: {:?}",
25 output.errors,
26 );
27
28 let scope = engine::ecs::ComponentId::default();
29 for intent in output.intents {
30 universe.command_queue.push_intent_now(scope, intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 engine::Windowing::run_app(universe).expect("Windowing failed");
41}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
11 include_str!("neon-kawaii.mms"),
12 Some("examples/neon-kawaii.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 Some(&mut universe.render_assets),
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 assert!(
23 output.errors.is_empty(),
24 "MMS evaluation produced errors: {:?}",
25 output.errors,
26 );
27
28 let scope = engine::ecs::ComponentId::default();
29 for intent in output.intents {
30 universe.command_queue.push_intent_now(scope, intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 engine::Windowing::run_app(universe).expect("Windowing failed");
41}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
11 include_str!("bisket-desktop-demo.mms"),
12 Some("examples/bisket-desktop-demo.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 Some(&mut universe.render_assets),
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 assert!(
23 output.errors.is_empty(),
24 "MMS evaluation produced errors: {:?}",
25 output.errors,
26 );
27
28 let scope = engine::ecs::ComponentId::default();
29 for intent in output.intents {
30 universe.command_queue.push_intent_now(scope, intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 engine::Windowing::run_app(universe).expect("Windowing failed");
41}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
10 include_str!("bisket-vr-only-example.mms"),
11 Some("examples/bisket-vr-only-example.mms"),
12 &mut universe.world,
13 &mut universe.systems.rx,
14 Some(&mut universe.render_assets),
15 &mut universe.command_queue,
16 );
17
18 for error in &output.errors {
19 eprintln!("[mms] {error}");
20 }
21 assert!(
22 output.errors.is_empty(),
23 "MMS evaluation produced errors: {:?}",
24 output.errors,
25 );
26
27 let scope = engine::ecs::ComponentId::default();
28 for intent in output.intents {
29 universe.command_queue.push_intent_now(scope, intent);
30 }
31 universe.systems.process_commands(
32 &mut universe.world,
33 &mut universe.visuals,
34 &mut universe.render_assets,
35 &mut universe.command_queue,
36 );
37
38 engine::Windowing::run_app(universe).expect("Windowing failed");
39}3fn main() {
4 mittens_engine::example_support::ensure_model_assets();
5 utils::logger::init();
6
7 let world = engine::ecs::World::default();
8 let mut universe = engine::Universe::new(world);
9
10 let output = scripting::MeowMeowRunner::eval_with_world_and_assets_at_path(
11 include_str!("rotate-look-at-example.mms"),
12 Some("examples/rotate-look-at-example.mms"),
13 &mut universe.world,
14 &mut universe.systems.rx,
15 Some(&mut universe.render_assets),
16 &mut universe.command_queue,
17 );
18
19 for error in &output.errors {
20 eprintln!("[mms] {error}");
21 }
22 assert!(
23 output.errors.is_empty(),
24 "MMS evaluation produced errors: {:?}",
25 output.errors,
26 );
27
28 let scope = engine::ecs::ComponentId::default();
29 for intent in output.intents {
30 universe.command_queue.push_intent_now(scope, intent);
31 }
32
33 universe.systems.process_commands(
34 &mut universe.world,
35 &mut universe.visuals,
36 &mut universe.render_assets,
37 &mut universe.command_queue,
38 );
39
40 engine::Windowing::run_app(universe).expect("Windowing failed");
41}Auto Trait Implementations§
impl Freeze for MeowMeowRunner
impl RefUnwindSafe for MeowMeowRunner
impl Send for MeowMeowRunner
impl Sync for MeowMeowRunner
impl Unpin for MeowMeowRunner
impl UnsafeUnpin for MeowMeowRunner
impl UnwindSafe for MeowMeowRunner
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.