forked from teamnwah/openmw-tes3coop
Merge pull request #1597
This commit is contained in:
commit
9e9c278527
6 changed files with 105 additions and 11 deletions
|
@ -89,7 +89,7 @@ add_openmw_dir (mwmechanics
|
|||
)
|
||||
|
||||
add_openmw_dir (mwstate
|
||||
statemanagerimp charactermanager character
|
||||
statemanagerimp charactermanager character quicksavemanager
|
||||
)
|
||||
|
||||
add_openmw_dir (mwbase
|
||||
|
@ -222,4 +222,3 @@ endif (MSVC)
|
|||
if (WIN32)
|
||||
INSTALL(TARGETS openmw RUNTIME DESTINATION ".")
|
||||
endif (WIN32)
|
||||
|
||||
|
|
38
apps/openmw/mwstate/quicksavemanager.cpp
Normal file
38
apps/openmw/mwstate/quicksavemanager.cpp
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include "quicksavemanager.hpp"
|
||||
|
||||
MWState::QuickSaveManager::QuickSaveManager(std::string &saveName, unsigned int maxSaves)
|
||||
{
|
||||
this->mSaveName = saveName;
|
||||
this->mMaxSaves = maxSaves;
|
||||
this->mOldestSlotVisited = NULL;
|
||||
this->mSlotsVisited = 0;
|
||||
}
|
||||
|
||||
void MWState::QuickSaveManager::visitSave(const Slot *saveSlot)
|
||||
{
|
||||
if(mSaveName == saveSlot->mProfile.mDescription)
|
||||
{
|
||||
++mSlotsVisited;
|
||||
if(isOldestSave(saveSlot))
|
||||
mOldestSlotVisited = saveSlot;
|
||||
}
|
||||
}
|
||||
|
||||
bool MWState::QuickSaveManager::isOldestSave(const Slot *compare)
|
||||
{
|
||||
if(mOldestSlotVisited == NULL)
|
||||
return true;
|
||||
return (compare->mTimeStamp <= mOldestSlotVisited->mTimeStamp);
|
||||
}
|
||||
|
||||
bool MWState::QuickSaveManager::shouldCreateNewSlot()
|
||||
{
|
||||
return (mSlotsVisited < mMaxSaves);
|
||||
}
|
||||
|
||||
const MWState::Slot *MWState::QuickSaveManager::getNextQuickSaveSlot()
|
||||
{
|
||||
if(shouldCreateNewSlot())
|
||||
return NULL;
|
||||
return mOldestSlotVisited;
|
||||
}
|
35
apps/openmw/mwstate/quicksavemanager.hpp
Normal file
35
apps/openmw/mwstate/quicksavemanager.hpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
#ifndef GAME_STATE_QUICKSAVEMANAGER_H
|
||||
#define GAME_STATE_QUICKSAVEMANAGER_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "character.hpp"
|
||||
#include "../mwbase/statemanager.hpp"
|
||||
|
||||
namespace MWState{
|
||||
class QuickSaveManager{
|
||||
std::string mSaveName;
|
||||
unsigned int mMaxSaves;
|
||||
unsigned int mSlotsVisited;
|
||||
const Slot *mOldestSlotVisited;
|
||||
private:
|
||||
bool shouldCreateNewSlot();
|
||||
bool isOldestSave(const Slot *compare);
|
||||
public:
|
||||
QuickSaveManager(std::string &saveName, unsigned int maxSaves);
|
||||
///< A utility class to manage multiple quicksave slots
|
||||
///
|
||||
/// \param saveName The name of the save ("QuickSave", "AutoSave", etc)
|
||||
/// \param maxSaves The maximum number of save slots to create before recycling old ones
|
||||
|
||||
void visitSave(const Slot *saveSlot);
|
||||
///< Visits the given \a slot \a
|
||||
|
||||
const Slot *getNextQuickSaveSlot();
|
||||
///< Get the slot that the next quicksave should use.
|
||||
///
|
||||
///\return Either the oldest quicksave slot visited, or NULL if a new slot can be made
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -37,6 +37,8 @@
|
|||
|
||||
#include "../mwscript/globalscripts.hpp"
|
||||
|
||||
#include "quicksavemanager.hpp"
|
||||
|
||||
void MWState::StateManager::cleanup (bool force)
|
||||
{
|
||||
if (mState!=State_NoGame || force)
|
||||
|
@ -324,20 +326,25 @@ void MWState::StateManager::quickSave (std::string name)
|
|||
return;
|
||||
}
|
||||
|
||||
const Slot* slot = NULL;
|
||||
Character* currentCharacter = getCurrentCharacter(); //Get current character
|
||||
int maxSaves = Settings::Manager::getInt("max quicksaves", "Saves");
|
||||
if(maxSaves < 1)
|
||||
maxSaves = 1;
|
||||
|
||||
Character* currentCharacter = getCurrentCharacter(); //Get current character
|
||||
QuickSaveManager saveFinder = QuickSaveManager(name, maxSaves);
|
||||
|
||||
//Find quicksave slot
|
||||
if (currentCharacter)
|
||||
{
|
||||
for (Character::SlotIterator it = currentCharacter->begin(); it != currentCharacter->end(); ++it)
|
||||
{
|
||||
if (it->mProfile.mDescription == name)
|
||||
slot = &*it;
|
||||
//Visiting slots allows the quicksave finder to find the oldest quicksave
|
||||
saveFinder.visitSave(&*it);
|
||||
}
|
||||
}
|
||||
|
||||
saveGame(name, slot);
|
||||
//Once all the saves have been visited, the save finder can tell us which
|
||||
//one to replace (or create)
|
||||
saveGame(name, saveFinder.getNextQuickSaveSlot());
|
||||
}
|
||||
|
||||
void MWState::StateManager::loadGame(const std::string& filepath)
|
||||
|
|
|
@ -5,7 +5,7 @@ character
|
|||
---------
|
||||
|
||||
:Type: string
|
||||
:Range:
|
||||
:Range:
|
||||
:Default: ""
|
||||
|
||||
This contains the default character for the Load Game menu and is automatically updated when a different character is selected.
|
||||
|
@ -32,3 +32,14 @@ This setting determines whether the amount of the time the player has spent play
|
|||
for each saved game in the Load menu. Currently, the counter includes time spent in menus, including the pause menu, but does not include time spent with the game window minimized.
|
||||
|
||||
This setting can only be configured by editing the settings configuration file.
|
||||
|
||||
max quicksaves
|
||||
----------
|
||||
|
||||
:Type: integer
|
||||
:Range: >0
|
||||
:Default: 1
|
||||
|
||||
This setting determines how many quicksave and autosave slots you can have at a time. If greater than 1, quicksaves will be sequentially created each time you quicksave. Once the maximum number of quicksaves has been reached, the oldest quicksave will be recycled the next time you perform a quicksave.
|
||||
|
||||
This setting can only be configured by editing the settings configuration file.
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# significance of each setting, interaction with other settings, hard
|
||||
# limits on value ranges and more information in general, please read
|
||||
# the detailed documentation at:
|
||||
#
|
||||
#
|
||||
# http://openmw.readthedocs.io/en/master/reference/modding/settings/index.html
|
||||
#
|
||||
|
||||
|
@ -291,6 +291,10 @@ autosave = true
|
|||
# Display the time played on each save file in the load menu.
|
||||
timeplayed = false
|
||||
|
||||
# The maximum number of quick (or auto) save slots to have.
|
||||
# If all slots are used, the oldest save is reused
|
||||
max quicksaves = 1
|
||||
|
||||
[Sound]
|
||||
|
||||
# Name of audio device file. Blank means use the default device.
|
||||
|
@ -379,7 +383,7 @@ reflect actors = false
|
|||
# Overrides the value in '[Camera] small feature culling pixel size' specifically for water reflection/refraction textures.
|
||||
small feature culling pixel size = 20.0
|
||||
|
||||
# By what factor water downscales objects. Only works with water shader and refractions on.
|
||||
# By what factor water downscales objects. Only works with water shader and refractions on.
|
||||
refraction scale = 1.0
|
||||
|
||||
[Windows]
|
||||
|
|
Loading…
Reference in a new issue