forked from mirror/openmw-tes3mp
Merge remote-tracking branch 'chris/misc-cleanup'
This commit is contained in:
commit
bd9884b244
13 changed files with 44 additions and 32 deletions
|
@ -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;
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
{}
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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++)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue