float* -> Vector3, moveToCell -> copyToCell, fixed placeObject()

actorid
greye 13 years ago
parent b734460dc9
commit 26595f22f6

@ -96,7 +96,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Activator> *ref =
ptr.get<ESM::Activator>(); ptr.get<ESM::Activator>();

@ -9,7 +9,7 @@ namespace MWClass
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -151,7 +151,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Apparatus> *ref =
ptr.get<ESM::Apparatus>(); ptr.get<ESM::Apparatus>();

@ -9,7 +9,7 @@ namespace MWClass
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -278,7 +278,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Armor> *ref =
ptr.get<ESM::Armor>(); ptr.get<ESM::Armor>();

@ -8,7 +8,7 @@ namespace MWClass
class Armor : public MWWorld::Class class Armor : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -158,7 +158,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Book> *ref =
ptr.get<ESM::Book>(); ptr.get<ESM::Book>();

@ -8,7 +8,7 @@ namespace MWClass
class Book : public MWWorld::Class class Book : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -229,7 +229,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Clothing> *ref =
ptr.get<ESM::Clothing>(); ptr.get<ESM::Clothing>();

@ -8,7 +8,7 @@ namespace MWClass
class Clothing : public MWWorld::Class class Clothing : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -209,7 +209,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Container> *ref =
ptr.get<ESM::Container>(); ptr.get<ESM::Container>();

@ -11,7 +11,7 @@ namespace MWClass
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -197,7 +197,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Creature> *ref =
ptr.get<ESM::Creature>(); ptr.get<ESM::Creature>();

@ -12,7 +12,7 @@ namespace MWClass
void ensureCustomData (const MWWorld::Ptr& ptr) const; void ensureCustomData (const MWWorld::Ptr& ptr) const;
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -211,7 +211,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Door> *ref =
ptr.get<ESM::Door>(); ptr.get<ESM::Door>();

@ -8,7 +8,7 @@ namespace MWClass
class Door : public MWWorld::Class class Door : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -158,7 +158,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Ingredient> *ref =
ptr.get<ESM::Ingredient>(); ptr.get<ESM::Ingredient>();

@ -8,7 +8,7 @@ namespace MWClass
class Ingredient : public MWWorld::Class class Ingredient : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -198,7 +198,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Light> *ref =
ptr.get<ESM::Light>(); ptr.get<ESM::Light>();

@ -8,7 +8,7 @@ namespace MWClass
class Light : public MWWorld::Class class Light : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -167,7 +167,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Tool> *ref =
ptr.get<ESM::Tool>(); ptr.get<ESM::Tool>();

@ -8,7 +8,7 @@ namespace MWClass
class Lockpick : public MWWorld::Class class Lockpick : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -186,7 +186,7 @@ namespace MWClass
} }
MWWorld::Ptr 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; MWWorld::Ptr newPtr;

@ -8,7 +8,7 @@ namespace MWClass
class Miscellaneous : public MWWorld::Class class Miscellaneous : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -382,7 +382,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::NPC> *ref =
ptr.get<ESM::NPC>(); ptr.get<ESM::NPC>();

@ -10,7 +10,7 @@ namespace MWClass
void ensureCustomData (const MWWorld::Ptr& ptr) const; void ensureCustomData (const MWWorld::Ptr& ptr) const;
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -162,7 +162,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Potion> *ref =
ptr.get<ESM::Potion>(); ptr.get<ESM::Potion>();

@ -8,7 +8,7 @@ namespace MWClass
class Potion : public MWWorld::Class class Potion : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -166,7 +166,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Probe> *ref =
ptr.get<ESM::Probe>(); ptr.get<ESM::Probe>();

@ -8,7 +8,7 @@ namespace MWClass
class Probe : public MWWorld::Class class Probe : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -148,7 +148,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Repair> *ref =
ptr.get<ESM::Repair>(); ptr.get<ESM::Repair>();

@ -8,7 +8,7 @@ namespace MWClass
class Repair : public MWWorld::Class class Repair : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -55,7 +55,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Static> *ref =
ptr.get<ESM::Static>(); ptr.get<ESM::Static>();

@ -8,7 +8,7 @@ namespace MWClass
class Static : public MWWorld::Class class Static : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -367,7 +367,7 @@ namespace MWClass
} }
MWWorld::Ptr 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 = MWWorld::LiveCellRef<ESM::Weapon> *ref =
ptr.get<ESM::Weapon>(); ptr.get<ESM::Weapon>();

@ -8,7 +8,7 @@ namespace MWClass
class Weapon : public MWWorld::Class class Weapon : public MWWorld::Class
{ {
virtual MWWorld::Ptr virtual MWWorld::Ptr
moveToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const; copyToCellImpl(const MWWorld::Ptr &ptr, MWWorld::CellStore &cell) const;
public: public:

@ -222,27 +222,26 @@ namespace MWWorld
} }
MWWorld::Ptr 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"); throw std::runtime_error("unable to move class to cell");
} }
MWWorld::Ptr 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()); newPtr.getRefData().setCount(ptr.getRefData().getCount());
ptr.getRefData().setCount(0);
newPtr.getRefData().enable(); newPtr.getRefData().enable();
return newPtr; return newPtr;
} }
MWWorld::Ptr 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; newPtr.getRefData().getPosition() = pos;
return newPtr; return newPtr;

@ -57,7 +57,7 @@ namespace MWWorld
Class(); Class();
virtual Ptr moveToCellImpl(const Ptr &ptr, CellStore &cell) const; virtual Ptr copyToCellImpl(const Ptr &ptr, CellStore &cell) const;
public: public:
@ -216,10 +216,10 @@ namespace MWWorld
virtual std::string getModel(const MWWorld::Ptr &ptr) const; virtual std::string getModel(const MWWorld::Ptr &ptr) const;
virtual Ptr virtual Ptr
moveToCell(const Ptr &ptr, CellStore &cell) const; copyToCell(const Ptr &ptr, CellStore &cell) const;
virtual Ptr 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()); 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); std::string model = MWWorld::Class::get(ptr).getModel(ptr);
if (model.empty()) { if (model.empty()) {
return false; return false;
} }
float scale = ptr.getRefData().getBaseNode()->getScale().x; btVector3 btMin, btMax;
mEngine->getObjectAABB(model, scale, min, max); 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; return true;
} }

@ -68,7 +68,7 @@ namespace MWWorld
void setCurrentWater(bool hasWater, int waterHeight); 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: private:
OEngine::Render::OgreRenderer &mRender; OEngine::Render::OgreRenderer &mRender;

@ -334,21 +334,10 @@ namespace MWWorld
void Scene::addObjectToScene (const Ptr& ptr) void Scene::addObjectToScene (const Ptr& ptr)
{ {
mRendering.addObject (ptr); mRendering.addObject(ptr);
MWWorld::Class::get(ptr).insertObject(ptr, *mPhysics);
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);
} }
void Scene::removeObjectFromScene (const Ptr& ptr) void Scene::removeObjectFromScene (const Ptr& ptr)
{ {
MWBase::Environment::get().getMechanicsManager()->removeActor (ptr); MWBase::Environment::get().getMechanicsManager()->removeActor (ptr);
@ -356,4 +345,19 @@ namespace MWWorld
mPhysics->removeObject (ptr.getRefData().getHandle()); mPhysics->removeObject (ptr.getRefData().getHandle());
mRendering.removeObject (ptr); 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); void removeObjectFromScene (const Ptr& ptr);
///< Remove an object from the scene, but not from the world model. ///< 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]; pos.pos[2] = result.second[1];
placeObject(object, *cell, pos); placeObject(object, *cell, pos);
object.getRefData().setCount(0);
return true; return true;
} }
@ -1040,16 +1041,25 @@ namespace MWWorld
void void
World::placeObject(const Ptr &object, CellStore &cell, const ESM::Position &pos) 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::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;
}
mWorldScene->addObjectToScene(dropped); if (mWorldScene->isCellActive(cell)) {
mWorldScene->addObjectToScene(dropped);
std::string script = MWWorld::Class::get(dropped).getScript(dropped); std::string script = MWWorld::Class::get(dropped).getScript(dropped);
if (!script.empty()) { if (!script.empty()) {
mLocalScripts.add(script, dropped); mLocalScripts.add(script, dropped);
}
} }
} }
@ -1071,8 +1081,8 @@ namespace MWWorld
mPhysics->castRay(orig, dir, len); mPhysics->castRay(orig, dir, len);
pos.pos[2] = hit.second.z; pos.pos[2] = hit.second.z;
/// \todo fix item dropping at player object center position
placeObject(object, *cell, pos); placeObject(object, *cell, pos);
object.getRefData().setCount(0);
} }
void World::processChangedSettings(const Settings::CategorySettingVector& settings) void World::processChangedSettings(const Settings::CategorySettingVector& settings)

@ -569,7 +569,7 @@ namespace Physic
return results2; 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]; char uniqueID[8];
sprintf( uniqueID, "%07.3f", scale ); sprintf( uniqueID, "%07.3f", scale );
@ -582,17 +582,8 @@ namespace Physic
BulletShapeManager::getSingleton().getByName(outputstring, "General"); BulletShapeManager::getSingleton().getByName(outputstring, "General");
btTransform trans; btTransform trans;
btVector3 btmin, btmax;
trans.setIdentity(); trans.setIdentity();
shape->Shape->getAabb(trans, btmin, btmax);
min[0] = btmin.x();
min[1] = btmin.y();
min[2] = btmin.z();
max[0] = btmax.x(); shape->Shape->getAabb(trans, min, max);
max[1] = btmax.y();
max[2] = btmax.z();
} }
}}; }};

@ -221,7 +221,7 @@ namespace Physic
bool toggleDebugRendering(); 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). * Return the closest object hit by a ray. If there are no objects, it will return ("",-1).

Loading…
Cancel
Save