Browse Source

fix generated entities were added twice to the chunk

Kolja Strohm 15 hours ago
parent
commit
eab24b0309
4 changed files with 11 additions and 2 deletions
  1. 1 0
      FactoryCraft/Chunk.cpp
  2. 8 2
      FactoryCraft/Entity.cpp
  3. 1 0
      FactoryCraft/Entity.h
  4. 1 0
      FactoryCraft/ItemEntity.cpp

+ 1 - 0
FactoryCraft/Chunk.cpp

@@ -1382,6 +1382,7 @@ void Chunk::addGeneratedEntity(Entity* entity)
     entitiesInChunk.add(entity);
     lastSavedEntityIds.add(entity->getId());
     entity->setLastSavedChunkCenter(getCenter());
+    entity->setLastChunk(dimensionId, getCenter());
 }
 
 const Framework::RCArray<Entity>& Chunk::getEntitiesInChunk() const

+ 8 - 2
FactoryCraft/Entity.cpp

@@ -1002,8 +1002,8 @@ void Entity::tick(const Dimension* zDimension, double seconds)
     }
     if ((!(movementFlags & MovementFlags::FLYING)
             && (speed.x != 0.f || speed.y != 0.f || speed.z != 0.f
-                || moveDir.x != 0.f || moveDir.y != 0.f || moveDir.z != 0.f))
-        || !(movementFlags & MovementFlags::GROUND_CONTACT))
+                || moveDir.x != 0.f || moveDir.y != 0.f || moveDir.z != 0.f
+                || !(movementFlags & MovementFlags::GROUND_CONTACT))))
     {
         speed.z
             -= zDimension->getGravity() * gravityMultiplier * (float)seconds;
@@ -1528,6 +1528,12 @@ void Entity::setLastSavedChunkCenter(Framework::Punkt pos)
     lastSavedChunkCenter = Framework::Maybe<Framework::Punkt>::of(pos);
 }
 
+void Entity::setLastChunk(int dimensionId, Framework::Punkt chankCenter)
+{
+    lastDimensionId = dimensionId;
+    lastChunkCenter = chankCenter;
+}
+
 void Entity::setRemoved()
 {
     removed = true;

+ 1 - 0
FactoryCraft/Entity.h

@@ -157,6 +157,7 @@ public:
     int getChatSecurityLevel() const;
     Framework::Maybe<Framework::Punkt> getLastSavedChunkCenter() const;
     void setLastSavedChunkCenter(Framework::Punkt pos);
+    void setLastChunk(int dimensionId, Framework::Punkt chankCenter);
     void setRemoved();
     double getHitDistance(Framework::Vec3<float> rayOrigin,
         Framework::Vec3<float> rayDirection) const;

+ 1 - 0
FactoryCraft/ItemEntity.cpp

@@ -32,6 +32,7 @@ ItemEntity::ItemEntity(
 
 void ItemEntity::prepareTick(const Dimension* zDimension, double seconds)
 {
+    movementFlags |= MovementFlags::ROTATE_TO_FACE | MovementFlags::FLYING;
     if (slot->zStack() == 0 && !removed) throw "Illegal State exception";
     Entity* zOther = Game::INSTANCE->zNearestEntity(
         dimensionId, location, [this](Entity* zOther) {