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:
}