mirror of
https://github.com/OpenMW/openmw.git
synced 2025-01-31 00:45:36 +00:00
Store camera first person state in savegame (Fixes #2255)
This commit is contained in:
parent
992b87ea44
commit
e19ab77d00
3 changed files with 18 additions and 2 deletions
|
@ -355,6 +355,7 @@ void MWState::StateManager::loadGame (const Character *character, const Slot *sl
|
||||||
case ESM::REC_ENAB:
|
case ESM::REC_ENAB:
|
||||||
case ESM::REC_LEVC:
|
case ESM::REC_LEVC:
|
||||||
case ESM::REC_LEVI:
|
case ESM::REC_LEVI:
|
||||||
|
case ESM::REC_CAM_:
|
||||||
|
|
||||||
MWBase::Environment::get().getWorld()->readRecord (reader, n.val, contentFileMap);
|
MWBase::Environment::get().getWorld()->readRecord (reader, n.val, contentFileMap);
|
||||||
break;
|
break;
|
||||||
|
@ -406,6 +407,8 @@ void MWState::StateManager::loadGame (const Character *character, const Slot *sl
|
||||||
// Use detectWorldSpaceChange=false, otherwise some of the data we just loaded would be cleared again
|
// Use detectWorldSpaceChange=false, otherwise some of the data we just loaded would be cleared again
|
||||||
MWBase::Environment::get().getWorld()->changeToCell (cellId, ptr.getRefData().getPosition(), false);
|
MWBase::Environment::get().getWorld()->changeToCell (cellId, ptr.getRefData().getPosition(), false);
|
||||||
|
|
||||||
|
// Vanilla MW will restart startup scripts when a save game is loaded. This is unintuive,
|
||||||
|
// but some mods may be using it as a reload detector.
|
||||||
MWBase::Environment::get().getScriptManager()->getGlobalScripts().addStartup();
|
MWBase::Environment::get().getScriptManager()->getGlobalScripts().addStartup();
|
||||||
|
|
||||||
// Do not trigger erroneous cellChanged events
|
// Do not trigger erroneous cellChanged events
|
||||||
|
|
|
@ -201,6 +201,7 @@ namespace MWWorld
|
||||||
setupPlayer();
|
setupPlayer();
|
||||||
|
|
||||||
renderPlayer();
|
renderPlayer();
|
||||||
|
mRendering->resetCamera();
|
||||||
|
|
||||||
MWBase::Environment::get().getWindowManager()->updatePlayer();
|
MWBase::Environment::get().getWindowManager()->updatePlayer();
|
||||||
|
|
||||||
|
@ -304,7 +305,8 @@ namespace MWWorld
|
||||||
+1 // player record
|
+1 // player record
|
||||||
+1 // weather record
|
+1 // weather record
|
||||||
+1 // actorId counter
|
+1 // actorId counter
|
||||||
+1; // levitation/teleport enabled state
|
+1 // levitation/teleport enabled state
|
||||||
|
+1; // camera
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::write (ESM::ESMWriter& writer, Loading::Listener& progress) const
|
void World::write (ESM::ESMWriter& writer, Loading::Listener& progress) const
|
||||||
|
@ -333,6 +335,11 @@ namespace MWWorld
|
||||||
writer.writeHNT("LEVT", mLevitationEnabled);
|
writer.writeHNT("LEVT", mLevitationEnabled);
|
||||||
writer.endRecord(ESM::REC_ENAB);
|
writer.endRecord(ESM::REC_ENAB);
|
||||||
progress.increaseProgress();
|
progress.increaseProgress();
|
||||||
|
|
||||||
|
writer.startRecord(ESM::REC_CAM_);
|
||||||
|
writer.writeHNT("FIRS", isFirstPerson());
|
||||||
|
writer.endRecord(ESM::REC_CAM_);
|
||||||
|
progress.increaseProgress();
|
||||||
}
|
}
|
||||||
|
|
||||||
void World::readRecord (ESM::ESMReader& reader, int32_t type,
|
void World::readRecord (ESM::ESMReader& reader, int32_t type,
|
||||||
|
@ -347,6 +354,12 @@ namespace MWWorld
|
||||||
reader.getHNT(mTeleportEnabled, "TELE");
|
reader.getHNT(mTeleportEnabled, "TELE");
|
||||||
reader.getHNT(mLevitationEnabled, "LEVT");
|
reader.getHNT(mLevitationEnabled, "LEVT");
|
||||||
return;
|
return;
|
||||||
|
case ESM::REC_CAM_:
|
||||||
|
bool firstperson;
|
||||||
|
reader.getHNT(firstperson, "FIRS");
|
||||||
|
if (firstperson != isFirstPerson())
|
||||||
|
togglePOV();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
if (!mStore.readRecord (reader, type) &&
|
if (!mStore.readRecord (reader, type) &&
|
||||||
!mGlobalVariables.readRecord (reader, type) &&
|
!mGlobalVariables.readRecord (reader, type) &&
|
||||||
|
@ -2073,7 +2086,6 @@ namespace MWWorld
|
||||||
MWBase::Environment::get().getMechanicsManager()->add(mPlayer->getPlayer());
|
MWBase::Environment::get().getMechanicsManager()->add(mPlayer->getPlayer());
|
||||||
|
|
||||||
mPhysics->addActor(mPlayer->getPlayer());
|
mPhysics->addActor(mPlayer->getPlayer());
|
||||||
mRendering->resetCamera();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int World::canRest ()
|
int World::canRest ()
|
||||||
|
|
|
@ -114,6 +114,7 @@ enum RecNameInts
|
||||||
REC_DCOU = FourCC<'D','C','O','U'>::value,
|
REC_DCOU = FourCC<'D','C','O','U'>::value,
|
||||||
REC_MARK = FourCC<'M','A','R','K'>::value,
|
REC_MARK = FourCC<'M','A','R','K'>::value,
|
||||||
REC_ENAB = FourCC<'E','N','A','B'>::value,
|
REC_ENAB = FourCC<'E','N','A','B'>::value,
|
||||||
|
REC_CAM_ = FourCC<'C','A','M','_'>::value,
|
||||||
|
|
||||||
// format 1
|
// format 1
|
||||||
REC_FILT = 0x544C4946,
|
REC_FILT = 0x544C4946,
|
||||||
|
|
Loading…
Reference in a new issue