template <typename C>
ComponentHandle<C> assign_from_copy(const C &component);
+ template <typename C, typename ... Args>
+ ComponentHandle<C> replace(Args && ... args);
+
template <typename C>
void remove();
return manager_->assign<C>(id_, std::forward<const C &>(component));
}
+template <typename C, typename ... Args>
+ComponentHandle<C> Entity::replace(Args && ... args) {
+ assert(valid());
+ auto handle = component<C>();
+ if (handle) {
+ *(handle.get()) = C(std::forward<Args>(args) ...);
+ }
+ else {
+ handle = manager_->assign<C>(id_, std::forward<Args>(args) ...);
+ }
+ return handle;
+}
+
template <typename C>
void Entity::remove() {
assert(valid() && has_component<C>());