[Client] Use temporary holding interior when changing current cell record

This commit is contained in:
David Cernat 2020-08-06 16:25:12 +02:00
parent 958be0b114
commit 94dc6f422a
3 changed files with 27 additions and 8 deletions

View File

@ -45,6 +45,7 @@
#include "GUIController.hpp"
#include "CellController.hpp"
#include "MechanicsHelper.hpp"
#include "RecordHelper.hpp"
using namespace mwmp;
using namespace std;
@ -162,6 +163,7 @@ void Main::postInit()
const MWBase::Environment &environment = MWBase::Environment::get();
environment.getStateManager()->newGame(true);
MWBase::Environment::get().getMechanicsManager()->toggleAI();
RecordHelper::createPlaceholderInteriorCell();
}
bool Main::isInitialized()

View File

@ -363,16 +363,11 @@ void RecordHelper::overrideRecord(const mwmp::CellRecord& record)
if (isCurrentCell)
{
// As a temporary solution, move the player to exterior 0, 0, but
// fix this once it's possible to override exteriors cells as well
ESM::Position tempPos;
tempPos.pos[0] = 0;
tempPos.pos[1] = 0;
tempPos.pos[2] = 0;
ESM::Position playerPos = playerPtr.getRefData().getPosition();
world->changeToExteriorCell(tempPos, true, true);
// Move the player to a temporary holding cell
world->changeToInteriorCell(getPlaceholderInteriorCellName(), tempPos, true, true);
world->changeToInteriorCell(recordData.mName, playerPos, true, true);
}
}
@ -1462,7 +1457,8 @@ void RecordHelper::overrideRecord(const mwmp::WeaponRecord& record)
world->updatePtrsWithRefId(recordData.mId);
}
void RecordHelper::overrideRecord(const mwmp::SoundRecord& record) {
void RecordHelper::overrideRecord(const mwmp::SoundRecord& record)
{
const ESM::Sound& recordData = record.data;
if (recordData.mId.empty())
@ -1507,3 +1503,19 @@ void RecordHelper::overrideRecord(const mwmp::SoundRecord& record) {
if (isExistingId)
world->updatePtrsWithRefId(recordData.mId);
}
void RecordHelper::createPlaceholderInteriorCell()
{
MWBase::World* world = MWBase::Environment::get().getWorld();
ESM::Cell placeholderInterior;
placeholderInterior.mData.mFlags |= ESM::Cell::Flags::Interior;
placeholderInterior.mName = placeholderInteriorCellName;
world->getModifiableStore().insert(placeholderInterior);
}
const std::string RecordHelper::getPlaceholderInteriorCellName()
{
return placeholderInteriorCellName;
}

View File

@ -55,6 +55,11 @@ namespace RecordHelper
return world->getStore().get<RecordType>().search(id);
}
void createPlaceholderInteriorCell();
const std::string getPlaceholderInteriorCellName();
const std::string placeholderInteriorCellName = "$Transitional Void";
}