macro_rules! define_multi_property {
(@impl
$entity:ident,
$($dependency:ident),+
) => { ... };
(
$entity:ident,
( $first:ident, $second:ident $(, $dependency:ident)* $(,)? )
$(,)?
) => { ... };
() => { ... };
($entity:ident $(,)?) => { ... };
(( $($dependency:ident),+ $(,)? ), $entity:ident $(,)?) => { ... };
($entity:ident, ( $only:ident $(,)? ) $(,)?) => { ... };
(
$entity:ident,
$first:ident,
$second:ident
$(, $dependency:ident)*
$(,)?
) => { ... };
($entity:ident, $only:ident $(,)?) => { ... };
($($tokens:tt)*) => { ... };
}Expand description
Defines a derived property consisting of a (named) tuple of other properties. The primary use case is for indexing and querying properties jointly.
The querying subsystem is able to detect when its multiple component properties are equivalent to an indexed multi-property and use that index to perform the query.
Multi-properties must have at least two component properties:
use ixa::{define_entity, define_property, define_multi_property};
define_entity!(Person);
define_property!(struct Age(u8), Person, default_const = Age(0));
define_property!(struct Height(u8), Person, default_const = Height(0));
define_multi_property!(Person, (Age, Height));ⓘ
use ixa::{define_entity, define_multi_property};
define_entity!(Person);
define_multi_property!(Person);ⓘ
use ixa::{define_entity, define_property, define_multi_property};
define_entity!(Person);
define_property!(struct Age(u8), Person, default_const = Age(0));
define_multi_property!(Person, (Age));Tuple-first and flat component syntax are not supported:
ⓘ
use ixa::{define_entity, define_property, define_multi_property};
define_entity!(Person);
define_property!(struct Age(u8), Person, default_const = Age(0));
define_property!(struct Height(u8), Person, default_const = Height(0));
define_multi_property!((Age, Height), Person);ⓘ
use ixa::{define_entity, define_property, define_multi_property};
define_entity!(Person);
define_property!(struct Age(u8), Person, default_const = Age(0));
define_property!(struct Height(u8), Person, default_const = Height(0));
define_multi_property!(Person, Age, Height);Components must be the underlying property type, not a type alias (see issue #843):
ⓘ
use ixa::{define_entity, define_property, define_multi_property};
define_entity!(Person);
define_property!(struct Age(u8), Person, default_const = Age(0));
define_property!(struct Height(u8), Person, default_const = Height(0));
type Years = Age;
define_multi_property!(Person, (Years, Height));