Skip to main content

mms_functions/
mms-functions.rs

1/// mms-functions: visual demo + test harness for MMS Phases 2–4 (arithmetic, if/else, functions).
2///
3/// Evaluates mms-functions.mms, asserts on the intent count, then spawns the scene
4/// into a live window. Use WASD/RF/QE + right-drag to navigate.
5///
6///   cargo run --example mms-functions
7use mittens_engine::{engine, engine::ecs::SignalEmitter, scripting, utils};
8
9#[path = "example_util/mod.rs"]
10mod example_util;
11
12fn main() {
13    mittens_engine::example_support::ensure_model_assets();
14    utils::logger::init();
15
16    let output = scripting::MeowMeowRunner::eval(include_str!("mms-functions.mms"));
17
18    for error in &output.errors {
19        eprintln!("[mms] error: {error}");
20    }
21    println!(
22        "[mms] {} intent(s) from mms-functions.mms",
23        output.intents.len()
24    );
25
26    assert!(
27        output.errors.is_empty(),
28        "MMS evaluation produced errors: {:?}",
29        output.errors
30    );
31    assert_eq!(
32        output.intents.len(),
33        4,
34        "expected 4 SpawnComponentTree intents (got {})",
35        output.intents.len()
36    );
37    println!("[mms] assertions ok — opening window");
38
39    let world = engine::ecs::World::default();
40    let mut universe = engine::Universe::new(world);
41
42    let scope = engine::ecs::ComponentId::default();
43    for intent in output.intents {
44        universe.command_queue.push_intent_now(scope, intent);
45    }
46
47    example_util::spawn_mms_demo_rig(&mut universe, [0.0, 1.0, 5.0]);
48
49    universe.systems.process_commands(
50        &mut universe.world,
51        &mut universe.visuals,
52        &mut universe.render_assets,
53        &mut universe.command_queue,
54    );
55
56    engine::Windowing::run_app(universe).expect("Windowing failed");
57}