forked from teamnwah/openmw-tes3coop
[Client] Enable AI for LocalActors
This commit is contained in:
parent
0d766a7a04
commit
d4a12856ee
6 changed files with 46 additions and 1 deletions
|
@ -1131,7 +1131,18 @@ namespace MWMechanics
|
|||
return; // for now abort update of the old cell when cell changes by teleportation magic effect
|
||||
// a better solution might be to apply cell changes at the end of the frame
|
||||
}
|
||||
if (MWBase::Environment::get().getMechanicsManager()->isAIActive() && inProcessingRange)
|
||||
/*
|
||||
Start of tes3mp change (major)
|
||||
|
||||
Allow AI processing when LiveCellRefBase's isLocalActor set to true
|
||||
*/
|
||||
//if (MWBase::Environment::get().getMechanicsManager()->isAIActive() && inProcessingRange)
|
||||
|
||||
if ((MWBase::Environment::get().getMechanicsManager()->isAIActive() || actor.getBase()->isLocalActor)
|
||||
&& inProcessingRange)
|
||||
/*
|
||||
End of tes3mp change (major)
|
||||
*/
|
||||
{
|
||||
if (timerUpdateAITargets == 0)
|
||||
{
|
||||
|
|
|
@ -54,11 +54,23 @@ void Cell::initializeLocalActors()
|
|||
std::string mapIndex = generateMapIndex(ptr);
|
||||
localActors[mapIndex] = new LocalActor();
|
||||
localActors[mapIndex]->cell = esmCell;
|
||||
ptr.getBase()->isLocalActor = true;
|
||||
localActors[mapIndex]->setPtr(ptr);
|
||||
LOG_APPEND(Log::LOG_INFO, "- Initialized LocalActor %s", mapIndex.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
void Cell::uninitializeLocalActors()
|
||||
{
|
||||
for (std::map<std::string, LocalActor *>::iterator it = localActors.begin(); it != localActors.end(); ++it)
|
||||
{
|
||||
LocalActor *actor = it->second;
|
||||
actor->getPtr().getBase()->isLocalActor = false;
|
||||
}
|
||||
|
||||
localActors.clear();
|
||||
}
|
||||
|
||||
std::string Cell::generateMapIndex(MWWorld::Ptr ptr)
|
||||
{
|
||||
std::string mapIndex = "";
|
||||
|
|
|
@ -16,6 +16,7 @@ namespace mwmp
|
|||
|
||||
void update();
|
||||
void initializeLocalActors();
|
||||
void uninitializeLocalActors();
|
||||
|
||||
std::string generateMapIndex(MWWorld::Ptr ptr);
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ void CellController::update()
|
|||
|
||||
if (!MWBase::Environment::get().getWorld()->isCellActive(mpCell->getCellStore()))
|
||||
{
|
||||
mpCell->uninitializeLocalActors();
|
||||
it = cellsActive.erase(it);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -14,7 +14,16 @@
|
|||
MWWorld::LiveCellRefBase::LiveCellRefBase(const std::string& type, const ESM::CellRef &cref)
|
||||
: mClass(&Class::get(type)), mRef(cref), mData(cref)
|
||||
{
|
||||
/*
|
||||
Start of tes3mp addition
|
||||
|
||||
Set default values for tes3mp-only booleans
|
||||
*/
|
||||
canChangeCell = true;
|
||||
isLocalActor = false;
|
||||
/*
|
||||
End of tes3mp addition
|
||||
*/
|
||||
}
|
||||
|
||||
void MWWorld::LiveCellRefBase::loadImp (const ESM::ObjectState& state)
|
||||
|
|
|
@ -38,6 +38,17 @@ namespace MWWorld
|
|||
End of tes3mp addition
|
||||
*/
|
||||
|
||||
/*
|
||||
Start of tes3mp addition
|
||||
|
||||
Useful boolean for quickly establishing which creatures and NPCs should be
|
||||
processed locally by the player
|
||||
*/
|
||||
bool isLocalActor;
|
||||
/*
|
||||
End of tes3mp addition
|
||||
*/
|
||||
|
||||
/** runtime-data */
|
||||
RefData mData;
|
||||
|
||||
|
|
Loading…
Reference in a new issue