1
0
mirror of https://github.com/rwengine/openrw.git synced 2024-10-06 09:07:19 +02:00

Helper argument to clone Atomics with a new frame

This commit is contained in:
Daniel Evans 2019-05-15 23:28:09 +01:00
parent 77b405b7c5
commit 86bf69b0a0
5 changed files with 7 additions and 16 deletions

View File

@ -82,10 +82,10 @@ ModelFramePtr ModelFrame::cloneHierarchy() const {
return self; return self;
} }
AtomicPtr Atomic::clone() const { AtomicPtr Atomic::clone(const ModelFramePtr& newFrame) const {
auto newatomic = std::make_shared<Atomic>(); auto newatomic = std::make_shared<Atomic>();
newatomic->setGeometry(getGeometry()); newatomic->setGeometry(getGeometry());
newatomic->setFrame(getFrame()); newatomic->setFrame(newFrame ? newFrame : getFrame());
newatomic->setFlags(getFlags()); newatomic->setFlags(getFlags());
return newatomic; return newatomic;
} }

View File

@ -234,7 +234,7 @@ public:
} }
} }
AtomicPtr clone() const; AtomicPtr clone(const ModelFramePtr& newFrame = {}) const;
}; };
/** /**

View File

@ -165,13 +165,8 @@ void InstanceObject::changeModel(BaseModelInfo* incoming, int atomicNumber) {
atomicNumber); atomicNumber);
auto atomic = getModelInfo<SimpleModelInfo>()->getAtomic(atomicNumber); auto atomic = getModelInfo<SimpleModelInfo>()->getAtomic(atomicNumber);
if (atomic) { if (atomic) {
auto previous = atomic_; const auto frame = atomic_ ? atomic_->getFrame() : std::make_shared<ModelFrame>();
atomic_ = atomic->clone(); atomic_ = atomic->clone(frame);
if (previous) {
atomic_->setFrame(previous->getFrame());
} else {
atomic_->setFrame(std::make_shared<ModelFrame>());
}
} }
if (collision) { if (collision) {

View File

@ -273,9 +273,7 @@ PickupObject::PickupObject(GameWorld* world, const glm::vec3& position,
setCollected(false); setCollected(false);
auto modelData = getModelInfo<SimpleModelInfo>(); auto modelData = getModelInfo<SimpleModelInfo>();
auto atomic = modelData->getAtomic(0)->clone(); setModel(modelData->getAtomic(0)->clone(std::make_shared<ModelFrame>()));
atomic->setFrame(std::make_shared<ModelFrame>());
setModel(std::move(atomic));
updateTransform(getPosition(), getRotation()); updateTransform(getPosition(), getRotation());
} }

View File

@ -163,9 +163,7 @@ ProjectileObject::ProjectileObject(GameWorld* world, const glm::vec3& position,
const auto& modelData = world->data->findModelInfo<SimpleModelInfo>( const auto& modelData = world->data->findModelInfo<SimpleModelInfo>(
getProjectileInfo().weapon->modelID); getProjectileInfo().weapon->modelID);
auto atomic = modelData->getAtomic(0)->clone(); setModel(modelData->getAtomic(0)->clone(std::make_shared<ModelFrame>()));
atomic->setFrame(std::make_shared<ModelFrame>());
setModel(std::move(atomic));
} }
ProjectileObject::~ProjectileObject() { ProjectileObject::~ProjectileObject() {