1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-24 07:11:34 +00:00

Merge remote-tracking branch 'chris/misc-cleanup'

This commit is contained in:
Marc Zinnschlag 2013-02-25 19:45:09 +01:00
commit bd9884b244
13 changed files with 44 additions and 32 deletions

View file

@ -43,7 +43,7 @@ namespace MWBase
virtual void remove (const MWWorld::Ptr& ptr) = 0; virtual void remove (const MWWorld::Ptr& ptr) = 0;
///< Deregister an object for management ///< Deregister an object for management
virtual void updateCell(const MWWorld::Ptr &ptr) = 0; virtual void updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr) = 0;
///< Moves an object to a new cell ///< Moves an object to a new cell
virtual void drop (const MWWorld::CellStore *cellStore) = 0; virtual void drop (const MWWorld::CellStore *cellStore) = 0;

View file

@ -26,13 +26,15 @@ void Activators::removeActivator (const MWWorld::Ptr& ptr)
mActivators.erase(iter); mActivators.erase(iter);
} }
void Activators::updateActivatorCell(const MWWorld::Ptr &ptr) void Activators::updateActivator(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
{ {
PtrControllerMap::iterator iter = mActivators.find(ptr); PtrControllerMap::iterator iter = mActivators.find(old);
if(iter != mActivators.end()) if(iter != mActivators.end())
{ {
CharacterController ctrl = iter->second; CharacterController ctrl = iter->second;
mActivators.erase(iter); mActivators.erase(iter);
ctrl.updatePtr(ptr);
mActivators.insert(std::make_pair(ptr, ctrl)); mActivators.insert(std::make_pair(ptr, ctrl));
} }
} }

View file

@ -28,8 +28,8 @@ namespace MWMechanics
void removeActivator (const MWWorld::Ptr& ptr); void removeActivator (const MWWorld::Ptr& ptr);
///< Deregister an activator ///< Deregister an activator
void updateActivatorCell(const MWWorld::Ptr& ptr); void updateActivator(const MWWorld::Ptr &old, const MWWorld::Ptr& ptr);
///< Updates an activator with a new cell store ///< Updates an activator with a new Ptr
void dropActivators (const MWWorld::CellStore *cellStore); void dropActivators (const MWWorld::CellStore *cellStore);
///< Deregister all activators in the given cell. ///< Deregister all activators in the given cell.

View file

@ -179,13 +179,15 @@ namespace MWMechanics
mActors.erase(iter); mActors.erase(iter);
} }
void Actors::updateActorCell(const MWWorld::Ptr &ptr) void Actors::updateActor(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
{ {
PtrControllerMap::iterator iter = mActors.find(ptr); PtrControllerMap::iterator iter = mActors.find(old);
if(iter != mActors.end()) if(iter != mActors.end())
{ {
CharacterController ctrl = iter->second; CharacterController ctrl = iter->second;
mActors.erase(iter); mActors.erase(iter);
ctrl.updatePtr(ptr);
mActors.insert(std::make_pair(ptr, ctrl)); mActors.insert(std::make_pair(ptr, ctrl));
} }
} }

View file

@ -58,8 +58,8 @@ namespace MWMechanics
/// ///
/// \note Ignored, if \a ptr is not a registered actor. /// \note Ignored, if \a ptr is not a registered actor.
void updateActorCell(const MWWorld::Ptr& ptr); void updateActor(const MWWorld::Ptr &old, const MWWorld::Ptr& ptr);
///< Updates an actor with a new cell store ///< Updates an actor with a new Ptr
void dropActors (const MWWorld::CellStore *cellStore); void dropActors (const MWWorld::CellStore *cellStore);
///< Deregister all actors in the given cell. ///< Deregister all actors in the given cell.

View file

@ -131,6 +131,12 @@ CharacterController::~CharacterController()
} }
void CharacterController::updatePtr(const MWWorld::Ptr &ptr)
{
mPtr = ptr;
}
void CharacterController::markerEvent(float time, const std::string &evt) void CharacterController::markerEvent(float time, const std::string &evt)
{ {
if(evt == "stop") if(evt == "stop")

View file

@ -79,6 +79,8 @@ public:
CharacterController(const CharacterController &rhs); CharacterController(const CharacterController &rhs);
virtual ~CharacterController(); virtual ~CharacterController();
void updatePtr(const MWWorld::Ptr &ptr);
Ogre::Vector3 update(float duration); Ogre::Vector3 update(float duration);
void playGroup(const std::string &groupname, int mode, int count); void playGroup(const std::string &groupname, int mode, int count);

View file

@ -191,12 +191,12 @@ namespace MWMechanics
mActivators.removeActivator(ptr); mActivators.removeActivator(ptr);
} }
void MechanicsManager::updateCell(const MWWorld::Ptr &ptr) void MechanicsManager::updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr)
{ {
if(ptr.getTypeName() == typeid(ESM::Activator).name()) if(ptr.getTypeName() == typeid(ESM::Activator).name())
mActivators.updateActivatorCell(ptr); mActivators.updateActivator(old, ptr);
else else
mActors.updateActorCell(ptr); mActors.updateActor(old, ptr);
} }

View file

@ -48,7 +48,7 @@ namespace MWMechanics
virtual void remove (const MWWorld::Ptr& ptr); virtual void remove (const MWWorld::Ptr& ptr);
///< Deregister an object for management ///< Deregister an object for management
virtual void updateCell(const MWWorld::Ptr &ptr); virtual void updateCell(const MWWorld::Ptr &old, const MWWorld::Ptr &ptr);
///< Moves an object to a new cell ///< Moves an object to a new cell
virtual void drop(const MWWorld::CellStore *cellStore); virtual void drop(const MWWorld::CellStore *cellStore);

View file

@ -86,7 +86,7 @@ MWWorld::Ptr MWWorld::Cells::getPtrAndCache (const std::string& name, Ptr::CellS
MWWorld::Cells::Cells (const MWWorld::ESMStore& store, std::vector<ESM::ESMReader>& reader) MWWorld::Cells::Cells (const MWWorld::ESMStore& store, std::vector<ESM::ESMReader>& reader)
: mStore (store), mReader (reader), : mStore (store), mReader (reader),
mIdCache (20, std::pair<std::string, Ptr::CellStore *> ("", (Ptr::CellStore*)0)), /// \todo make cache size configurable mIdCache (40, std::pair<std::string, Ptr::CellStore *> ("", (Ptr::CellStore*)0)), /// \todo make cache size configurable
mIdCacheIndex (0) mIdCacheIndex (0)
{} {}

View file

@ -773,7 +773,7 @@ namespace MWWorld
mRendering->updateObjectCell(ptr, copy); mRendering->updateObjectCell(ptr, copy);
MWBase::MechanicsManager *mechMgr = MWBase::Environment::get().getMechanicsManager(); MWBase::MechanicsManager *mechMgr = MWBase::Environment::get().getMechanicsManager();
mechMgr->updateCell(copy); mechMgr->updateCell(ptr, copy);
std::string script = std::string script =
MWWorld::Class::get(ptr).getScript(ptr); MWWorld::Class::get(ptr).getScript(ptr);

View file

@ -155,6 +155,8 @@ void ManualBulletShapeLoader::handleNode(const Nif::Node *node, int flags,
// the flags we currently use, at least. // the flags we currently use, at least.
flags |= node->flags; flags |= node->flags;
isCollisionNode = isCollisionNode || (node->recType == Nif::RC_RootCollisionNode);
// Marker objects: no collision // Marker objects: no collision
/// \todo don't do this in the editor /// \todo don't do this in the editor
if (node->name.find("marker") != std::string::npos) if (node->name.find("marker") != std::string::npos)
@ -191,25 +193,26 @@ void ManualBulletShapeLoader::handleNode(const Nif::Node *node, int flags,
} }
} }
if(node->hasBounds) if(!hasCollisionNode || isCollisionNode)
{ {
cShape->boxTranslation = node->boundPos; if(node->hasBounds)
cShape->boxRotation = node->boundRot; {
mBoundingBox = new btBoxShape(getbtVector(node->boundXYZ)); cShape->boxTranslation = node->boundPos;
} cShape->boxRotation = node->boundRot;
mBoundingBox = new btBoxShape(getbtVector(node->boundXYZ));
}
if(node->recType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode)) if(node->recType == Nif::RC_NiTriShape)
{ {
cShape->mCollide = !(flags&0x800); cShape->mCollide = !(flags&0x800);
handleNiTriShape(static_cast<const Nif::NiTriShape*>(node), flags, node->getWorldTransform(), raycastingOnly); handleNiTriShape(static_cast<const Nif::NiTriShape*>(node), flags, node->getWorldTransform(), raycastingOnly);
}
} }
// For NiNodes, loop through children // For NiNodes, loop through children
const Nif::NiNode *ninode = dynamic_cast<const Nif::NiNode*>(node); const Nif::NiNode *ninode = dynamic_cast<const Nif::NiNode*>(node);
if(ninode) if(ninode)
{ {
isCollisionNode = isCollisionNode || (node->recType == Nif::RC_RootCollisionNode);
const Nif::NodeList &list = ninode->children; const Nif::NodeList &list = ninode->children;
for(size_t i = 0;i < list.length();i++) for(size_t i = 0;i < list.length();i++)
{ {

View file

@ -763,7 +763,6 @@ class NIFMeshLoader : Ogre::ManualResourceLoader
std::string mGroup; std::string mGroup;
size_t mShapeIndex; size_t mShapeIndex;
std::string mMaterialName; std::string mMaterialName;
std::string mShapeName;
void warn(const std::string &msg) void warn(const std::string &msg)
{ {
@ -872,8 +871,7 @@ class NIFMeshLoader : Ogre::ManualResourceLoader
Ogre::VertexDeclaration *decl; Ogre::VertexDeclaration *decl;
int nextBuf = 0; int nextBuf = 0;
Ogre::SubMesh *sub = ((mShapeName.length() > 0) ? mesh->createSubMesh(mShapeName) : Ogre::SubMesh *sub = mesh->createSubMesh();
mesh->createSubMesh());
// Add vertices // Add vertices
sub->useSharedVertices = false; sub->useSharedVertices = false;
@ -1061,12 +1059,11 @@ public:
if(node->recType == Nif::RC_NiTriShape && !(flags&0x01)) // Not hidden if(node->recType == Nif::RC_NiTriShape && !(flags&0x01)) // Not hidden
{ {
const Nif::NiTriShape *shape = dynamic_cast<const Nif::NiTriShape*>(node); const Nif::NiTriShape *shape = dynamic_cast<const Nif::NiTriShape*>(node);
mShapeName = shape->name;
Ogre::MeshManager &meshMgr = Ogre::MeshManager::getSingleton(); Ogre::MeshManager &meshMgr = Ogre::MeshManager::getSingleton();
std::string fullname = mName+"@index="+Ogre::StringConverter::toString(shape->recIndex); std::string fullname = mName+"@index="+Ogre::StringConverter::toString(shape->recIndex);
if(mShapeName.length() > 0) if(shape->name.length() > 0)
fullname += "@shape="+mShapeName; fullname += "@shape="+shape->name;
Misc::StringUtils::toLower(fullname); Misc::StringUtils::toLower(fullname);
Ogre::MeshPtr mesh = meshMgr.getByName(fullname); Ogre::MeshPtr mesh = meshMgr.getByName(fullname);