]> code.bitgloo.com Git - clyne/entityx.git/commitdiff
Merge @jarrettchisholm's change plus add some tests. Thanks!
authorAlec Thomas <alec@swapoff.org>
Mon, 7 Jul 2014 02:53:19 +0000 (12:53 +1000)
committerAlec Thomas <alec@swapoff.org>
Mon, 7 Jul 2014 02:54:23 +0000 (12:54 +1000)
Fixes #37 and #39.

entityx/Entity.h
entityx/Entity_test.cc

index 51ecb03d6f11f91d92ecce1588e312c75f963ed2..7f5a5cb0fa4659e4d0ebc93dac843b6ca0006c8c 100644 (file)
@@ -125,6 +125,9 @@ public:
   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();
 
@@ -774,6 +777,12 @@ ComponentHandle<C> Entity::assign(Args && ... args) {
   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>());
index 107f0a3015c8c7c5df88577eaa0205248536a32a..f57bb957f0b9ef3844cf2ef0f9fb5497405a0646 100644 (file)
@@ -439,6 +439,24 @@ TEST_CASE_METHOD(EntityManagerFixture, "TestComponentHandleInvalidatedWhenEntity
   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();