template <typename C, typename ... Args>
ComponentHandle<C> assign(Args && ... args);
+ template <typename C>
+ ComponentHandle<C> assign_from_copy(const C &component);
+
template <typename C>
void remove();
return manager_->assign<C>(id_, std::forward<Args>(args) ...);
}
+template <typename C>
+ComponentHandle<C> Entity::assign_from_copy(const C &component) {
+ assert(valid());
+ return manager_->assign<C>(id_, std::forward<const C &>(component));
+}
+
template <typename C>
void Entity::remove() {
assert(valid() && has_component<C>());
REQUIRE(!position);
}
+struct CopyVerifier : Component<CopyVerifier> {
+ CopyVerifier() : copied(false) {}
+ CopyVerifier(const CopyVerifier &other) {
+ copied = other.copied + 1;
+ }
+
+ int copied;
+};
+
+TEST_CASE_METHOD(EntityManagerFixture, "TestComponentAssignmentFromCopy") {
+ Entity a = em.create();
+ CopyVerifier original;
+ CopyVerifier::Handle copy = a.assign_from_copy(original);
+ REQUIRE(copy);
+ REQUIRE(copy->copied == 1);
+ a.destroy();
+ REQUIRE(!copy);
+}
TEST_CASE_METHOD(EntityManagerFixture, "TestComponentHandleInvalidatedWhenComponentDestroyed") {
Entity a = em.create();