From 9ab2c16055ccd4c1ef35742f289d5392f83125f2 Mon Sep 17 00:00:00 2001 From: greye Date: Wed, 7 Nov 2012 17:49:45 +0400 Subject: [PATCH] store created character classes as dynamic records --- apps/openmw/mwgui/charactercreation.cpp | 9 ++++++--- apps/openmw/mwgui/windowmanagerimp.cpp | 4 +--- apps/openmw/mwgui/windowmanagerimp.hpp | 1 - apps/openmw/mwworld/player.cpp | 10 +--------- apps/openmw/mwworld/player.hpp | 8 ++++---- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/apps/openmw/mwgui/charactercreation.cpp b/apps/openmw/mwgui/charactercreation.cpp index 253e0779c..cdfa43b3b 100644 --- a/apps/openmw/mwgui/charactercreation.cpp +++ b/apps/openmw/mwgui/charactercreation.cpp @@ -559,9 +559,12 @@ void CharacterCreation::onCreateClassDialogDone(WindowBase* parWindow) klass.mData.mSkills[i][1] = majorSkills[i]; klass.mData.mSkills[i][0] = minorSkills[i]; } - MWBase::Environment::get().getMechanicsManager()->setPlayerClass(klass); - mPlayerClass = klass; - mWM->setPlayerClass(klass); + std::pair res = + MWBase::Environment::get().getWorld()->createRecord(klass); + + MWBase::Environment::get().getMechanicsManager()->setPlayerClass(*res.second); + mPlayerClass = *res.second; + mWM->setPlayerClass(*res.second); mWM->removeDialog(mCreateClassDialog); mCreateClassDialog = 0; diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 8e4187f7f..dfca04948 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -83,7 +83,6 @@ WindowManager::WindowManager( , mSpellCreationDialog(NULL) , mEnchantingDialog(NULL) , mTrainingWindow(NULL) - , mPlayerClass() , mPlayerName() , mPlayerRaceId() , mPlayerAttributes() @@ -499,8 +498,7 @@ void WindowManager::setValue (const std::string& id, int value) void WindowManager::setPlayerClass (const ESM::Class &class_) { - mPlayerClass = class_; - mStatsWindow->setValue("class", mPlayerClass.mName); + mStatsWindow->setValue("class", class_.mName); } void WindowManager::configureSkills (const SkillList& major, const SkillList& minor) diff --git a/apps/openmw/mwgui/windowmanagerimp.hpp b/apps/openmw/mwgui/windowmanagerimp.hpp index aa796343e..2e684b5da 100644 --- a/apps/openmw/mwgui/windowmanagerimp.hpp +++ b/apps/openmw/mwgui/windowmanagerimp.hpp @@ -261,7 +261,6 @@ namespace MWGui /// \todo get rid of this stuff. Move it to the respective UI element classes, if needed. // Various stats about player as needed by window manager - ESM::Class mPlayerClass; std::string mPlayerName; std::string mPlayerRaceId; std::map > mPlayerAttributes; diff --git a/apps/openmw/mwworld/player.cpp b/apps/openmw/mwworld/player.cpp index a1318f727..5cf1fa379 100644 --- a/apps/openmw/mwworld/player.cpp +++ b/apps/openmw/mwworld/player.cpp @@ -26,8 +26,7 @@ namespace MWWorld float* playerPos = mPlayer.mData.getPosition().pos; playerPos[0] = playerPos[1] = playerPos[2] = 0; - /// \todo Do not make a copy of classes defined in esm/p records. - mClass = new ESM::Class (*world.getStore().get().find (player->mClass)); + mClass = world.getStore().get().find (player->mClass); } Player::~Player() @@ -35,13 +34,6 @@ namespace MWWorld delete mClass; } - void Player::setClass (const ESM::Class& class_) - { - ESM::Class *new_class = new ESM::Class (class_); - delete mClass; - mClass = new_class; - } - void Player::setDrawState (MWMechanics::DrawState_ state) { MWWorld::Ptr ptr = getPlayer(); diff --git a/apps/openmw/mwworld/player.hpp b/apps/openmw/mwworld/player.hpp index 68df2ec6d..a7a0ec430 100644 --- a/apps/openmw/mwworld/player.hpp +++ b/apps/openmw/mwworld/player.hpp @@ -1,8 +1,6 @@ #ifndef GAME_MWWORLD_PLAYER_H #define GAME_MWWORLD_PLAYER_H -#include "OgreCamera.h" - #include "../mwworld/cellstore.hpp" #include "../mwworld/refdata.hpp" #include "../mwworld/ptr.hpp" @@ -27,7 +25,7 @@ namespace MWWorld bool mMale; std::string mRace; std::string mBirthsign; - ESM::Class *mClass; + const ESM::Class *mClass; bool mAutoMove; int mForwardBackward; public: @@ -67,7 +65,9 @@ namespace MWWorld mBirthsign = birthsign; } - void setClass (const ESM::Class& class_); + void setClass (const ESM::Class& class_) { + mClass = &class_; + } void setDrawState (MWMechanics::DrawState_ state);