forked from mirror/openmw-tes3mp
moved script handling on enable / disable into their own functions
This commit is contained in:
parent
28c580d280
commit
23dada0ee4
2 changed files with 46 additions and 33 deletions
|
@ -401,57 +401,67 @@ namespace MWWorld
|
||||||
return MWWorld::Ptr();
|
return MWWorld::Ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::addContainerScripts(const Ptr& reference, Ptr::CellStore * cell)
|
||||||
|
{
|
||||||
|
if( reference.getTypeName()==typeid (ESM::Container).name() ||
|
||||||
|
reference.getTypeName()==typeid (ESM::NPC).name() ||
|
||||||
|
reference.getTypeName()==typeid (ESM::Creature).name())
|
||||||
|
{
|
||||||
|
MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference);
|
||||||
|
for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string script = MWWorld::Class::get(*it).getScript(*it);
|
||||||
|
if(script != "")
|
||||||
|
{
|
||||||
|
MWWorld::Ptr item = *it;
|
||||||
|
item.mCell = cell;
|
||||||
|
mLocalScripts.add (script, item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void World::enable (const Ptr& reference)
|
void World::enable (const Ptr& reference)
|
||||||
{
|
{
|
||||||
if (!reference.getRefData().isEnabled())
|
if (!reference.getRefData().isEnabled())
|
||||||
{
|
{
|
||||||
reference.getRefData().enable();
|
reference.getRefData().enable();
|
||||||
|
|
||||||
/* run scripts on container contents */
|
addContainerScripts(reference, reference.getCell());
|
||||||
if( reference.getTypeName()==typeid (ESM::Container).name() ||
|
|
||||||
reference.getTypeName()==typeid (ESM::NPC).name() ||
|
|
||||||
reference.getTypeName()==typeid (ESM::Creature).name())
|
|
||||||
{
|
|
||||||
MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference);
|
|
||||||
for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it)
|
|
||||||
{
|
|
||||||
std::string script = MWWorld::Class::get(*it).getScript(*it);
|
|
||||||
if(script != "")
|
|
||||||
{
|
|
||||||
MWWorld::Ptr item = *it;
|
|
||||||
item.mCell = reference.getCell();
|
|
||||||
mLocalScripts.add (script, item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount())
|
if(mWorldScene->getActiveCells().find (reference.getCell()) != mWorldScene->getActiveCells().end() && reference.getRefData().getCount())
|
||||||
mWorldScene->addObjectToScene (reference);
|
mWorldScene->addObjectToScene (reference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void World::removeContainerScripts(const Ptr& reference)
|
||||||
|
{
|
||||||
|
if( reference.getTypeName()==typeid (ESM::Container).name() ||
|
||||||
|
reference.getTypeName()==typeid (ESM::NPC).name() ||
|
||||||
|
reference.getTypeName()==typeid (ESM::Creature).name())
|
||||||
|
{
|
||||||
|
MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference);
|
||||||
|
for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it)
|
||||||
|
{
|
||||||
|
std::string script = MWWorld::Class::get(*it).getScript(*it);
|
||||||
|
if(script != "")
|
||||||
|
{
|
||||||
|
MWWorld::Ptr item = *it;
|
||||||
|
mLocalScripts.remove (item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void World::disable (const Ptr& reference)
|
void World::disable (const Ptr& reference)
|
||||||
{
|
{
|
||||||
if (reference.getRefData().isEnabled())
|
if (reference.getRefData().isEnabled())
|
||||||
{
|
{
|
||||||
reference.getRefData().disable();
|
reference.getRefData().disable();
|
||||||
|
|
||||||
/* remove scripts on container contents */
|
removeContainerScripts(reference);
|
||||||
if( reference.getTypeName()==typeid (ESM::Container).name() ||
|
if(MWWorld::Class::get(reference).getScript(reference) != "")
|
||||||
reference.getTypeName()==typeid (ESM::NPC).name() ||
|
mLocalScripts.remove(reference);
|
||||||
reference.getTypeName()==typeid (ESM::Creature).name())
|
|
||||||
{
|
|
||||||
MWWorld::ContainerStore& container = MWWorld::Class::get(reference).getContainerStore(reference);
|
|
||||||
for(MWWorld::ContainerStoreIterator it = container.begin(); it != container.end(); ++it)
|
|
||||||
{
|
|
||||||
std::string script = MWWorld::Class::get(*it).getScript(*it);
|
|
||||||
if(script != "")
|
|
||||||
{
|
|
||||||
MWWorld::Ptr item = *it;
|
|
||||||
mLocalScripts.remove (item);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(mWorldScene->getActiveCells().find (reference.getCell())!=mWorldScene->getActiveCells().end() && reference.getRefData().getCount())
|
if(mWorldScene->getActiveCells().find (reference.getCell())!=mWorldScene->getActiveCells().end() && reference.getRefData().getCount())
|
||||||
mWorldScene->removeObjectFromScene (reference);
|
mWorldScene->removeObjectFromScene (reference);
|
||||||
|
|
|
@ -105,6 +105,9 @@ namespace MWWorld
|
||||||
float getNpcActivationDistance ();
|
float getNpcActivationDistance ();
|
||||||
float getObjectActivationDistance ();
|
float getObjectActivationDistance ();
|
||||||
|
|
||||||
|
void removeContainerScripts(const Ptr& reference);
|
||||||
|
void addContainerScripts(const Ptr& reference, Ptr::CellStore* cell);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
World (OEngine::Render::OgreRenderer& renderer,
|
World (OEngine::Render::OgreRenderer& renderer,
|
||||||
|
|
Loading…
Reference in a new issue