Macro aframe::entity

source ·
macro_rules! entity {
    ( 
        $(attributes: $(($attr_id:literal, $attr_value:expr)),*)? $(,)?
        $(components: $(($cmp_id:literal, $cmp_value:expr)),*)? $(,)? 
        $(children: $($child:expr),*)? 
    ) => { ... };
    ( 
        primitive: $name:expr,
        $(attributes: $(($attr_id:literal, $attr_value:expr)),*)? $(,)?
        $(components: $(($cmp_id:literal, $cmp_value:expr)),*)? $(,)? 
        $(children: $($child:expr),*)? 
    ) => { ... };
}
Expand description

Defines the high-level API for describing entities, with one form for describing general entities and another for defining specific primitives. Here’s an example of a general entity definition:

entity!
{
    attributes: ("id", "cube-rig"),
    components: 
    ("position", component::Position{x: 0.0, y: 2.5, z: -2.0}),
    ("sound", component!
    {
        component::Sound,
        src: Cow::Borrowed("#ambient_music"), 
        volume: 0.5
    }),
    ("play-sound-on-event", component!
    {
        component::PlaySoundOnEvent,
        mode: component::PlaySoundOnEventMode::ToggleStop, 
        event: Cow::Borrowed("click")
    }),
    ("light", component!
    {
        component::Light,
        light_type: component::LightType::Point
        {
            decay: 1.0,
            distance: 50.0,
            shadow: component::OptionalLocalShadow::NoCast{},
        }, 
        intensity: 0.0
    }),
    ("animation__mouseenter", component!
    {
        component::Animation,
        property: Cow::Borrowed("light.intensity"),
        to: Cow::Borrowed("1.0"),
        start_events: component::List(Cow::Borrowed(&[Cow::Borrowed("mouseenter")])),
        dur: 250
    }),
    ("animation__mouseleave", component!
    {
        component::Animation,
        property: Cow::Borrowed("light.intensity"),
        to: Cow::Borrowed("0.0"),
        start_events: component::List(Cow::Borrowed(&[Cow::Borrowed("mouseleave")])),
        dur: 250
    }),
    children: entity!
    {
        primitive: primitive::A_BOX,
        attributes: ("id", "my-box"),
        components:
    }
},

and here’s an example of a primitive definition:

entity!
{
    // This can also jsut a be a string: "a-box" 
    primitive: primitive::A_BOX,
    attributes: ("id", "my-box"),
    components: 
}