diff --git a/apps/openmw/mwworld/cellstore.cpp b/apps/openmw/mwworld/cellstore.cpp index 22c94cf755..088c0c6233 100644 --- a/apps/openmw/mwworld/cellstore.cpp +++ b/apps/openmw/mwworld/cellstore.cpp @@ -4,8 +4,12 @@ #include +#include "../mwbase/environment.hpp" +#include "../mwbase/world.hpp" + #include "ptr.hpp" #include "manualref.hpp" +#include "class.hpp" namespace MWWorld { @@ -125,7 +129,7 @@ namespace MWWorld } /// \todo this whole code needs major clean up - void CellStore::insertObject (const Ptr& ptr) + const MWWorld::Ptr CellStore::insertObject (const Ptr& ptr, const ESM::Position &pos) { std::string type = ptr.getTypeName(); @@ -213,11 +217,12 @@ namespace MWWorld newRef.getPtr().get(); newPtr = MWWorld::Ptr(&miscItems.insert(*ref), this); - + /* ESM::Position& p = newPtr.getRefData().getPosition(); p.pos[0] = ptr.getRefData().getPosition().pos[0]; p.pos[1] = ptr.getRefData().getPosition().pos[1]; p.pos[2] = ptr.getRefData().getPosition().pos[2]; + */ } else { @@ -230,9 +235,13 @@ namespace MWWorld else throw std::runtime_error("Trying to insert object of unhandled type"); + newPtr.getRefData().getPosition() = pos; + newPtr.getRefData().setCount(ptr.getRefData().getCount()); ptr.getRefData().setCount(0); newPtr.getRefData().enable(); + + return newPtr; } } diff --git a/apps/openmw/mwworld/cellstore.hpp b/apps/openmw/mwworld/cellstore.hpp index 3dcde93597..1bf233a500 100644 --- a/apps/openmw/mwworld/cellstore.hpp +++ b/apps/openmw/mwworld/cellstore.hpp @@ -155,6 +155,8 @@ namespace MWWorld forEachImp (functor, weapons); } + const MWWorld::Ptr insertObject(const MWWorld::Ptr &ptr, const ESM::Position &pos); + private: template @@ -172,8 +174,6 @@ namespace MWWorld void listRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm); void loadRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm); - - void insertObject(const MWWorld::Ptr &ptr); }; } diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 4ffcd33f89..efb17a7099 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1016,13 +1016,13 @@ namespace MWWorld else cell = getPlayer().getPlayer().getCell(); - ESM::Position& pos = object.getRefData().getPosition(); + ESM::Position pos = getPlayer().getPlayer().getRefData().getPosition(); pos.pos[0] = result.second[0]; pos.pos[1] = -result.second[2]; pos.pos[2] = result.second[1]; - cell->insertObject(object); - //TODO mWorldScene->addObjectToScene + MWWorld::Ptr dropped = cell->insertObject(object, pos); + mWorldScene->addObjectToScene(dropped); /// \todo retrieve the bounds of the object and translate it accordingly @@ -1044,14 +1044,12 @@ namespace MWWorld { MWWorld::Ptr::CellStore* cell = getPlayer().getPlayer().getCell(); - float* playerPos = getPlayer().getPlayer().getRefData().getPosition().pos; + ESM::Position &pos = + getPlayer().getPlayer().getRefData().getPosition(); - ESM::Position& pos = object.getRefData().getPosition(); - pos.pos[0] = playerPos[0]; - pos.pos[1] = playerPos[1]; - pos.pos[2] = playerPos[2]; + MWWorld::Ptr dropped = cell->insertObject(object, pos); - mWorldScene->insertObject(object, cell); + mWorldScene->addObjectToScene(dropped); } void World::processChangedSettings(const Settings::CategorySettingVector& settings)