Skip to main content

mms_loops/
mms-loops.rs

1/// mms-loops: visual demo for MMS Phase 5 (for/in, range, break, continue).
2///
3/// Evaluates mms-loops.mms and opens a live window.
4/// Spawn errors print to stdout via [SpawnComponentTree] lines.
5/// Use WASD/RF/QE + right-drag to navigate.
6///
7///   cargo run --example mms-loops
8use mittens_engine::{
9    engine,
10    engine::ecs::{IntentValue, SignalEmitter},
11    scripting, utils,
12};
13
14#[path = "example_util/mod.rs"]
15mod example_util;
16
17fn main() {
18    mittens_engine::example_support::ensure_model_assets();
19    utils::logger::init();
20
21    let output = scripting::MeowMeowRunner::eval(include_str!("mms-loops.mms"));
22
23    for error in &output.errors {
24        eprintln!("[mms] error: {error}");
25    }
26    assert!(
27        output.errors.is_empty(),
28        "MMS evaluation produced errors: {:?}",
29        output.errors
30    );
31
32    println!("[mms] {} intent(s):", output.intents.len());
33    for intent in &output.intents {
34        if let IntentValue::SpawnComponentTree { root, .. } = intent {
35            println!("  spawn {}", root.component_type);
36        }
37    }
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, [1.5, 6.0, 9.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}