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;
///< 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
virtual void drop (const MWWorld::CellStore *cellStore) = 0;

View file

@ -26,13 +26,15 @@ void Activators::removeActivator (const MWWorld::Ptr& ptr)
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())
{
CharacterController ctrl = iter->second;
mActivators.erase(iter);
ctrl.updatePtr(ptr);
mActivators.insert(std::make_pair(ptr, ctrl));
}
}

View file

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

View file

@ -179,13 +179,15 @@ namespace MWMechanics
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())
{
CharacterController ctrl = iter->second;
mActors.erase(iter);
ctrl.updatePtr(ptr);
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.
void updateActorCell(const MWWorld::Ptr& ptr);
///< Updates an actor with a new cell store
void updateActor(const MWWorld::Ptr &old, const MWWorld::Ptr& ptr);
///< Updates an actor with a new Ptr
void dropActors (const MWWorld::CellStore *cellStore);
///< 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)
{
if(evt == "stop")

View file

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

View file

@ -191,12 +191,12 @@ namespace MWMechanics
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())
mActivators.updateActivatorCell(ptr);
mActivators.updateActivator(old, ptr);
else
mActors.updateActorCell(ptr);
mActors.updateActor(old, ptr);
}

View file

@ -48,7 +48,7 @@ namespace MWMechanics
virtual void remove (const MWWorld::Ptr& ptr);
///< 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
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)
: 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)
{}

View file

@ -773,7 +773,7 @@ namespace MWWorld
mRendering->updateObjectCell(ptr, copy);
MWBase::MechanicsManager *mechMgr = MWBase::Environment::get().getMechanicsManager();
mechMgr->updateCell(copy);
mechMgr->updateCell(ptr, copy);
std::string script =
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.
flags |= node->flags;
isCollisionNode = isCollisionNode || (node->recType == Nif::RC_RootCollisionNode);
// Marker objects: no collision
/// \todo don't do this in the editor
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;
cShape->boxRotation = node->boundRot;
mBoundingBox = new btBoxShape(getbtVector(node->boundXYZ));
}
if(node->hasBounds)
{
cShape->boxTranslation = node->boundPos;
cShape->boxRotation = node->boundRot;
mBoundingBox = new btBoxShape(getbtVector(node->boundXYZ));
}
if(node->recType == Nif::RC_NiTriShape && (isCollisionNode || !hasCollisionNode))
{
cShape->mCollide = !(flags&0x800);
handleNiTriShape(static_cast<const Nif::NiTriShape*>(node), flags, node->getWorldTransform(), raycastingOnly);
if(node->recType == Nif::RC_NiTriShape)
{
cShape->mCollide = !(flags&0x800);
handleNiTriShape(static_cast<const Nif::NiTriShape*>(node), flags, node->getWorldTransform(), raycastingOnly);
}
}
// For NiNodes, loop through children
const Nif::NiNode *ninode = dynamic_cast<const Nif::NiNode*>(node);
if(ninode)
{
isCollisionNode = isCollisionNode || (node->recType == Nif::RC_RootCollisionNode);
const Nif::NodeList &list = ninode->children;
for(size_t i = 0;i < list.length();i++)
{

View file

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