observer: deprecated .replace, use .update instead

This commit is contained in:
Michele Caini
2020-05-02 01:20:08 +02:00
parent 1a2ccdf991
commit 0a70979934
2 changed files with 27 additions and 13 deletions

View File

@@ -419,7 +419,7 @@ An `observer` is initialized with an instance of a registry and a set of rules
that describes what are the entities to intercept. As an example:
```cpp
entt::observer observer{registry, entt::collector.replace<sprite>()};
entt::observer observer{registry, entt::collector.update<sprite>()};
```
The class is default constructible and can be reconfigured at any time by means
@@ -466,11 +466,11 @@ rules) to use with an `observer` instead.<br/>
There are two types of `matcher`s:
* Observing matcher: an observer will return at least all the living entities
for which one or more of the given components have been explicitly replaced
and not yet destroyed.
for which one or more of the given components have been updated and not yet
destroyed.
```cpp
entt::collector.replace<sprite>();
entt::collector.update<sprite>();
```
* Grouping matcher: an observer will return at least all the living entities
@@ -484,22 +484,21 @@ There are two types of `matcher`s:
A grouping matcher supports also exclusion lists as well as single components.
Roughly speaking, an observing matcher intercepts the entities for which the
given components are replaced (as in `registry::replace`) while a grouping
matcher tracks the entities that have assigned the given components since the
last time one asked.<br/>
given components are updated while a grouping matcher tracks the entities that
have assigned the given components since the last time one asked.<br/>
If an entity already has all the components except one and the missing type is
assigned to it, the entity is intercepted by a grouping matcher.
In addition, a matcher can be filtered with a `where` clause:
```cpp
entt::collector.replace<sprite>().where<position>(entt::exclude<velocity>);
entt::collector.update<sprite>().where<position>(entt::exclude<velocity>);
```
This clause introduces a way to intercept entities if and only if they are
already part of a hypothetical group. If they are not, they aren't returned by
the observer, no matter if they matched the given rule.<br/>
In the example above, whenever the component `sprite` of an entity is replaced,
In the example above, whenever the component `sprite` of an entity is updated,
the observer probes the entity itself to verify that it has at least `position`
and has not `velocity` before to store it aside. If one of the two conditions of
the filter isn't respected, the entity is discared, no matter what.

View File

@@ -61,9 +61,16 @@ struct basic_collector<> {
* @return The updated collector.
*/
template<typename AnyOf>
static constexpr auto replace() ENTT_NOEXCEPT {
static constexpr auto update() ENTT_NOEXCEPT {
return basic_collector<matcher<type_list<>, type_list<>, AnyOf>>{};
}
/*! @copydoc update */
template<typename AnyOf>
[[deprecated("use ::update instead")]]
static constexpr auto replace() ENTT_NOEXCEPT {
return update<AnyOf>();
}
};
/**
@@ -96,10 +103,18 @@ struct basic_collector<matcher<type_list<Reject...>, type_list<Require...>, Rule
* @return The updated collector.
*/
template<typename AnyOf>
static constexpr auto replace() ENTT_NOEXCEPT {
static constexpr auto update() ENTT_NOEXCEPT {
return basic_collector<matcher<type_list<>, type_list<>, AnyOf>, current_type, Other...>{};
}
/*! @copydoc update */
template<typename AnyOf>
[[deprecated("use ::update instead")]]
static constexpr auto replace() ENTT_NOEXCEPT {
return update<AnyOf>();
}
/**
* @brief Updates the filter of the last added matcher.
* @tparam AllOf Types of components required by the matcher.
@@ -130,8 +145,8 @@ inline constexpr basic_collector<> collector{};
* collector:
*
* * Observing matcher: an observer will return at least all the living entities
* for which one or more of the given components have been explicitly
* replaced and not yet destroyed.
* for which one or more of the given components have been updated and not yet
* destroyed.
* * Grouping matcher: an observer will return at least all the living entities
* that would have entered the given group if it existed and that would have
* not yet left it.