mittens-engine 0.6.0

A Vulkan and OpenXR scene engine with ECS, reactive signals, and Meow Meow scripting
Documentation
// cat.mms — a cat made of cubes.
//
// Emits a single component tree at positional index 0.
// Import with: import { 0 as cat } from "cat.mms"
//
// Coordinate system: Y up, +Z forward (toward viewer from behind).
// Cat sits with feet near y=0, head top near y=1.3.

T {
    // body
    T.position(0.0, 0.42, 0.0) {
        scale(0.85, 0.65, 1.3)
        R.cube() { C.rgba(0.85, 0.75, 0.65, 1.0) }
    }

    // head
    T.position(0.0, 0.95, 0.52) {
        scale(0.75, 0.7, 0.75)
        R.cube() { C.rgba(0.85, 0.75, 0.65, 1.0) }
    }

    // ear left
    T.position(-0.22, 1.38, 0.52) {
        scale(0.18, 0.26, 0.13)
        R.cube() { C.rgba(0.85, 0.75, 0.65, 1.0) }
    }

    // ear right
    T.position(0.22, 1.38, 0.52) {
        scale(0.18, 0.26, 0.13)
        R.cube() { C.rgba(0.85, 0.75, 0.65, 1.0) }
    }

    // inner ear left (pink)
    T.position(-0.22, 1.37, 0.56) {
        scale(0.09, 0.14, 0.05)
        R.cube() { C.rgba(0.95, 0.65, 0.72, 1.0) }
    }

    // inner ear right
    T.position(0.22, 1.37, 0.56) {
        scale(0.09, 0.14, 0.05)
        R.cube() { C.rgba(0.95, 0.65, 0.72, 1.0) }
    }

    // eye left
    T.position(-0.17, 0.98, 0.91) {
        scale(0.13, 0.12, 0.04)
        R.cube() { C.rgba(0.08, 0.04, 0.04, 1.0) }
    }

    // eye right
    T.position(0.17, 0.98, 0.91) {
        scale(0.13, 0.12, 0.04)
        R.cube() { C.rgba(0.08, 0.04, 0.04, 1.0) }
    }

    // nose
    T.position(0.0, 0.84, 0.92) {
        scale(0.09, 0.07, 0.04)
        R.cube() { C.rgba(0.92, 0.48, 0.52, 1.0) }
    }

    // tail — angled up and back
    T.position(0.0, 0.58, -0.82) {
        rotation(-38.0, 0.0, 0.0)
        scale(0.11, 0.11, 0.88)
        R.cube() { C.rgba(0.72, 0.62, 0.52, 1.0) }
    }

    // front left leg
    T.position(-0.27, 0.09, 0.36) {
        scale(0.19, 0.38, 0.19)
        R.cube() { C.rgba(0.80, 0.71, 0.61, 1.0) }
    }

    // front right leg
    T.position(0.27, 0.09, 0.36) {
        scale(0.19, 0.38, 0.19)
        R.cube() { C.rgba(0.80, 0.71, 0.61, 1.0) }
    }

    // back left leg
    T.position(-0.27, 0.09, -0.36) {
        scale(0.19, 0.38, 0.19)
        R.cube() { C.rgba(0.80, 0.71, 0.61, 1.0) }
    }

    // back right leg
    T.position(0.27, 0.09, -0.36) {
        scale(0.19, 0.38, 0.19)
        R.cube() { C.rgba(0.80, 0.71, 0.61, 1.0) }
    }
}