mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-21 10:23:56 +00:00
float* -> Vector3, moveToCell -> copyToCell, fixed placeObject()
This commit is contained in:
parent
b734460dc9
commit
26595f22f6
45 changed files with 98 additions and 83 deletions
|
@ -96,7 +96,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Activator::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Activator::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Activator> *ref =
|
||||
ptr.get<ESM::Activator>();
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace MWClass
|
|||
{
|
||||
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -151,7 +151,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Apparatus::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Apparatus::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Apparatus> *ref =
|
||||
ptr.get<ESM::Apparatus>();
|
||||
|
|
|
@ -9,7 +9,7 @@ namespace MWClass
|
|||
{
|
||||
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -278,7 +278,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Armor::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Armor::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Armor> *ref =
|
||||
ptr.get<ESM::Armor>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Armor : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Book::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Book::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Book> *ref =
|
||||
ptr.get<ESM::Book>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Book : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -229,7 +229,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Clothing::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Clothing::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Clothing> *ref =
|
||||
ptr.get<ESM::Clothing>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Clothing : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -209,7 +209,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Container::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Container::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Container> *ref =
|
||||
ptr.get<ESM::Container>();
|
||||
|
|
|
@ -11,7 +11,7 @@ namespace MWClass
|
|||
|
||||
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -197,7 +197,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Creature::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Creature::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Creature> *ref =
|
||||
ptr.get<ESM::Creature>();
|
||||
|
|
|
@ -12,7 +12,7 @@ namespace MWClass
|
|||
void ensureCustomData (const MWWorld::Ptr& ptr) const;
|
||||
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -211,7 +211,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Door::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Door::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Door> *ref =
|
||||
ptr.get<ESM::Door>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Door : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -158,7 +158,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Ingredient::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Ingredient::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Ingredient> *ref =
|
||||
ptr.get<ESM::Ingredient>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Ingredient : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -198,7 +198,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Light::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Light::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Light> *ref =
|
||||
ptr.get<ESM::Light>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Light : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Lockpick::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Lockpick::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Tool> *ref =
|
||||
ptr.get<ESM::Tool>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Lockpick : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -186,7 +186,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Miscellaneous::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Miscellaneous::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::Ptr newPtr;
|
||||
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Miscellaneous : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -382,7 +382,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Npc::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Npc::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::NPC> *ref =
|
||||
ptr.get<ESM::NPC>();
|
||||
|
|
|
@ -10,7 +10,7 @@ namespace MWClass
|
|||
void ensureCustomData (const MWWorld::Ptr& ptr) const;
|
||||
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -162,7 +162,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Potion::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Potion::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Potion> *ref =
|
||||
ptr.get<ESM::Potion>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Potion : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -166,7 +166,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Probe::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Probe::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Probe> *ref =
|
||||
ptr.get<ESM::Probe>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Probe : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -148,7 +148,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Repair::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Repair::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Repair> *ref =
|
||||
ptr.get<ESM::Repair>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Repair : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -55,7 +55,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Static::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Static::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Static> *ref =
|
||||
ptr.get<ESM::Static>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Static : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -367,7 +367,7 @@ namespace MWClass
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Weapon::moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
Weapon::copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const
|
||||
{
|
||||
MWWorld::LiveCellRef<ESM::Weapon> *ref =
|
||||
ptr.get<ESM::Weapon>();
|
||||
|
|
|
@ -8,7 +8,7 @@ namespace MWClass
|
|||
class Weapon : public MWWorld::Class
|
||||
{
|
||||
virtual MWWorld::Ptr
|
||||
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
|
|
@ -222,27 +222,26 @@ namespace MWWorld
|
|||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Class::moveToCellImpl(const Ptr &ptr, CellStore &cell) const
|
||||
Class::copyToCellImpl(const Ptr &ptr, CellStore &cell) const
|
||||
{
|
||||
throw std::runtime_error("unable to move class to cell");
|
||||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Class::moveToCell(const Ptr &ptr, CellStore &cell) const
|
||||
Class::copyToCell(const Ptr &ptr, CellStore &cell) const
|
||||
{
|
||||
Ptr newPtr = moveToCellImpl(ptr, cell);
|
||||
Ptr newPtr = copyToCellImpl(ptr, cell);
|
||||
|
||||
newPtr.getRefData().setCount(ptr.getRefData().getCount());
|
||||
ptr.getRefData().setCount(0);
|
||||
newPtr.getRefData().enable();
|
||||
|
||||
return newPtr;
|
||||
}
|
||||
|
||||
MWWorld::Ptr
|
||||
Class::moveToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const
|
||||
Class::copyToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const
|
||||
{
|
||||
Ptr newPtr = moveToCell(ptr, cell);
|
||||
Ptr newPtr = copyToCell(ptr, cell);
|
||||
newPtr.getRefData().getPosition() = pos;
|
||||
|
||||
return newPtr;
|
||||
|
|
|
@ -57,7 +57,7 @@ namespace MWWorld
|
|||
|
||||
Class();
|
||||
|
||||
virtual Ptr moveToCellImpl(const Ptr &ptr, CellStore &cell) const;
|
||||
virtual Ptr copyToCellImpl(const Ptr &ptr, CellStore &cell) const;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -216,10 +216,10 @@ namespace MWWorld
|
|||
virtual std::string getModel(const MWWorld::Ptr &ptr) const;
|
||||
|
||||
virtual Ptr
|
||||
moveToCell(const Ptr &ptr, CellStore &cell) const;
|
||||
copyToCell(const Ptr &ptr, CellStore &cell) const;
|
||||
|
||||
virtual Ptr
|
||||
moveToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const;
|
||||
copyToCell(const Ptr &ptr, CellStore &cell, const ESM::Position &pos) const;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -382,14 +382,23 @@ namespace MWWorld
|
|||
addActor (node->getName(), model, node->getPosition());
|
||||
}
|
||||
|
||||
bool PhysicsSystem::getObjectAABB(const MWWorld::Ptr &ptr, float *min, float *max)
|
||||
bool PhysicsSystem::getObjectAABB(const MWWorld::Ptr &ptr, Ogre::Vector3 &min, Ogre::Vector3 &max)
|
||||
{
|
||||
std::string model = MWWorld::Class::get(ptr).getModel(ptr);
|
||||
if (model.empty()) {
|
||||
return false;
|
||||
}
|
||||
float scale = ptr.getRefData().getBaseNode()->getScale().x;
|
||||
mEngine->getObjectAABB(model, scale, min, max);
|
||||
btVector3 btMin, btMax;
|
||||
float scale = ptr.getCellRef().scale;
|
||||
mEngine->getObjectAABB(model, scale, btMin, btMax);
|
||||
|
||||
min.x = btMin.x();
|
||||
min.y = btMin.y();
|
||||
min.z = btMin.z();
|
||||
|
||||
max.x = btMax.x();
|
||||
max.y = btMax.y();
|
||||
max.z = btMax.z();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -68,7 +68,7 @@ namespace MWWorld
|
|||
|
||||
void setCurrentWater(bool hasWater, int waterHeight);
|
||||
|
||||
bool getObjectAABB(const MWWorld::Ptr &ptr, float *min, float *max);
|
||||
bool getObjectAABB(const MWWorld::Ptr &ptr, Ogre::Vector3 &min, Ogre::Vector3 &max);
|
||||
|
||||
private:
|
||||
OEngine::Render::OgreRenderer &mRender;
|
||||
|
|
|
@ -335,17 +335,6 @@ namespace MWWorld
|
|||
void Scene::addObjectToScene (const Ptr& ptr)
|
||||
{
|
||||
mRendering.addObject(ptr);
|
||||
|
||||
float *pos = ptr.getRefData().getPosition().pos;
|
||||
float min[3], max[3];
|
||||
if (mPhysics->getObjectAABB(ptr, min, max)) {
|
||||
pos[0] -= (min[0] + max[0]) / 2;
|
||||
pos[1] -= (min[1] + max[1]) / 2;
|
||||
pos[2] -= min[2];
|
||||
}
|
||||
|
||||
ptr.getRefData().getBaseNode()->setPosition(pos[0], pos[1], pos[2]);
|
||||
|
||||
MWWorld::Class::get(ptr).insertObject(ptr, *mPhysics);
|
||||
}
|
||||
|
||||
|
@ -356,4 +345,19 @@ namespace MWWorld
|
|||
mPhysics->removeObject (ptr.getRefData().getHandle());
|
||||
mRendering.removeObject (ptr);
|
||||
}
|
||||
|
||||
bool Scene::isCellActive(const CellStore &cell)
|
||||
{
|
||||
CellStoreCollection::iterator active = mActiveCells.begin();
|
||||
while (active != mActiveCells.end()) {
|
||||
if ((*active)->cell->name == cell.cell->name &&
|
||||
(*active)->cell->data.gridX == cell.cell->data.gridX &&
|
||||
(*active)->cell->data.gridY == cell.cell->data.gridY)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
++active;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -95,6 +95,8 @@ namespace MWWorld
|
|||
|
||||
void removeObjectFromScene (const Ptr& ptr);
|
||||
///< Remove an object from the scene, but not from the world model.
|
||||
|
||||
bool isCellActive(const CellStore &cell);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
@ -1022,6 +1022,7 @@ namespace MWWorld
|
|||
pos.pos[2] = result.second[1];
|
||||
|
||||
placeObject(object, *cell, pos);
|
||||
object.getRefData().setCount(0);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1040,11 +1041,19 @@ namespace MWWorld
|
|||
void
|
||||
World::placeObject(const Ptr &object, CellStore &cell, const ESM::Position &pos)
|
||||
{
|
||||
mLocalScripts.remove(object);
|
||||
|
||||
/// \todo add searching correct cell for position specified
|
||||
MWWorld::Ptr dropped =
|
||||
MWWorld::Class::get(object).moveToCell(object, cell, pos);
|
||||
MWWorld::Class::get(object).copyToCell(object, cell, pos);
|
||||
|
||||
Ogre::Vector3 min, max;
|
||||
if (mPhysics->getObjectAABB(object, min, max)) {
|
||||
float *pos = dropped.getRefData().getPosition().pos;
|
||||
pos[0] -= (min.x + max.x) / 2;
|
||||
pos[1] -= (min.y + max.y) / 2;
|
||||
pos[2] -= min.z;
|
||||
}
|
||||
|
||||
if (mWorldScene->isCellActive(cell)) {
|
||||
mWorldScene->addObjectToScene(dropped);
|
||||
|
||||
std::string script = MWWorld::Class::get(dropped).getScript(dropped);
|
||||
|
@ -1052,6 +1061,7 @@ namespace MWWorld
|
|||
mLocalScripts.add(script, dropped);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void World::dropObjectOnGround (const Ptr& object)
|
||||
{
|
||||
|
@ -1071,8 +1081,8 @@ namespace MWWorld
|
|||
mPhysics->castRay(orig, dir, len);
|
||||
pos.pos[2] = hit.second.z;
|
||||
|
||||
/// \todo fix item dropping at player object center position
|
||||
placeObject(object, *cell, pos);
|
||||
object.getRefData().setCount(0);
|
||||
}
|
||||
|
||||
void World::processChangedSettings(const Settings::CategorySettingVector& settings)
|
||||
|
|
|
@ -569,7 +569,7 @@ namespace Physic
|
|||
return results2;
|
||||
}
|
||||
|
||||
void PhysicEngine::getObjectAABB(const std::string &mesh, float scale, float *min, float *max)
|
||||
void PhysicEngine::getObjectAABB(const std::string &mesh, float scale, btVector3 &min, btVector3 &max)
|
||||
{
|
||||
char uniqueID[8];
|
||||
sprintf( uniqueID, "%07.3f", scale );
|
||||
|
@ -582,17 +582,8 @@ namespace Physic
|
|||
BulletShapeManager::getSingleton().getByName(outputstring, "General");
|
||||
|
||||
btTransform trans;
|
||||
btVector3 btmin, btmax;
|
||||
|
||||
trans.setIdentity();
|
||||
shape->Shape->getAabb(trans, btmin, btmax);
|
||||
|
||||
min[0] = btmin.x();
|
||||
min[1] = btmin.y();
|
||||
min[2] = btmin.z();
|
||||
|
||||
max[0] = btmax.x();
|
||||
max[1] = btmax.y();
|
||||
max[2] = btmax.z();
|
||||
shape->Shape->getAabb(trans, min, max);
|
||||
}
|
||||
}};
|
||||
|
|
|
@ -221,7 +221,7 @@ namespace Physic
|
|||
|
||||
bool toggleDebugRendering();
|
||||
|
||||
void getObjectAABB(const std::string &mesh, float scale, float *min, float *max);
|
||||
void getObjectAABB(const std::string &mesh, float scale, btVector3 &min, btVector3 &max);
|
||||
|
||||
/**
|
||||
* Return the closest object hit by a ray. If there are no objects, it will return ("",-1).
|
||||
|
|
Loading…
Reference in a new issue