Remove `createRecord` functions from World because the only forward the argument to ESMStore that can be used directly.

7344-support-launching-the-example-suite
Petr Mikheev 2 years ago
parent a6584557e5
commit 227a993b94

@ -147,7 +147,8 @@ namespace MWBase
virtual MWWorld::Ptr getPlayerPtr() = 0; virtual MWWorld::Ptr getPlayerPtr() = 0;
virtual MWWorld::ConstPtr getPlayerConstPtr() const = 0; virtual MWWorld::ConstPtr getPlayerConstPtr() const = 0;
virtual const MWWorld::ESMStore& getStore() const = 0; virtual MWWorld::ESMStore& getStore() = 0;
const MWWorld::ESMStore& getStore() const { return const_cast<MWBase::World*>(this)->getStore(); }
virtual const std::vector<int>& getESMVersions() const = 0; virtual const std::vector<int>& getESMVersions() const = 0;
@ -344,66 +345,6 @@ namespace MWBase
///< Toggle a render mode. ///< Toggle a render mode.
///< \return Resulting mode ///< \return Resulting mode
virtual const ESM::Potion* createRecord(const ESM::Potion& record) = 0;
///< Create a new record (of type potion) in the ESM store.
/// \return pointer to created record
virtual const ESM::Spell* createRecord(const ESM::Spell& record) = 0;
///< Create a new record (of type spell) in the ESM store.
/// \return pointer to created record
virtual const ESM::Class* createRecord(const ESM::Class& record) = 0;
///< Create a new record (of type class) in the ESM store.
/// \return pointer to created record
virtual const ESM::Cell* createRecord(const ESM::Cell& record) = 0;
///< Create a new record (of type cell) in the ESM store.
/// \return pointer to created record
virtual const ESM::NPC* createRecord(const ESM::NPC& record) = 0;
///< Create a new record (of type npc) in the ESM store.
/// \return pointer to created record
virtual const ESM::Armor* createRecord(const ESM::Armor& record) = 0;
///< Create a new record (of type armor) in the ESM store.
/// \return pointer to created record
virtual const ESM::Weapon* createRecord(const ESM::Weapon& record) = 0;
///< Create a new record (of type weapon) in the ESM store.
/// \return pointer to created record
virtual const ESM::Clothing* createRecord(const ESM::Clothing& record) = 0;
///< Create a new record (of type clothing) in the ESM store.
/// \return pointer to created record
virtual const ESM::Enchantment* createRecord(const ESM::Enchantment& record) = 0;
///< Create a new record (of type enchantment) in the ESM store.
/// \return pointer to created record
virtual const ESM::Book* createRecord(const ESM::Book& record) = 0;
///< Create a new record (of type book) in the ESM store.
/// \return pointer to created record
virtual const ESM::CreatureLevList* createOverrideRecord(const ESM::CreatureLevList& record) = 0;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
virtual const ESM::ItemLevList* createOverrideRecord(const ESM::ItemLevList& record) = 0;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
virtual const ESM::Creature* createOverrideRecord(const ESM::Creature& record) = 0;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
virtual const ESM::NPC* createOverrideRecord(const ESM::NPC& record) = 0;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
virtual const ESM::Container* createOverrideRecord(const ESM::Container& record) = 0;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
virtual MWWorld::Ptr placeObject(const MWWorld::ConstPtr& object, float cursorX, float cursorY, int amount) = 0; virtual MWWorld::Ptr placeObject(const MWWorld::ConstPtr& object, float cursorX, float cursorY, int amount) = 0;
///< copy and place an object into the gameworld at the specified cursor position ///< copy and place an object into the gameworld at the specified cursor position
/// @param object /// @param object

@ -289,7 +289,7 @@ namespace MWClass
newItem.mName = newName; newItem.mName = newName;
newItem.mData.mEnchant = enchCharge; newItem.mData.mEnchant = enchCharge;
newItem.mEnchant = enchId; newItem.mEnchant = enchId;
const ESM::Armor* record = MWBase::Environment::get().getWorld()->createRecord(newItem); const ESM::Armor* record = MWBase::Environment::get().getWorld()->getStore().insert(newItem);
return record->mId; return record->mId;
} }
@ -300,8 +300,12 @@ namespace MWClass
int armorSkillType = getEquipmentSkill(ptr); int armorSkillType = getEquipmentSkill(ptr);
float armorSkill = actor.getClass().getSkill(actor, armorSkillType); float armorSkill = actor.getClass().getSkill(actor, armorSkillType);
const MWBase::World* world = MWBase::Environment::get().getWorld(); int iBaseArmorSkill = MWBase::Environment::get()
int iBaseArmorSkill = world->getStore().get<ESM::GameSetting>().find("iBaseArmorSkill")->mValue.getInteger(); .getWorld()
->getStore()
.get<ESM::GameSetting>()
.find("iBaseArmorSkill")
->mValue.getInteger();
if (ref->mBase->mData.mWeight == 0) if (ref->mBase->mData.mWeight == 0)
return ref->mBase->mData.mArmor; return ref->mBase->mData.mArmor;

@ -151,7 +151,7 @@ namespace MWClass
newItem.mData.mIsScroll = 1; newItem.mData.mIsScroll = 1;
newItem.mData.mEnchant = enchCharge; newItem.mData.mEnchant = enchCharge;
newItem.mEnchant = enchId; newItem.mEnchant = enchId;
const ESM::Book* record = MWBase::Environment::get().getWorld()->createRecord(newItem); const ESM::Book* record = MWBase::Environment::get().getWorld()->getStore().insert(newItem);
return record->mId; return record->mId;
} }

@ -196,7 +196,7 @@ namespace MWClass
newItem.mName = newName; newItem.mName = newName;
newItem.mData.mEnchant = enchCharge; newItem.mData.mEnchant = enchCharge;
newItem.mEnchant = enchId; newItem.mEnchant = enchId;
const ESM::Clothing* record = MWBase::Environment::get().getWorld()->createRecord(newItem); const ESM::Clothing* record = MWBase::Environment::get().getWorld()->getStore().insert(newItem);
return record->mId; return record->mId;
} }

@ -91,8 +91,8 @@ namespace MWClass
static const GMST staticGmst = [] { static const GMST staticGmst = [] {
GMST gmst; GMST gmst;
const MWBase::World* world = MWBase::Environment::get().getWorld(); const MWWorld::Store<ESM::GameSetting>& store
const MWWorld::Store<ESM::GameSetting>& store = world->getStore().get<ESM::GameSetting>(); = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
gmst.fMinWalkSpeedCreature = store.find("fMinWalkSpeedCreature"); gmst.fMinWalkSpeedCreature = store.find("fMinWalkSpeedCreature");
gmst.fMaxWalkSpeedCreature = store.find("fMaxWalkSpeedCreature"); gmst.fMaxWalkSpeedCreature = store.find("fMaxWalkSpeedCreature");

@ -276,8 +276,8 @@ namespace MWClass
static const GMST staticGmst = [] { static const GMST staticGmst = [] {
GMST gmst; GMST gmst;
const MWBase::World* world = MWBase::Environment::get().getWorld(); const MWWorld::Store<ESM::GameSetting>& store
const MWWorld::Store<ESM::GameSetting>& store = world->getStore().get<ESM::GameSetting>(); = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
gmst.fMinWalkSpeed = store.find("fMinWalkSpeed"); gmst.fMinWalkSpeed = store.find("fMinWalkSpeed");
gmst.fMaxWalkSpeed = store.find("fMaxWalkSpeed"); gmst.fMaxWalkSpeed = store.find("fMaxWalkSpeed");
@ -536,8 +536,8 @@ namespace MWClass
if (ptr.getRefData().getCustomData() if (ptr.getRefData().getCustomData()
&& ptr.getRefData().getCustomData()->asNpcCustomData().mNpcStats.isWerewolf()) && ptr.getRefData().getCustomData()->asNpcCustomData().mNpcStats.isWerewolf())
{ {
const MWBase::World* world = MWBase::Environment::get().getWorld(); const MWWorld::Store<ESM::GameSetting>& store
const MWWorld::Store<ESM::GameSetting>& store = world->getStore().get<ESM::GameSetting>(); = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
return store.find("sWerewolfPopup")->mValue.getString(); return store.find("sWerewolfPopup")->mValue.getString();
} }
@ -1195,8 +1195,8 @@ namespace MWClass
float Npc::getArmorRating(const MWWorld::Ptr& ptr) const float Npc::getArmorRating(const MWWorld::Ptr& ptr) const
{ {
const MWBase::World* world = MWBase::Environment::get().getWorld(); const MWWorld::Store<ESM::GameSetting>& store
const MWWorld::Store<ESM::GameSetting>& store = world->getStore().get<ESM::GameSetting>(); = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
MWMechanics::NpcStats& stats = getNpcStats(ptr); MWMechanics::NpcStats& stats = getNpcStats(ptr);
const MWWorld::InventoryStore& invStore = getInventoryStore(ptr); const MWWorld::InventoryStore& invStore = getInventoryStore(ptr);

@ -269,7 +269,7 @@ namespace MWClass
newItem.mData.mEnchant = enchCharge; newItem.mData.mEnchant = enchCharge;
newItem.mEnchant = enchId; newItem.mEnchant = enchId;
newItem.mData.mFlags |= ESM::Weapon::Magical; newItem.mData.mFlags |= ESM::Weapon::Magical;
const ESM::Weapon* record = MWBase::Environment::get().getWorld()->createRecord(newItem); const ESM::Weapon* record = MWBase::Environment::get().getWorld()->getStore().insert(newItem);
return record->mId; return record->mId;
} }

@ -416,7 +416,7 @@ namespace MWGui
MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Mysticism Hit")); MWBase::Environment::get().getWindowManager()->playSound(ESM::RefId::stringRefId("Mysticism Hit"));
const ESM::Spell* spell = MWBase::Environment::get().getWorld()->createRecord(mSpell); const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().insert(mSpell);
MWMechanics::CreatureStats& stats = player.getClass().getCreatureStats(player); MWMechanics::CreatureStats& stats = player.getClass().getCreatureStats(player);
MWMechanics::Spells& spells = stats.getSpells(); MWMechanics::Spells& spells = stats.getSpells();

@ -120,7 +120,7 @@ namespace MWLua
// Creates a new record in the world database. // Creates a new record in the world database.
api["createRecord"] = sol::overload([](const ESM::Potion& potion) -> const ESM::Potion* { api["createRecord"] = sol::overload([](const ESM::Potion& potion) -> const ESM::Potion* {
return MWBase::Environment::get().getWorld()->createRecord(potion); return MWBase::Environment::get().getWorld()->getStore().insert(potion);
} }
// TODO: add here overloads for other records // TODO: add here overloads for other records
); );

@ -315,7 +315,7 @@ void MWMechanics::Alchemy::addPotion(const std::string& name)
const ESM::Potion* record = getRecord(newRecord); const ESM::Potion* record = getRecord(newRecord);
if (!record) if (!record)
record = MWBase::Environment::get().getWorld()->createRecord(newRecord); record = MWBase::Environment::get().getWorld()->getStore().insert(newRecord);
mAlchemist.getClass().getContainerStore(mAlchemist).add(record->mId, 1); mAlchemist.getClass().getContainerStore(mAlchemist).add(record->mId, 1);
} }

@ -98,7 +98,7 @@ namespace MWMechanics
// Try to find a dynamic enchantment with the same stats, create a new one if not found. // Try to find a dynamic enchantment with the same stats, create a new one if not found.
const ESM::Enchantment* enchantmentPtr = getRecord(enchantment); const ESM::Enchantment* enchantmentPtr = getRecord(enchantment);
if (enchantmentPtr == nullptr) if (enchantmentPtr == nullptr)
enchantmentPtr = MWBase::Environment::get().getWorld()->createRecord(enchantment); enchantmentPtr = MWBase::Environment::get().getWorld()->getStore().insert(enchantment);
// Apply the enchantment // Apply the enchantment
const ESM::RefId& newItemId const ESM::RefId& newItemId

@ -24,7 +24,7 @@ namespace MWMechanics
{ {
const int sign = it.mCount < 1 ? -1 : 1; const int sign = it.mCount < 1 ? -1 : 1;
it.mCount = sign * std::max(it.mCount * sign + amount, 0); it.mCount = sign * std::max(it.mCount * sign + amount, 0);
MWBase::Environment::get().getWorld()->createOverrideRecord(copy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(copy);
return; return;
} }
} }
@ -34,7 +34,7 @@ namespace MWMechanics
cont.mItem = itemId; cont.mItem = itemId;
cont.mCount = amount; cont.mCount = amount;
copy.mInventory.mList.push_back(cont); copy.mInventory.mList.push_back(cont);
MWBase::Environment::get().getWorld()->createOverrideRecord(copy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(copy);
} }
} }
} }

@ -440,7 +440,7 @@ namespace MWMechanics
ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase; ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase;
player.mName = name; player.mName = name;
world->createRecord(player); world->getStore().insert(player);
mUpdatePlayer = true; mUpdatePlayer = true;
} }
@ -457,7 +457,7 @@ namespace MWMechanics
player.mHair = hair; player.mHair = hair;
player.setIsMale(male); player.setIsMale(male);
world->createRecord(player); world->getStore().insert(player);
mRaceSelected = true; mRaceSelected = true;
buildPlayer(); buildPlayer();
@ -478,7 +478,7 @@ namespace MWMechanics
ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase; ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase;
player.mClass = id; player.mClass = id;
world->createRecord(player); world->getStore().insert(player);
mClassSelected = true; mClassSelected = true;
buildPlayer(); buildPlayer();
@ -489,12 +489,12 @@ namespace MWMechanics
{ {
MWBase::World* world = MWBase::Environment::get().getWorld(); MWBase::World* world = MWBase::Environment::get().getWorld();
const ESM::Class* ptr = world->createRecord(cls); const ESM::Class* ptr = world->getStore().insert(cls);
ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase; ESM::NPC player = *world->getPlayerPtr().get<ESM::NPC>()->mBase;
player.mClass = ptr->mId; player.mClass = ptr->mId;
world->createRecord(player); world->getStore().insert(player);
mClassSelected = true; mClassSelected = true;
buildPlayer(); buildPlayer();

@ -33,7 +33,7 @@ namespace MWMechanics
default: default:
assert(false); assert(false);
} }
MWBase::Environment::get().getWorld()->createOverrideRecord(copy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(copy);
} }
} }

@ -27,7 +27,7 @@ namespace
T copy = *MWBase::Environment::get().getWorld()->getStore().get<T>().find(id); T copy = *MWBase::Environment::get().getWorld()->getStore().get<T>().find(id);
bool changed = function(copy.mSpells.mList); bool changed = function(copy.mSpells.mList);
if (changed) if (changed)
MWBase::Environment::get().getWorld()->createOverrideRecord(copy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(copy);
return changed; return changed;
} }
} }

@ -1506,7 +1506,7 @@ namespace MWScript
ESM::CreatureLevList listCopy ESM::CreatureLevList listCopy
= *MWBase::Environment::get().getWorld()->getStore().get<ESM::CreatureLevList>().find(levId); = *MWBase::Environment::get().getWorld()->getStore().get<ESM::CreatureLevList>().find(levId);
addToLevList(&listCopy, creatureId, level); addToLevList(&listCopy, creatureId, level);
MWBase::Environment::get().getWorld()->createOverrideRecord(listCopy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(listCopy);
} }
}; };
@ -1525,7 +1525,7 @@ namespace MWScript
ESM::CreatureLevList listCopy ESM::CreatureLevList listCopy
= *MWBase::Environment::get().getWorld()->getStore().get<ESM::CreatureLevList>().find(levId); = *MWBase::Environment::get().getWorld()->getStore().get<ESM::CreatureLevList>().find(levId);
removeFromLevList(&listCopy, creatureId, level); removeFromLevList(&listCopy, creatureId, level);
MWBase::Environment::get().getWorld()->createOverrideRecord(listCopy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(listCopy);
} }
}; };
@ -1544,7 +1544,7 @@ namespace MWScript
ESM::ItemLevList listCopy ESM::ItemLevList listCopy
= *MWBase::Environment::get().getWorld()->getStore().get<ESM::ItemLevList>().find(levId); = *MWBase::Environment::get().getWorld()->getStore().get<ESM::ItemLevList>().find(levId);
addToLevList(&listCopy, itemId, level); addToLevList(&listCopy, itemId, level);
MWBase::Environment::get().getWorld()->createOverrideRecord(listCopy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(listCopy);
} }
}; };
@ -1563,7 +1563,7 @@ namespace MWScript
ESM::ItemLevList listCopy ESM::ItemLevList listCopy
= *MWBase::Environment::get().getWorld()->getStore().get<ESM::ItemLevList>().find(levId); = *MWBase::Environment::get().getWorld()->getStore().get<ESM::ItemLevList>().find(levId);
removeFromLevList(&listCopy, itemId, level); removeFromLevList(&listCopy, itemId, level);
MWBase::Environment::get().getWorld()->createOverrideRecord(listCopy); MWBase::Environment::get().getWorld()->getStore().overrideRecord(listCopy);
} }
}; };

@ -7,6 +7,7 @@
#include <algorithm> #include <algorithm>
#include <numeric> #include <numeric>
#include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp" #include "../mwbase/world.hpp"
#include "../mwworld/esmstore.hpp" #include "../mwworld/esmstore.hpp"
@ -26,8 +27,7 @@ namespace MWSound
{ {
} }
std::optional<ESM::RefId> RegionSoundSelector::getNextRandom( std::optional<ESM::RefId> RegionSoundSelector::getNextRandom(float duration, const ESM::RefId& regionName)
float duration, const ESM::RefId& regionName, const MWBase::World& world)
{ {
mTimePassed += duration; mTimePassed += duration;
@ -44,7 +44,8 @@ namespace MWSound
mSumChance = 0; mSumChance = 0;
} }
const ESM::Region* const region = world.getStore().get<ESM::Region>().search(mLastRegionName); const ESM::Region* const region
= MWBase::Environment::get().getWorld()->getStore().get<ESM::Region>().search(mLastRegionName);
if (region == nullptr) if (region == nullptr)
return {}; return {};

@ -15,8 +15,7 @@ namespace MWSound
class RegionSoundSelector class RegionSoundSelector
{ {
public: public:
std::optional<ESM::RefId> getNextRandom( std::optional<ESM::RefId> getNextRandom(float duration, const ESM::RefId& regionName);
float duration, const ESM::RefId& regionName, const MWBase::World& world);
RegionSoundSelector(); RegionSoundSelector();

@ -24,9 +24,8 @@ namespace MWSound
float mAudioMaxDistanceMult; float mAudioMaxDistanceMult;
}; };
AudioParams makeAudioParams(const MWBase::World& world) AudioParams makeAudioParams(const MWWorld::Store<ESM::GameSetting>& settings)
{ {
const auto& settings = world.getStore().get<ESM::GameSetting>();
AudioParams params; AudioParams params;
params.mAudioDefaultMinDistance = settings.find("fAudioDefaultMinDistance")->mValue.getFloat(); params.mAudioDefaultMinDistance = settings.find("fAudioDefaultMinDistance")->mValue.getFloat();
params.mAudioDefaultMaxDistance = settings.find("fAudioDefaultMaxDistance")->mValue.getFloat(); params.mAudioDefaultMaxDistance = settings.find("fAudioDefaultMaxDistance")->mValue.getFloat();
@ -119,7 +118,8 @@ namespace MWSound
Sound_Buffer* SoundBufferPool::insertSound(const ESM::RefId& soundId, const ESM::Sound& sound) Sound_Buffer* SoundBufferPool::insertSound(const ESM::RefId& soundId, const ESM::Sound& sound)
{ {
static const AudioParams audioParams = makeAudioParams(*MWBase::Environment::get().getWorld()); static const AudioParams audioParams
= makeAudioParams(MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>());
float volume = static_cast<float>(std::pow(10.0, (sound.mData.mVolume / 255.0 * 3348.0 - 3348.0) / 2000.0)); float volume = static_cast<float>(std::pow(10.0, (sound.mData.mVolume / 255.0 * 3348.0 - 3348.0) / 2000.0));
float min = sound.mData.mMinRange; float min = sound.mData.mMinRange;

@ -773,7 +773,7 @@ namespace MWSound
if (mCurrentRegionSound && mOutput->isSoundPlaying(mCurrentRegionSound)) if (mCurrentRegionSound && mOutput->isSoundPlaying(mCurrentRegionSound))
return; return;
if (const auto next = mRegionSoundSelector.getNextRandom(duration, cell->getRegion(), *world)) if (const auto next = mRegionSoundSelector.getNextRandom(duration, cell->getRegion()))
mCurrentRegionSound = playSound(*next, 1.0f, 1.0f); mCurrentRegionSound = playSound(*next, 1.0f, 1.0f);
} }

@ -197,6 +197,7 @@ namespace MWWorld
} }
/// Insert a custom record (i.e. with a generated ID that will not clash will pre-existing records) /// Insert a custom record (i.e. with a generated ID that will not clash will pre-existing records)
/// \return pointer to created record
template <class T> template <class T>
const T* insert(const T& x) const T* insert(const T& x)
{ {

@ -389,8 +389,8 @@ void MWWorld::InventoryStore::autoEquipArmor(TSlots& slots_)
return; return;
} }
const MWBase::World* world = MWBase::Environment::get().getWorld(); const MWWorld::Store<ESM::GameSetting>& store
const MWWorld::Store<ESM::GameSetting>& store = world->getStore().get<ESM::GameSetting>(); = MWBase::Environment::get().getWorld()->getStore().get<ESM::GameSetting>();
static float fUnarmoredBase1 = store.find("fUnarmoredBase1")->mValue.getFloat(); static float fUnarmoredBase1 = store.find("fUnarmoredBase1")->mValue.getFloat();
static float fUnarmoredBase2 = store.find("fUnarmoredBase2")->mValue.getFloat(); static float fUnarmoredBase2 = store.find("fUnarmoredBase2")->mValue.getFloat();

@ -599,11 +599,6 @@ namespace MWWorld
return mESMVersions; return mESMVersions;
} }
const MWWorld::ESMStore& World::getStore() const
{
return mStore;
}
LocalScripts& World::getLocalScripts() LocalScripts& World::getLocalScripts()
{ {
return mLocalScripts; return mLocalScripts;
@ -1721,95 +1716,6 @@ namespace MWWorld
} }
} }
const ESM::Potion* World::createRecord(const ESM::Potion& record)
{
return mStore.insert(record);
}
const ESM::Class* World::createRecord(const ESM::Class& record)
{
return mStore.insert(record);
}
const ESM::Spell* World::createRecord(const ESM::Spell& record)
{
return mStore.insert(record);
}
const ESM::Cell* World::createRecord(const ESM::Cell& record)
{
return mStore.insert(record);
}
const ESM::CreatureLevList* World::createOverrideRecord(const ESM::CreatureLevList& record)
{
return mStore.overrideRecord(record);
}
const ESM::ItemLevList* World::createOverrideRecord(const ESM::ItemLevList& record)
{
return mStore.overrideRecord(record);
}
const ESM::Creature* World::createOverrideRecord(const ESM::Creature& record)
{
return mStore.overrideRecord(record);
}
const ESM::NPC* World::createOverrideRecord(const ESM::NPC& record)
{
return mStore.overrideRecord(record);
}
const ESM::Container* World::createOverrideRecord(const ESM::Container& record)
{
return mStore.overrideRecord(record);
}
const ESM::NPC* World::createRecord(const ESM::NPC& record)
{
bool update = false;
if (record.mId == "Player")
{
const ESM::NPC* player = mPlayer->getPlayer().get<ESM::NPC>()->mBase;
update = record.isMale() != player->isMale() || !(record.mRace == player->mRace)
|| !(record.mHead == player->mHead) || !(record.mHair == player->mHair);
}
const ESM::NPC* ret = mStore.insert(record);
if (update)
{
renderPlayer();
}
return ret;
}
const ESM::Armor* World::createRecord(const ESM::Armor& record)
{
return mStore.insert(record);
}
const ESM::Weapon* World::createRecord(const ESM::Weapon& record)
{
return mStore.insert(record);
}
const ESM::Clothing* World::createRecord(const ESM::Clothing& record)
{
return mStore.insert(record);
}
const ESM::Enchantment* World::createRecord(const ESM::Enchantment& record)
{
return mStore.insert(record);
}
const ESM::Book* World::createRecord(const ESM::Book& record)
{
return mStore.insert(record);
}
void World::update(float duration, bool paused) void World::update(float duration, bool paused)
{ {
if (mGoToJail && !paused) if (mGoToJail && !paused)
@ -3211,7 +3117,7 @@ namespace MWWorld
{ {
if (playing.insert(effect.mEffectId).second) if (playing.insert(effect.mEffectId).second)
{ {
const auto magicEffect = getStore().get<ESM::MagicEffect>().find(effect.mEffectId); const auto magicEffect = mStore.get<ESM::MagicEffect>().find(effect.mEffectId);
if (magicEffect->mData.mFlags & ESM::MagicEffect::ContinuousVfx) if (magicEffect->mData.mFlags & ESM::MagicEffect::ContinuousVfx)
MWMechanics::playEffects(ptr, *magicEffect, false); MWMechanics::playEffects(ptr, *magicEffect, false);
} }

@ -235,7 +235,7 @@ namespace MWWorld
MWWorld::Ptr getPlayerPtr() override; MWWorld::Ptr getPlayerPtr() override;
MWWorld::ConstPtr getPlayerConstPtr() const override; MWWorld::ConstPtr getPlayerConstPtr() const override;
const MWWorld::ESMStore& getStore() const override; MWWorld::ESMStore& getStore() override { return mStore; }
const std::vector<int>& getESMVersions() const override; const std::vector<int>& getESMVersions() const override;
@ -428,66 +428,6 @@ namespace MWWorld
///< Toggle a render mode. ///< Toggle a render mode.
///< \return Resulting mode ///< \return Resulting mode
const ESM::Potion* createRecord(const ESM::Potion& record) override;
///< Create a new record (of type potion) in the ESM store.
/// \return pointer to created record
const ESM::Spell* createRecord(const ESM::Spell& record) override;
///< Create a new record (of type spell) in the ESM store.
/// \return pointer to created record
const ESM::Class* createRecord(const ESM::Class& record) override;
///< Create a new record (of type class) in the ESM store.
/// \return pointer to created record
const ESM::Cell* createRecord(const ESM::Cell& record) override;
///< Create a new record (of type cell) in the ESM store.
/// \return pointer to created record
const ESM::NPC* createRecord(const ESM::NPC& record) override;
///< Create a new record (of type npc) in the ESM store.
/// \return pointer to created record
const ESM::Armor* createRecord(const ESM::Armor& record) override;
///< Create a new record (of type armor) in the ESM store.
/// \return pointer to created record
const ESM::Weapon* createRecord(const ESM::Weapon& record) override;
///< Create a new record (of type weapon) in the ESM store.
/// \return pointer to created record
const ESM::Clothing* createRecord(const ESM::Clothing& record) override;
///< Create a new record (of type clothing) in the ESM store.
/// \return pointer to created record
const ESM::Enchantment* createRecord(const ESM::Enchantment& record) override;
///< Create a new record (of type enchantment) in the ESM store.
/// \return pointer to created record
const ESM::Book* createRecord(const ESM::Book& record) override;
///< Create a new record (of type book) in the ESM store.
/// \return pointer to created record
const ESM::CreatureLevList* createOverrideRecord(const ESM::CreatureLevList& record) override;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
const ESM::ItemLevList* createOverrideRecord(const ESM::ItemLevList& record) override;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
const ESM::Creature* createOverrideRecord(const ESM::Creature& record) override;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
const ESM::NPC* createOverrideRecord(const ESM::NPC& record) override;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
const ESM::Container* createOverrideRecord(const ESM::Container& record) override;
///< Write this record to the ESM store, allowing it to override a pre-existing record with the same ID.
/// \return pointer to created record
void update(float duration, bool paused); void update(float duration, bool paused);
void updatePhysics( void updatePhysics(
float duration, bool paused, osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats); float duration, bool paused, osg::Timer_t frameStart, unsigned int frameNumber, osg::Stats& stats);

@ -179,7 +179,7 @@ MWWorld::CellStore& MWWorld::WorldModel::getExterior(int x, int y)
record.mMapColor = 0; record.mMapColor = 0;
record.updateId(); record.updateId();
cell = MWBase::Environment::get().getWorld()->createRecord(record); cell = MWBase::Environment::get().getWorld()->getStore().insert(record);
} }
CellStore* cellStore CellStore* cellStore

Loading…
Cancel
Save