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:
parent
61cb012ee7
commit
71253c64ab
3 changed files with 20 additions and 13 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue