1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-02-22 23:09:43 +00:00

moving part 2, adding position parameter, stable

This commit is contained in:
greye 2012-07-24 12:30:59 +04:00
parent 61cb012ee7
commit 71253c64ab
3 changed files with 20 additions and 13 deletions

View file

@ -4,8 +4,12 @@
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp"
#include "ptr.hpp" #include "ptr.hpp"
#include "manualref.hpp" #include "manualref.hpp"
#include "class.hpp"
namespace MWWorld namespace MWWorld
{ {
@ -125,7 +129,7 @@ namespace MWWorld
} }
/// \todo this whole code needs major clean up /// \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(); std::string type = ptr.getTypeName();
@ -213,11 +217,12 @@ namespace MWWorld
newRef.getPtr().get<ESM::Miscellaneous>(); newRef.getPtr().get<ESM::Miscellaneous>();
newPtr = MWWorld::Ptr(&miscItems.insert(*ref), this); newPtr = MWWorld::Ptr(&miscItems.insert(*ref), this);
/*
ESM::Position& p = newPtr.getRefData().getPosition(); ESM::Position& p = newPtr.getRefData().getPosition();
p.pos[0] = ptr.getRefData().getPosition().pos[0]; p.pos[0] = ptr.getRefData().getPosition().pos[0];
p.pos[1] = ptr.getRefData().getPosition().pos[1]; p.pos[1] = ptr.getRefData().getPosition().pos[1];
p.pos[2] = ptr.getRefData().getPosition().pos[2]; p.pos[2] = ptr.getRefData().getPosition().pos[2];
*/
} }
else else
{ {
@ -230,9 +235,13 @@ namespace MWWorld
else else
throw std::runtime_error("Trying to insert object of unhandled type"); throw std::runtime_error("Trying to insert object of unhandled type");
newPtr.getRefData().getPosition() = pos;
newPtr.getRefData().setCount(ptr.getRefData().getCount()); newPtr.getRefData().setCount(ptr.getRefData().getCount());
ptr.getRefData().setCount(0); ptr.getRefData().setCount(0);
newPtr.getRefData().enable(); newPtr.getRefData().enable();
return newPtr;
} }
} }

View file

@ -155,6 +155,8 @@ namespace MWWorld
forEachImp (functor, weapons); forEachImp (functor, weapons);
} }
const MWWorld::Ptr insertObject(const MWWorld::Ptr &ptr, const ESM::Position &pos);
private: private:
template<class Functor, class List> template<class Functor, class List>
@ -172,8 +174,6 @@ namespace MWWorld
void listRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm); void listRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm);
void loadRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm); void loadRefs(const ESMS::ESMStore &store, ESM::ESMReader &esm);
void insertObject(const MWWorld::Ptr &ptr);
}; };
} }

View file

@ -1016,13 +1016,13 @@ namespace MWWorld
else else
cell = getPlayer().getPlayer().getCell(); 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[0] = result.second[0];
pos.pos[1] = -result.second[2]; pos.pos[1] = -result.second[2];
pos.pos[2] = result.second[1]; pos.pos[2] = result.second[1];
cell->insertObject(object); MWWorld::Ptr dropped = cell->insertObject(object, pos);
//TODO mWorldScene->addObjectToScene mWorldScene->addObjectToScene(dropped);
/// \todo retrieve the bounds of the object and translate it accordingly /// \todo retrieve the bounds of the object and translate it accordingly
@ -1044,14 +1044,12 @@ namespace MWWorld
{ {
MWWorld::Ptr::CellStore* cell = getPlayer().getPlayer().getCell(); 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(); MWWorld::Ptr dropped = cell->insertObject(object, pos);
pos.pos[0] = playerPos[0];
pos.pos[1] = playerPos[1];
pos.pos[2] = playerPos[2];
mWorldScene->insertObject(object, cell); mWorldScene->addObjectToScene(dropped);
} }
void World::processChangedSettings(const Settings::CategorySettingVector& settings) void World::processChangedSettings(const Settings::CategorySettingVector& settings)