1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-02-10 03:39:55 +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 "../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<ESM::Miscellaneous>();
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;
}
}

View File

@ -155,6 +155,8 @@ namespace MWWorld
forEachImp (functor, weapons);
}
const MWWorld::Ptr insertObject(const MWWorld::Ptr &ptr, const ESM::Position &pos);
private:
template<class Functor, class List>
@ -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);
};
}

View File

@ -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)