Merge branch 'master' into shadersystem

actorid
scrawl 13 years ago
commit 4434fb640e

1
.gitignore vendored

@ -13,3 +13,4 @@ cmake_install.cmake
Makefile Makefile
makefile makefile
data data
*.kdev4

@ -23,7 +23,7 @@ set (OPENMW_VERSION "${OPENMW_VERSION_MAJOR}.${OPENMW_VERSION_MINOR}.${OPENMW_VE
# Debug suffix for plugins # Debug suffix for plugins
set(DEBUG_SUFFIX "") set(DEBUG_SUFFIX "")
if (DEFINED CMAKE_BUILD_TYPE) if (DEFINED CMAKE_BUILD_TYPE)
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug") if (CMAKE_BUILD_TYPE STREQUAL "Debug")
set(DEBUG_SUFFIX "_d") set(DEBUG_SUFFIX "_d")
endif() endif()
endif() endif()

@ -187,7 +187,7 @@ int main(int argc, char**argv)
case REC_ALCH: case REC_ALCH:
{ {
Potion p; Potion p;
p.load(esm); p.load(esm, id);
if(quiet) break; if(quiet) break;
cout << " Name: " << p.name << endl; cout << " Name: " << p.name << endl;
break; break;

@ -50,7 +50,7 @@ add_openmw_dir (mwworld
refdata worldimp physicssystem scene globals class action nullaction actionteleport refdata worldimp physicssystem scene globals class action nullaction actionteleport
containerstore actiontalk actiontake manualref player cellfunctors containerstore actiontalk actiontake manualref player cellfunctors
cells localscripts customdata weather inventorystore ptr actionopen actionread cells localscripts customdata weather inventorystore ptr actionopen actionread
actionequip timestamp actionalchemy cellstore actionequip timestamp actionalchemy cellstore actionapply
) )
add_openmw_dir (mwclass add_openmw_dir (mwclass
@ -60,7 +60,7 @@ add_openmw_dir (mwclass
add_openmw_dir (mwmechanics add_openmw_dir (mwmechanics
mechanicsmanager stat creaturestats magiceffects movement actors drawstate spells mechanicsmanager stat creaturestats magiceffects movement actors drawstate spells
activespells activespells npcstats
) )
add_openmw_dir (mwbase add_openmw_dir (mwbase

@ -1,25 +1,13 @@
#include "engine.hpp" #include "engine.hpp"
#include "components/esm/loadcell.hpp" #include "components/esm/loadcell.hpp"
#include <cassert>
#include <iostream>
#include <utility>
#include <OgreRoot.h> #include <OgreRoot.h>
#include <OgreRenderWindow.h> #include <OgreRenderWindow.h>
#include <MyGUI_WidgetManager.h> #include <MyGUI_WidgetManager.h>
#include <openengine/ogre/renderer.hpp>
#include <openengine/gui/manager.hpp>
#include <components/esm/records.hpp>
#include <components/bsa/bsa_archive.hpp> #include <components/bsa/bsa_archive.hpp>
#include <components/esm/esm_reader.hpp>
#include <components/files/fixedpath.hpp>
#include <components/files/configurationmanager.hpp> #include <components/files/configurationmanager.hpp>
#include <components/settings/settings.hpp>
#include <components/nifoverrides/nifoverrides.hpp> #include <components/nifoverrides/nifoverrides.hpp>
#include <components/nifbullet/bullet_nif_loader.hpp> #include <components/nifbullet/bullet_nif_loader.hpp>
@ -31,16 +19,12 @@
#include "mwgui/cursorreplace.hpp" #include "mwgui/cursorreplace.hpp"
#include "mwscript/scriptmanager.hpp" #include "mwscript/scriptmanager.hpp"
#include "mwscript/compilercontext.hpp"
#include "mwscript/interpretercontext.hpp"
#include "mwscript/extensions.hpp" #include "mwscript/extensions.hpp"
#include "mwscript/globalscripts.hpp"
#include "mwsound/soundmanager.hpp" #include "mwsound/soundmanager.hpp"
#include "mwworld/class.hpp" #include "mwworld/class.hpp"
#include "mwworld/player.hpp" #include "mwworld/player.hpp"
#include "mwworld/cellstore.hpp"
#include "mwworld/worldimp.hpp" #include "mwworld/worldimp.hpp"
#include "mwclass/classes.hpp" #include "mwclass/classes.hpp"
@ -50,9 +34,6 @@
#include "mwmechanics/mechanicsmanager.hpp" #include "mwmechanics/mechanicsmanager.hpp"
#include "mwbase/environment.hpp"
#include "mwbase/world.hpp"
void OMW::Engine::executeLocalScripts() void OMW::Engine::executeLocalScripts()
{ {

@ -1,10 +1,6 @@
#ifndef ENGINE_H #ifndef ENGINE_H
#define ENGINE_H #define ENGINE_H
#include <string>
#include <boost/filesystem.hpp>
#include <OgreFrameListener.h> #include <OgreFrameListener.h>
#include <components/compiler/extensions.hpp> #include <components/compiler/extensions.hpp>

@ -1,13 +1,5 @@
#include <iostream> #include <iostream>
#include <string>
#include <fstream>
#include <boost/program_options.hpp>
#include <components/files/fileops.hpp>
#include <components/files/fixedpath.hpp>
#include <components/files/collections.hpp>
#include <components/files/configurationmanager.hpp> #include <components/files/configurationmanager.hpp>
#include "engine.hpp" #include "engine.hpp"
@ -16,15 +8,10 @@
#include <boost/iostreams/concepts.hpp> #include <boost/iostreams/concepts.hpp>
#include <boost/iostreams/stream_buffer.hpp> #include <boost/iostreams/stream_buffer.hpp>
# if !defined(_DEBUG)
# include <iostream>
# include <fstream>
# endif
// For OutputDebugString // For OutputDebugString
#include <Windows.h> #include <Windows.h>
// makes __argc and __argv available on windows // makes __argc and __argv available on windows
#include <stdlib.h> #include <cstdlib>
#endif #endif
@ -52,8 +39,6 @@ inline boost::filesystem::path lexical_cast<boost::filesystem::path, std::string
} /* namespace boost */ } /* namespace boost */
#endif /* (BOOST_VERSION <= 104600) */ #endif /* (BOOST_VERSION <= 104600) */
using namespace std;
struct FallbackMap { struct FallbackMap {
std::map<std::string,std::string> mMap; std::map<std::string,std::string> mMap;
}; };

@ -1,8 +1,6 @@
#ifndef GAME_MWBASE_WORLD_H #ifndef GAME_MWBASE_WORLD_H
#define GAME_MWBASE_WORLD_H #define GAME_MWBASE_WORLD_H
#include <string>
#include <map>
#include <vector> #include <vector>
#include <components/settings/settings.hpp> #include <components/settings/settings.hpp>

@ -1,7 +1,6 @@
#ifndef GAME_MWCLASS_CREATURE_H #ifndef GAME_MWCLASS_CREATURE_H
#define GAME_MWCLASS_CREATURE_H #define GAME_MWCLASS_CREATURE_H
#include "../mwworld/class.hpp"
#include "../mwrender/renderinginterface.hpp" #include "../mwrender/renderinginterface.hpp"
#include "../mwrender/actors.hpp" #include "../mwrender/actors.hpp"

@ -9,7 +9,7 @@ namespace MWClass
{ {
public: public:
virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const;
///< Add reference into a cell for rendering ///< Add reference into a cell for rendering
virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const;

@ -67,11 +67,11 @@ namespace MWClass
boost::algorithm::to_lower(faction); boost::algorithm::to_lower(faction);
if(ref->base->npdt52.gold != -10) if(ref->base->npdt52.gold != -10)
{ {
data->mNpcStats.mFactionRank[faction] = (int)ref->base->npdt52.rank; data->mNpcStats.getFactionRanks()[faction] = (int)ref->base->npdt52.rank;
} }
else else
{ {
data->mNpcStats.mFactionRank[faction] = (int)ref->base->npdt12.rank; data->mNpcStats.getFactionRanks()[faction] = (int)ref->base->npdt12.rank;
} }
} }
@ -79,7 +79,7 @@ namespace MWClass
if(ref->base->npdt52.gold != -10) if(ref->base->npdt52.gold != -10)
{ {
for (int i=0; i<27; ++i) for (int i=0; i<27; ++i)
data->mNpcStats.mSkill[i].setBase (ref->base->npdt52.skills[i]); data->mNpcStats.getSkill (i).setBase (ref->base->npdt52.skills[i]);
data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength); data->mCreatureStats.mAttributes[0].set (ref->base->npdt52.strength);
data->mCreatureStats.mAttributes[1].set (ref->base->npdt52.intelligence); data->mCreatureStats.mAttributes[1].set (ref->base->npdt52.intelligence);
@ -131,7 +131,7 @@ namespace MWClass
assert (ref->base != NULL); assert (ref->base != NULL);
std::string headID = ref->base->head; std::string headID = ref->base->head;
std::string bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4); std::string bodyRaceID = headID.substr(0, headID.find_last_of("head_") - 4);
@ -206,12 +206,12 @@ namespace MWClass
{ {
case Run: case Run:
stats.mForceRun = force; stats.setMovementFlag (MWMechanics::NpcStats::Flag_ForceRun, force);
break; break;
case Sneak: case Sneak:
stats.mForceSneak = force; stats.setMovementFlag (MWMechanics::NpcStats::Flag_ForceSneak, force);
break; break;
case Combat: case Combat:
@ -228,17 +228,18 @@ namespace MWClass
{ {
case Run: case Run:
stats.mRun = set; stats.setMovementFlag (MWMechanics::NpcStats::Flag_Run, set);
break; break;
case Sneak: case Sneak:
stats.mSneak = set; stats.setMovementFlag (MWMechanics::NpcStats::Flag_Sneak, set);
break; break;
case Combat: case Combat:
stats.mCombat = set; // Combat stance ignored for now; need to be determined based on draw state instead of
// being maunally set.
break; break;
} }
} }
@ -251,21 +252,21 @@ namespace MWClass
{ {
case Run: case Run:
if (!ignoreForce && stats.mForceRun) if (!ignoreForce && stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceRun))
return true; return true;
return stats.mRun; return stats.getMovementFlag (MWMechanics::NpcStats::Flag_Run);
case Sneak: case Sneak:
if (!ignoreForce && stats.mForceSneak) if (!ignoreForce && stats.getMovementFlag (MWMechanics::NpcStats::Flag_ForceSneak))
return true; return true;
return stats.mSneak; return stats.getMovementFlag (MWMechanics::NpcStats::Flag_Sneak);
case Combat: case Combat:
return stats.mCombat; return false;
} }
return false; return false;
@ -348,10 +349,31 @@ namespace MWClass
return weight; return weight;
} }
bool Npc::apply (const MWWorld::Ptr& ptr, const std::string& id,
const MWWorld::Ptr& actor) const
{
MWMechanics::CreatureStats& stats = getCreatureStats (ptr);
/// \todo consider instant effects
return stats.mActiveSpells.addSpell (id);
}
void Npc::skillUsageSucceeded (const MWWorld::Ptr& ptr, int skill, int usageType) const
{
MWMechanics::NpcStats& stats = getNpcStats (ptr);
MWWorld::LiveCellRef<ESM::NPC> *ref = ptr.get<ESM::NPC>();
const ESM::Class *class_ = MWBase::Environment::get().getWorld()->getStore().classes.find (
ref->base->cls);
stats.useSkill (skill, *class_, usageType);
}
void Npc::adjustRotation(const MWWorld::Ptr& ptr,float& x,float& y,float& z) const void Npc::adjustRotation(const MWWorld::Ptr& ptr,float& x,float& y,float& z) const
{ {
y = 0; y = 0;
x = 0; x = 0;
std::cout << "dfdfdfdfnzdofnmqsldgnmqskdhblqkdbv lqksdf";
} }
} }

@ -48,7 +48,7 @@ namespace MWClass
virtual std::string getScript (const MWWorld::Ptr& ptr) const; virtual std::string getScript (const MWWorld::Ptr& ptr) const;
///< Return name of the script attached to ptr ///< Return name of the script attached to ptr
virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const; virtual void setForceStance (const MWWorld::Ptr& ptr, Stance stance, bool force) const;
///< Force or unforce a stance. ///< Force or unforce a stance.
virtual void setStance (const MWWorld::Ptr& ptr, Stance stance, bool set) const; virtual void setStance (const MWWorld::Ptr& ptr, Stance stance, bool set) const;
@ -76,6 +76,15 @@ namespace MWClass
///< Returns total weight of objects inside this object (including modifications from magic ///< Returns total weight of objects inside this object (including modifications from magic
/// effects). Throws an exception, if the object can't hold other objects. /// effects). Throws an exception, if the object can't hold other objects.
virtual bool apply (const MWWorld::Ptr& ptr, const std::string& id,
const MWWorld::Ptr& actor) const;
///< Apply \a id on \a ptr.
/// \param actor Actor that is resposible for the ID being applied to \a ptr.
/// \return Any effect?
virtual void skillUsageSucceeded (const MWWorld::Ptr& ptr, int skill, int usageType) const;
///< Inform actor \a ptr that a skill use has succeeded.
virtual void adjustRotation(const MWWorld::Ptr& ptr,float& x,float& y,float& z) const; virtual void adjustRotation(const MWWorld::Ptr& ptr,float& x,float& y,float& z) const;
static void registerSelf(); static void registerSelf();

@ -8,8 +8,10 @@
#include "../mwworld/ptr.hpp" #include "../mwworld/ptr.hpp"
#include "../mwworld/actiontake.hpp" #include "../mwworld/actiontake.hpp"
#include "../mwworld/actionapply.hpp"
#include "../mwworld/cellstore.hpp" #include "../mwworld/cellstore.hpp"
#include "../mwworld/physicssystem.hpp" #include "../mwworld/physicssystem.hpp"
#include "../mwworld/player.hpp"
#include "../mwgui/window_manager.hpp" #include "../mwgui/window_manager.hpp"
#include "../mwgui/tooltips.hpp" #include "../mwgui/tooltips.hpp"
@ -144,4 +146,17 @@ namespace MWClass
return info; return info;
} }
boost::shared_ptr<MWWorld::Action> Potion::use (const MWWorld::Ptr& ptr) const
{
MWWorld::LiveCellRef<ESM::Potion> *ref =
ptr.get<ESM::Potion>();
ptr.getRefData().setCount (ptr.getRefData().getCount()-1);
MWWorld::Ptr actor = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
return boost::shared_ptr<MWWorld::Action> (
new MWWorld::ActionApply (actor, ref->base->mId, actor));
}
} }

@ -9,7 +9,7 @@ namespace MWClass
{ {
public: public:
virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const;
///< Add reference into a cell for rendering ///< Add reference into a cell for rendering
virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const;
@ -34,6 +34,9 @@ namespace MWClass
virtual int getValue (const MWWorld::Ptr& ptr) const; virtual int getValue (const MWWorld::Ptr& ptr) const;
///< Return trade value of the object. Throws an exception, if the object can't be traded. ///< Return trade value of the object. Throws an exception, if the object can't be traded.
virtual boost::shared_ptr<MWWorld::Action> use (const MWWorld::Ptr& ptr) const;
///< Generate action for using via inventory menu
static void registerSelf(); static void registerSelf();
virtual std::string getUpSoundId (const MWWorld::Ptr& ptr) const; virtual std::string getUpSoundId (const MWWorld::Ptr& ptr) const;

@ -9,7 +9,7 @@ namespace MWClass
{ {
public: public:
virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const; virtual void insertObjectRendering (const MWWorld::Ptr& ptr, MWRender::RenderingInterface& renderingInterface) const;
///< Add reference into a cell for rendering ///< Add reference into a cell for rendering
virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const; virtual void insertObject(const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics) const;

@ -203,10 +203,10 @@ namespace MWDialogue
MWMechanics::NpcStats PCstats = MWWorld::Class::get(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()).getNpcStats(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()); MWMechanics::NpcStats PCstats = MWWorld::Class::get(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()).getNpcStats(MWBase::Environment::get().getWorld()->getPlayer().getPlayer());
MWMechanics::NpcStats NPCstats = MWWorld::Class::get(actor).getNpcStats(actor); MWMechanics::NpcStats NPCstats = MWWorld::Class::get(actor).getNpcStats(actor);
int sameFaction = 0; int sameFaction = 0;
if(!NPCstats.mFactionRank.empty()) if(!NPCstats.getFactionRanks().empty())
{ {
std::string NPCFaction = NPCstats.mFactionRank.begin()->first; std::string NPCFaction = NPCstats.getFactionRanks().begin()->first;
if(PCstats.mFactionRank.find(toLower(NPCFaction)) != PCstats.mFactionRank.end()) sameFaction = 1; if(PCstats.getFactionRanks().find(toLower(NPCFaction)) != PCstats.getFactionRanks().end()) sameFaction = 1;
} }
if(!selectCompare<int,int>(comp,sameFaction,select.i)) return false; if(!selectCompare<int,int>(comp,sameFaction,select.i)) return false;
} }
@ -525,8 +525,8 @@ namespace MWDialogue
//MWWorld::Class npcClass = MWWorld::Class::get(actor); //MWWorld::Class npcClass = MWWorld::Class::get(actor);
MWMechanics::NpcStats stats = MWWorld::Class::get(actor).getNpcStats(actor); MWMechanics::NpcStats stats = MWWorld::Class::get(actor).getNpcStats(actor);
std::map<std::string,int>::iterator it = stats.mFactionRank.find(toLower(info.npcFaction)); std::map<std::string,int>::iterator it = stats.getFactionRanks().find(toLower(info.npcFaction));
if(it!=stats.mFactionRank.end()) if(it!=stats.getFactionRanks().end())
{ {
//check rank //check rank
if(it->second < (int)info.data.rank) return false; if(it->second < (int)info.data.rank) return false;
@ -542,8 +542,8 @@ namespace MWDialogue
if(!info.pcFaction.empty()) if(!info.pcFaction.empty())
{ {
MWMechanics::NpcStats stats = MWWorld::Class::get(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()).getNpcStats(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()); MWMechanics::NpcStats stats = MWWorld::Class::get(MWBase::Environment::get().getWorld()->getPlayer().getPlayer()).getNpcStats(MWBase::Environment::get().getWorld()->getPlayer().getPlayer());
std::map<std::string,int>::iterator it = stats.mFactionRank.find(toLower(info.pcFaction)); std::map<std::string,int>::iterator it = stats.getFactionRanks().find(toLower(info.pcFaction));
if(it!=stats.mFactionRank.end()) if(it!=stats.getFactionRanks().end())
{ {
//check rank //check rank
if(it->second < (int)info.data.PCrank) return false; if(it->second < (int)info.data.PCrank) return false;
@ -591,7 +591,7 @@ namespace MWDialogue
mIsInChoice = false; mIsInChoice = false;
mCompilerContext.setExtensions (&extensions); mCompilerContext.setExtensions (&extensions);
mDialogueMap.clear(); mDialogueMap.clear();
actorKnownTopics.clear(); mActorKnownTopics.clear();
ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list; ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list;
for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++)
{ {
@ -601,24 +601,24 @@ namespace MWDialogue
void DialogueManager::addTopic(std::string topic) void DialogueManager::addTopic(std::string topic)
{ {
knownTopics[toLower(topic)] = true; mKnownTopics[toLower(topic)] = true;
} }
void DialogueManager::parseText(std::string text) void DialogueManager::parseText(std::string text)
{ {
std::list<std::string>::iterator it; std::list<std::string>::iterator it;
for(it = actorKnownTopics.begin();it != actorKnownTopics.end();++it) for(it = mActorKnownTopics.begin();it != mActorKnownTopics.end();++it)
{ {
size_t pos = find_str_ci(text,*it,0); size_t pos = find_str_ci(text,*it,0);
if(pos !=std::string::npos) if(pos !=std::string::npos)
{ {
if(pos==0) if(pos==0)
{ {
knownTopics[*it] = true; mKnownTopics[*it] = true;
} }
else if(text.substr(pos -1,1) == " ") else if(text.substr(pos -1,1) == " ")
{ {
knownTopics[*it] = true; mKnownTopics[*it] = true;
} }
} }
} }
@ -632,7 +632,7 @@ namespace MWDialogue
mActor = actor; mActor = actor;
actorKnownTopics.clear(); mActorKnownTopics.clear();
//initialise the GUI //initialise the GUI
MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue); MWBase::Environment::get().getWindowManager()->pushGuiMode(MWGui::GM_Dialogue);
@ -742,7 +742,7 @@ namespace MWDialogue
std::list<std::string> keywordList; std::list<std::string> keywordList;
int choice = mChoice; int choice = mChoice;
mChoice = -1; mChoice = -1;
actorKnownTopics.clear(); mActorKnownTopics.clear();
MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow(); MWGui::DialogueWindow* win = MWBase::Environment::get().getWindowManager()->getDialogueWindow();
ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list; ESMS::RecListCaseT<ESM::Dialogue>::MapType dialogueList = MWBase::Environment::get().getWorld()->getStore().dialogs.list;
for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++) for(ESMS::RecListCaseT<ESM::Dialogue>::MapType::iterator it = dialogueList.begin(); it!=dialogueList.end();it++)
@ -755,9 +755,9 @@ namespace MWDialogue
{ {
if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true)) if (isMatching (mActor, *iter) && functionFilter(mActor,*iter,true))
{ {
actorKnownTopics.push_back(toLower(it->first)); mActorKnownTopics.push_back(toLower(it->first));
//does the player know the topic? //does the player know the topic?
if(knownTopics.find(toLower(it->first)) != knownTopics.end()) if(mKnownTopics.find(toLower(it->first)) != mKnownTopics.end())
{ {
keywordList.push_back(it->first); keywordList.push_back(it->first);
break; break;
@ -903,13 +903,13 @@ namespace MWDialogue
std::string factionID(""); std::string factionID("");
MWMechanics::NpcStats stats = MWWorld::Class::get(mActor).getNpcStats(mActor); MWMechanics::NpcStats stats = MWWorld::Class::get(mActor).getNpcStats(mActor);
if(stats.mFactionRank.empty()) if(stats.getFactionRanks().empty())
{ {
std::cout << "No faction for this actor!"; std::cout << "No faction for this actor!";
} }
else else
{ {
factionID = stats.mFactionRank.begin()->first; factionID = stats.getFactionRanks().begin()->first;
} }
return factionID; return factionID;
} }

@ -26,8 +26,8 @@ namespace MWDialogue
void updateTopics(); void updateTopics();
std::map<std::string,ESM::Dialogue> mDialogueMap; std::map<std::string,ESM::Dialogue> mDialogueMap;
std::map<std::string,bool> knownTopics;// Those are the topics the player knows. std::map<std::string,bool> mKnownTopics;// Those are the topics the player knows.
std::list<std::string> actorKnownTopics; std::list<std::string> mActorKnownTopics;
MWScript::CompilerContext mCompilerContext; MWScript::CompilerContext mCompilerContext;
std::ostream mErrorStream; std::ostream mErrorStream;

@ -15,15 +15,15 @@ BirthDialog::BirthDialog(WindowManager& parWindowManager)
// Centre dialog // Centre dialog
center(); center();
getWidget(spellArea, "SpellArea"); getWidget(mSpellArea, "SpellArea");
getWidget(birthImage, "BirthsignImage"); getWidget(mBirthImage, "BirthsignImage");
getWidget(birthList, "BirthsignList"); getWidget(mBirthList, "BirthsignList");
birthList->setScrollVisible(true); mBirthList->setScrollVisible(true);
birthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); mBirthList->eventListSelectAccept += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
birthList->eventListMouseItemActivate += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); mBirthList->eventListMouseItemActivate += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
birthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth); mBirthList->eventListChangePosition += MyGUI::newDelegate(this, &BirthDialog::onSelectBirth);
MyGUI::ButtonPtr backButton; MyGUI::ButtonPtr backButton;
getWidget(backButton, "BackButton"); getWidget(backButton, "BackButton");
@ -68,14 +68,14 @@ void BirthDialog::open()
void BirthDialog::setBirthId(const std::string &birthId) void BirthDialog::setBirthId(const std::string &birthId)
{ {
currentBirthId = birthId; mCurrentBirthId = birthId;
birthList->setIndexSelected(MyGUI::ITEM_NONE); mBirthList->setIndexSelected(MyGUI::ITEM_NONE);
size_t count = birthList->getItemCount(); size_t count = mBirthList->getItemCount();
for (size_t i = 0; i < count; ++i) for (size_t i = 0; i < count; ++i)
{ {
if (boost::iequals(*birthList->getItemDataAt<std::string>(i), birthId)) if (boost::iequals(*mBirthList->getItemDataAt<std::string>(i), birthId))
{ {
birthList->setIndexSelected(i); mBirthList->setIndexSelected(i);
break; break;
} }
} }
@ -100,11 +100,11 @@ void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index)
if (_index == MyGUI::ITEM_NONE) if (_index == MyGUI::ITEM_NONE)
return; return;
const std::string *birthId = birthList->getItemDataAt<std::string>(_index); const std::string *birthId = mBirthList->getItemDataAt<std::string>(_index);
if (boost::iequals(currentBirthId, *birthId)) if (boost::iequals(mCurrentBirthId, *birthId))
return; return;
currentBirthId = *birthId; mCurrentBirthId = *birthId;
updateSpells(); updateSpells();
} }
@ -112,7 +112,7 @@ void BirthDialog::onSelectBirth(MyGUI::ListBox* _sender, size_t _index)
void BirthDialog::updateBirths() void BirthDialog::updateBirths()
{ {
birthList->removeAllItems(); mBirthList->removeAllItems();
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
@ -122,34 +122,34 @@ void BirthDialog::updateBirths()
for (; it != end; ++it) for (; it != end; ++it)
{ {
const ESM::BirthSign &birth = it->second; const ESM::BirthSign &birth = it->second;
birthList->addItem(birth.name, it->first); mBirthList->addItem(birth.name, it->first);
if (boost::iequals(it->first, currentBirthId)) if (boost::iequals(it->first, mCurrentBirthId))
birthList->setIndexSelected(index); mBirthList->setIndexSelected(index);
++index; ++index;
} }
} }
void BirthDialog::updateSpells() void BirthDialog::updateSpells()
{ {
for (std::vector<MyGUI::WidgetPtr>::iterator it = spellItems.begin(); it != spellItems.end(); ++it) for (std::vector<MyGUI::WidgetPtr>::iterator it = mSpellItems.begin(); it != mSpellItems.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
spellItems.clear(); mSpellItems.clear();
if (currentBirthId.empty()) if (mCurrentBirthId.empty())
return; return;
MWSpellPtr spellWidget; MWSpellPtr spellWidget;
const int lineHeight = 18; const int lineHeight = 18;
MyGUI::IntCoord coord(0, 0, spellArea->getWidth(), 18); MyGUI::IntCoord coord(0, 0, mSpellArea->getWidth(), 18);
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
const ESM::BirthSign *birth = store.birthSigns.find(currentBirthId); const ESM::BirthSign *birth = store.birthSigns.find(mCurrentBirthId);
std::string texturePath = std::string("textures\\") + birth->texture; std::string texturePath = std::string("textures\\") + birth->texture;
fixTexturePath(texturePath); fixTexturePath(texturePath);
birthImage->setImageTexture(texturePath); mBirthImage->setImageTexture(texturePath);
std::vector<std::string> abilities, powers, spells; std::vector<std::string> abilities, powers, spells;
@ -183,25 +183,25 @@ void BirthDialog::updateSpells()
{ {
if (!categories[category].spells.empty()) if (!categories[category].spells.empty())
{ {
MyGUI::TextBox* label = spellArea->createWidget<MyGUI::TextBox>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label")); MyGUI::TextBox* label = mSpellArea->createWidget<MyGUI::TextBox>("SandBrightText", coord, MyGUI::Align::Default, std::string("Label"));
label->setCaption(mWindowManager.getGameSettingString(categories[category].label, "")); label->setCaption(mWindowManager.getGameSettingString(categories[category].label, ""));
spellItems.push_back(label); mSpellItems.push_back(label);
coord.top += lineHeight; coord.top += lineHeight;
std::vector<std::string>::const_iterator end = categories[category].spells.end(); std::vector<std::string>::const_iterator end = categories[category].spells.end();
for (std::vector<std::string>::const_iterator it = categories[category].spells.begin(); it != end; ++it) for (std::vector<std::string>::const_iterator it = categories[category].spells.begin(); it != end; ++it)
{ {
const std::string &spellId = *it; const std::string &spellId = *it;
spellWidget = spellArea->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("Spell") + boost::lexical_cast<std::string>(i)); spellWidget = mSpellArea->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("Spell") + boost::lexical_cast<std::string>(i));
spellWidget->setWindowManager(&mWindowManager); spellWidget->setWindowManager(&mWindowManager);
spellWidget->setSpellId(spellId); spellWidget->setSpellId(spellId);
spellItems.push_back(spellWidget); mSpellItems.push_back(spellWidget);
coord.top += lineHeight; coord.top += lineHeight;
MyGUI::IntCoord spellCoord = coord; MyGUI::IntCoord spellCoord = coord;
spellCoord.height = 24; // TODO: This should be fetched from the skin somehow, or perhaps a widget in the layout as a template? spellCoord.height = 24; // TODO: This should be fetched from the skin somehow, or perhaps a widget in the layout as a template?
spellWidget->createEffectWidgets(spellItems, spellArea, spellCoord, (category == 0) ? MWEffectList::EF_Constant : 0); spellWidget->createEffectWidgets(mSpellItems, mSpellArea, spellCoord, (category == 0) ? MWEffectList::EF_Constant : 0);
coord.top = spellCoord.top; coord.top = spellCoord.top;
++i; ++i;

@ -25,7 +25,7 @@ namespace MWGui
GM_Female GM_Female
}; };
const std::string &getBirthId() const { return currentBirthId; } const std::string &getBirthId() const { return mCurrentBirthId; }
void setBirthId(const std::string &raceId); void setBirthId(const std::string &raceId);
void setNextButtonShow(bool shown); void setNextButtonShow(bool shown);
@ -49,12 +49,12 @@ namespace MWGui
void updateBirths(); void updateBirths();
void updateSpells(); void updateSpells();
MyGUI::ListBox* birthList; MyGUI::ListBox* mBirthList;
MyGUI::WidgetPtr spellArea; MyGUI::WidgetPtr mSpellArea;
MyGUI::ImageBox* birthImage; MyGUI::ImageBox* mBirthImage;
std::vector<MyGUI::WidgetPtr> spellItems; std::vector<MyGUI::WidgetPtr> mSpellItems;
std::string currentBirthId; std::string mCurrentBirthId;
}; };
} }
#endif #endif

@ -1,6 +1,5 @@
#include "class.hpp" #include "class.hpp"
#include <assert.h>
#include <iterator> #include <iterator>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
@ -26,8 +25,8 @@ GenerateClassResultDialog::GenerateClassResultDialog(WindowManager& parWindowMan
setText("ReflectT", mWindowManager.getGameSettingString("sMessageQuestionAnswer1", "")); setText("ReflectT", mWindowManager.getGameSettingString("sMessageQuestionAnswer1", ""));
getWidget(classImage, "ClassImage"); getWidget(mClassImage, "ClassImage");
getWidget(className, "ClassName"); getWidget(mClassName, "ClassName");
MyGUI::ButtonPtr backButton; MyGUI::ButtonPtr backButton;
getWidget(backButton, "BackButton"); getWidget(backButton, "BackButton");
@ -51,15 +50,15 @@ void GenerateClassResultDialog::open()
std::string GenerateClassResultDialog::getClassId() const std::string GenerateClassResultDialog::getClassId() const
{ {
return className->getCaption(); return mClassName->getCaption();
} }
void GenerateClassResultDialog::setClassId(const std::string &classId) void GenerateClassResultDialog::setClassId(const std::string &classId)
{ {
currentClassId = classId; mCurrentClassId = classId;
classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds"); mClassImage->setImageTexture(std::string("textures\\levelup\\") + mCurrentClassId + ".dds");
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
className->setCaption(store.classes.find(currentClassId)->name); mClassName->setCaption(store.classes.find(mCurrentClassId)->name);
} }
// widget controls // widget controls
@ -82,29 +81,29 @@ PickClassDialog::PickClassDialog(WindowManager& parWindowManager)
// Centre dialog // Centre dialog
center(); center();
getWidget(specializationName, "SpecializationName"); getWidget(mSpecializationName, "SpecializationName");
getWidget(favoriteAttribute[0], "FavoriteAttribute0"); getWidget(mFavoriteAttribute[0], "FavoriteAttribute0");
getWidget(favoriteAttribute[1], "FavoriteAttribute1"); getWidget(mFavoriteAttribute[1], "FavoriteAttribute1");
favoriteAttribute[0]->setWindowManager(&mWindowManager); mFavoriteAttribute[0]->setWindowManager(&mWindowManager);
favoriteAttribute[1]->setWindowManager(&mWindowManager); mFavoriteAttribute[1]->setWindowManager(&mWindowManager);
for(int i = 0; i < 5; i++) for(int i = 0; i < 5; i++)
{ {
char theIndex = '0'+i; char theIndex = '0'+i;
getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex)); getWidget(mMajorSkill[i], std::string("MajorSkill").append(1, theIndex));
getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex)); getWidget(mMinorSkill[i], std::string("MinorSkill").append(1, theIndex));
majorSkill[i]->setWindowManager(&mWindowManager); mMajorSkill[i]->setWindowManager(&mWindowManager);
minorSkill[i]->setWindowManager(&mWindowManager); mMinorSkill[i]->setWindowManager(&mWindowManager);
} }
getWidget(classList, "ClassList"); getWidget(mClassList, "ClassList");
classList->setScrollVisible(true); mClassList->setScrollVisible(true);
classList->eventListSelectAccept += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); mClassList->eventListSelectAccept += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
classList->eventListMouseItemActivate += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); mClassList->eventListMouseItemActivate += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
classList->eventListChangePosition += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass); mClassList->eventListChangePosition += MyGUI::newDelegate(this, &PickClassDialog::onSelectClass);
getWidget(classImage, "ClassImage"); getWidget(mClassImage, "ClassImage");
MyGUI::ButtonPtr backButton; MyGUI::ButtonPtr backButton;
getWidget(backButton, "BackButton"); getWidget(backButton, "BackButton");
@ -148,14 +147,14 @@ void PickClassDialog::open()
void PickClassDialog::setClassId(const std::string &classId) void PickClassDialog::setClassId(const std::string &classId)
{ {
currentClassId = classId; mCurrentClassId = classId;
classList->setIndexSelected(MyGUI::ITEM_NONE); mClassList->setIndexSelected(MyGUI::ITEM_NONE);
size_t count = classList->getItemCount(); size_t count = mClassList->getItemCount();
for (size_t i = 0; i < count; ++i) for (size_t i = 0; i < count; ++i)
{ {
if (boost::iequals(*classList->getItemDataAt<std::string>(i), classId)) if (boost::iequals(*mClassList->getItemDataAt<std::string>(i), classId))
{ {
classList->setIndexSelected(i); mClassList->setIndexSelected(i);
break; break;
} }
} }
@ -180,11 +179,11 @@ void PickClassDialog::onSelectClass(MyGUI::ListBox* _sender, size_t _index)
if (_index == MyGUI::ITEM_NONE) if (_index == MyGUI::ITEM_NONE)
return; return;
const std::string *classId = classList->getItemDataAt<std::string>(_index); const std::string *classId = mClassList->getItemDataAt<std::string>(_index);
if (boost::iequals(currentClassId, *classId)) if (boost::iequals(mCurrentClassId, *classId))
return; return;
currentClassId = *classId; mCurrentClassId = *classId;
updateStats(); updateStats();
} }
@ -192,7 +191,7 @@ void PickClassDialog::onSelectClass(MyGUI::ListBox* _sender, size_t _index)
void PickClassDialog::updateClasses() void PickClassDialog::updateClasses()
{ {
classList->removeAllItems(); mClassList->removeAllItems();
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
@ -207,19 +206,19 @@ void PickClassDialog::updateClasses()
continue; continue;
const std::string &id = it->first; const std::string &id = it->first;
classList->addItem(klass.name, id); mClassList->addItem(klass.name, id);
if (boost::iequals(id, currentClassId)) if (boost::iequals(id, mCurrentClassId))
classList->setIndexSelected(index); mClassList->setIndexSelected(index);
++index; ++index;
} }
} }
void PickClassDialog::updateStats() void PickClassDialog::updateStats()
{ {
if (currentClassId.empty()) if (mCurrentClassId.empty())
return; return;
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
const ESM::Class *klass = store.classes.search(currentClassId); const ESM::Class *klass = store.classes.search(mCurrentClassId);
if (!klass) if (!klass)
return; return;
@ -231,23 +230,23 @@ void PickClassDialog::updateStats()
"sSpecializationStealth" "sSpecializationStealth"
}; };
std::string specName = mWindowManager.getGameSettingString(specIds[specialization], specIds[specialization]); std::string specName = mWindowManager.getGameSettingString(specIds[specialization], specIds[specialization]);
specializationName->setCaption(specName); mSpecializationName->setCaption(specName);
ToolTips::createSpecializationToolTip(specializationName, specName, specialization); ToolTips::createSpecializationToolTip(mSpecializationName, specName, specialization);
favoriteAttribute[0]->setAttributeId(klass->data.attribute[0]); mFavoriteAttribute[0]->setAttributeId(klass->data.attribute[0]);
favoriteAttribute[1]->setAttributeId(klass->data.attribute[1]); mFavoriteAttribute[1]->setAttributeId(klass->data.attribute[1]);
ToolTips::createAttributeToolTip(favoriteAttribute[0], favoriteAttribute[0]->getAttributeId()); ToolTips::createAttributeToolTip(mFavoriteAttribute[0], mFavoriteAttribute[0]->getAttributeId());
ToolTips::createAttributeToolTip(favoriteAttribute[1], favoriteAttribute[1]->getAttributeId()); ToolTips::createAttributeToolTip(mFavoriteAttribute[1], mFavoriteAttribute[1]->getAttributeId());
for (int i = 0; i < 5; ++i) for (int i = 0; i < 5; ++i)
{ {
minorSkill[i]->setSkillNumber(klass->data.skills[i][0]); mMinorSkill[i]->setSkillNumber(klass->data.skills[i][0]);
majorSkill[i]->setSkillNumber(klass->data.skills[i][1]); mMajorSkill[i]->setSkillNumber(klass->data.skills[i][1]);
ToolTips::createSkillToolTip(minorSkill[i], klass->data.skills[i][0]); ToolTips::createSkillToolTip(mMinorSkill[i], klass->data.skills[i][0]);
ToolTips::createSkillToolTip(majorSkill[i], klass->data.skills[i][1]); ToolTips::createSkillToolTip(mMajorSkill[i], klass->data.skills[i][1]);
} }
classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds"); mClassImage->setImageTexture(std::string("textures\\levelup\\") + mCurrentClassId + ".dds");
} }
/* InfoBoxDialog */ /* InfoBoxDialog */
@ -284,59 +283,59 @@ void InfoBoxDialog::layoutVertically(MyGUI::WidgetPtr widget, int margin)
InfoBoxDialog::InfoBoxDialog(WindowManager& parWindowManager) InfoBoxDialog::InfoBoxDialog(WindowManager& parWindowManager)
: WindowBase("openmw_infobox.layout", parWindowManager) : WindowBase("openmw_infobox.layout", parWindowManager)
, currentButton(-1) , mCurrentButton(-1)
{ {
getWidget(textBox, "TextBox"); getWidget(mTextBox, "TextBox");
getWidget(text, "Text"); getWidget(mText, "Text");
text->getSubWidgetText()->setWordWrap(true); mText->getSubWidgetText()->setWordWrap(true);
getWidget(buttonBar, "ButtonBar"); getWidget(mButtonBar, "ButtonBar");
center(); center();
} }
void InfoBoxDialog::setText(const std::string &str) void InfoBoxDialog::setText(const std::string &str)
{ {
text->setCaption(str); mText->setCaption(str);
textBox->setVisible(!str.empty()); mTextBox->setVisible(!str.empty());
fitToText(text); fitToText(mText);
} }
std::string InfoBoxDialog::getText() const std::string InfoBoxDialog::getText() const
{ {
return text->getCaption(); return mText->getCaption();
} }
void InfoBoxDialog::setButtons(ButtonList &buttons) void InfoBoxDialog::setButtons(ButtonList &buttons)
{ {
for (std::vector<MyGUI::ButtonPtr>::iterator it = this->buttons.begin(); it != this->buttons.end(); ++it) for (std::vector<MyGUI::ButtonPtr>::iterator it = this->mButtons.begin(); it != this->mButtons.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
this->buttons.clear(); this->mButtons.clear();
currentButton = -1; mCurrentButton = -1;
// TODO: The buttons should be generated from a template in the layout file, ie. cloning an existing widget // TODO: The buttons should be generated from a template in the layout file, ie. cloning an existing widget
MyGUI::ButtonPtr button; MyGUI::ButtonPtr button;
MyGUI::IntCoord coord = MyGUI::IntCoord(0, 0, buttonBar->getWidth(), 10); MyGUI::IntCoord coord = MyGUI::IntCoord(0, 0, mButtonBar->getWidth(), 10);
ButtonList::const_iterator end = buttons.end(); ButtonList::const_iterator end = buttons.end();
for (ButtonList::const_iterator it = buttons.begin(); it != end; ++it) for (ButtonList::const_iterator it = buttons.begin(); it != end; ++it)
{ {
const std::string &text = *it; const std::string &text = *it;
button = buttonBar->createWidget<MyGUI::Button>("MW_Button", coord, MyGUI::Align::Top | MyGUI::Align::HCenter, ""); button = mButtonBar->createWidget<MyGUI::Button>("MW_Button", coord, MyGUI::Align::Top | MyGUI::Align::HCenter, "");
button->getSubWidgetText()->setWordWrap(true); button->getSubWidgetText()->setWordWrap(true);
button->setCaption(text); button->setCaption(text);
fitToText(button); fitToText(button);
button->eventMouseButtonClick += MyGUI::newDelegate(this, &InfoBoxDialog::onButtonClicked); button->eventMouseButtonClick += MyGUI::newDelegate(this, &InfoBoxDialog::onButtonClicked);
coord.top += button->getHeight(); coord.top += button->getHeight();
this->buttons.push_back(button); this->mButtons.push_back(button);
} }
} }
void InfoBoxDialog::open() void InfoBoxDialog::open()
{ {
// Fix layout // Fix layout
layoutVertically(textBox, 4); layoutVertically(mTextBox, 4);
layoutVertically(buttonBar, 6); layoutVertically(mButtonBar, 6);
layoutVertically(mMainWidget, 4 + 6); layoutVertically(mMainWidget, 4 + 6);
center(); center();
@ -345,18 +344,18 @@ void InfoBoxDialog::open()
int InfoBoxDialog::getChosenButton() const int InfoBoxDialog::getChosenButton() const
{ {
return currentButton; return mCurrentButton;
} }
void InfoBoxDialog::onButtonClicked(MyGUI::WidgetPtr _sender) void InfoBoxDialog::onButtonClicked(MyGUI::WidgetPtr _sender)
{ {
std::vector<MyGUI::ButtonPtr>::const_iterator end = buttons.end(); std::vector<MyGUI::ButtonPtr>::const_iterator end = mButtons.end();
int i = 0; int i = 0;
for (std::vector<MyGUI::ButtonPtr>::const_iterator it = buttons.begin(); it != end; ++it) for (std::vector<MyGUI::ButtonPtr>::const_iterator it = mButtons.begin(); it != end; ++it)
{ {
if (*it == _sender) if (*it == _sender)
{ {
currentButton = i; mCurrentButton = i;
eventButtonSelected(i); eventButtonSelected(i);
return; return;
} }
@ -382,49 +381,49 @@ ClassChoiceDialog::ClassChoiceDialog(WindowManager& parWindowManager)
CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager) CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
: WindowBase("openmw_chargen_create_class.layout", parWindowManager) : WindowBase("openmw_chargen_create_class.layout", parWindowManager)
, specDialog(nullptr) , mSpecDialog(nullptr)
, attribDialog(nullptr) , mAttribDialog(nullptr)
, skillDialog(nullptr) , mSkillDialog(nullptr)
, descDialog(nullptr) , mDescDialog(nullptr)
{ {
// Centre dialog // Centre dialog
center(); center();
setText("SpecializationT", mWindowManager.getGameSettingString("sChooseClassMenu1", "Specialization")); setText("SpecializationT", mWindowManager.getGameSettingString("sChooseClassMenu1", "Specialization"));
getWidget(specializationName, "SpecializationName"); getWidget(mSpecializationName, "SpecializationName");
specializationName->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked); mSpecializationName->eventMouseButtonClick += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked);
setText("FavoriteAttributesT", mWindowManager.getGameSettingString("sChooseClassMenu2", "Favorite Attributes:")); setText("FavoriteAttributesT", mWindowManager.getGameSettingString("sChooseClassMenu2", "Favorite Attributes:"));
getWidget(favoriteAttribute0, "FavoriteAttribute0"); getWidget(mFavoriteAttribute0, "FavoriteAttribute0");
getWidget(favoriteAttribute1, "FavoriteAttribute1"); getWidget(mFavoriteAttribute1, "FavoriteAttribute1");
favoriteAttribute0->setWindowManager(&mWindowManager); mFavoriteAttribute0->setWindowManager(&mWindowManager);
favoriteAttribute1->setWindowManager(&mWindowManager); mFavoriteAttribute1->setWindowManager(&mWindowManager);
favoriteAttribute0->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); mFavoriteAttribute0->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
favoriteAttribute1->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked); mFavoriteAttribute1->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
setText("MajorSkillT", mWindowManager.getGameSettingString("sSkillClassMajor", "")); setText("MajorSkillT", mWindowManager.getGameSettingString("sSkillClassMajor", ""));
setText("MinorSkillT", mWindowManager.getGameSettingString("sSkillClassMinor", "")); setText("MinorSkillT", mWindowManager.getGameSettingString("sSkillClassMinor", ""));
for(int i = 0; i < 5; i++) for(int i = 0; i < 5; i++)
{ {
char theIndex = '0'+i; char theIndex = '0'+i;
getWidget(majorSkill[i], std::string("MajorSkill").append(1, theIndex)); getWidget(mMajorSkill[i], std::string("MajorSkill").append(1, theIndex));
getWidget(minorSkill[i], std::string("MinorSkill").append(1, theIndex)); getWidget(mMinorSkill[i], std::string("MinorSkill").append(1, theIndex));
skills.push_back(majorSkill[i]); mSkills.push_back(mMajorSkill[i]);
skills.push_back(minorSkill[i]); mSkills.push_back(mMinorSkill[i]);
} }
std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end(); std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end();
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it) for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it)
{ {
(*it)->setWindowManager(&mWindowManager); (*it)->setWindowManager(&mWindowManager);
(*it)->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked); (*it)->eventClicked += MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked);
} }
setText("LabelT", mWindowManager.getGameSettingString("sName", "")); setText("LabelT", mWindowManager.getGameSettingString("sName", ""));
getWidget(editName, "EditName"); getWidget(mEditName, "EditName");
// Make sure the edit box has focus // Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(editName); MyGUI::InputManager::getInstance().setKeyFocusWidget(mEditName);
MyGUI::ButtonPtr descriptionButton; MyGUI::ButtonPtr descriptionButton;
getWidget(descriptionButton, "DescriptionButton"); getWidget(descriptionButton, "DescriptionButton");
@ -441,20 +440,20 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
// Set default skills, attributes // Set default skills, attributes
favoriteAttribute0->setAttributeId(ESM::Attribute::Strength); mFavoriteAttribute0->setAttributeId(ESM::Attribute::Strength);
favoriteAttribute1->setAttributeId(ESM::Attribute::Agility); mFavoriteAttribute1->setAttributeId(ESM::Attribute::Agility);
majorSkill[0]->setSkillId(ESM::Skill::Block); mMajorSkill[0]->setSkillId(ESM::Skill::Block);
majorSkill[1]->setSkillId(ESM::Skill::Armorer); mMajorSkill[1]->setSkillId(ESM::Skill::Armorer);
majorSkill[2]->setSkillId(ESM::Skill::MediumArmor); mMajorSkill[2]->setSkillId(ESM::Skill::MediumArmor);
majorSkill[3]->setSkillId(ESM::Skill::HeavyArmor); mMajorSkill[3]->setSkillId(ESM::Skill::HeavyArmor);
majorSkill[4]->setSkillId(ESM::Skill::BluntWeapon); mMajorSkill[4]->setSkillId(ESM::Skill::BluntWeapon);
minorSkill[0]->setSkillId(ESM::Skill::LongBlade); mMinorSkill[0]->setSkillId(ESM::Skill::LongBlade);
minorSkill[1]->setSkillId(ESM::Skill::Axe); mMinorSkill[1]->setSkillId(ESM::Skill::Axe);
minorSkill[2]->setSkillId(ESM::Skill::Spear); mMinorSkill[2]->setSkillId(ESM::Skill::Spear);
minorSkill[3]->setSkillId(ESM::Skill::Athletics); mMinorSkill[3]->setSkillId(ESM::Skill::Athletics);
minorSkill[4]->setSkillId(ESM::Skill::Enchant); mMinorSkill[4]->setSkillId(ESM::Skill::Enchant);
setSpecialization(0); setSpecialization(0);
update(); update();
@ -462,44 +461,44 @@ CreateClassDialog::CreateClassDialog(WindowManager& parWindowManager)
CreateClassDialog::~CreateClassDialog() CreateClassDialog::~CreateClassDialog()
{ {
delete specDialog; delete mSpecDialog;
delete attribDialog; delete mAttribDialog;
delete skillDialog; delete mSkillDialog;
delete descDialog; delete mDescDialog;
} }
void CreateClassDialog::update() void CreateClassDialog::update()
{ {
for (int i = 0; i < 5; ++i) for (int i = 0; i < 5; ++i)
{ {
ToolTips::createSkillToolTip(majorSkill[i], majorSkill[i]->getSkillId()); ToolTips::createSkillToolTip(mMajorSkill[i], mMajorSkill[i]->getSkillId());
ToolTips::createSkillToolTip(minorSkill[i], minorSkill[i]->getSkillId()); ToolTips::createSkillToolTip(mMinorSkill[i], mMinorSkill[i]->getSkillId());
} }
ToolTips::createAttributeToolTip(favoriteAttribute0, favoriteAttribute0->getAttributeId()); ToolTips::createAttributeToolTip(mFavoriteAttribute0, mFavoriteAttribute0->getAttributeId());
ToolTips::createAttributeToolTip(favoriteAttribute1, favoriteAttribute1->getAttributeId()); ToolTips::createAttributeToolTip(mFavoriteAttribute1, mFavoriteAttribute1->getAttributeId());
} }
std::string CreateClassDialog::getName() const std::string CreateClassDialog::getName() const
{ {
return editName->getOnlyText(); return mEditName->getOnlyText();
} }
std::string CreateClassDialog::getDescription() const std::string CreateClassDialog::getDescription() const
{ {
return description; return mDescription;
} }
ESM::Class::Specialization CreateClassDialog::getSpecializationId() const ESM::Class::Specialization CreateClassDialog::getSpecializationId() const
{ {
return specializationId; return mSpecializationId;
} }
std::vector<int> CreateClassDialog::getFavoriteAttributes() const std::vector<int> CreateClassDialog::getFavoriteAttributes() const
{ {
std::vector<int> v; std::vector<int> v;
v.push_back(favoriteAttribute0->getAttributeId()); v.push_back(mFavoriteAttribute0->getAttributeId());
v.push_back(favoriteAttribute1->getAttributeId()); v.push_back(mFavoriteAttribute1->getAttributeId());
return v; return v;
} }
@ -508,7 +507,7 @@ std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMajorSkills() const
std::vector<ESM::Skill::SkillEnum> v; std::vector<ESM::Skill::SkillEnum> v;
for(int i = 0; i < 5; i++) for(int i = 0; i < 5; i++)
{ {
v.push_back(majorSkill[i]->getSkillId()); v.push_back(mMajorSkill[i]->getSkillId());
} }
return v; return v;
} }
@ -518,7 +517,7 @@ std::vector<ESM::Skill::SkillEnum> CreateClassDialog::getMinorSkills() const
std::vector<ESM::Skill::SkillEnum> v; std::vector<ESM::Skill::SkillEnum> v;
for(int i=0; i < 5; i++) for(int i=0; i < 5; i++)
{ {
v.push_back(minorSkill[i]->getSkillId()); v.push_back(mMinorSkill[i]->getSkillId());
} }
return v; return v;
} }
@ -557,108 +556,108 @@ void CreateClassDialog::open()
void CreateClassDialog::onDialogCancel() void CreateClassDialog::onDialogCancel()
{ {
if (specDialog) if (mSpecDialog)
{ {
mWindowManager.removeDialog(specDialog); mWindowManager.removeDialog(mSpecDialog);
specDialog = 0; mSpecDialog = 0;
} }
if (attribDialog) if (mAttribDialog)
{ {
mWindowManager.removeDialog(attribDialog); mWindowManager.removeDialog(mAttribDialog);
attribDialog = 0; mAttribDialog = 0;
} }
if (skillDialog) if (mSkillDialog)
{ {
mWindowManager.removeDialog(skillDialog); mWindowManager.removeDialog(mSkillDialog);
skillDialog = 0; mSkillDialog = 0;
} }
if (descDialog) if (mDescDialog)
{ {
mWindowManager.removeDialog(descDialog); mWindowManager.removeDialog(mDescDialog);
descDialog = 0; mDescDialog = 0;
} }
} }
void CreateClassDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender) void CreateClassDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender)
{ {
delete specDialog; delete mSpecDialog;
specDialog = new SelectSpecializationDialog(mWindowManager); mSpecDialog = new SelectSpecializationDialog(mWindowManager);
specDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); mSpecDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
specDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected); mSpecDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected);
specDialog->setVisible(true); mSpecDialog->setVisible(true);
} }
void CreateClassDialog::onSpecializationSelected() void CreateClassDialog::onSpecializationSelected()
{ {
specializationId = specDialog->getSpecializationId(); mSpecializationId = mSpecDialog->getSpecializationId();
setSpecialization(specializationId); setSpecialization(mSpecializationId);
mWindowManager.removeDialog(specDialog); mWindowManager.removeDialog(mSpecDialog);
specDialog = 0; mSpecDialog = 0;
} }
void CreateClassDialog::setSpecialization(int id) void CreateClassDialog::setSpecialization(int id)
{ {
specializationId = (ESM::Class::Specialization) id; mSpecializationId = (ESM::Class::Specialization) id;
static const char *specIds[3] = { static const char *specIds[3] = {
"sSpecializationCombat", "sSpecializationCombat",
"sSpecializationMagic", "sSpecializationMagic",
"sSpecializationStealth" "sSpecializationStealth"
}; };
std::string specName = mWindowManager.getGameSettingString(specIds[specializationId], specIds[specializationId]); std::string specName = mWindowManager.getGameSettingString(specIds[mSpecializationId], specIds[mSpecializationId]);
specializationName->setCaption(specName); mSpecializationName->setCaption(specName);
ToolTips::createSpecializationToolTip(specializationName, specName, specializationId); ToolTips::createSpecializationToolTip(mSpecializationName, specName, mSpecializationId);
} }
void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender) void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
{ {
delete attribDialog; delete mAttribDialog;
attribDialog = new SelectAttributeDialog(mWindowManager); mAttribDialog = new SelectAttributeDialog(mWindowManager);
attribDialog->setAffectedWidget(_sender); mAttribDialog->setAffectedWidget(_sender);
attribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); mAttribDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
attribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected); mAttribDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
attribDialog->setVisible(true); mAttribDialog->setVisible(true);
} }
void CreateClassDialog::onAttributeSelected() void CreateClassDialog::onAttributeSelected()
{ {
ESM::Attribute::AttributeID id = attribDialog->getAttributeId(); ESM::Attribute::AttributeID id = mAttribDialog->getAttributeId();
Widgets::MWAttributePtr attribute = attribDialog->getAffectedWidget(); Widgets::MWAttributePtr attribute = mAttribDialog->getAffectedWidget();
if (attribute == favoriteAttribute0) if (attribute == mFavoriteAttribute0)
{ {
if (favoriteAttribute1->getAttributeId() == id) if (mFavoriteAttribute1->getAttributeId() == id)
favoriteAttribute1->setAttributeId(favoriteAttribute0->getAttributeId()); mFavoriteAttribute1->setAttributeId(mFavoriteAttribute0->getAttributeId());
} }
else if (attribute == favoriteAttribute1) else if (attribute == mFavoriteAttribute1)
{ {
if (favoriteAttribute0->getAttributeId() == id) if (mFavoriteAttribute0->getAttributeId() == id)
favoriteAttribute0->setAttributeId(favoriteAttribute1->getAttributeId()); mFavoriteAttribute0->setAttributeId(mFavoriteAttribute1->getAttributeId());
} }
attribute->setAttributeId(id); attribute->setAttributeId(id);
mWindowManager.removeDialog(attribDialog); mWindowManager.removeDialog(mAttribDialog);
attribDialog = 0; mAttribDialog = 0;
update(); update();
} }
void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender) void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
{ {
delete skillDialog; delete mSkillDialog;
skillDialog = new SelectSkillDialog(mWindowManager); mSkillDialog = new SelectSkillDialog(mWindowManager);
skillDialog->setAffectedWidget(_sender); mSkillDialog->setAffectedWidget(_sender);
skillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel); mSkillDialog->eventCancel += MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
skillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected); mSkillDialog->eventItemSelected += MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
skillDialog->setVisible(true); mSkillDialog->setVisible(true);
} }
void CreateClassDialog::onSkillSelected() void CreateClassDialog::onSkillSelected()
{ {
ESM::Skill::SkillEnum id = skillDialog->getSkillId(); ESM::Skill::SkillEnum id = mSkillDialog->getSkillId();
Widgets::MWSkillPtr skill = skillDialog->getAffectedWidget(); Widgets::MWSkillPtr skill = mSkillDialog->getAffectedWidget();
// Avoid duplicate skills by swapping any skill field that matches the selected one // Avoid duplicate skills by swapping any skill field that matches the selected one
std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end(); std::vector<Widgets::MWSkillPtr>::const_iterator end = mSkills.end();
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it) for (std::vector<Widgets::MWSkillPtr>::const_iterator it = mSkills.begin(); it != end; ++it)
{ {
if (*it == skill) if (*it == skill)
continue; continue;
@ -669,25 +668,25 @@ void CreateClassDialog::onSkillSelected()
} }
} }
skill->setSkillId(skillDialog->getSkillId()); skill->setSkillId(mSkillDialog->getSkillId());
mWindowManager.removeDialog(skillDialog); mWindowManager.removeDialog(mSkillDialog);
skillDialog = 0; mSkillDialog = 0;
update(); update();
} }
void CreateClassDialog::onDescriptionClicked(MyGUI::Widget* _sender) void CreateClassDialog::onDescriptionClicked(MyGUI::Widget* _sender)
{ {
descDialog = new DescriptionDialog(mWindowManager); mDescDialog = new DescriptionDialog(mWindowManager);
descDialog->setTextInput(description); mDescDialog->setTextInput(mDescription);
descDialog->eventDone += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered); mDescDialog->eventDone += MyGUI::newDelegate(this, &CreateClassDialog::onDescriptionEntered);
descDialog->setVisible(true); mDescDialog->setVisible(true);
} }
void CreateClassDialog::onDescriptionEntered(WindowBase* parWindow) void CreateClassDialog::onDescriptionEntered(WindowBase* parWindow)
{ {
description = descDialog->getTextInput(); mDescription = mDescDialog->getTextInput();
mWindowManager.removeDialog(descDialog); mWindowManager.removeDialog(mDescDialog);
descDialog = 0; mDescDialog = 0;
} }
void CreateClassDialog::onOkClicked(MyGUI::Widget* _sender) void CreateClassDialog::onOkClicked(MyGUI::Widget* _sender)
@ -710,24 +709,24 @@ SelectSpecializationDialog::SelectSpecializationDialog(WindowManager& parWindowM
setText("LabelT", mWindowManager.getGameSettingString("sSpecializationMenu1", "")); setText("LabelT", mWindowManager.getGameSettingString("sSpecializationMenu1", ""));
getWidget(specialization0, "Specialization0"); getWidget(mSpecialization0, "Specialization0");
getWidget(specialization1, "Specialization1"); getWidget(mSpecialization1, "Specialization1");
getWidget(specialization2, "Specialization2"); getWidget(mSpecialization2, "Specialization2");
std::string combat = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""); std::string combat = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], "");
std::string magic = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Magic], ""); std::string magic = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Magic], "");
std::string stealth = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Stealth], ""); std::string stealth = mWindowManager.getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Stealth], "");
specialization0->setCaption(combat); mSpecialization0->setCaption(combat);
specialization0->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); mSpecialization0->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specialization1->setCaption(magic); mSpecialization1->setCaption(magic);
specialization1->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); mSpecialization1->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specialization2->setCaption(stealth); mSpecialization2->setCaption(stealth);
specialization2->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked); mSpecialization2->eventMouseButtonClick += MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specializationId = ESM::Class::Combat; mSpecializationId = ESM::Class::Combat;
ToolTips::createSpecializationToolTip(specialization0, combat, ESM::Class::Combat); ToolTips::createSpecializationToolTip(mSpecialization0, combat, ESM::Class::Combat);
ToolTips::createSpecializationToolTip(specialization1, magic, ESM::Class::Magic); ToolTips::createSpecializationToolTip(mSpecialization1, magic, ESM::Class::Magic);
ToolTips::createSpecializationToolTip(specialization2, stealth, ESM::Class::Stealth); ToolTips::createSpecializationToolTip(mSpecialization2, stealth, ESM::Class::Stealth);
MyGUI::ButtonPtr cancelButton; MyGUI::ButtonPtr cancelButton;
getWidget(cancelButton, "CancelButton"); getWidget(cancelButton, "CancelButton");
@ -748,12 +747,12 @@ SelectSpecializationDialog::~SelectSpecializationDialog()
void SelectSpecializationDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender) void SelectSpecializationDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender)
{ {
if (_sender == specialization0) if (_sender == mSpecialization0)
specializationId = ESM::Class::Combat; mSpecializationId = ESM::Class::Combat;
else if (_sender == specialization1) else if (_sender == mSpecialization1)
specializationId = ESM::Class::Magic; mSpecializationId = ESM::Class::Magic;
else if (_sender == specialization2) else if (_sender == mSpecialization2)
specializationId = ESM::Class::Stealth; mSpecializationId = ESM::Class::Stealth;
else else
return; return;
@ -807,7 +806,7 @@ SelectAttributeDialog::~SelectAttributeDialog()
void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender) void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
{ {
// TODO: Change MWAttribute to set and get AttributeID enum instead of int // TODO: Change MWAttribute to set and get AttributeID enum instead of int
attributeId = static_cast<ESM::Attribute::AttributeID>(_sender->getAttributeId()); mAttributeId = static_cast<ESM::Attribute::AttributeID>(_sender->getAttributeId());
eventItemSelected(); eventItemSelected();
} }
@ -833,44 +832,44 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager)
for(int i = 0; i < 9; i++) for(int i = 0; i < 9; i++)
{ {
char theIndex = '0'+i; char theIndex = '0'+i;
getWidget(combatSkill[i], std::string("CombatSkill").append(1, theIndex)); getWidget(mCombatSkill[i], std::string("CombatSkill").append(1, theIndex));
getWidget(magicSkill[i], std::string("MagicSkill").append(1, theIndex)); getWidget(mMagicSkill[i], std::string("MagicSkill").append(1, theIndex));
getWidget(stealthSkill[i], std::string("StealthSkill").append(1, theIndex)); getWidget(mStealthSkill[i], std::string("StealthSkill").append(1, theIndex));
} }
struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} skills[3][9] = { struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} mSkills[3][9] = {
{ {
{combatSkill[0], ESM::Skill::Block}, {mCombatSkill[0], ESM::Skill::Block},
{combatSkill[1], ESM::Skill::Armorer}, {mCombatSkill[1], ESM::Skill::Armorer},
{combatSkill[2], ESM::Skill::MediumArmor}, {mCombatSkill[2], ESM::Skill::MediumArmor},
{combatSkill[3], ESM::Skill::HeavyArmor}, {mCombatSkill[3], ESM::Skill::HeavyArmor},
{combatSkill[4], ESM::Skill::BluntWeapon}, {mCombatSkill[4], ESM::Skill::BluntWeapon},
{combatSkill[5], ESM::Skill::LongBlade}, {mCombatSkill[5], ESM::Skill::LongBlade},
{combatSkill[6], ESM::Skill::Axe}, {mCombatSkill[6], ESM::Skill::Axe},
{combatSkill[7], ESM::Skill::Spear}, {mCombatSkill[7], ESM::Skill::Spear},
{combatSkill[8], ESM::Skill::Athletics} {mCombatSkill[8], ESM::Skill::Athletics}
}, },
{ {
{magicSkill[0], ESM::Skill::Enchant}, {mMagicSkill[0], ESM::Skill::Enchant},
{magicSkill[1], ESM::Skill::Destruction}, {mMagicSkill[1], ESM::Skill::Destruction},
{magicSkill[2], ESM::Skill::Alteration}, {mMagicSkill[2], ESM::Skill::Alteration},
{magicSkill[3], ESM::Skill::Illusion}, {mMagicSkill[3], ESM::Skill::Illusion},
{magicSkill[4], ESM::Skill::Conjuration}, {mMagicSkill[4], ESM::Skill::Conjuration},
{magicSkill[5], ESM::Skill::Mysticism}, {mMagicSkill[5], ESM::Skill::Mysticism},
{magicSkill[6], ESM::Skill::Restoration}, {mMagicSkill[6], ESM::Skill::Restoration},
{magicSkill[7], ESM::Skill::Alchemy}, {mMagicSkill[7], ESM::Skill::Alchemy},
{magicSkill[8], ESM::Skill::Unarmored} {mMagicSkill[8], ESM::Skill::Unarmored}
}, },
{ {
{stealthSkill[0], ESM::Skill::Security}, {mStealthSkill[0], ESM::Skill::Security},
{stealthSkill[1], ESM::Skill::Sneak}, {mStealthSkill[1], ESM::Skill::Sneak},
{stealthSkill[2], ESM::Skill::Acrobatics}, {mStealthSkill[2], ESM::Skill::Acrobatics},
{stealthSkill[3], ESM::Skill::LightArmor}, {mStealthSkill[3], ESM::Skill::LightArmor},
{stealthSkill[4], ESM::Skill::ShortBlade}, {mStealthSkill[4], ESM::Skill::ShortBlade},
{stealthSkill[5] ,ESM::Skill::Marksman}, {mStealthSkill[5] ,ESM::Skill::Marksman},
{stealthSkill[6] ,ESM::Skill::Mercantile}, {mStealthSkill[6] ,ESM::Skill::Mercantile},
{stealthSkill[7] ,ESM::Skill::Speechcraft}, {mStealthSkill[7] ,ESM::Skill::Speechcraft},
{stealthSkill[8] ,ESM::Skill::HandToHand} {mStealthSkill[8] ,ESM::Skill::HandToHand}
} }
}; };
@ -878,10 +877,10 @@ SelectSkillDialog::SelectSkillDialog(WindowManager& parWindowManager)
{ {
for (int i = 0; i < 9; ++i) for (int i = 0; i < 9; ++i)
{ {
skills[spec][i].widget->setWindowManager(&mWindowManager); mSkills[spec][i].widget->setWindowManager(&mWindowManager);
skills[spec][i].widget->setSkillId(skills[spec][i].skillId); mSkills[spec][i].widget->setSkillId(mSkills[spec][i].skillId);
skills[spec][i].widget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked); mSkills[spec][i].widget->eventClicked += MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
ToolTips::createSkillToolTip(skills[spec][i].widget, skills[spec][i].widget->getSkillId()); ToolTips::createSkillToolTip(mSkills[spec][i].widget, mSkills[spec][i].widget->getSkillId());
} }
} }
@ -904,7 +903,7 @@ SelectSkillDialog::~SelectSkillDialog()
void SelectSkillDialog::onSkillClicked(Widgets::MWSkillPtr _sender) void SelectSkillDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
{ {
skillId = _sender->getSkillId(); mSkillId = _sender->getSkillId();
eventItemSelected(); eventItemSelected();
} }
@ -921,7 +920,7 @@ DescriptionDialog::DescriptionDialog(WindowManager& parWindowManager)
// Centre dialog // Centre dialog
center(); center();
getWidget(textEdit, "TextEdit"); getWidget(mTextEdit, "TextEdit");
MyGUI::ButtonPtr okButton; MyGUI::ButtonPtr okButton;
getWidget(okButton, "OKButton"); getWidget(okButton, "OKButton");
@ -931,7 +930,7 @@ DescriptionDialog::DescriptionDialog(WindowManager& parWindowManager)
okButton->setCoord(234 - buttonWidth, 214, buttonWidth, 24); okButton->setCoord(234 - buttonWidth, 214, buttonWidth, 24);
// Make sure the edit box has focus // Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit);
MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget); MyGUI::InputManager::getInstance().addWidgetModal(mMainWidget);
} }

@ -45,11 +45,11 @@ namespace MWGui
void fitToText(MyGUI::TextBox* widget); void fitToText(MyGUI::TextBox* widget);
void layoutVertically(MyGUI::WidgetPtr widget, int margin); void layoutVertically(MyGUI::WidgetPtr widget, int margin);
int currentButton; int mCurrentButton;
MyGUI::WidgetPtr textBox; MyGUI::WidgetPtr mTextBox;
MyGUI::TextBox* text; MyGUI::TextBox* mText;
MyGUI::WidgetPtr buttonBar; MyGUI::WidgetPtr mButtonBar;
std::vector<MyGUI::ButtonPtr> buttons; std::vector<MyGUI::ButtonPtr> mButtons;
}; };
// Lets the player choose between 3 ways of creating a class // Lets the player choose between 3 ways of creating a class
@ -90,10 +90,10 @@ namespace MWGui
void onBackClicked(MyGUI::Widget* _sender); void onBackClicked(MyGUI::Widget* _sender);
private: private:
MyGUI::ImageBox* classImage; MyGUI::ImageBox* mClassImage;
MyGUI::TextBox* className; MyGUI::TextBox* mClassName;
std::string currentClassId; std::string mCurrentClassId;
}; };
class PickClassDialog : public WindowBase class PickClassDialog : public WindowBase
@ -101,7 +101,7 @@ namespace MWGui
public: public:
PickClassDialog(WindowManager& parWindowManager); PickClassDialog(WindowManager& parWindowManager);
const std::string &getClassId() const { return currentClassId; } const std::string &getClassId() const { return mCurrentClassId; }
void setClassId(const std::string &classId); void setClassId(const std::string &classId);
void setNextButtonShow(bool shown); void setNextButtonShow(bool shown);
@ -125,14 +125,14 @@ namespace MWGui
void updateClasses(); void updateClasses();
void updateStats(); void updateStats();
MyGUI::ImageBox* classImage; MyGUI::ImageBox* mClassImage;
MyGUI::ListBox* classList; MyGUI::ListBox* mClassList;
MyGUI::TextBox* specializationName; MyGUI::TextBox* mSpecializationName;
Widgets::MWAttributePtr favoriteAttribute[2]; Widgets::MWAttributePtr mFavoriteAttribute[2];
Widgets::MWSkillPtr majorSkill[5]; Widgets::MWSkillPtr mMajorSkill[5];
Widgets::MWSkillPtr minorSkill[5]; Widgets::MWSkillPtr mMinorSkill[5];
std::string currentClassId; std::string mCurrentClassId;
}; };
class SelectSpecializationDialog : public WindowBase class SelectSpecializationDialog : public WindowBase
@ -141,7 +141,7 @@ namespace MWGui
SelectSpecializationDialog(WindowManager& parWindowManager); SelectSpecializationDialog(WindowManager& parWindowManager);
~SelectSpecializationDialog(); ~SelectSpecializationDialog();
ESM::Class::Specialization getSpecializationId() const { return specializationId; } ESM::Class::Specialization getSpecializationId() const { return mSpecializationId; }
// Events // Events
typedef delegates::CMultiDelegate0 EventHandle_Void; typedef delegates::CMultiDelegate0 EventHandle_Void;
@ -161,9 +161,9 @@ namespace MWGui
void onCancelClicked(MyGUI::Widget* _sender); void onCancelClicked(MyGUI::Widget* _sender);
private: private:
MyGUI::TextBox *specialization0, *specialization1, *specialization2; MyGUI::TextBox *mSpecialization0, *mSpecialization1, *mSpecialization2;
ESM::Class::Specialization specializationId; ESM::Class::Specialization mSpecializationId;
}; };
class SelectAttributeDialog : public WindowBase class SelectAttributeDialog : public WindowBase
@ -172,9 +172,9 @@ namespace MWGui
SelectAttributeDialog(WindowManager& parWindowManager); SelectAttributeDialog(WindowManager& parWindowManager);
~SelectAttributeDialog(); ~SelectAttributeDialog();
ESM::Attribute::AttributeID getAttributeId() const { return attributeId; } ESM::Attribute::AttributeID getAttributeId() const { return mAttributeId; }
Widgets::MWAttributePtr getAffectedWidget() const { return affectedWidget; } Widgets::MWAttributePtr getAffectedWidget() const { return mAffectedWidget; }
void setAffectedWidget(Widgets::MWAttributePtr widget) { affectedWidget = widget; } void setAffectedWidget(Widgets::MWAttributePtr widget) { mAffectedWidget = widget; }
// Events // Events
typedef delegates::CMultiDelegate0 EventHandle_Void; typedef delegates::CMultiDelegate0 EventHandle_Void;
@ -194,9 +194,9 @@ namespace MWGui
void onCancelClicked(MyGUI::Widget* _sender); void onCancelClicked(MyGUI::Widget* _sender);
private: private:
Widgets::MWAttributePtr affectedWidget; Widgets::MWAttributePtr mAffectedWidget;
ESM::Attribute::AttributeID attributeId; ESM::Attribute::AttributeID mAttributeId;
}; };
class SelectSkillDialog : public WindowBase class SelectSkillDialog : public WindowBase
@ -205,9 +205,9 @@ namespace MWGui
SelectSkillDialog(WindowManager& parWindowManager); SelectSkillDialog(WindowManager& parWindowManager);
~SelectSkillDialog(); ~SelectSkillDialog();
ESM::Skill::SkillEnum getSkillId() const { return skillId; } ESM::Skill::SkillEnum getSkillId() const { return mSkillId; }
Widgets::MWSkillPtr getAffectedWidget() const { return affectedWidget; } Widgets::MWSkillPtr getAffectedWidget() const { return mAffectedWidget; }
void setAffectedWidget(Widgets::MWSkillPtr widget) { affectedWidget = widget; } void setAffectedWidget(Widgets::MWSkillPtr widget) { mAffectedWidget = widget; }
// Events // Events
typedef delegates::CMultiDelegate0 EventHandle_Void; typedef delegates::CMultiDelegate0 EventHandle_Void;
@ -227,12 +227,12 @@ namespace MWGui
void onCancelClicked(MyGUI::Widget* _sender); void onCancelClicked(MyGUI::Widget* _sender);
private: private:
Widgets::MWSkillPtr combatSkill[9]; Widgets::MWSkillPtr mCombatSkill[9];
Widgets::MWSkillPtr magicSkill[9]; Widgets::MWSkillPtr mMagicSkill[9];
Widgets::MWSkillPtr stealthSkill[9]; Widgets::MWSkillPtr mStealthSkill[9];
Widgets::MWSkillPtr affectedWidget; Widgets::MWSkillPtr mAffectedWidget;
ESM::Skill::SkillEnum skillId; ESM::Skill::SkillEnum mSkillId;
}; };
class DescriptionDialog : public WindowBase class DescriptionDialog : public WindowBase
@ -241,14 +241,14 @@ namespace MWGui
DescriptionDialog(WindowManager& parWindowManager); DescriptionDialog(WindowManager& parWindowManager);
~DescriptionDialog(); ~DescriptionDialog();
std::string getTextInput() const { return textEdit ? textEdit->getOnlyText() : ""; } std::string getTextInput() const { return mTextEdit ? mTextEdit->getOnlyText() : ""; }
void setTextInput(const std::string &text) { if (textEdit) textEdit->setOnlyText(text); } void setTextInput(const std::string &text) { if (mTextEdit) mTextEdit->setOnlyText(text); }
protected: protected:
void onOkClicked(MyGUI::Widget* _sender); void onOkClicked(MyGUI::Widget* _sender);
private: private:
MyGUI::EditPtr textEdit; MyGUI::EditPtr mTextEdit;
}; };
class CreateClassDialog : public WindowBase class CreateClassDialog : public WindowBase
@ -294,20 +294,20 @@ namespace MWGui
void update(); void update();
private: private:
MyGUI::EditPtr editName; MyGUI::EditPtr mEditName;
MyGUI::TextBox* specializationName; MyGUI::TextBox* mSpecializationName;
Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1; Widgets::MWAttributePtr mFavoriteAttribute0, mFavoriteAttribute1;
Widgets::MWSkillPtr majorSkill[5]; Widgets::MWSkillPtr mMajorSkill[5];
Widgets::MWSkillPtr minorSkill[5]; Widgets::MWSkillPtr mMinorSkill[5];
std::vector<Widgets::MWSkillPtr> skills; std::vector<Widgets::MWSkillPtr> mSkills;
std::string description; std::string mDescription;
SelectSpecializationDialog *specDialog; SelectSpecializationDialog *mSpecDialog;
SelectAttributeDialog *attribDialog; SelectAttributeDialog *mAttribDialog;
SelectSkillDialog *skillDialog; SelectSkillDialog *mSkillDialog;
DescriptionDialog *descDialog; DescriptionDialog *mDescDialog;
ESM::Class::Specialization specializationId; ESM::Class::Specialization mSpecializationId;
}; };
} }
#endif #endif

@ -1,6 +1,5 @@
#include "dialogue.hpp" #include "dialogue.hpp"
#include <assert.h>
#include <iostream> #include <iostream>
#include <iterator> #include <iterator>
@ -51,9 +50,9 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
center(); center();
//History view //History view
getWidget(history, "History"); getWidget(mHistory, "History");
history->setOverflowToTheLeft(true); mHistory->setOverflowToTheLeft(true);
history->setMaxTextLength(1000000); mHistory->setMaxTextLength(1000000);
Widget* eventbox; Widget* eventbox;
//An EditBox cannot receive mouse click events, so we use an //An EditBox cannot receive mouse click events, so we use an
@ -63,36 +62,36 @@ DialogueWindow::DialogueWindow(WindowManager& parWindowManager)
eventbox->eventMouseWheel += MyGUI::newDelegate(this, &DialogueWindow::onMouseWheel); eventbox->eventMouseWheel += MyGUI::newDelegate(this, &DialogueWindow::onMouseWheel);
//Topics list //Topics list
getWidget(topicsList, "TopicsList"); getWidget(mTopicsList, "TopicsList");
topicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic); mTopicsList->eventItemSelected += MyGUI::newDelegate(this, &DialogueWindow::onSelectTopic);
MyGUI::ButtonPtr byeButton; MyGUI::ButtonPtr byeButton;
getWidget(byeButton, "ByeButton"); getWidget(byeButton, "ByeButton");
byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked); byeButton->eventMouseButtonClick += MyGUI::newDelegate(this, &DialogueWindow::onByeClicked);
getWidget(pDispositionBar, "Disposition"); getWidget(mDispositionBar, "Disposition");
getWidget(pDispositionText,"DispositionText"); getWidget(mDispositionText,"DispositionText");
static_cast<MyGUI::Window*>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &DialogueWindow::onWindowResize); static_cast<MyGUI::Window*>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &DialogueWindow::onWindowResize);
} }
void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender) void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender)
{ {
ISubWidgetText* t = history->getClient()->getSubWidgetText(); ISubWidgetText* t = mHistory->getClient()->getSubWidgetText();
if(t == nullptr) if(t == nullptr)
return; return;
const IntPoint& lastPressed = InputManager::getInstance().getLastPressedPosition(MyGUI::MouseButton::Left); const IntPoint& lastPressed = InputManager::getInstance().getLastPressedPosition(MyGUI::MouseButton::Left);
size_t cursorPosition = t->getCursorPosition(lastPressed); size_t cursorPosition = t->getCursorPosition(lastPressed);
MyGUI::UString color = history->getColorAtPos(cursorPosition); MyGUI::UString color = mHistory->getColorAtPos(cursorPosition);
if (!mEnabled && color == "#572D21") if (!mEnabled && color == "#572D21")
MWBase::Environment::get().getDialogueManager()->goodbyeSelected(); MWBase::Environment::get().getDialogueManager()->goodbyeSelected();
if(color != "#B29154") if(color != "#B29154")
{ {
UString key = history->getColorTextAt(cursorPosition); UString key = mHistory->getColorTextAt(cursorPosition);
if(color == "#686EBA") MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(key)); if(color == "#686EBA") MWBase::Environment::get().getDialogueManager()->keywordSelected(lower_string(key));
if(color == "#572D21") MWBase::Environment::get().getDialogueManager()->questionAnswered(lower_string(key)); if(color == "#572D21") MWBase::Environment::get().getDialogueManager()->questionAnswered(lower_string(key));
@ -101,15 +100,15 @@ void DialogueWindow::onHistoryClicked(MyGUI::Widget* _sender)
void DialogueWindow::onWindowResize(MyGUI::Window* _sender) void DialogueWindow::onWindowResize(MyGUI::Window* _sender)
{ {
topicsList->adjustSize(); mTopicsList->adjustSize();
} }
void DialogueWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel) void DialogueWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel)
{ {
if (history->getVScrollPosition() - _rel*0.3 < 0) if (mHistory->getVScrollPosition() - _rel*0.3 < 0)
history->setVScrollPosition(0); mHistory->setVScrollPosition(0);
else else
history->setVScrollPosition(history->getVScrollPosition() - _rel*0.3); mHistory->setVScrollPosition(mHistory->getVScrollPosition() - _rel*0.3);
} }
void DialogueWindow::onByeClicked(MyGUI::Widget* _sender) void DialogueWindow::onByeClicked(MyGUI::Widget* _sender)
@ -136,40 +135,40 @@ void DialogueWindow::startDialogue(MWWorld::Ptr actor, std::string npcName)
{ {
mEnabled = true; mEnabled = true;
mPtr = actor; mPtr = actor;
topicsList->setEnabled(true); mTopicsList->setEnabled(true);
setTitle(npcName); setTitle(npcName);
topicsList->clear(); mTopicsList->clear();
history->eraseText(0,history->getTextLength()); mHistory->eraseText(0,mHistory->getTextLength());
updateOptions(); updateOptions();
} }
void DialogueWindow::setKeywords(std::list<std::string> keyWords) void DialogueWindow::setKeywords(std::list<std::string> keyWords)
{ {
topicsList->clear(); mTopicsList->clear();
bool anyService = mShowTrade; bool anyService = mShowTrade;
if (mShowTrade) if (mShowTrade)
topicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sBarter")->str); mTopicsList->addItem(MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sBarter")->str);
if (anyService) if (anyService)
topicsList->addSeparator(); mTopicsList->addSeparator();
for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); ++it) for(std::list<std::string>::iterator it = keyWords.begin(); it != keyWords.end(); ++it)
{ {
topicsList->addItem(*it); mTopicsList->addItem(*it);
} }
topicsList->adjustSize(); mTopicsList->adjustSize();
} }
void DialogueWindow::removeKeyword(std::string keyWord) void DialogueWindow::removeKeyword(std::string keyWord)
{ {
if(topicsList->hasItem(keyWord)) if(mTopicsList->hasItem(keyWord))
{ {
topicsList->removeItem(keyWord); mTopicsList->removeItem(keyWord);
} }
topicsList->adjustSize(); mTopicsList->adjustSize();
} }
void addColorInString(std::string& str, const std::string& keyword,std::string color1, std::string color2) void addColorInString(std::string& str, const std::string& keyword,std::string color1, std::string color2)
@ -206,9 +205,9 @@ void addColorInString(std::string& str, const std::string& keyword,std::string c
std::string DialogueWindow::parseText(std::string text) std::string DialogueWindow::parseText(std::string text)
{ {
bool separatorReached = false; // only parse topics that are below the separator (this prevents actions like "Barter" that are not topics from getting blue-colored) bool separatorReached = false; // only parse topics that are below the separator (this prevents actions like "Barter" that are not topics from getting blue-colored)
for(unsigned int i = 0;i<topicsList->getItemCount();i++) for(unsigned int i = 0;i<mTopicsList->getItemCount();i++)
{ {
std::string keyWord = topicsList->getItemNameAt(i); std::string keyWord = mTopicsList->getItemNameAt(i);
if (separatorReached && keyWord != "") if (separatorReached && keyWord != "")
addColorInString(text,keyWord,"#686EBA","#B29154"); addColorInString(text,keyWord,"#686EBA","#B29154");
else else
@ -219,7 +218,7 @@ std::string DialogueWindow::parseText(std::string text)
void DialogueWindow::addText(std::string text) void DialogueWindow::addText(std::string text)
{ {
history->addDialogText("#B29154"+parseText(text)+"#B29154"); mHistory->addDialogText("#B29154"+parseText(text)+"#B29154");
} }
void DialogueWindow::addTitle(std::string text) void DialogueWindow::addTitle(std::string text)
@ -227,37 +226,37 @@ void DialogueWindow::addTitle(std::string text)
// This is called from the dialogue manager, so text is // This is called from the dialogue manager, so text is
// case-smashed - thus we have to retrieve the correct case // case-smashed - thus we have to retrieve the correct case
// of the text through the topic list. // of the text through the topic list.
for (size_t i=0; i<topicsList->getItemCount(); ++i) for (size_t i=0; i<mTopicsList->getItemCount(); ++i)
{ {
std::string item = topicsList->getItemNameAt(i); std::string item = mTopicsList->getItemNameAt(i);
if (lower_string(item) == text) if (lower_string(item) == text)
text = item; text = item;
} }
history->addDialogHeading(text); mHistory->addDialogHeading(text);
} }
void DialogueWindow::askQuestion(std::string question) void DialogueWindow::askQuestion(std::string question)
{ {
history->addDialogText("#572D21"+question+"#B29154"+" "); mHistory->addDialogText("#572D21"+question+"#B29154"+" ");
} }
void DialogueWindow::updateOptions() void DialogueWindow::updateOptions()
{ {
//Clear the list of topics //Clear the list of topics
topicsList->clear(); mTopicsList->clear();
history->eraseText(0,history->getTextLength()); mHistory->eraseText(0, mHistory->getTextLength());
pDispositionBar->setProgressRange(100); mDispositionBar->setProgressRange(100);
pDispositionBar->setProgressPosition(40); mDispositionBar->setProgressPosition(40);
pDispositionText->eraseText(0,pDispositionText->getTextLength()); mDispositionText->eraseText(0, mDispositionText->getTextLength());
pDispositionText->addText("#B29154"+std::string("40/100")+"#B29154"); mDispositionText->addText("#B29154"+std::string("40/100")+"#B29154");
} }
void DialogueWindow::goodbye() void DialogueWindow::goodbye()
{ {
history->addDialogText("\n#572D21" + MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str); mHistory->addDialogText("\n#572D21" + MWBase::Environment::get().getWorld()->getStore().gameSettings.search("sGoodbye")->str);
topicsList->setEnabled(false); mTopicsList->setEnabled(false);
mEnabled = false; mEnabled = false;
} }

@ -73,10 +73,10 @@ namespace MWGui
bool mEnabled; bool mEnabled;
DialogueHistory* history; DialogueHistory* mHistory;
Widgets::MWList* topicsList; Widgets::MWList* mTopicsList;
MyGUI::ProgressPtr pDispositionBar; MyGUI::ProgressPtr mDispositionBar;
MyGUI::EditPtr pDispositionText; MyGUI::EditPtr mDispositionText;
}; };
} }
#endif #endif

@ -3,7 +3,6 @@
#include "widgets.hpp" #include "widgets.hpp"
#include "components/esm_store/store.hpp" #include "components/esm_store/store.hpp"
#include <assert.h>
#include <iostream> #include <iostream>
#include <iterator> #include <iterator>

@ -28,24 +28,24 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop)
, health(NULL) , health(NULL)
, magicka(NULL) , magicka(NULL)
, stamina(NULL) , stamina(NULL)
, weapImage(NULL) , mWeapImage(NULL)
, spellImage(NULL) , mSpellImage(NULL)
, weapStatus(NULL) , mWeapStatus(NULL)
, spellStatus(NULL) , mSpellStatus(NULL)
, effectBox(NULL) , mEffectBox(NULL)
, effect1(NULL) , mEffect1(NULL)
, minimap(NULL) , mMinimap(NULL)
, compass(NULL) , mCompass(NULL)
, crosshair(NULL) , mCrosshair(NULL)
, fpsbox(NULL) , fpsbox(NULL)
, fpscounter(NULL) , fpscounter(NULL)
, trianglecounter(NULL) , trianglecounter(NULL)
, batchcounter(NULL) , batchcounter(NULL)
, hmsBaseLeft(0) , mHealthManaStaminaBaseLeft(0)
, weapBoxBaseLeft(0) , mWeapBoxBaseLeft(0)
, spellBoxBaseLeft(0) , mSpellBoxBaseLeft(0)
, effectBoxBaseRight(0) , mEffectBoxBaseRight(0)
, minimapBoxBaseRight(0) , mMinimapBoxBaseRight(0)
, mDragAndDrop(dragAndDrop) , mDragAndDrop(dragAndDrop)
, mCellNameTimer(0.0f) , mCellNameTimer(0.0f)
, mCellNameBox(NULL) , mCellNameBox(NULL)
@ -62,7 +62,7 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop)
getWidget(magicka, "Magicka"); getWidget(magicka, "Magicka");
getWidget(stamina, "Stamina"); getWidget(stamina, "Stamina");
hmsBaseLeft = mHealthFrame->getLeft(); mHealthManaStaminaBaseLeft = mHealthFrame->getLeft();
MyGUI::Widget *healthFrame, *magickaFrame, *fatigueFrame; MyGUI::Widget *healthFrame, *magickaFrame, *fatigueFrame;
getWidget(healthFrame, "HealthFrame"); getWidget(healthFrame, "HealthFrame");
@ -75,33 +75,33 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop)
const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize(); const MyGUI::IntSize& viewSize = MyGUI::RenderManager::getInstance().getViewSize();
// Item and spell images and status bars // Item and spell images and status bars
getWidget(weapBox, "WeapBox"); getWidget(mWeapBox, "WeapBox");
getWidget(weapImage, "WeapImage"); getWidget(mWeapImage, "WeapImage");
getWidget(weapStatus, "WeapStatus"); getWidget(mWeapStatus, "WeapStatus");
weapBoxBaseLeft = weapBox->getLeft(); mWeapBoxBaseLeft = mWeapBox->getLeft();
weapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWeaponClicked); mWeapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWeaponClicked);
getWidget(spellBox, "SpellBox"); getWidget(mSpellBox, "SpellBox");
getWidget(spellImage, "SpellImage"); getWidget(mSpellImage, "SpellImage");
getWidget(spellStatus, "SpellStatus"); getWidget(mSpellStatus, "SpellStatus");
spellBoxBaseLeft = spellBox->getLeft(); mSpellBoxBaseLeft = mSpellBox->getLeft();
spellBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); mSpellBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked);
getWidget(effectBox, "EffectBox"); getWidget(mEffectBox, "EffectBox");
getWidget(effect1, "Effect1"); getWidget(mEffect1, "Effect1");
effectBoxBaseRight = viewSize.width - effectBox->getRight(); mEffectBoxBaseRight = viewSize.width - mEffectBox->getRight();
effectBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked); mEffectBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMagicClicked);
getWidget(minimapBox, "MiniMapBox"); getWidget(mMinimapBox, "MiniMapBox");
minimapBoxBaseRight = viewSize.width - minimapBox->getRight(); mMinimapBoxBaseRight = viewSize.width - mMinimapBox->getRight();
minimapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMapClicked); mMinimapBox->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onMapClicked);
getWidget(minimap, "MiniMap"); getWidget(mMinimap, "MiniMap");
getWidget(compass, "Compass"); getWidget(mCompass, "Compass");
getWidget(mCellNameBox, "CellName"); getWidget(mCellNameBox, "CellName");
getWidget(mWeaponSpellBox, "WeaponSpellName"); getWidget(mWeaponSpellBox, "WeaponSpellName");
getWidget(crosshair, "Crosshair"); getWidget(mCrosshair, "Crosshair");
setFpsLevel(fpsLevel); setFpsLevel(fpsLevel);
@ -110,7 +110,7 @@ HUD::HUD(int width, int height, int fpsLevel, DragAndDrop* dragAndDrop)
setEffect("icons\\s\\tx_s_chameleon.dds"); setEffect("icons\\s\\tx_s_chameleon.dds");
LocalMapBase::init(minimap, compass, this); LocalMapBase::init(mMinimap, mCompass, this);
mMainWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWorldClicked); mMainWidget->eventMouseButtonClick += MyGUI::newDelegate(this, &HUD::onWorldClicked);
mMainWidget->eventMouseMove += MyGUI::newDelegate(this, &HUD::onWorldMouseOver); mMainWidget->eventMouseMove += MyGUI::newDelegate(this, &HUD::onWorldMouseOver);
@ -159,7 +159,7 @@ void HUD::setBatchCount(unsigned int count)
void HUD::setEffect(const char *img) void HUD::setEffect(const char *img)
{ {
effect1->setImageTexture(img); mEffect1->setImageTexture(img);
} }
void HUD::setValue(const std::string& id, const MWMechanics::DynamicStat<int>& value) void HUD::setValue(const std::string& id, const MWMechanics::DynamicStat<int>& value)
@ -202,10 +202,10 @@ void HUD::setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellV
{ {
int weapDx = 0, spellDx = 0; int weapDx = 0, spellDx = 0;
if (!hmsVisible) if (!hmsVisible)
spellDx = weapDx = weapBoxBaseLeft - hmsBaseLeft; spellDx = weapDx = mWeapBoxBaseLeft - mHealthManaStaminaBaseLeft;
if (!weapVisible) if (!weapVisible)
spellDx += spellBoxBaseLeft - weapBoxBaseLeft; spellDx += mSpellBoxBaseLeft - mWeapBoxBaseLeft;
mWeaponVisible = weapVisible; mWeaponVisible = weapVisible;
mSpellVisible = spellVisible; mSpellVisible = spellVisible;
@ -215,10 +215,10 @@ void HUD::setBottomLeftVisibility(bool hmsVisible, bool weapVisible, bool spellV
health->setVisible(hmsVisible); health->setVisible(hmsVisible);
stamina->setVisible(hmsVisible); stamina->setVisible(hmsVisible);
magicka->setVisible(hmsVisible); magicka->setVisible(hmsVisible);
weapBox->setPosition(weapBoxBaseLeft - weapDx, weapBox->getTop()); mWeapBox->setPosition(mWeapBoxBaseLeft - weapDx, mWeapBox->getTop());
weapBox->setVisible(weapVisible); mWeapBox->setVisible(weapVisible);
spellBox->setPosition(spellBoxBaseLeft - spellDx, spellBox->getTop()); mSpellBox->setPosition(mSpellBoxBaseLeft - spellDx, mSpellBox->getTop());
spellBox->setVisible(spellVisible); mSpellBox->setVisible(spellVisible);
} }
void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible) void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible)
@ -228,12 +228,12 @@ void HUD::setBottomRightVisibility(bool effectBoxVisible, bool minimapBoxVisible
// effect box can have variable width -> variable left coordinate // effect box can have variable width -> variable left coordinate
int effectsDx = 0; int effectsDx = 0;
if (!minimapBoxVisible) if (!minimapBoxVisible)
effectsDx = (viewSize.width - minimapBoxBaseRight) - (viewSize.width - effectBoxBaseRight); effectsDx = (viewSize.width - mMinimapBoxBaseRight) - (viewSize.width - mEffectBoxBaseRight);
mMapVisible = minimapBoxVisible; mMapVisible = minimapBoxVisible;
minimapBox->setVisible(minimapBoxVisible); mMinimapBox->setVisible(minimapBoxVisible);
effectBox->setPosition((viewSize.width - effectBoxBaseRight) - effectBox->getWidth() + effectsDx, effectBox->getTop()); mEffectBox->setPosition((viewSize.width - mEffectBoxBaseRight) - mEffectBox->getWidth() + effectsDx, mEffectBox->getTop());
effectBox->setVisible(effectBoxVisible); mEffectBox->setVisible(effectBoxVisible);
} }
void HUD::onWorldClicked(MyGUI::Widget* _sender) void HUD::onWorldClicked(MyGUI::Widget* _sender)
@ -395,14 +395,14 @@ void HUD::setSelectedSpell(const std::string& spellId, int successChancePercent)
mWeaponSpellBox->setVisible(true); mWeaponSpellBox->setVisible(true);
} }
spellStatus->setProgressRange(100); mSpellStatus->setProgressRange(100);
spellStatus->setProgressPosition(successChancePercent); mSpellStatus->setProgressPosition(successChancePercent);
if (spellImage->getChildCount()) if (mSpellImage->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0));
spellBox->setUserString("ToolTipType", "Spell"); mSpellBox->setUserString("ToolTipType", "Spell");
spellBox->setUserString("Spell", spellId); mSpellBox->setUserString("Spell", spellId);
// use the icon of the first effect // use the icon of the first effect
const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(spell->effects.list.front().effectID); const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(spell->effects.list.front().effectID);
@ -411,7 +411,7 @@ void HUD::setSelectedSpell(const std::string& spellId, int successChancePercent)
icon.insert(slashPos+1, "b_"); icon.insert(slashPos+1, "b_");
icon = std::string("icons\\") + icon; icon = std::string("icons\\") + icon;
Widgets::fixTexturePath(icon); Widgets::fixTexturePath(icon);
spellImage->setImageTexture(icon); mSpellImage->setImageTexture(icon);
} }
void HUD::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) void HUD::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent)
@ -425,17 +425,17 @@ void HUD::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent)
mWeaponSpellBox->setVisible(true); mWeaponSpellBox->setVisible(true);
} }
spellStatus->setProgressRange(100); mSpellStatus->setProgressRange(100);
spellStatus->setProgressPosition(chargePercent); mSpellStatus->setProgressPosition(chargePercent);
if (spellImage->getChildCount()) if (mSpellImage->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0));
spellBox->setUserString("ToolTipType", "ItemPtr"); mSpellBox->setUserString("ToolTipType", "ItemPtr");
spellBox->setUserData(item); mSpellBox->setUserData(item);
spellImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); mSpellImage->setImageTexture("textures\\menu_icon_magic_mini.dds");
MyGUI::ImageBox* itemBox = spellImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) MyGUI::ImageBox* itemBox = mSpellImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1)
, MyGUI::Align::Stretch); , MyGUI::Align::Stretch);
std::string path = std::string("icons\\"); std::string path = std::string("icons\\");
@ -456,14 +456,14 @@ void HUD::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent)
mWeaponSpellBox->setVisible(true); mWeaponSpellBox->setVisible(true);
} }
weapBox->setUserString("ToolTipType", "ItemPtr"); mWeapBox->setUserString("ToolTipType", "ItemPtr");
weapBox->setUserData(item); mWeapBox->setUserData(item);
weapStatus->setProgressRange(100); mWeapStatus->setProgressRange(100);
weapStatus->setProgressPosition(durabilityPercent); mWeapStatus->setProgressPosition(durabilityPercent);
if (weapImage->getChildCount()) if (mWeapImage->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(weapImage->getChildAt(0)); MyGUI::Gui::getInstance().destroyWidget(mWeapImage->getChildAt(0));
std::string path = std::string("icons\\"); std::string path = std::string("icons\\");
path+=MWWorld::Class::get(item).getInventoryIcon(item); path+=MWWorld::Class::get(item).getInventoryIcon(item);
@ -471,14 +471,14 @@ void HUD::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent)
if (MWWorld::Class::get(item).getEnchantment(item) != "") if (MWWorld::Class::get(item).getEnchantment(item) != "")
{ {
weapImage->setImageTexture("textures\\menu_icon_magic_mini.dds"); mWeapImage->setImageTexture("textures\\menu_icon_magic_mini.dds");
MyGUI::ImageBox* itemBox = weapImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1) MyGUI::ImageBox* itemBox = mWeapImage->createWidgetReal<MyGUI::ImageBox>("ImageBox", MyGUI::FloatCoord(0,0,1,1)
, MyGUI::Align::Stretch); , MyGUI::Align::Stretch);
itemBox->setImageTexture(path); itemBox->setImageTexture(path);
itemBox->setNeedMouseFocus(false); itemBox->setNeedMouseFocus(false);
} }
else else
weapImage->setImageTexture(path); mWeapImage->setImageTexture(path);
} }
void HUD::unsetSelectedSpell() void HUD::unsetSelectedSpell()
@ -492,12 +492,12 @@ void HUD::unsetSelectedSpell()
mWeaponSpellBox->setVisible(true); mWeaponSpellBox->setVisible(true);
} }
if (spellImage->getChildCount()) if (mSpellImage->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(spellImage->getChildAt(0)); MyGUI::Gui::getInstance().destroyWidget(mSpellImage->getChildAt(0));
spellStatus->setProgressRange(100); mSpellStatus->setProgressRange(100);
spellStatus->setProgressPosition(0); mSpellStatus->setProgressPosition(0);
spellImage->setImageTexture(""); mSpellImage->setImageTexture("");
spellBox->clearUserStrings(); mSpellBox->clearUserStrings();
} }
void HUD::unsetSelectedWeapon() void HUD::unsetSelectedWeapon()
@ -511,10 +511,10 @@ void HUD::unsetSelectedWeapon()
mWeaponSpellBox->setVisible(true); mWeaponSpellBox->setVisible(true);
} }
if (weapImage->getChildCount()) if (mWeapImage->getChildCount())
MyGUI::Gui::getInstance().destroyWidget(weapImage->getChildAt(0)); MyGUI::Gui::getInstance().destroyWidget(mWeapImage->getChildAt(0));
weapStatus->setProgressRange(100); mWeapStatus->setProgressRange(100);
weapStatus->setProgressPosition(0); mWeapStatus->setProgressPosition(0);
weapImage->setImageTexture("icons\\k\\stealth_handtohand.dds"); mWeapImage->setImageTexture("icons\\k\\stealth_handtohand.dds");
weapBox->clearUserStrings(); mWeapBox->clearUserStrings();
} }

@ -37,14 +37,14 @@ namespace MWGui
MyGUI::ProgressPtr health, magicka, stamina; MyGUI::ProgressPtr health, magicka, stamina;
MyGUI::Widget* mHealthFrame; MyGUI::Widget* mHealthFrame;
MyGUI::Widget *weapBox, *spellBox; MyGUI::Widget *mWeapBox, *mSpellBox;
MyGUI::ImageBox *weapImage, *spellImage; MyGUI::ImageBox *mWeapImage, *mSpellImage;
MyGUI::ProgressPtr weapStatus, spellStatus; MyGUI::ProgressPtr mWeapStatus, mSpellStatus;
MyGUI::Widget *effectBox, *minimapBox; MyGUI::Widget *mEffectBox, *mMinimapBox;
MyGUI::ImageBox* effect1; MyGUI::ImageBox* mEffect1;
MyGUI::ScrollView* minimap; MyGUI::ScrollView* mMinimap;
MyGUI::ImageBox* compass; MyGUI::ImageBox* mCompass;
MyGUI::ImageBox* crosshair; MyGUI::ImageBox* mCrosshair;
MyGUI::TextBox* mCellNameBox; MyGUI::TextBox* mCellNameBox;
MyGUI::TextBox* mWeaponSpellBox; MyGUI::TextBox* mWeaponSpellBox;
@ -55,9 +55,9 @@ namespace MWGui
private: private:
// bottom left elements // bottom left elements
int hmsBaseLeft, weapBoxBaseLeft, spellBoxBaseLeft; int mHealthManaStaminaBaseLeft, mWeapBoxBaseLeft, mSpellBoxBaseLeft;
// bottom right elements // bottom right elements
int minimapBoxBaseRight, effectBoxBaseRight; int mMinimapBoxBaseRight, mEffectBoxBaseRight;
DragAndDrop* mDragAndDrop; DragAndDrop* mDragAndDrop;

@ -84,7 +84,7 @@ book formatText(std::string text,book mBook,int maxLine, int lineSize)
MWGui::JournalWindow::JournalWindow (WindowManager& parWindowManager) MWGui::JournalWindow::JournalWindow (WindowManager& parWindowManager)
: WindowBase("openmw_journal.layout", parWindowManager) : WindowBase("openmw_journal.layout", parWindowManager)
, lastPos(0) , mLastPos(0)
, mVisible(false) , mVisible(false)
{ {
//setCoord(0,0,498, 342); //setCoord(0,0,498, 342);
@ -148,19 +148,19 @@ void MWGui::JournalWindow::open()
{ {
if(left) if(left)
{ {
leftPages.push_back(*it); mLeftPages.push_back(*it);
} }
else else
{ {
rightPages.push_back(*it); mRightPages.push_back(*it);
} }
left = !left; left = !left;
} }
if(!left) rightPages.push_back(""); if(!left) mRightPages.push_back("");
mPageNumber = leftPages.size()-1; mPageNumber = mLeftPages.size()-1;
displayLeftText(leftPages[mPageNumber]); displayLeftText(mLeftPages[mPageNumber]);
displayRightText(rightPages[mPageNumber]); displayRightText(mRightPages[mPageNumber]);
} }
else else
@ -184,13 +184,13 @@ void MWGui::JournalWindow::displayRightText(std::string text)
void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender) void MWGui::JournalWindow::notifyNextPage(MyGUI::WidgetPtr _sender)
{ {
if(mPageNumber < int(leftPages.size())-1) if(mPageNumber < int(mLeftPages.size())-1)
{ {
std::string nextSound = "book page2"; std::string nextSound = "book page2";
MWBase::Environment::get().getSoundManager()->playSound (nextSound, 1.0, 1.0); MWBase::Environment::get().getSoundManager()->playSound (nextSound, 1.0, 1.0);
mPageNumber = mPageNumber + 1; mPageNumber = mPageNumber + 1;
displayLeftText(leftPages[mPageNumber]); displayLeftText(mLeftPages[mPageNumber]);
displayRightText(rightPages[mPageNumber]); displayRightText(mRightPages[mPageNumber]);
} }
} }
@ -201,7 +201,7 @@ void MWGui::JournalWindow::notifyPrevPage(MyGUI::WidgetPtr _sender)
std::string prevSound = "book page"; std::string prevSound = "book page";
MWBase::Environment::get().getSoundManager()->playSound (prevSound, 1.0, 1.0); MWBase::Environment::get().getSoundManager()->playSound (prevSound, 1.0, 1.0);
mPageNumber = mPageNumber - 1; mPageNumber = mPageNumber - 1;
displayLeftText(leftPages[mPageNumber]); displayLeftText(mLeftPages[mPageNumber]);
displayRightText(rightPages[mPageNumber]); displayRightText(mRightPages[mPageNumber]);
} }
} }

@ -31,17 +31,17 @@ namespace MWGui
void notifyNextPage(MyGUI::WidgetPtr _sender); void notifyNextPage(MyGUI::WidgetPtr _sender);
void notifyPrevPage(MyGUI::WidgetPtr _sender); void notifyPrevPage(MyGUI::WidgetPtr _sender);
static const int lineHeight; static const int sLineHeight;
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget;
MyGUI::ScrollBar* skillScrollerWidget; MyGUI::ScrollBar* mSkillScrollerWidget;
int lastPos, clientHeight; int mLastPos, mClientHeight;
MyGUI::EditPtr mLeftTextWidget; MyGUI::EditPtr mLeftTextWidget;
MyGUI::EditPtr mRightTextWidget; MyGUI::EditPtr mRightTextWidget;
MyGUI::ButtonPtr mPrevBtn; MyGUI::ButtonPtr mPrevBtn;
MyGUI::ButtonPtr mNextBtn; MyGUI::ButtonPtr mNextBtn;
std::vector<std::string> leftPages; std::vector<std::string> mLeftPages;
std::vector<std::string> rightPages; std::vector<std::string> mRightPages;
int mPageNumber; //store the number of the current left page int mPageNumber; //store the number of the current left page
bool mVisible; bool mVisible;
}; };

@ -149,7 +149,7 @@ int MessageBoxManager::readPressedButton ()
MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::string& message) MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::string& message)
: Layout("openmw_messagebox.layout") : Layout("openmw_messagebox.layout")
, mMessageBoxManager(parMessageBoxManager) , mMessageBoxManager(parMessageBoxManager)
, cMessage(message) , mMessage(message)
{ {
// defines // defines
mFixedWidth = 300; mFixedWidth = 300;
@ -160,7 +160,7 @@ MessageBox::MessageBox(MessageBoxManager& parMessageBoxManager, const std::strin
getWidget(mMessageWidget, "message"); getWidget(mMessageWidget, "message");
mMessageWidget->setOverflowToTheLeft(true); mMessageWidget->setOverflowToTheLeft(true);
mMessageWidget->setCaptionWithReplacing(cMessage); mMessageWidget->setCaptionWithReplacing(mMessage);
MyGUI::IntSize size; MyGUI::IntSize size;
size.width = mFixedWidth; size.width = mFixedWidth;

@ -59,7 +59,7 @@ namespace MWGui
protected: protected:
MessageBoxManager& mMessageBoxManager; MessageBoxManager& mMessageBoxManager;
int mHeight; int mHeight;
const std::string& cMessage; const std::string& mMessage;
MyGUI::EditPtr mMessageWidget; MyGUI::EditPtr mMessageWidget;
int mFixedWidth; int mFixedWidth;
int mBottomPadding; int mBottomPadding;

@ -1,6 +1,5 @@
#include "race.hpp" #include "race.hpp"
#include <assert.h>
#include <iostream> #include <iostream>
#include <iterator> #include <iterator>
@ -18,11 +17,11 @@ using namespace Widgets;
RaceDialog::RaceDialog(WindowManager& parWindowManager) RaceDialog::RaceDialog(WindowManager& parWindowManager)
: WindowBase("openmw_chargen_race.layout", parWindowManager) : WindowBase("openmw_chargen_race.layout", parWindowManager)
, genderIndex(0) , mGenderIndex(0)
, faceIndex(0) , mFaceIndex(0)
, hairIndex(0) , mHairIndex(0)
, faceCount(10) , mFaceCount(10)
, hairCount(14) , mHairCount(14)
{ {
// Centre dialog // Centre dialog
center(); center();
@ -31,13 +30,13 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager)
// real calls from outside the class later. // real calls from outside the class later.
setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance")); setText("AppearanceT", mWindowManager.getGameSettingString("sRaceMenu1", "Appearance"));
getWidget(appearanceBox, "AppearanceBox"); getWidget(mAppearanceBox, "AppearanceBox");
getWidget(headRotate, "HeadRotate"); getWidget(mHeadRotate, "HeadRotate");
headRotate->setScrollRange(50); mHeadRotate->setScrollRange(50);
headRotate->setScrollPosition(20); mHeadRotate->setScrollPosition(20);
headRotate->setScrollViewPage(10); mHeadRotate->setScrollViewPage(10);
headRotate->eventScrollChangePosition += MyGUI::newDelegate(this, &RaceDialog::onHeadRotate); mHeadRotate->eventScrollChangePosition += MyGUI::newDelegate(this, &RaceDialog::onHeadRotate);
// Set up next/previous buttons // Set up next/previous buttons
MyGUI::ButtonPtr prevButton, nextButton; MyGUI::ButtonPtr prevButton, nextButton;
@ -61,16 +60,16 @@ RaceDialog::RaceDialog(WindowManager& parWindowManager)
nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextHair); nextButton->eventMouseButtonClick += MyGUI::newDelegate(this, &RaceDialog::onSelectNextHair);
setText("RaceT", mWindowManager.getGameSettingString("sRaceMenu4", "Race")); setText("RaceT", mWindowManager.getGameSettingString("sRaceMenu4", "Race"));
getWidget(raceList, "RaceList"); getWidget(mRaceList, "RaceList");
raceList->setScrollVisible(true); mRaceList->setScrollVisible(true);
raceList->eventListSelectAccept += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); mRaceList->eventListSelectAccept += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
raceList->eventListMouseItemActivate += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); mRaceList->eventListMouseItemActivate += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
raceList->eventListChangePosition += MyGUI::newDelegate(this, &RaceDialog::onSelectRace); mRaceList->eventListChangePosition += MyGUI::newDelegate(this, &RaceDialog::onSelectRace);
setText("SkillsT", mWindowManager.getGameSettingString("sBonusSkillTitle", "Skill Bonus")); setText("SkillsT", mWindowManager.getGameSettingString("sBonusSkillTitle", "Skill Bonus"));
getWidget(skillList, "SkillList"); getWidget(mSkillList, "SkillList");
setText("SpellPowerT", mWindowManager.getGameSettingString("sRaceMenu7", "Specials")); setText("SpellPowerT", mWindowManager.getGameSettingString("sRaceMenu7", "Specials"));
getWidget(spellPowerList, "SpellPowerList"); getWidget(mSpellPowerList, "SpellPowerList");
MyGUI::ButtonPtr backButton; MyGUI::ButtonPtr backButton;
getWidget(backButton, "BackButton"); getWidget(backButton, "BackButton");
@ -117,14 +116,14 @@ void RaceDialog::open()
void RaceDialog::setRaceId(const std::string &raceId) void RaceDialog::setRaceId(const std::string &raceId)
{ {
currentRaceId = raceId; mCurrentRaceId = raceId;
raceList->setIndexSelected(MyGUI::ITEM_NONE); mRaceList->setIndexSelected(MyGUI::ITEM_NONE);
size_t count = raceList->getItemCount(); size_t count = mRaceList->getItemCount();
for (size_t i = 0; i < count; ++i) for (size_t i = 0; i < count; ++i)
{ {
if (boost::iequals(*raceList->getItemDataAt<std::string>(i), raceId)) if (boost::iequals(*mRaceList->getItemDataAt<std::string>(i), raceId))
{ {
raceList->setIndexSelected(i); mRaceList->setIndexSelected(i);
break; break;
} }
} }
@ -162,32 +161,32 @@ void RaceDialog::onHeadRotate(MyGUI::ScrollBar*, size_t _position)
void RaceDialog::onSelectPreviousGender(MyGUI::Widget*) void RaceDialog::onSelectPreviousGender(MyGUI::Widget*)
{ {
genderIndex = wrap(genderIndex - 1, 2); mGenderIndex = wrap(mGenderIndex - 1, 2);
} }
void RaceDialog::onSelectNextGender(MyGUI::Widget*) void RaceDialog::onSelectNextGender(MyGUI::Widget*)
{ {
genderIndex = wrap(genderIndex + 1, 2); mGenderIndex = wrap(mGenderIndex + 1, 2);
} }
void RaceDialog::onSelectPreviousFace(MyGUI::Widget*) void RaceDialog::onSelectPreviousFace(MyGUI::Widget*)
{ {
faceIndex = wrap(faceIndex - 1, faceCount); mFaceIndex = wrap(mFaceIndex - 1, mFaceCount);
} }
void RaceDialog::onSelectNextFace(MyGUI::Widget*) void RaceDialog::onSelectNextFace(MyGUI::Widget*)
{ {
faceIndex = wrap(faceIndex + 1, faceCount); mFaceIndex = wrap(mFaceIndex + 1, mFaceCount);
} }
void RaceDialog::onSelectPreviousHair(MyGUI::Widget*) void RaceDialog::onSelectPreviousHair(MyGUI::Widget*)
{ {
hairIndex = wrap(hairIndex - 1, hairCount); mHairIndex = wrap(mHairIndex - 1, mHairCount);
} }
void RaceDialog::onSelectNextHair(MyGUI::Widget*) void RaceDialog::onSelectNextHair(MyGUI::Widget*)
{ {
hairIndex = wrap(hairIndex - 1, hairCount); mHairIndex = wrap(mHairIndex - 1, mHairCount);
} }
void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index) void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index)
@ -195,11 +194,11 @@ void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index)
if (_index == MyGUI::ITEM_NONE) if (_index == MyGUI::ITEM_NONE)
return; return;
const std::string *raceId = raceList->getItemDataAt<std::string>(_index); const std::string *raceId = mRaceList->getItemDataAt<std::string>(_index);
if (boost::iequals(currentRaceId, *raceId)) if (boost::iequals(mCurrentRaceId, *raceId))
return; return;
currentRaceId = *raceId; mCurrentRaceId = *raceId;
updateSkills(); updateSkills();
updateSpellPowers(); updateSpellPowers();
} }
@ -208,7 +207,7 @@ void RaceDialog::onSelectRace(MyGUI::ListBox* _sender, size_t _index)
void RaceDialog::updateRaces() void RaceDialog::updateRaces()
{ {
raceList->removeAllItems(); mRaceList->removeAllItems();
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
@ -222,30 +221,30 @@ void RaceDialog::updateRaces()
if (!playable) // Only display playable races if (!playable) // Only display playable races
continue; continue;
raceList->addItem(race.name, it->first); mRaceList->addItem(race.name, it->first);
if (boost::iequals(it->first, currentRaceId)) if (boost::iequals(it->first, mCurrentRaceId))
raceList->setIndexSelected(index); mRaceList->setIndexSelected(index);
++index; ++index;
} }
} }
void RaceDialog::updateSkills() void RaceDialog::updateSkills()
{ {
for (std::vector<MyGUI::WidgetPtr>::iterator it = skillItems.begin(); it != skillItems.end(); ++it) for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillItems.begin(); it != mSkillItems.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
skillItems.clear(); mSkillItems.clear();
if (currentRaceId.empty()) if (mCurrentRaceId.empty())
return; return;
MWSkillPtr skillWidget; MWSkillPtr skillWidget;
const int lineHeight = 18; const int lineHeight = 18;
MyGUI::IntCoord coord1(0, 0, skillList->getWidth(), 18); MyGUI::IntCoord coord1(0, 0, mSkillList->getWidth(), 18);
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
const ESM::Race *race = store.races.find(currentRaceId); const ESM::Race *race = store.races.find(mCurrentRaceId);
int count = sizeof(race->data.bonus)/sizeof(race->data.bonus[0]); // TODO: Find a portable macro for this ARRAYSIZE? int count = sizeof(race->data.bonus)/sizeof(race->data.bonus[0]); // TODO: Find a portable macro for this ARRAYSIZE?
for (int i = 0; i < count; ++i) for (int i = 0; i < count; ++i)
{ {
@ -253,7 +252,7 @@ void RaceDialog::updateSkills()
if (skillId < 0 || skillId > ESM::Skill::Length) // Skip unknown skill indexes if (skillId < 0 || skillId > ESM::Skill::Length) // Skip unknown skill indexes
continue; continue;
skillWidget = skillList->createWidget<MWSkill>("MW_StatNameValue", coord1, MyGUI::Align::Default, skillWidget = mSkillList->createWidget<MWSkill>("MW_StatNameValue", coord1, MyGUI::Align::Default,
std::string("Skill") + boost::lexical_cast<std::string>(i)); std::string("Skill") + boost::lexical_cast<std::string>(i));
skillWidget->setWindowManager(&mWindowManager); skillWidget->setWindowManager(&mWindowManager);
skillWidget->setSkillNumber(skillId); skillWidget->setSkillNumber(skillId);
@ -261,7 +260,7 @@ void RaceDialog::updateSkills()
ToolTips::createSkillToolTip(skillWidget, skillId); ToolTips::createSkillToolTip(skillWidget, skillId);
skillItems.push_back(skillWidget); mSkillItems.push_back(skillWidget);
coord1.top += lineHeight; coord1.top += lineHeight;
} }
@ -269,34 +268,34 @@ void RaceDialog::updateSkills()
void RaceDialog::updateSpellPowers() void RaceDialog::updateSpellPowers()
{ {
for (std::vector<MyGUI::WidgetPtr>::iterator it = spellPowerItems.begin(); it != spellPowerItems.end(); ++it) for (std::vector<MyGUI::WidgetPtr>::iterator it = mSpellPowerItems.begin(); it != mSpellPowerItems.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
spellPowerItems.clear(); mSpellPowerItems.clear();
if (currentRaceId.empty()) if (mCurrentRaceId.empty())
return; return;
MWSpellPtr spellPowerWidget; MWSpellPtr spellPowerWidget;
const int lineHeight = 18; const int lineHeight = 18;
MyGUI::IntCoord coord(0, 0, spellPowerList->getWidth(), 18); MyGUI::IntCoord coord(0, 0, mSpellPowerList->getWidth(), 18);
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
const ESM::Race *race = store.races.find(currentRaceId); const ESM::Race *race = store.races.find(mCurrentRaceId);
std::vector<std::string>::const_iterator it = race->powers.list.begin(); std::vector<std::string>::const_iterator it = race->powers.list.begin();
std::vector<std::string>::const_iterator end = race->powers.list.end(); std::vector<std::string>::const_iterator end = race->powers.list.end();
for (int i = 0; it != end; ++it) for (int i = 0; it != end; ++it)
{ {
const std::string &spellpower = *it; const std::string &spellpower = *it;
spellPowerWidget = spellPowerList->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("SpellPower") + boost::lexical_cast<std::string>(i)); spellPowerWidget = mSpellPowerList->createWidget<MWSpell>("MW_StatName", coord, MyGUI::Align::Default, std::string("SpellPower") + boost::lexical_cast<std::string>(i));
spellPowerWidget->setWindowManager(&mWindowManager); spellPowerWidget->setWindowManager(&mWindowManager);
spellPowerWidget->setSpellId(spellpower); spellPowerWidget->setSpellId(spellpower);
spellPowerWidget->setUserString("ToolTipType", "Spell"); spellPowerWidget->setUserString("ToolTipType", "Spell");
spellPowerWidget->setUserString("Spell", spellpower); spellPowerWidget->setUserString("Spell", spellpower);
spellPowerItems.push_back(spellPowerWidget); mSpellPowerItems.push_back(spellPowerWidget);
coord.top += lineHeight; coord.top += lineHeight;
++i; ++i;

@ -32,13 +32,13 @@ namespace MWGui
GM_Female GM_Female
}; };
const std::string &getRaceId() const { return currentRaceId; } const std::string &getRaceId() const { return mCurrentRaceId; }
Gender getGender() const { return genderIndex == 0 ? GM_Male : GM_Female; } Gender getGender() const { return mGenderIndex == 0 ? GM_Male : GM_Female; }
// getFace() // getFace()
// getHair() // getHair()
void setRaceId(const std::string &raceId); void setRaceId(const std::string &raceId);
void setGender(Gender gender) { genderIndex = gender == GM_Male ? 0 : 1; } void setGender(Gender gender) { mGenderIndex = gender == GM_Male ? 0 : 1; }
// setFace() // setFace()
// setHair() // setHair()
@ -75,20 +75,20 @@ namespace MWGui
void updateSkills(); void updateSkills();
void updateSpellPowers(); void updateSpellPowers();
MyGUI::CanvasPtr appearanceBox; MyGUI::CanvasPtr mAppearanceBox;
MyGUI::ListBox* raceList; MyGUI::ListBox* mRaceList;
MyGUI::ScrollBar* headRotate; MyGUI::ScrollBar* mHeadRotate;
MyGUI::WidgetPtr skillList; MyGUI::WidgetPtr mSkillList;
std::vector<MyGUI::WidgetPtr> skillItems; std::vector<MyGUI::WidgetPtr> mSkillItems;
MyGUI::WidgetPtr spellPowerList; MyGUI::WidgetPtr mSpellPowerList;
std::vector<MyGUI::WidgetPtr> spellPowerItems; std::vector<MyGUI::WidgetPtr> mSpellPowerItems;
int genderIndex, faceIndex, hairIndex; int mGenderIndex, mFaceIndex, mHairIndex;
int faceCount, hairCount; int mFaceCount, mHairCount;
std::string currentRaceId; std::string mCurrentRaceId;
}; };
} }
#endif #endif

@ -17,49 +17,49 @@
using namespace MWGui; using namespace MWGui;
using namespace Widgets; using namespace Widgets;
const int ReviewDialog::lineHeight = 18; const int ReviewDialog::sLineHeight = 18;
ReviewDialog::ReviewDialog(WindowManager& parWindowManager) ReviewDialog::ReviewDialog(WindowManager& parWindowManager)
: WindowBase("openmw_chargen_review.layout", parWindowManager) : WindowBase("openmw_chargen_review.layout", parWindowManager)
, lastPos(0) , mLastPos(0)
{ {
// Centre dialog // Centre dialog
center(); center();
// Setup static stats // Setup static stats
ButtonPtr button; ButtonPtr button;
getWidget(nameWidget, "NameText"); getWidget(mNameWidget, "NameText");
getWidget(button, "NameButton"); getWidget(button, "NameButton");
adjustButtonSize(button); adjustButtonSize(button);
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onNameClicked);; button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onNameClicked);;
getWidget(raceWidget, "RaceText"); getWidget(mRaceWidget, "RaceText");
getWidget(button, "RaceButton"); getWidget(button, "RaceButton");
adjustButtonSize(button); adjustButtonSize(button);
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onRaceClicked);; button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onRaceClicked);;
getWidget(classWidget, "ClassText"); getWidget(mClassWidget, "ClassText");
getWidget(button, "ClassButton"); getWidget(button, "ClassButton");
adjustButtonSize(button); adjustButtonSize(button);
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onClassClicked);; button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onClassClicked);;
getWidget(birthSignWidget, "SignText"); getWidget(mBirthSignWidget, "SignText");
getWidget(button, "SignButton"); getWidget(button, "SignButton");
adjustButtonSize(button); adjustButtonSize(button);
button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onBirthSignClicked);; button->eventMouseButtonClick += MyGUI::newDelegate(this, &ReviewDialog::onBirthSignClicked);;
// Setup dynamic stats // Setup dynamic stats
getWidget(health, "Health"); getWidget(mHealth, "Health");
health->setTitle(mWindowManager.getGameSettingString("sHealth", "")); mHealth->setTitle(mWindowManager.getGameSettingString("sHealth", ""));
health->setValue(45, 45); mHealth->setValue(45, 45);
getWidget(magicka, "Magicka"); getWidget(mMagicka, "Magicka");
magicka->setTitle(mWindowManager.getGameSettingString("sMagic", "")); mMagicka->setTitle(mWindowManager.getGameSettingString("sMagic", ""));
magicka->setValue(50, 50); mMagicka->setValue(50, 50);
getWidget(fatigue, "Fatigue"); getWidget(mFatigue, "Fatigue");
fatigue->setTitle(mWindowManager.getGameSettingString("sFatigue", "")); mFatigue->setTitle(mWindowManager.getGameSettingString("sFatigue", ""));
fatigue->setValue(160, 160); mFatigue->setValue(160, 160);
// Setup attributes // Setup attributes
@ -67,24 +67,24 @@ ReviewDialog::ReviewDialog(WindowManager& parWindowManager)
for (int idx = 0; idx < ESM::Attribute::Length; ++idx) for (int idx = 0; idx < ESM::Attribute::Length; ++idx)
{ {
getWidget(attribute, std::string("Attribute") + boost::lexical_cast<std::string>(idx)); getWidget(attribute, std::string("Attribute") + boost::lexical_cast<std::string>(idx));
attributeWidgets.insert(std::make_pair(static_cast<int>(ESM::Attribute::attributeIds[idx]), attribute)); mAttributeWidgets.insert(std::make_pair(static_cast<int>(ESM::Attribute::attributeIds[idx]), attribute));
attribute->setWindowManager(&mWindowManager); attribute->setWindowManager(&mWindowManager);
attribute->setAttributeId(ESM::Attribute::attributeIds[idx]); attribute->setAttributeId(ESM::Attribute::attributeIds[idx]);
attribute->setAttributeValue(MWAttribute::AttributeValue(0, 0)); attribute->setAttributeValue(MWAttribute::AttributeValue(0, 0));
} }
// Setup skills // Setup skills
getWidget(skillAreaWidget, "Skills"); getWidget(mSkillAreaWidget, "Skills");
getWidget(skillClientWidget, "SkillClient"); getWidget(mSkillClientWidget, "SkillClient");
getWidget(skillScrollerWidget, "SkillScroller"); getWidget(mSkillScrollerWidget, "SkillScroller");
skillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); mSkillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition); mSkillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &ReviewDialog::onScrollChangePosition);
updateScroller(); updateScroller();
for (int i = 0; i < ESM::Skill::Length; ++i) for (int i = 0; i < ESM::Skill::Length; ++i)
{ {
skillValues.insert(std::make_pair(i, MWMechanics::Stat<float>())); mSkillValues.insert(std::make_pair(i, MWMechanics::Stat<float>()));
skillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::TextBox*> (0))); mSkillWidgetMap.insert(std::make_pair(i, static_cast<MyGUI::TextBox*> (0)));
} }
static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &ReviewDialog::onWindowResize); static_cast<MyGUI::WindowPtr>(mMainWidget)->eventWindowChangeCoord += MyGUI::newDelegate(this, &ReviewDialog::onWindowResize);
@ -112,14 +112,14 @@ void ReviewDialog::open()
void ReviewDialog::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) void ReviewDialog::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos)
{ {
int diff = lastPos - pos; int diff = mLastPos - pos;
// Adjust position of all widget according to difference // Adjust position of all widget according to difference
if (diff == 0) if (diff == 0)
return; return;
lastPos = pos; mLastPos = pos;
std::vector<MyGUI::WidgetPtr>::const_iterator end = skillWidgets.end(); std::vector<MyGUI::WidgetPtr>::const_iterator end = mSkillWidgets.end();
for (std::vector<MyGUI::WidgetPtr>::const_iterator it = skillWidgets.begin(); it != end; ++it) for (std::vector<MyGUI::WidgetPtr>::const_iterator it = mSkillWidgets.begin(); it != end; ++it)
{ {
(*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff)); (*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff));
} }
@ -132,63 +132,63 @@ void ReviewDialog::onWindowResize(MyGUI::Window* window)
void ReviewDialog::setPlayerName(const std::string &name) void ReviewDialog::setPlayerName(const std::string &name)
{ {
nameWidget->setCaption(name); mNameWidget->setCaption(name);
} }
void ReviewDialog::setRace(const std::string &raceId_) void ReviewDialog::setRace(const std::string &raceId)
{ {
raceId = raceId_; mRaceId = raceId;
const ESM::Race *race = mWindowManager.getStore().races.search(raceId); const ESM::Race *race = mWindowManager.getStore().races.search(mRaceId);
if (race) if (race)
{ {
ToolTips::createRaceToolTip(raceWidget, race); ToolTips::createRaceToolTip(mRaceWidget, race);
raceWidget->setCaption(race->name); mRaceWidget->setCaption(race->name);
} }
} }
void ReviewDialog::setClass(const ESM::Class& class_) void ReviewDialog::setClass(const ESM::Class& class_)
{ {
klass = class_; mKlass = class_;
classWidget->setCaption(klass.name); mClassWidget->setCaption(mKlass.name);
ToolTips::createClassToolTip(classWidget, klass); ToolTips::createClassToolTip(mClassWidget, mKlass);
} }
void ReviewDialog::setBirthSign(const std::string& signId) void ReviewDialog::setBirthSign(const std::string& signId)
{ {
birthSignId = signId; mBirthSignId = signId;
const ESM::BirthSign *sign = mWindowManager.getStore().birthSigns.search(birthSignId); const ESM::BirthSign *sign = mWindowManager.getStore().birthSigns.search(mBirthSignId);
if (sign) if (sign)
{ {
birthSignWidget->setCaption(sign->name); mBirthSignWidget->setCaption(sign->name);
ToolTips::createBirthsignToolTip(birthSignWidget, birthSignId); ToolTips::createBirthsignToolTip(mBirthSignWidget, mBirthSignId);
} }
} }
void ReviewDialog::setHealth(const MWMechanics::DynamicStat<int>& value) void ReviewDialog::setHealth(const MWMechanics::DynamicStat<int>& value)
{ {
health->setValue(value.getCurrent(), value.getModified()); mHealth->setValue(value.getCurrent(), value.getModified());
std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified());
health->setUserString("Caption_HealthDescription", "#{sHealthDesc}\n" + valStr); mHealth->setUserString("Caption_HealthDescription", "#{sHealthDesc}\n" + valStr);
} }
void ReviewDialog::setMagicka(const MWMechanics::DynamicStat<int>& value) void ReviewDialog::setMagicka(const MWMechanics::DynamicStat<int>& value)
{ {
magicka->setValue(value.getCurrent(), value.getModified()); mMagicka->setValue(value.getCurrent(), value.getModified());
std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified());
magicka->setUserString("Caption_HealthDescription", "#{sIntDesc}\n" + valStr); mMagicka->setUserString("Caption_HealthDescription", "#{sIntDesc}\n" + valStr);
} }
void ReviewDialog::setFatigue(const MWMechanics::DynamicStat<int>& value) void ReviewDialog::setFatigue(const MWMechanics::DynamicStat<int>& value)
{ {
fatigue->setValue(value.getCurrent(), value.getModified()); mFatigue->setValue(value.getCurrent(), value.getModified());
std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified()); std::string valStr = boost::lexical_cast<std::string>(value.getCurrent()) + "/" + boost::lexical_cast<std::string>(value.getModified());
fatigue->setUserString("Caption_HealthDescription", "#{sFatDesc}\n" + valStr); mFatigue->setUserString("Caption_HealthDescription", "#{sFatDesc}\n" + valStr);
} }
void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const MWMechanics::Stat<int>& value) void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const MWMechanics::Stat<int>& value)
{ {
std::map<int, MWAttributePtr>::iterator attr = attributeWidgets.find(static_cast<int>(attributeId)); std::map<int, MWAttributePtr>::iterator attr = mAttributeWidgets.find(static_cast<int>(attributeId));
if (attr == attributeWidgets.end()) if (attr == mAttributeWidgets.end())
return; return;
attr->second->setAttributeValue(value); attr->second->setAttributeValue(value);
@ -196,8 +196,8 @@ void ReviewDialog::setAttribute(ESM::Attribute::AttributeID attributeId, const M
void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::Stat<float>& value) void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanics::Stat<float>& value)
{ {
skillValues[skillId] = value; mSkillValues[skillId] = value;
MyGUI::TextBox* widget = skillWidgetMap[skillId]; MyGUI::TextBox* widget = mSkillWidgetMap[skillId];
if (widget) if (widget)
{ {
float modified = value.getModified(), base = value.getBase(); float modified = value.getModified(), base = value.getBase();
@ -216,20 +216,20 @@ void ReviewDialog::setSkillValue(ESM::Skill::SkillEnum skillId, const MWMechanic
void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vector<int>& minor) void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vector<int>& minor)
{ {
majorSkills = major; mMajorSkills = major;
minorSkills = minor; mMinorSkills = minor;
// Update misc skills with the remaining skills not in major or minor // Update misc skills with the remaining skills not in major or minor
std::set<int> skillSet; std::set<int> skillSet;
std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin()));
std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin()));
boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end(); boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end();
miscSkills.clear(); mMiscSkills.clear();
for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it) for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it)
{ {
int skill = *it; int skill = *it;
if (skillSet.find(skill) == skillSet.end()) if (skillSet.find(skill) == skillSet.end())
miscSkills.push_back(skill); mMiscSkills.push_back(skill);
} }
updateSkillArea(); updateSkillArea();
@ -237,10 +237,10 @@ void ReviewDialog::configureSkills(const std::vector<int>& major, const std::vec
void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default); MyGUI::ImageBox* separator = mSkillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::Align::Default);
separator->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); separator->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
skillWidgets.push_back(separator); mSkillWidgets.push_back(separator);
coord1.top += separator->getHeight(); coord1.top += separator->getHeight();
coord2.top += separator->getHeight(); coord2.top += separator->getHeight();
@ -248,13 +248,13 @@ void ReviewDialog::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2
void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void ReviewDialog::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default); MyGUI::TextBox* groupWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::Align::Default);
groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
groupWidget->setCaption(label); groupWidget->setCaption(label);
skillWidgets.push_back(groupWidget); mSkillWidgets.push_back(groupWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
} }
MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
@ -262,20 +262,20 @@ MyGUI::TextBox* ReviewDialog::addValueItem(const std::string& text, const std::s
MyGUI::TextBox* skillNameWidget; MyGUI::TextBox* skillNameWidget;
MyGUI::TextBox* skillValueWidget; MyGUI::TextBox* skillValueWidget;
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default); skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Default);
skillNameWidget->setCaption(text); skillNameWidget->setCaption(text);
skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Top | MyGUI::Align::Right); skillValueWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Top | MyGUI::Align::Right);
skillValueWidget->setCaption(value); skillValueWidget->setCaption(value);
skillValueWidget->_setWidgetState(state); skillValueWidget->_setWidgetState(state);
skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
skillWidgets.push_back(skillNameWidget); mSkillWidgets.push_back(skillNameWidget);
skillWidgets.push_back(skillValueWidget); mSkillWidgets.push_back(skillValueWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
return skillValueWidget; return skillValueWidget;
} }
@ -284,20 +284,20 @@ void ReviewDialog::addItem(const std::string& text, MyGUI::IntCoord &coord1, MyG
{ {
MyGUI::TextBox* skillNameWidget; MyGUI::TextBox* skillNameWidget;
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
skillNameWidget->setCaption(text); skillNameWidget->setCaption(text);
skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel); skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &ReviewDialog::onMouseWheel);
skillWidgets.push_back(skillNameWidget); mSkillWidgets.push_back(skillNameWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
} }
void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
// Add a line separator if there are items above // Add a line separator if there are items above
if (!skillWidgets.empty()) if (!mSkillWidgets.empty())
{ {
addSeparator(coord1, coord2); addSeparator(coord1, coord2);
} }
@ -312,7 +312,7 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId
continue; continue;
assert(skillId >= 0 && skillId < ESM::Skill::Length); assert(skillId >= 0 && skillId < ESM::Skill::Length);
const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId]; const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId];
const MWMechanics::Stat<float> &stat = skillValues.find(skillId)->second; const MWMechanics::Stat<float> &stat = mSkillValues.find(skillId)->second;
float base = stat.getBase(); float base = stat.getBase();
float modified = stat.getModified(); float modified = stat.getModified();
@ -325,44 +325,44 @@ void ReviewDialog::addSkills(const SkillList &skills, const std::string &titleId
for (int i=0; i<2; ++i) for (int i=0; i<2; ++i)
{ {
ToolTips::createSkillToolTip(skillWidgets[skillWidgets.size()-1-i], skillId); ToolTips::createSkillToolTip(mSkillWidgets[mSkillWidgets.size()-1-i], skillId);
} }
skillWidgetMap[skillId] = widget; mSkillWidgetMap[skillId] = widget;
} }
} }
void ReviewDialog::updateSkillArea() void ReviewDialog::updateSkillArea()
{ {
for (std::vector<MyGUI::WidgetPtr>::iterator it = skillWidgets.begin(); it != skillWidgets.end(); ++it) for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillWidgets.begin(); it != mSkillWidgets.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
skillWidgets.clear(); mSkillWidgets.clear();
const int valueSize = 40; const int valueSize = 40;
MyGUI::IntCoord coord1(10, 0, skillClientWidget->getWidth() - (10 + valueSize), 18); MyGUI::IntCoord coord1(10, 0, mSkillClientWidget->getWidth() - (10 + valueSize), 18);
MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height); MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height);
if (!majorSkills.empty()) if (!mMajorSkills.empty())
addSkills(majorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); addSkills(mMajorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2);
if (!minorSkills.empty()) if (!mMinorSkills.empty())
addSkills(minorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); addSkills(mMinorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2);
if (!miscSkills.empty()) if (!mMiscSkills.empty())
addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); addSkills(mMiscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2);
clientHeight = coord1.top; mClientHeight = coord1.top;
updateScroller(); updateScroller();
} }
void ReviewDialog::updateScroller() void ReviewDialog::updateScroller()
{ {
skillScrollerWidget->setScrollRange(std::max(clientHeight - skillClientWidget->getHeight(), 0)); mSkillScrollerWidget->setScrollRange(std::max(mClientHeight - mSkillClientWidget->getHeight(), 0));
skillScrollerWidget->setScrollPage(std::max(skillClientWidget->getHeight() - lineHeight, 0)); mSkillScrollerWidget->setScrollPage(std::max(mSkillClientWidget->getHeight() - sLineHeight, 0));
if (clientHeight != 0) if (mClientHeight != 0)
skillScrollerWidget->setTrackSize( (skillAreaWidget->getHeight() / float(clientHeight)) * skillScrollerWidget->getLineSize() ); mSkillScrollerWidget->setTrackSize( (mSkillAreaWidget->getHeight() / float(mClientHeight)) * mSkillScrollerWidget->getLineSize() );
} }
// widget controls // widget controls
@ -399,12 +399,12 @@ void ReviewDialog::onBirthSignClicked(MyGUI::Widget* _sender)
void ReviewDialog::onMouseWheel(MyGUI::Widget* _sender, int _rel) void ReviewDialog::onMouseWheel(MyGUI::Widget* _sender, int _rel)
{ {
if (skillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 < 0)
skillScrollerWidget->setScrollPosition(0); mSkillScrollerWidget->setScrollPosition(0);
else if (skillScrollerWidget->getScrollPosition() - _rel*0.3 > skillScrollerWidget->getScrollRange()-1) else if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 > mSkillScrollerWidget->getScrollRange()-1)
skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollRange()-1); mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollRange()-1);
else else
skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollPosition() - _rel*0.3); mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollPosition() - _rel*0.3);
onScrollChangePosition(skillScrollerWidget, skillScrollerWidget->getScrollPosition()); onScrollChangePosition(mSkillScrollerWidget, mSkillScrollerWidget->getScrollPosition());
} }

@ -82,23 +82,23 @@ namespace MWGui
void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos); void onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos);
void onWindowResize(MyGUI::Window* window); void onWindowResize(MyGUI::Window* window);
static const int lineHeight; static const int sLineHeight;
MyGUI::TextBox *nameWidget, *raceWidget, *classWidget, *birthSignWidget; MyGUI::TextBox *mNameWidget, *mRaceWidget, *mClassWidget, *mBirthSignWidget;
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget;
MyGUI::ScrollBar* skillScrollerWidget; MyGUI::ScrollBar* mSkillScrollerWidget;
int lastPos, clientHeight; int mLastPos, mClientHeight;
Widgets::MWDynamicStatPtr health, magicka, fatigue; Widgets::MWDynamicStatPtr mHealth, mMagicka, mFatigue;
std::map<int, Widgets::MWAttributePtr> attributeWidgets; std::map<int, Widgets::MWAttributePtr> mAttributeWidgets;
SkillList majorSkills, minorSkills, miscSkills; SkillList mMajorSkills, mMinorSkills, mMiscSkills;
std::map<int, MWMechanics::Stat<float> > skillValues; std::map<int, MWMechanics::Stat<float> > mSkillValues;
std::map<int, MyGUI::TextBox*> skillWidgetMap; std::map<int, MyGUI::TextBox*> mSkillWidgetMap;
std::string name, raceId, birthSignId; std::string mName, mRaceId, mBirthSignId;
ESM::Class klass; ESM::Class mKlass;
std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information std::vector<MyGUI::WidgetPtr> mSkillWidgets; //< Skills and other information
}; };
} }
#endif #endif

@ -19,26 +19,26 @@
using namespace MWGui; using namespace MWGui;
const int StatsWindow::lineHeight = 18; const int StatsWindow::sLineHeight = 18;
StatsWindow::StatsWindow (WindowManager& parWindowManager) StatsWindow::StatsWindow (WindowManager& parWindowManager)
: WindowPinnableBase("openmw_stats_window.layout", parWindowManager) : WindowPinnableBase("openmw_stats_window.layout", parWindowManager)
, skillAreaWidget(NULL) , mSkillAreaWidget(NULL)
, skillClientWidget(NULL) , mSkillClientWidget(NULL)
, skillScrollerWidget(NULL) , mSkillScrollerWidget(NULL)
, lastPos(0) , mLastPos(0)
, clientHeight(0) , mClientHeight(0)
, majorSkills() , mMajorSkills()
, minorSkills() , mMinorSkills()
, miscSkills() , mMiscSkills()
, skillValues() , mSkillValues()
, skillWidgetMap() , mSkillWidgetMap()
, factionWidgetMap() , mFactionWidgetMap()
, mFactions() , mFactions()
, birthSignId() , mBirthSignId()
, reputation(0) , mReputation(0)
, bounty(0) , mBounty(0)
, skillWidgets() , mSkillWidgets()
, mChanged(true) , mChanged(true)
{ {
setCoord(0,0,498, 342); setCoord(0,0,498, 342);
@ -62,21 +62,21 @@ StatsWindow::StatsWindow (WindowManager& parWindowManager)
setText (names[i][0], store.gameSettings.find (names[i][1])->str); setText (names[i][0], store.gameSettings.find (names[i][1])->str);
} }
getWidget(skillAreaWidget, "Skills"); getWidget(mSkillAreaWidget, "Skills");
getWidget(skillClientWidget, "SkillClient"); getWidget(mSkillClientWidget, "SkillClient");
getWidget(skillScrollerWidget, "SkillScroller"); getWidget(mSkillScrollerWidget, "SkillScroller");
getWidget(mLeftPane, "LeftPane"); getWidget(mLeftPane, "LeftPane");
getWidget(mRightPane, "RightPane"); getWidget(mRightPane, "RightPane");
skillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); mSkillClientWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition); mSkillScrollerWidget->eventScrollChangePosition += MyGUI::newDelegate(this, &StatsWindow::onScrollChangePosition);
updateScroller(); updateScroller();
for (int i = 0; i < ESM::Skill::Length; ++i) for (int i = 0; i < ESM::Skill::Length; ++i)
{ {
skillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>())); mSkillValues.insert(std::pair<int, MWMechanics::Stat<float> >(i, MWMechanics::Stat<float>()));
skillWidgetMap.insert(std::pair<int, MyGUI::TextBox*>(i, nullptr)); mSkillWidgetMap.insert(std::pair<int, MyGUI::TextBox*>(i, nullptr));
} }
MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget); MyGUI::WindowPtr t = static_cast<MyGUI::WindowPtr>(mMainWidget);
@ -85,14 +85,14 @@ StatsWindow::StatsWindow (WindowManager& parWindowManager)
void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos) void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos)
{ {
int diff = lastPos - pos; int diff = mLastPos - pos;
// Adjust position of all widget according to difference // Adjust position of all widget according to difference
if (diff == 0) if (diff == 0)
return; return;
lastPos = pos; mLastPos = pos;
std::vector<MyGUI::WidgetPtr>::const_iterator end = skillWidgets.end(); std::vector<MyGUI::WidgetPtr>::const_iterator end = mSkillWidgets.end();
for (std::vector<MyGUI::WidgetPtr>::const_iterator it = skillWidgets.begin(); it != end; ++it) for (std::vector<MyGUI::WidgetPtr>::const_iterator it = mSkillWidgets.begin(); it != end; ++it)
{ {
(*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff)); (*it)->setCoord((*it)->getCoord() + MyGUI::IntPoint(0, diff));
} }
@ -100,14 +100,14 @@ void StatsWindow::onScrollChangePosition(MyGUI::ScrollBar* scroller, size_t pos)
void StatsWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel) void StatsWindow::onMouseWheel(MyGUI::Widget* _sender, int _rel)
{ {
if (skillScrollerWidget->getScrollPosition() - _rel*0.3 < 0) if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 < 0)
skillScrollerWidget->setScrollPosition(0); mSkillScrollerWidget->setScrollPosition(0);
else if (skillScrollerWidget->getScrollPosition() - _rel*0.3 > skillScrollerWidget->getScrollRange()-1) else if (mSkillScrollerWidget->getScrollPosition() - _rel*0.3 > mSkillScrollerWidget->getScrollRange()-1)
skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollRange()-1); mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollRange()-1);
else else
skillScrollerWidget->setScrollPosition(skillScrollerWidget->getScrollPosition() - _rel*0.3); mSkillScrollerWidget->setScrollPosition(mSkillScrollerWidget->getScrollPosition() - _rel*0.3);
onScrollChangePosition(skillScrollerWidget, skillScrollerWidget->getScrollPosition()); onScrollChangePosition(mSkillScrollerWidget, mSkillScrollerWidget->getScrollPosition());
} }
void StatsWindow::onWindowResize(MyGUI::Window* window) void StatsWindow::onWindowResize(MyGUI::Window* window)
@ -224,8 +224,8 @@ void StatsWindow::setValue (const std::string& id, int value)
void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value) void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value)
{ {
skillValues[parSkill] = value; mSkillValues[parSkill] = value;
MyGUI::TextBox* widget = skillWidgetMap[(int)parSkill]; MyGUI::TextBox* widget = mSkillWidgetMap[(int)parSkill];
if (widget) if (widget)
{ {
float modified = value.getModified(), base = value.getBase(); float modified = value.getModified(), base = value.getBase();
@ -243,20 +243,20 @@ void StatsWindow::setValue(const ESM::Skill::SkillEnum parSkill, const MWMechani
void StatsWindow::configureSkills (const std::vector<int>& major, const std::vector<int>& minor) void StatsWindow::configureSkills (const std::vector<int>& major, const std::vector<int>& minor)
{ {
majorSkills = major; mMajorSkills = major;
minorSkills = minor; mMinorSkills = minor;
// Update misc skills with the remaining skills not in major or minor // Update misc skills with the remaining skills not in major or minor
std::set<int> skillSet; std::set<int> skillSet;
std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin())); std::copy(major.begin(), major.end(), std::inserter(skillSet, skillSet.begin()));
std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin())); std::copy(minor.begin(), minor.end(), std::inserter(skillSet, skillSet.begin()));
boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end(); boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator end = ESM::Skill::skillIds.end();
miscSkills.clear(); mMiscSkills.clear();
for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it) for (boost::array<ESM::Skill::SkillEnum, ESM::Skill::Length>::const_iterator it = ESM::Skill::skillIds.begin(); it != end; ++it)
{ {
int skill = *it; int skill = *it;
if (skillSet.find(skill) == skillSet.end()) if (skillSet.find(skill) == skillSet.end())
miscSkills.push_back(skill); mMiscSkills.push_back(skill);
} }
updateSkillArea(); updateSkillArea();
@ -270,7 +270,7 @@ void StatsWindow::onFrame ()
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
MWMechanics::NpcStats PCstats = MWWorld::Class::get(player).getNpcStats(player); MWMechanics::NpcStats PCstats = MWWorld::Class::get(player).getNpcStats(player);
setFactions(PCstats.mFactionRank); setFactions(PCstats.getFactionRanks());
setBirthSign(MWBase::Environment::get().getWorld()->getPlayer().getBirthsign()); setBirthSign(MWBase::Environment::get().getWorld()->getPlayer().getBirthsign());
@ -289,20 +289,20 @@ void StatsWindow::setFactions (const FactionList& factions)
void StatsWindow::setBirthSign (const std::string& signId) void StatsWindow::setBirthSign (const std::string& signId)
{ {
if (signId != birthSignId) if (signId != mBirthSignId)
{ {
birthSignId = signId; mBirthSignId = signId;
mChanged = true; mChanged = true;
} }
} }
void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
MyGUI::ImageBox* separator = skillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine", MyGUI::ImageBox* separator = mSkillClientWidget->createWidget<MyGUI::ImageBox>("MW_HLine",
MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18), MyGUI::IntCoord(10, coord1.top, coord1.width + coord2.width - 4, 18),
MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch);
separator->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); separator->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillWidgets.push_back(separator); mSkillWidgets.push_back(separator);
coord1.top += separator->getHeight(); coord1.top += separator->getHeight();
coord2.top += separator->getHeight(); coord2.top += separator->getHeight();
@ -310,35 +310,35 @@ void StatsWindow::addSeparator(MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void StatsWindow::addGroup(const std::string &label, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
MyGUI::TextBox* groupWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText", MyGUI::TextBox* groupWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandBrightText",
MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height), MyGUI::IntCoord(0, coord1.top, coord1.width + coord2.width, coord1.height),
MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch);
groupWidget->setCaption(label); groupWidget->setCaption(label);
groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); groupWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillWidgets.push_back(groupWidget); mSkillWidgets.push_back(groupWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
} }
MyGUI::TextBox* StatsWindow::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) MyGUI::TextBox* StatsWindow::addValueItem(const std::string& text, const std::string &value, const std::string& state, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
MyGUI::TextBox *skillNameWidget, *skillValueWidget; MyGUI::TextBox *skillNameWidget, *skillValueWidget;
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch); skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1, MyGUI::Align::Left | MyGUI::Align::Top | MyGUI::Align::HStretch);
skillNameWidget->setCaption(text); skillNameWidget->setCaption(text);
skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillValueWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Right | MyGUI::Align::Top); skillValueWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandTextRight", coord2, MyGUI::Align::Right | MyGUI::Align::Top);
skillValueWidget->setCaption(value); skillValueWidget->setCaption(value);
skillValueWidget->_setWidgetState(state); skillValueWidget->_setWidgetState(state);
skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); skillValueWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillWidgets.push_back(skillNameWidget); mSkillWidgets.push_back(skillNameWidget);
skillWidgets.push_back(skillValueWidget); mSkillWidgets.push_back(skillValueWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
return skillValueWidget; return skillValueWidget;
} }
@ -347,14 +347,14 @@ MyGUI::Widget* StatsWindow::addItem(const std::string& text, MyGUI::IntCoord &co
{ {
MyGUI::TextBox* skillNameWidget; MyGUI::TextBox* skillNameWidget;
skillNameWidget = skillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default); skillNameWidget = mSkillClientWidget->createWidget<MyGUI::TextBox>("SandText", coord1 + MyGUI::IntSize(coord2.width, 0), MyGUI::Align::Default);
skillNameWidget->setCaption(text); skillNameWidget->setCaption(text);
skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel); skillNameWidget->eventMouseWheel += MyGUI::newDelegate(this, &StatsWindow::onMouseWheel);
skillWidgets.push_back(skillNameWidget); mSkillWidgets.push_back(skillNameWidget);
coord1.top += lineHeight; coord1.top += sLineHeight;
coord2.top += lineHeight; coord2.top += sLineHeight;
return skillNameWidget; return skillNameWidget;
} }
@ -362,7 +362,7 @@ MyGUI::Widget* StatsWindow::addItem(const std::string& text, MyGUI::IntCoord &co
void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2) void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId, const std::string &titleDefault, MyGUI::IntCoord &coord1, MyGUI::IntCoord &coord2)
{ {
// Add a line separator if there are items above // Add a line separator if there are items above
if (!skillWidgets.empty()) if (!mSkillWidgets.empty())
{ {
addSeparator(coord1, coord2); addSeparator(coord1, coord2);
} }
@ -377,7 +377,7 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId,
continue; continue;
assert(skillId >= 0 && skillId < ESM::Skill::Length); assert(skillId >= 0 && skillId < ESM::Skill::Length);
const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId]; const std::string &skillNameId = ESMS::Skill::sSkillNameIds[skillId];
const MWMechanics::Stat<float> &stat = skillValues.find(skillId)->second; const MWMechanics::Stat<float> &stat = mSkillValues.find(skillId)->second;
float base = stat.getBase(); float base = stat.getBase();
float modified = stat.getModified(); float modified = stat.getModified();
int progressPercent = (modified - float(static_cast<int>(modified))) * 100; int progressPercent = (modified - float(static_cast<int>(modified))) * 100;
@ -400,18 +400,18 @@ void StatsWindow::addSkills(const SkillList &skills, const std::string &titleId,
for (int i=0; i<2; ++i) for (int i=0; i<2; ++i)
{ {
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout");
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "SkillToolTip"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "SkillToolTip");
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillName", "#{"+skillNameId+"}"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillName", "#{"+skillNameId+"}");
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillDescription", skill->description); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillDescription", skill->description);
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillAttribute", "#{sGoverningAttribute}: #{" + attr->name + "}");
skillWidgets[skillWidgets.size()-1-i]->setUserString("ImageTexture_SkillImage", icon); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ImageTexture_SkillImage", icon);
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_SkillProgressText", boost::lexical_cast<std::string>(progressPercent)+"/100"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_SkillProgressText", boost::lexical_cast<std::string>(progressPercent)+"/100");
skillWidgets[skillWidgets.size()-1-i]->setUserString("Range_SkillProgress", "100"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Range_SkillProgress", "100");
skillWidgets[skillWidgets.size()-1-i]->setUserString("RangePosition_SkillProgress", boost::lexical_cast<std::string>(progressPercent)); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("RangePosition_SkillProgress", boost::lexical_cast<std::string>(progressPercent));
} }
skillWidgetMap[skillId] = widget; mSkillWidgetMap[skillId] = widget;
} }
} }
@ -419,28 +419,28 @@ void StatsWindow::updateSkillArea()
{ {
mChanged = false; mChanged = false;
for (std::vector<MyGUI::WidgetPtr>::iterator it = skillWidgets.begin(); it != skillWidgets.end(); ++it) for (std::vector<MyGUI::WidgetPtr>::iterator it = mSkillWidgets.begin(); it != mSkillWidgets.end(); ++it)
{ {
MyGUI::Gui::getInstance().destroyWidget(*it); MyGUI::Gui::getInstance().destroyWidget(*it);
} }
skillWidgets.clear(); mSkillWidgets.clear();
skillScrollerWidget->setScrollPosition(0); mSkillScrollerWidget->setScrollPosition(0);
onScrollChangePosition(skillScrollerWidget, 0); onScrollChangePosition(mSkillScrollerWidget, 0);
clientHeight = 0; mClientHeight = 0;
const int valueSize = 40; const int valueSize = 40;
MyGUI::IntCoord coord1(10, 0, skillClientWidget->getWidth() - (10 + valueSize), 18); MyGUI::IntCoord coord1(10, 0, mSkillClientWidget->getWidth() - (10 + valueSize), 18);
MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height); MyGUI::IntCoord coord2(coord1.left + coord1.width, coord1.top, valueSize, coord1.height);
if (!majorSkills.empty()) if (!mMajorSkills.empty())
addSkills(majorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2); addSkills(mMajorSkills, "sSkillClassMajor", "Major Skills", coord1, coord2);
if (!minorSkills.empty()) if (!mMinorSkills.empty())
addSkills(minorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2); addSkills(mMinorSkills, "sSkillClassMinor", "Minor Skills", coord1, coord2);
if (!miscSkills.empty()) if (!mMiscSkills.empty())
addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2); addSkills(mMiscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2);
const ESMS::ESMStore &store = mWindowManager.getStore(); const ESMS::ESMStore &store = mWindowManager.getStore();
@ -463,7 +463,7 @@ void StatsWindow::updateSkillArea()
if (!mFactions.empty()) if (!mFactions.empty())
{ {
// Add a line separator if there are items above // Add a line separator if there are items above
if (!skillWidgets.empty()) if (!mSkillWidgets.empty())
addSeparator(coord1, coord2); addSeparator(coord1, coord2);
addGroup(mWindowManager.getGameSettingString("sFaction", "Faction"), coord1, coord2); addGroup(mWindowManager.getGameSettingString("sFaction", "Faction"), coord1, coord2);
@ -516,53 +516,53 @@ void StatsWindow::updateSkillArea()
} }
} }
if (!birthSignId.empty()) if (!mBirthSignId.empty())
{ {
// Add a line separator if there are items above // Add a line separator if there are items above
if (!skillWidgets.empty()) if (!mSkillWidgets.empty())
addSeparator(coord1, coord2); addSeparator(coord1, coord2);
addGroup(mWindowManager.getGameSettingString("sBirthSign", "Sign"), coord1, coord2); addGroup(mWindowManager.getGameSettingString("sBirthSign", "Sign"), coord1, coord2);
const ESM::BirthSign *sign = store.birthSigns.find(birthSignId); const ESM::BirthSign *sign = store.birthSigns.find(mBirthSignId);
MyGUI::Widget* w = addItem(sign->name, coord1, coord2); MyGUI::Widget* w = addItem(sign->name, coord1, coord2);
ToolTips::createBirthsignToolTip(w, birthSignId); ToolTips::createBirthsignToolTip(w, mBirthSignId);
} }
// Add a line separator if there are items above // Add a line separator if there are items above
if (!skillWidgets.empty()) if (!mSkillWidgets.empty())
addSeparator(coord1, coord2); addSeparator(coord1, coord2);
addValueItem(mWindowManager.getGameSettingString("sReputation", "Reputation"), addValueItem(mWindowManager.getGameSettingString("sReputation", "Reputation"),
boost::lexical_cast<std::string>(static_cast<int>(reputation)), "normal", coord1, coord2); boost::lexical_cast<std::string>(static_cast<int>(mReputation)), "normal", coord1, coord2);
for (int i=0; i<2; ++i) for (int i=0; i<2; ++i)
{ {
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout");
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip");
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sSkillsMenuReputationHelp}"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sSkillsMenuReputationHelp}");
} }
addValueItem(mWindowManager.getGameSettingString("sBounty", "Bounty"), addValueItem(mWindowManager.getGameSettingString("sBounty", "Bounty"),
boost::lexical_cast<std::string>(static_cast<int>(bounty)), "normal", coord1, coord2); boost::lexical_cast<std::string>(static_cast<int>(mBounty)), "normal", coord1, coord2);
for (int i=0; i<2; ++i) for (int i=0; i<2; ++i)
{ {
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipType", "Layout");
skillWidgets[skillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("ToolTipLayout", "TextToolTip");
skillWidgets[skillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sCrimeHelp}"); mSkillWidgets[mSkillWidgets.size()-1-i]->setUserString("Caption_Text", "#{sCrimeHelp}");
} }
clientHeight = coord1.top; mClientHeight = coord1.top;
updateScroller(); updateScroller();
} }
void StatsWindow::updateScroller() void StatsWindow::updateScroller()
{ {
skillScrollerWidget->setScrollRange(std::max(clientHeight - skillClientWidget->getHeight(), 0)); mSkillScrollerWidget->setScrollRange(std::max(mClientHeight - mSkillClientWidget->getHeight(), 0));
skillScrollerWidget->setScrollPage(std::max(skillClientWidget->getHeight() - lineHeight, 0)); mSkillScrollerWidget->setScrollPage(std::max(mSkillClientWidget->getHeight() - sLineHeight, 0));
if (clientHeight != 0) if (mClientHeight != 0)
skillScrollerWidget->setTrackSize( (skillAreaWidget->getHeight() / float(clientHeight)) * skillScrollerWidget->getLineSize() ); mSkillScrollerWidget->setTrackSize( (mSkillAreaWidget->getHeight() / float(mClientHeight)) * mSkillScrollerWidget->getLineSize() );
} }
void StatsWindow::onPinToggled() void StatsWindow::onPinToggled()

@ -38,8 +38,8 @@ namespace MWGui
void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value); void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::Stat<float>& value);
void configureSkills (const SkillList& major, const SkillList& minor); void configureSkills (const SkillList& major, const SkillList& minor);
void setReputation (int reputation) { this->reputation = reputation; } void setReputation (int reputation) { this->mReputation = reputation; }
void setBounty (int bounty) { this->bounty = bounty; } void setBounty (int bounty) { this->mBounty = bounty; }
void updateSkillArea(); void updateSkillArea();
private: private:
@ -57,23 +57,23 @@ namespace MWGui
void onWindowResize(MyGUI::Window* window); void onWindowResize(MyGUI::Window* window);
void onMouseWheel(MyGUI::Widget* _sender, int _rel); void onMouseWheel(MyGUI::Widget* _sender, int _rel);
static const int lineHeight; static const int sLineHeight;
MyGUI::Widget* mLeftPane; MyGUI::Widget* mLeftPane;
MyGUI::Widget* mRightPane; MyGUI::Widget* mRightPane;
MyGUI::WidgetPtr skillAreaWidget, skillClientWidget; MyGUI::WidgetPtr mSkillAreaWidget, mSkillClientWidget;
MyGUI::ScrollBar* skillScrollerWidget; MyGUI::ScrollBar* mSkillScrollerWidget;
int lastPos, clientHeight; int mLastPos, mClientHeight;
SkillList majorSkills, minorSkills, miscSkills; SkillList mMajorSkills, mMinorSkills, mMiscSkills;
std::map<int, MWMechanics::Stat<float> > skillValues; std::map<int, MWMechanics::Stat<float> > mSkillValues;
std::map<int, MyGUI::TextBox*> skillWidgetMap; std::map<int, MyGUI::TextBox*> mSkillWidgetMap;
std::map<std::string, MyGUI::WidgetPtr> factionWidgetMap; std::map<std::string, MyGUI::WidgetPtr> mFactionWidgetMap;
FactionList mFactions; ///< Stores a list of factions and the current rank FactionList mFactions; ///< Stores a list of factions and the current rank
std::string birthSignId; std::string mBirthSignId;
int reputation, bounty; int mReputation, mBounty;
std::vector<MyGUI::WidgetPtr> skillWidgets; //< Skills and other information std::vector<MyGUI::WidgetPtr> mSkillWidgets; //< Skills and other information
bool mChanged; bool mChanged;

@ -9,15 +9,15 @@ TextInputDialog::TextInputDialog(WindowManager& parWindowManager)
// Centre dialog // Centre dialog
center(); center();
getWidget(textEdit, "TextEdit"); getWidget(mTextEdit, "TextEdit");
textEdit->eventEditSelectAccept += newDelegate(this, &TextInputDialog::onTextAccepted); mTextEdit->eventEditSelectAccept += newDelegate(this, &TextInputDialog::onTextAccepted);
MyGUI::ButtonPtr okButton; MyGUI::ButtonPtr okButton;
getWidget(okButton, "OKButton"); getWidget(okButton, "OKButton");
okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &TextInputDialog::onOkClicked); okButton->eventMouseButtonClick += MyGUI::newDelegate(this, &TextInputDialog::onOkClicked);
// Make sure the edit box has focus // Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit);
} }
void TextInputDialog::setNextButtonShow(bool shown) void TextInputDialog::setNextButtonShow(bool shown)
@ -43,7 +43,7 @@ void TextInputDialog::setTextLabel(const std::string &label)
void TextInputDialog::open() void TextInputDialog::open()
{ {
// Make sure the edit box has focus // Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(textEdit); MyGUI::InputManager::getInstance().setKeyFocusWidget(mTextEdit);
setVisible(true); setVisible(true);
} }

@ -20,8 +20,8 @@ namespace MWGui
public: public:
TextInputDialog(WindowManager& parWindowManager); TextInputDialog(WindowManager& parWindowManager);
std::string getTextInput() const { return textEdit ? textEdit->getOnlyText() : ""; } std::string getTextInput() const { return mTextEdit ? mTextEdit->getOnlyText() : ""; }
void setTextInput(const std::string &text) { if (textEdit) textEdit->setOnlyText(text); } void setTextInput(const std::string &text) { if (mTextEdit) mTextEdit->setOnlyText(text); }
void setNextButtonShow(bool shown); void setNextButtonShow(bool shown);
void setTextLabel(const std::string &label); void setTextLabel(const std::string &label);
@ -32,7 +32,7 @@ namespace MWGui
void onTextAccepted(MyGUI::Edit* _sender); void onTextAccepted(MyGUI::Edit* _sender);
private: private:
MyGUI::EditPtr textEdit; MyGUI::EditPtr mTextEdit;
}; };
} }
#endif #endif

@ -27,16 +27,16 @@ void MWGui::Widgets::fixTexturePath(std::string &path)
/* MWSkill */ /* MWSkill */
MWSkill::MWSkill() MWSkill::MWSkill()
: manager(nullptr) : mManager(nullptr)
, skillId(ESM::Skill::Length) , mSkillId(ESM::Skill::Length)
, skillNameWidget(nullptr) , mSkillNameWidget(nullptr)
, skillValueWidget(nullptr) , mSkillValueWidget(nullptr)
{ {
} }
void MWSkill::setSkillId(ESM::Skill::SkillEnum skill) void MWSkill::setSkillId(ESM::Skill::SkillEnum skill)
{ {
skillId = skill; mSkillId = skill;
updateWidgets(); updateWidgets();
} }
@ -50,36 +50,36 @@ void MWSkill::setSkillNumber(int skill)
throw new std::runtime_error("Skill number out of range"); throw new std::runtime_error("Skill number out of range");
} }
void MWSkill::setSkillValue(const SkillValue& value_) void MWSkill::setSkillValue(const SkillValue& value)
{ {
value = value_; mValue = value;
updateWidgets(); updateWidgets();
} }
void MWSkill::updateWidgets() void MWSkill::updateWidgets()
{ {
if (skillNameWidget && manager) if (mSkillNameWidget && mManager)
{ {
if (skillId == ESM::Skill::Length) if (mSkillId == ESM::Skill::Length)
{ {
static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption(""); static_cast<MyGUI::TextBox*>(mSkillNameWidget)->setCaption("");
} }
else else
{ {
const std::string &name = manager->getGameSettingString(ESM::Skill::sSkillNameIds[skillId], ""); const std::string &name = mManager->getGameSettingString(ESM::Skill::sSkillNameIds[mSkillId], "");
static_cast<MyGUI::TextBox*>(skillNameWidget)->setCaption(name); static_cast<MyGUI::TextBox*>(mSkillNameWidget)->setCaption(name);
} }
} }
if (skillValueWidget) if (mSkillValueWidget)
{ {
SkillValue::Type modified = value.getModified(), base = value.getBase(); SkillValue::Type modified = mValue.getModified(), base = mValue.getBase();
static_cast<MyGUI::TextBox*>(skillValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); static_cast<MyGUI::TextBox*>(mSkillValueWidget)->setCaption(boost::lexical_cast<std::string>(modified));
if (modified > base) if (modified > base)
skillValueWidget->_setWidgetState("increased"); mSkillValueWidget->_setWidgetState("increased");
else if (modified < base) else if (modified < base)
skillValueWidget->_setWidgetState("decreased"); mSkillValueWidget->_setWidgetState("decreased");
else else
skillValueWidget->_setWidgetState("normal"); mSkillValueWidget->_setWidgetState("normal");
} }
} }
@ -96,14 +96,14 @@ void MWSkill::initialiseOverride()
{ {
Base::initialiseOverride(); Base::initialiseOverride();
assignWidget(skillNameWidget, "StatName"); assignWidget(mSkillNameWidget, "StatName");
assignWidget(skillValueWidget, "StatValue"); assignWidget(mSkillValueWidget, "StatValue");
MyGUI::ButtonPtr button; MyGUI::ButtonPtr button;
assignWidget(button, "StatNameButton"); assignWidget(button, "StatNameButton");
if (button) if (button)
{ {
skillNameWidget = button; mSkillNameWidget = button;
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked); button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked);
} }
@ -111,7 +111,7 @@ void MWSkill::initialiseOverride()
assignWidget(button, "StatValueButton"); assignWidget(button, "StatValueButton");
if (button) if (button)
{ {
skillNameWidget = button; mSkillNameWidget = button;
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked); button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWSkill::onClicked);
} }
} }
@ -119,22 +119,22 @@ void MWSkill::initialiseOverride()
/* MWAttribute */ /* MWAttribute */
MWAttribute::MWAttribute() MWAttribute::MWAttribute()
: manager(nullptr) : mManager(nullptr)
, id(-1) , mId(-1)
, attributeNameWidget(nullptr) , mAttributeNameWidget(nullptr)
, attributeValueWidget(nullptr) , mAttributeValueWidget(nullptr)
{ {
} }
void MWAttribute::setAttributeId(int attributeId) void MWAttribute::setAttributeId(int attributeId)
{ {
id = attributeId; mId = attributeId;
updateWidgets(); updateWidgets();
} }
void MWAttribute::setAttributeValue(const AttributeValue& value_) void MWAttribute::setAttributeValue(const AttributeValue& value)
{ {
value = value_; mValue = value;
updateWidgets(); updateWidgets();
} }
@ -145,11 +145,11 @@ void MWAttribute::onClicked(MyGUI::Widget* _sender)
void MWAttribute::updateWidgets() void MWAttribute::updateWidgets()
{ {
if (attributeNameWidget && manager) if (mAttributeNameWidget && mManager)
{ {
if (id < 0 || id >= 8) if (mId < 0 || mId >= 8)
{ {
static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption(""); static_cast<MyGUI::TextBox*>(mAttributeNameWidget)->setCaption("");
} }
else else
{ {
@ -163,20 +163,20 @@ void MWAttribute::updateWidgets()
"sAttributePersonality", "sAttributePersonality",
"sAttributeLuck" "sAttributeLuck"
}; };
const std::string &name = manager->getGameSettingString(attributes[id], ""); const std::string &name = mManager->getGameSettingString(attributes[mId], "");
static_cast<MyGUI::TextBox*>(attributeNameWidget)->setCaption(name); static_cast<MyGUI::TextBox*>(mAttributeNameWidget)->setCaption(name);
} }
} }
if (attributeValueWidget) if (mAttributeValueWidget)
{ {
AttributeValue::Type modified = value.getModified(), base = value.getBase(); AttributeValue::Type modified = mValue.getModified(), base = mValue.getBase();
static_cast<MyGUI::TextBox*>(attributeValueWidget)->setCaption(boost::lexical_cast<std::string>(modified)); static_cast<MyGUI::TextBox*>(mAttributeValueWidget)->setCaption(boost::lexical_cast<std::string>(modified));
if (modified > base) if (modified > base)
attributeValueWidget->_setWidgetState("increased"); mAttributeValueWidget->_setWidgetState("increased");
else if (modified < base) else if (modified < base)
attributeValueWidget->_setWidgetState("decreased"); mAttributeValueWidget->_setWidgetState("decreased");
else else
attributeValueWidget->_setWidgetState("normal"); mAttributeValueWidget->_setWidgetState("normal");
} }
} }
@ -188,14 +188,14 @@ void MWAttribute::initialiseOverride()
{ {
Base::initialiseOverride(); Base::initialiseOverride();
assignWidget(attributeNameWidget, "StatName"); assignWidget(mAttributeNameWidget, "StatName");
assignWidget(attributeValueWidget, "StatValue"); assignWidget(mAttributeValueWidget, "StatValue");
MyGUI::ButtonPtr button; MyGUI::ButtonPtr button;
assignWidget(button, "StatNameButton"); assignWidget(button, "StatNameButton");
if (button) if (button)
{ {
attributeNameWidget = button; mAttributeNameWidget = button;
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked); button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked);
} }
@ -203,7 +203,7 @@ void MWAttribute::initialiseOverride()
assignWidget(button, "StatValueButton"); assignWidget(button, "StatValueButton");
if (button) if (button)
{ {
attributeValueWidget = button; mAttributeValueWidget = button;
button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked); button->eventMouseButtonClick += MyGUI::newDelegate(this, &MWAttribute::onClicked);
} }
} }
@ -212,21 +212,21 @@ void MWAttribute::initialiseOverride()
MWSpell::MWSpell() MWSpell::MWSpell()
: mWindowManager(nullptr) : mWindowManager(nullptr)
, spellNameWidget(nullptr) , mSpellNameWidget(nullptr)
{ {
} }
void MWSpell::setSpellId(const std::string &spellId) void MWSpell::setSpellId(const std::string &spellId)
{ {
id = spellId; mId = spellId;
updateWidgets(); updateWidgets();
} }
void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags) void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags)
{ {
const ESMS::ESMStore &store = mWindowManager->getStore(); const ESMS::ESMStore &store = mWindowManager->getStore();
const ESM::Spell *spell = store.spells.search(id); const ESM::Spell *spell = store.spells.search(mId);
MYGUI_ASSERT(spell, "spell with id '" << id << "' not found"); MYGUI_ASSERT(spell, "spell with id '" << mId << "' not found");
MWSpellEffectPtr effect = nullptr; MWSpellEffectPtr effect = nullptr;
std::vector<ESM::ENAMstruct>::const_iterator end = spell->effects.list.end(); std::vector<ESM::ENAMstruct>::const_iterator end = spell->effects.list.end();
@ -253,14 +253,14 @@ void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI:
void MWSpell::updateWidgets() void MWSpell::updateWidgets()
{ {
if (spellNameWidget && mWindowManager) if (mSpellNameWidget && mWindowManager)
{ {
const ESMS::ESMStore &store = mWindowManager->getStore(); const ESMS::ESMStore &store = mWindowManager->getStore();
const ESM::Spell *spell = store.spells.search(id); const ESM::Spell *spell = store.spells.search(mId);
if (spell) if (spell)
static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption(spell->name); static_cast<MyGUI::TextBox*>(mSpellNameWidget)->setCaption(spell->name);
else else
static_cast<MyGUI::TextBox*>(spellNameWidget)->setCaption(""); static_cast<MyGUI::TextBox*>(mSpellNameWidget)->setCaption("");
} }
} }
@ -268,7 +268,7 @@ void MWSpell::initialiseOverride()
{ {
Base::initialiseOverride(); Base::initialiseOverride();
assignWidget(spellNameWidget, "StatName"); assignWidget(mSpellNameWidget, "StatName");
} }
MWSpell::~MWSpell() MWSpell::~MWSpell()
@ -367,8 +367,8 @@ SpellEffectList MWEffectList::effectListFromESM(const ESM::EffectList* effects)
MWSpellEffect::MWSpellEffect() MWSpellEffect::MWSpellEffect()
: mWindowManager(nullptr) : mWindowManager(nullptr)
, imageWidget(nullptr) , mImageWidget(nullptr)
, textWidget(nullptr) , mTextWidget(nullptr)
, mRequestedWidth(0) , mRequestedWidth(0)
{ {
} }
@ -388,7 +388,7 @@ void MWSpellEffect::updateWidgets()
const ESM::MagicEffect *magicEffect = store.magicEffects.search(mEffectParams.mEffectID); const ESM::MagicEffect *magicEffect = store.magicEffects.search(mEffectParams.mEffectID);
if (!magicEffect) if (!magicEffect)
return; return;
if (textWidget) if (mTextWidget)
{ {
std::string pt = mWindowManager->getGameSettingString("spoint", ""); std::string pt = mWindowManager->getGameSettingString("spoint", "");
std::string pts = mWindowManager->getGameSettingString("spoints", ""); std::string pts = mWindowManager->getGameSettingString("spoints", "");
@ -448,14 +448,14 @@ void MWSpellEffect::updateWidgets()
} }
} }
static_cast<MyGUI::TextBox*>(textWidget)->setCaption(spellLine); static_cast<MyGUI::TextBox*>(mTextWidget)->setCaption(spellLine);
mRequestedWidth = textWidget->getTextSize().width + 24; mRequestedWidth = mTextWidget->getTextSize().width + 24;
} }
if (imageWidget) if (mImageWidget)
{ {
std::string path = std::string("icons\\") + magicEffect->icon; std::string path = std::string("icons\\") + magicEffect->icon;
fixTexturePath(path); fixTexturePath(path);
imageWidget->setImageTexture(path); mImageWidget->setImageTexture(path);
} }
} }
@ -728,49 +728,49 @@ void MWSpellEffect::initialiseOverride()
{ {
Base::initialiseOverride(); Base::initialiseOverride();
assignWidget(textWidget, "Text"); assignWidget(mTextWidget, "Text");
assignWidget(imageWidget, "Image"); assignWidget(mImageWidget, "Image");
} }
/* MWDynamicStat */ /* MWDynamicStat */
MWDynamicStat::MWDynamicStat() MWDynamicStat::MWDynamicStat()
: value(0) : mValue(0)
, max(1) , mMax(1)
, textWidget(nullptr) , mTextWidget(nullptr)
, barWidget(nullptr) , mBarWidget(nullptr)
, barTextWidget(nullptr) , mBarTextWidget(nullptr)
{ {
} }
void MWDynamicStat::setValue(int cur, int max_) void MWDynamicStat::setValue(int cur, int max)
{ {
value = cur; mValue = cur;
max = max_; mMax = max;
if (barWidget) if (mBarWidget)
{ {
barWidget->setProgressRange(max); mBarWidget->setProgressRange(mMax);
barWidget->setProgressPosition(value); mBarWidget->setProgressPosition(mValue);
} }
if (barTextWidget) if (mBarTextWidget)
{ {
if (value >= 0 && max > 0) if (mValue >= 0 && mMax > 0)
{ {
std::stringstream out; std::stringstream out;
out << value << "/" << max; out << mValue << "/" << mMax;
static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption(out.str().c_str()); static_cast<MyGUI::TextBox*>(mBarTextWidget)->setCaption(out.str().c_str());
} }
else else
static_cast<MyGUI::TextBox*>(barTextWidget)->setCaption(""); static_cast<MyGUI::TextBox*>(mBarTextWidget)->setCaption("");
} }
} }
void MWDynamicStat::setTitle(const std::string& text) void MWDynamicStat::setTitle(const std::string& text)
{ {
if (textWidget) if (mTextWidget)
static_cast<MyGUI::TextBox*>(textWidget)->setCaption(text); static_cast<MyGUI::TextBox*>(mTextWidget)->setCaption(text);
} }
MWDynamicStat::~MWDynamicStat() MWDynamicStat::~MWDynamicStat()
@ -781,7 +781,7 @@ void MWDynamicStat::initialiseOverride()
{ {
Base::initialiseOverride(); Base::initialiseOverride();
assignWidget(textWidget, "Text"); assignWidget(mTextWidget, "Text");
assignWidget(barWidget, "Bar"); assignWidget(mBarWidget, "Bar");
assignWidget(barTextWidget, "BarText"); assignWidget(mBarTextWidget, "BarText");
} }

@ -73,7 +73,7 @@ namespace MWGui
typedef std::vector<SpellEffectParams> SpellEffectList; typedef std::vector<SpellEffectParams> SpellEffectList;
class MYGUI_EXPORT MWSkill : public Widget class MYGUI_EXPORT MWSkill : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWSkill ); MYGUI_RTTI_DERIVED( MWSkill );
public: public:
@ -81,14 +81,14 @@ namespace MWGui
typedef MWMechanics::Stat<float> SkillValue; typedef MWMechanics::Stat<float> SkillValue;
void setWindowManager(WindowManager *m) { manager = m; } void setWindowManager(WindowManager *m) { mManager = m; }
void setSkillId(ESM::Skill::SkillEnum skillId); void setSkillId(ESM::Skill::SkillEnum skillId);
void setSkillNumber(int skillId); void setSkillNumber(int skillId);
void setSkillValue(const SkillValue& value); void setSkillValue(const SkillValue& value);
WindowManager *getWindowManager() const { return manager; } WindowManager *getWindowManager() const { return mManager; }
ESM::Skill::SkillEnum getSkillId() const { return skillId; } ESM::Skill::SkillEnum getSkillId() const { return mSkillId; }
const SkillValue& getSkillValue() const { return value; } const SkillValue& getSkillValue() const { return mValue; }
// Events // Events
typedef delegates::CMultiDelegate1<MWSkill*> EventHandle_SkillVoid; typedef delegates::CMultiDelegate1<MWSkill*> EventHandle_SkillVoid;
@ -109,14 +109,14 @@ namespace MWGui
void updateWidgets(); void updateWidgets();
WindowManager *manager; WindowManager *mManager;
ESM::Skill::SkillEnum skillId; ESM::Skill::SkillEnum mSkillId;
SkillValue value; SkillValue mValue;
MyGUI::WidgetPtr skillNameWidget, skillValueWidget; MyGUI::WidgetPtr mSkillNameWidget, mSkillValueWidget;
}; };
typedef MWSkill* MWSkillPtr; typedef MWSkill* MWSkillPtr;
class MYGUI_EXPORT MWAttribute : public Widget class MYGUI_EXPORT MWAttribute : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWAttribute ); MYGUI_RTTI_DERIVED( MWAttribute );
public: public:
@ -124,13 +124,13 @@ namespace MWGui
typedef MWMechanics::Stat<int> AttributeValue; typedef MWMechanics::Stat<int> AttributeValue;
void setWindowManager(WindowManager *m) { manager = m; } void setWindowManager(WindowManager *m) { mManager = m; }
void setAttributeId(int attributeId); void setAttributeId(int attributeId);
void setAttributeValue(const AttributeValue& value); void setAttributeValue(const AttributeValue& value);
WindowManager *getWindowManager() const { return manager; } WindowManager *getWindowManager() const { return mManager; }
int getAttributeId() const { return id; } int getAttributeId() const { return mId; }
const AttributeValue& getAttributeValue() const { return value; } const AttributeValue& getAttributeValue() const { return mValue; }
// Events // Events
typedef delegates::CMultiDelegate1<MWAttribute*> EventHandle_AttributeVoid; typedef delegates::CMultiDelegate1<MWAttribute*> EventHandle_AttributeVoid;
@ -151,10 +151,10 @@ namespace MWGui
void updateWidgets(); void updateWidgets();
WindowManager *manager; WindowManager *mManager;
int id; int mId;
AttributeValue value; AttributeValue mValue;
MyGUI::WidgetPtr attributeNameWidget, attributeValueWidget; MyGUI::WidgetPtr mAttributeNameWidget, mAttributeValueWidget;
}; };
typedef MWAttribute* MWAttributePtr; typedef MWAttribute* MWAttributePtr;
@ -162,7 +162,7 @@ namespace MWGui
* @todo remove this class and use MWEffectList instead * @todo remove this class and use MWEffectList instead
*/ */
class MWSpellEffect; class MWSpellEffect;
class MYGUI_EXPORT MWSpell : public Widget class MYGUI_EXPORT MWSpell : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWSpell ); MYGUI_RTTI_DERIVED( MWSpell );
public: public:
@ -182,7 +182,7 @@ namespace MWGui
*/ */
void createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags); void createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord, int flags);
const std::string &getSpellId() const { return id; } const std::string &getSpellId() const { return mId; }
protected: protected:
virtual ~MWSpell(); virtual ~MWSpell();
@ -193,12 +193,12 @@ namespace MWGui
void updateWidgets(); void updateWidgets();
WindowManager* mWindowManager; WindowManager* mWindowManager;
std::string id; std::string mId;
MyGUI::TextBox* spellNameWidget; MyGUI::TextBox* mSpellNameWidget;
}; };
typedef MWSpell* MWSpellPtr; typedef MWSpell* MWSpellPtr;
class MYGUI_EXPORT MWEffectList : public Widget class MYGUI_EXPORT MWEffectList : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWEffectList ); MYGUI_RTTI_DERIVED( MWEffectList );
public: public:
@ -239,7 +239,7 @@ namespace MWGui
}; };
typedef MWEffectList* MWEffectListPtr; typedef MWEffectList* MWEffectListPtr;
class MYGUI_EXPORT MWSpellEffect : public Widget class MYGUI_EXPORT MWSpellEffect : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWSpellEffect ); MYGUI_RTTI_DERIVED( MWSpellEffect );
public: public:
@ -269,13 +269,13 @@ namespace MWGui
WindowManager* mWindowManager; WindowManager* mWindowManager;
SpellEffectParams mEffectParams; SpellEffectParams mEffectParams;
MyGUI::ImageBox* imageWidget; MyGUI::ImageBox* mImageWidget;
MyGUI::TextBox* textWidget; MyGUI::TextBox* mTextWidget;
int mRequestedWidth; int mRequestedWidth;
}; };
typedef MWSpellEffect* MWSpellEffectPtr; typedef MWSpellEffect* MWSpellEffectPtr;
class MYGUI_EXPORT MWDynamicStat : public Widget class MYGUI_EXPORT MWDynamicStat : public MyGUI::Widget
{ {
MYGUI_RTTI_DERIVED( MWDynamicStat ); MYGUI_RTTI_DERIVED( MWDynamicStat );
public: public:
@ -284,8 +284,8 @@ namespace MWGui
void setValue(int value, int max); void setValue(int value, int max);
void setTitle(const std::string& text); void setTitle(const std::string& text);
int getValue() const { return value; } int getValue() const { return mValue; }
int getMax() const { return max; } int getMax() const { return mMax; }
protected: protected:
virtual ~MWDynamicStat(); virtual ~MWDynamicStat();
@ -294,10 +294,10 @@ namespace MWGui
private: private:
int value, max; int mValue, mMax;
MyGUI::TextBox* textWidget; MyGUI::TextBox* mTextWidget;
MyGUI::ProgressPtr barWidget; MyGUI::ProgressPtr mBarWidget;
MyGUI::TextBox* barTextWidget; MyGUI::TextBox* mBarTextWidget;
}; };
typedef MWDynamicStat* MWDynamicStatPtr; typedef MWDynamicStat* MWDynamicStatPtr;
} }

@ -43,13 +43,13 @@ using namespace MWGui;
WindowManager::WindowManager( WindowManager::WindowManager(
const Compiler::Extensions& extensions, int fpsLevel, bool newGame, OEngine::Render::OgreRenderer *mOgre, const std::string& logpath) const Compiler::Extensions& extensions, int fpsLevel, bool newGame, OEngine::Render::OgreRenderer *mOgre, const std::string& logpath)
: mGuiManager(NULL) : mGuiManager(NULL)
, hud(NULL) , mHud(NULL)
, map(NULL) , mMap(NULL)
, menu(NULL) , mMenu(NULL)
, mStatsWindow(NULL) , mStatsWindow(NULL)
, mToolTips(NULL) , mToolTips(NULL)
, mMessageBoxManager(NULL) , mMessageBoxManager(NULL)
, console(NULL) , mConsole(NULL)
, mJournal(NULL) , mJournal(NULL)
, mDialogueWindow(NULL) , mDialogueWindow(NULL)
, mBookWindow(NULL) , mBookWindow(NULL)
@ -61,21 +61,21 @@ WindowManager::WindowManager(
, mAlchemyWindow(NULL) , mAlchemyWindow(NULL)
, mSpellWindow(NULL) , mSpellWindow(NULL)
, mCharGen(NULL) , mCharGen(NULL)
, playerClass() , mPlayerClass()
, playerName() , mPlayerName()
, playerRaceId() , mPlayerRaceId()
, playerAttributes() , mPlayerAttributes()
, playerMajorSkills() , mPlayerMajorSkills()
, playerMinorSkills() , mPlayerMinorSkills()
, playerSkillValues() , mPlayerSkillValues()
, playerHealth() , mPlayerHealth()
, playerMagicka() , mPlayerMagicka()
, playerFatigue() , mPlayerFatigue()
, gui(NULL) , mGui(NULL)
, garbageDialogs() , mGarbageDialogs()
, shown(GW_ALL) , mShown(GW_ALL)
, allowed(newGame ? GW_None : GW_ALL) , mAllowed(newGame ? GW_None : GW_ALL)
, showFPSLevel(fpsLevel) , mShowFPSLevel(fpsLevel)
, mFPS(0.0f) , mFPS(0.0f)
, mTriangleCount(0) , mTriangleCount(0)
, mBatchCount(0) , mBatchCount(0)
@ -83,7 +83,7 @@ WindowManager::WindowManager(
// Set up the GUI system // Set up the GUI system
mGuiManager = new OEngine::GUI::MyGUIManager(mOgre->getWindow(), mOgre->getScene(), false, logpath); mGuiManager = new OEngine::GUI::MyGUIManager(mOgre->getWindow(), mOgre->getScene(), false, logpath);
gui = mGuiManager->getGui(); mGui = mGuiManager->getGui();
//Register own widgets with MyGUI //Register own widgets with MyGUI
MyGUI::FactoryManager::getInstance().registerFactory<DialogueHistory>("Widget"); MyGUI::FactoryManager::getInstance().registerFactory<DialogueHistory>("Widget");
@ -98,11 +98,11 @@ WindowManager::WindowManager(
MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag); MyGUI::LanguageManager::getInstance().eventRequestTag = MyGUI::newDelegate(this, &WindowManager::onRetrieveTag);
// Get size info from the Gui object // Get size info from the Gui object
assert(gui); assert(mGui);
int w = MyGUI::RenderManager::getInstance().getViewSize().width; int w = MyGUI::RenderManager::getInstance().getViewSize().width;
int h = MyGUI::RenderManager::getInstance().getViewSize().height; int h = MyGUI::RenderManager::getInstance().getViewSize().height;
MyGUI::Widget* dragAndDropWidget = gui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget"); MyGUI::Widget* dragAndDropWidget = mGui->createWidgetT("Widget","",0,0,w,h,MyGUI::Align::Default,"DragAndDrop","DragAndDropWidget");
dragAndDropWidget->setVisible(false); dragAndDropWidget->setVisible(false);
mDragAndDrop = new DragAndDrop(); mDragAndDrop = new DragAndDrop();
@ -110,17 +110,17 @@ WindowManager::WindowManager(
mDragAndDrop->mDraggedWidget = 0; mDragAndDrop->mDraggedWidget = 0;
mDragAndDrop->mDragAndDropWidget = dragAndDropWidget; mDragAndDrop->mDragAndDropWidget = dragAndDropWidget;
menu = new MainMenu(w,h); mMenu = new MainMenu(w,h);
map = new MapWindow(*this); mMap = new MapWindow(*this);
mStatsWindow = new StatsWindow(*this); mStatsWindow = new StatsWindow(*this);
console = new Console(w,h, extensions); mConsole = new Console(w,h, extensions);
mJournal = new JournalWindow(*this); mJournal = new JournalWindow(*this);
mMessageBoxManager = new MessageBoxManager(this); mMessageBoxManager = new MessageBoxManager(this);
mInventoryWindow = new InventoryWindow(*this,mDragAndDrop); mInventoryWindow = new InventoryWindow(*this,mDragAndDrop);
mTradeWindow = new TradeWindow(*this); mTradeWindow = new TradeWindow(*this);
mDialogueWindow = new DialogueWindow(*this); mDialogueWindow = new DialogueWindow(*this);
mContainerWindow = new ContainerWindow(*this,mDragAndDrop); mContainerWindow = new ContainerWindow(*this,mDragAndDrop);
hud = new HUD(w,h, showFPSLevel, mDragAndDrop); mHud = new HUD(w,h, mShowFPSLevel, mDragAndDrop);
mToolTips = new ToolTips(this); mToolTips = new ToolTips(this);
mScrollWindow = new ScrollWindow(*this); mScrollWindow = new ScrollWindow(*this);
mBookWindow = new BookWindow(*this); mBookWindow = new BookWindow(*this);
@ -131,19 +131,19 @@ WindowManager::WindowManager(
mSpellWindow = new SpellWindow(*this); mSpellWindow = new SpellWindow(*this);
// The HUD is always on // The HUD is always on
hud->setVisible(true); mHud->setVisible(true);
mCharGen = new CharacterCreation(this); mCharGen = new CharacterCreation(this);
// Setup player stats // Setup player stats
for (int i = 0; i < ESM::Attribute::Length; ++i) for (int i = 0; i < ESM::Attribute::Length; ++i)
{ {
playerAttributes.insert(std::make_pair(ESM::Attribute::attributeIds[i], MWMechanics::Stat<int>())); mPlayerAttributes.insert(std::make_pair(ESM::Attribute::attributeIds[i], MWMechanics::Stat<int>()));
} }
for (int i = 0; i < ESM::Skill::Length; ++i) for (int i = 0; i < ESM::Skill::Length; ++i)
{ {
playerSkillValues.insert(std::make_pair(ESM::Skill::skillIds[i], MWMechanics::Stat<float>())); mPlayerSkillValues.insert(std::make_pair(ESM::Skill::skillIds[i], MWMechanics::Stat<float>()));
} }
unsetSelectedSpell(); unsetSelectedSpell();
@ -156,11 +156,11 @@ WindowManager::WindowManager(
WindowManager::~WindowManager() WindowManager::~WindowManager()
{ {
delete mGuiManager; delete mGuiManager;
delete console; delete mConsole;
delete mMessageBoxManager; delete mMessageBoxManager;
delete hud; delete mHud;
delete map; delete mMap;
delete menu; delete mMenu;
delete mStatsWindow; delete mStatsWindow;
delete mJournal; delete mJournal;
delete mDialogueWindow; delete mDialogueWindow;
@ -183,13 +183,13 @@ WindowManager::~WindowManager()
void WindowManager::cleanupGarbage() void WindowManager::cleanupGarbage()
{ {
// Delete any dialogs which are no longer in use // Delete any dialogs which are no longer in use
if (!garbageDialogs.empty()) if (!mGarbageDialogs.empty())
{ {
for (std::vector<OEngine::GUI::Layout*>::iterator it = garbageDialogs.begin(); it != garbageDialogs.end(); ++it) for (std::vector<OEngine::GUI::Layout*>::iterator it = mGarbageDialogs.begin(); it != mGarbageDialogs.end(); ++it)
{ {
delete *it; delete *it;
} }
garbageDialogs.clear(); mGarbageDialogs.clear();
} }
} }
@ -197,18 +197,18 @@ void WindowManager::update()
{ {
cleanupGarbage(); cleanupGarbage();
hud->setFPS(mFPS); mHud->setFPS(mFPS);
hud->setTriangleCount(mTriangleCount); mHud->setTriangleCount(mTriangleCount);
hud->setBatchCount(mBatchCount); mHud->setBatchCount(mBatchCount);
} }
void WindowManager::updateVisible() void WindowManager::updateVisible()
{ {
// Start out by hiding everything except the HUD // Start out by hiding everything except the HUD
map->setVisible(false); mMap->setVisible(false);
menu->setVisible(false); mMenu->setVisible(false);
mStatsWindow->setVisible(false); mStatsWindow->setVisible(false);
console->disable(); mConsole->disable();
mJournal->setVisible(false); mJournal->setVisible(false);
mDialogueWindow->setVisible(false); mDialogueWindow->setVisible(false);
mContainerWindow->setVisible(false); mContainerWindow->setVisible(false);
@ -230,10 +230,10 @@ void WindowManager::updateVisible()
else else
mToolTips->enterGuiMode(); mToolTips->enterGuiMode();
setMinimapVisibility((allowed & GW_Map) && !map->pinned()); setMinimapVisibility((mAllowed & GW_Map) && !mMap->pinned());
setWeaponVisibility((allowed & GW_Inventory) && !mInventoryWindow->pinned()); setWeaponVisibility((mAllowed & GW_Inventory) && !mInventoryWindow->pinned());
setSpellVisibility((allowed & GW_Magic) && !mSpellWindow->pinned()); setSpellVisibility((mAllowed & GW_Magic) && !mSpellWindow->pinned());
setHMSVisibility((allowed & GW_Stats) && !mStatsWindow->pinned()); setHMSVisibility((mAllowed & GW_Stats) && !mStatsWindow->pinned());
// If in game mode, don't show anything. // If in game mode, don't show anything.
if (gameMode) if (gameMode)
@ -243,13 +243,13 @@ void WindowManager::updateVisible()
switch(mode) { switch(mode) {
case GM_MainMenu: case GM_MainMenu:
menu->setVisible(true); mMenu->setVisible(true);
break; break;
case GM_Settings: case GM_Settings:
mSettingsWindow->setVisible(true); mSettingsWindow->setVisible(true);
break; break;
case GM_Console: case GM_Console:
console->enable(); mConsole->enable();
break; break;
case GM_Scroll: case GM_Scroll:
mScrollWindow->setVisible(true); mScrollWindow->setVisible(true);
@ -276,13 +276,13 @@ void WindowManager::updateVisible()
// This is controlled both by what windows the // This is controlled both by what windows the
// user has opened/closed (the 'shown' variable) and by what // user has opened/closed (the 'shown' variable) and by what
// windows we are allowed to show (the 'allowed' var.) // windows we are allowed to show (the 'allowed' var.)
int eff = shown & allowed; int eff = mShown & mAllowed;
// Show the windows we want // Show the windows we want
map -> setVisible(eff & GW_Map); mMap ->setVisible(eff & GW_Map);
mStatsWindow -> setVisible(eff & GW_Stats); mStatsWindow ->setVisible(eff & GW_Stats);
mInventoryWindow->setVisible(eff & GW_Inventory); mInventoryWindow->setVisible(eff & GW_Inventory);
mSpellWindow->setVisible(eff & GW_Magic); mSpellWindow ->setVisible(eff & GW_Magic);
break; break;
} }
case GM_Container: case GM_Container:
@ -333,7 +333,7 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::Stat<int
{ {
if (id != ids[i]) if (id != ids[i])
continue; continue;
playerAttributes[attributes[i]] = value; mPlayerAttributes[attributes[i]] = value;
break; break;
} }
} }
@ -343,27 +343,27 @@ void WindowManager::setValue(const ESM::Skill::SkillEnum parSkill, const MWMecha
{ {
mStatsWindow->setValue(parSkill, value); mStatsWindow->setValue(parSkill, value);
mCharGen->setValue(parSkill, value); mCharGen->setValue(parSkill, value);
playerSkillValues[parSkill] = value; mPlayerSkillValues[parSkill] = value;
} }
void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value) void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicStat<int>& value)
{ {
mStatsWindow->setValue (id, value); mStatsWindow->setValue (id, value);
hud->setValue (id, value); mHud->setValue (id, value);
mCharGen->setValue(id, value); mCharGen->setValue(id, value);
if (id == "HBar") if (id == "HBar")
{ {
playerHealth = value; mPlayerHealth = value;
mCharGen->setPlayerHealth (value); mCharGen->setPlayerHealth (value);
} }
else if (id == "MBar") else if (id == "MBar")
{ {
playerMagicka = value; mPlayerMagicka = value;
mCharGen->setPlayerMagicka (value); mCharGen->setPlayerMagicka (value);
} }
else if (id == "FBar") else if (id == "FBar")
{ {
playerFatigue = value; mPlayerFatigue = value;
mCharGen->setPlayerFatigue (value); mCharGen->setPlayerFatigue (value);
} }
} }
@ -372,11 +372,11 @@ void WindowManager::setValue (const std::string& id, const MWMechanics::DynamicS
MWMechanics::DynamicStat<int> WindowManager::getValue(const std::string& id) MWMechanics::DynamicStat<int> WindowManager::getValue(const std::string& id)
{ {
if(id == "HBar") if(id == "HBar")
return playerHealth; return layerHealth;
else if (id == "MBar") else if (id == "MBar")
return playerMagicka; return mPlayerMagicka;
else if (id == "FBar") else if (id == "FBar")
return playerFatigue; return mPlayerFatigue;
} }
#endif #endif
@ -384,9 +384,9 @@ void WindowManager::setValue (const std::string& id, const std::string& value)
{ {
mStatsWindow->setValue (id, value); mStatsWindow->setValue (id, value);
if (id=="name") if (id=="name")
playerName = value; mPlayerName = value;
else if (id=="race") else if (id=="race")
playerRaceId = value; mPlayerRaceId = value;
} }
void WindowManager::setValue (const std::string& id, int value) void WindowManager::setValue (const std::string& id, int value)
@ -396,16 +396,16 @@ void WindowManager::setValue (const std::string& id, int value)
void WindowManager::setPlayerClass (const ESM::Class &class_) void WindowManager::setPlayerClass (const ESM::Class &class_)
{ {
playerClass = class_; mPlayerClass = class_;
mStatsWindow->setValue("class", playerClass.name); mStatsWindow->setValue("class", mPlayerClass.name);
} }
void WindowManager::configureSkills (const SkillList& major, const SkillList& minor) void WindowManager::configureSkills (const SkillList& major, const SkillList& minor)
{ {
mStatsWindow->configureSkills (major, minor); mStatsWindow->configureSkills (major, minor);
mCharGen->configureSkills(major, minor); mCharGen->configureSkills(major, minor);
playerMajorSkills = major; mPlayerMajorSkills = major;
playerMinorSkills = minor; mPlayerMinorSkills = minor;
} }
void WindowManager::setReputation (int reputation) void WindowManager::setReputation (int reputation)
@ -429,7 +429,7 @@ void WindowManager::removeDialog(OEngine::GUI::Layout*dialog)
if (!dialog) if (!dialog)
return; return;
dialog->setVisible(false); dialog->setVisible(false);
garbageDialogs.push_back(dialog); mGarbageDialogs.push_back(dialog);
} }
void WindowManager::messageBox (const std::string& message, const std::vector<std::string>& buttons) void WindowManager::messageBox (const std::string& message, const std::vector<std::string>& buttons)
@ -484,12 +484,12 @@ void WindowManager::onFrame (float frameDuration)
mStatsWindow->onFrame(); mStatsWindow->onFrame();
hud->onFrame(frameDuration); mHud->onFrame(frameDuration);
mDialogueWindow->checkReferenceAvailable(); mDialogueWindow->checkReferenceAvailable();
mTradeWindow->checkReferenceAvailable(); mTradeWindow->checkReferenceAvailable();
mContainerWindow->checkReferenceAvailable(); mContainerWindow->checkReferenceAvailable();
console->checkReferenceAvailable(); mConsole->checkReferenceAvailable();
} }
const ESMS::ESMStore& WindowManager::getStore() const const ESMS::ESMStore& WindowManager::getStore() const
@ -513,56 +513,56 @@ void WindowManager::changeCell(MWWorld::Ptr::CellStore* cell)
name = getGameSettingString("sDefaultCellname", "Wilderness"); name = getGameSettingString("sDefaultCellname", "Wilderness");
} }
map->setCellName( name ); mMap->setCellName( name );
hud->setCellName( name ); mHud->setCellName( name );
map->setCellPrefix("Cell"); mMap->setCellPrefix("Cell");
hud->setCellPrefix("Cell"); mHud->setCellPrefix("Cell");
map->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); mMap->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY );
hud->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY ); mHud->setActiveCell( cell->cell->data.gridX, cell->cell->data.gridY );
} }
else else
{ {
map->setCellName( cell->cell->name ); mMap->setCellName( cell->cell->name );
hud->setCellName( cell->cell->name ); mHud->setCellName( cell->cell->name );
map->setCellPrefix( cell->cell->name ); mMap->setCellPrefix( cell->cell->name );
hud->setCellPrefix( cell->cell->name ); mHud->setCellPrefix( cell->cell->name );
} }
} }
void WindowManager::setInteriorMapTexture(const int x, const int y) void WindowManager::setInteriorMapTexture(const int x, const int y)
{ {
map->setActiveCell(x,y, true); mMap->setActiveCell(x,y, true);
hud->setActiveCell(x,y, true); mHud->setActiveCell(x,y, true);
} }
void WindowManager::setPlayerPos(const float x, const float y) void WindowManager::setPlayerPos(const float x, const float y)
{ {
map->setPlayerPos(x,y); mMap->setPlayerPos(x,y);
hud->setPlayerPos(x,y); mHud->setPlayerPos(x,y);
} }
void WindowManager::setPlayerDir(const float x, const float y) void WindowManager::setPlayerDir(const float x, const float y)
{ {
map->setPlayerDir(x,y); mMap->setPlayerDir(x,y);
hud->setPlayerDir(x,y); mHud->setPlayerDir(x,y);
} }
void WindowManager::setHMSVisibility(bool visible) void WindowManager::setHMSVisibility(bool visible)
{ {
hud->setBottomLeftVisibility(visible, hud->weapBox->getVisible(), hud->spellBox->getVisible()); mHud->setBottomLeftVisibility(visible, mHud->mWeapBox->getVisible(), mHud->mSpellBox->getVisible());
} }
void WindowManager::setMinimapVisibility(bool visible) void WindowManager::setMinimapVisibility(bool visible)
{ {
hud->setBottomRightVisibility(hud->effectBox->getVisible(), visible); mHud->setBottomRightVisibility(mHud->mEffectBox->getVisible(), visible);
} }
void WindowManager::toggleFogOfWar() void WindowManager::toggleFogOfWar()
{ {
map->toggleFogOfWar(); mMap->toggleFogOfWar();
hud->toggleFogOfWar(); mHud->toggleFogOfWar();
} }
void WindowManager::setFocusObject(const MWWorld::Ptr& focus) void WindowManager::setFocusObject(const MWWorld::Ptr& focus)
@ -587,13 +587,13 @@ bool WindowManager::getFullHelp() const
void WindowManager::setWeaponVisibility(bool visible) void WindowManager::setWeaponVisibility(bool visible)
{ {
hud->setBottomLeftVisibility(hud->health->getVisible(), visible, hud->spellBox->getVisible()); mHud->setBottomLeftVisibility(mHud->health->getVisible(), visible, mHud->mSpellBox->getVisible());
} }
void WindowManager::setSpellVisibility(bool visible) void WindowManager::setSpellVisibility(bool visible)
{ {
hud->setBottomLeftVisibility(hud->health->getVisible(), hud->weapBox->getVisible(), visible); mHud->setBottomLeftVisibility(mHud->health->getVisible(), mHud->mWeapBox->getVisible(), visible);
hud->setBottomRightVisibility(visible, hud->minimapBox->getVisible()); mHud->setBottomRightVisibility(visible, mHud->mMinimapBox->getVisible());
} }
void WindowManager::setMouseVisible(bool visible) void WindowManager::setMouseVisible(bool visible)
@ -618,7 +618,7 @@ void WindowManager::onRetrieveTag(const MyGUI::UString& _tag, MyGUI::UString& _r
void WindowManager::processChangedSettings(const Settings::CategorySettingVector& changed) void WindowManager::processChangedSettings(const Settings::CategorySettingVector& changed)
{ {
hud->setFpsLevel(Settings::Manager::getInt("fps", "HUD")); mHud->setFpsLevel(Settings::Manager::getInt("fps", "HUD"));
mToolTips->setDelay(Settings::Manager::getFloat("tooltip delay", "GUI")); mToolTips->setDelay(Settings::Manager::getFloat("tooltip delay", "GUI"));
bool changeRes = false; bool changeRes = false;
@ -637,8 +637,8 @@ void WindowManager::processChangedSettings(const Settings::CategorySettingVector
{ {
int x = Settings::Manager::getInt("resolution x", "Video"); int x = Settings::Manager::getInt("resolution x", "Video");
int y = Settings::Manager::getInt("resolution y", "Video"); int y = Settings::Manager::getInt("resolution y", "Video");
hud->onResChange(x, y); mHud->onResChange(x, y);
console->onResChange(x, y); mConsole->onResChange(x, y);
mSettingsWindow->center(); mSettingsWindow->center();
mAlchemyWindow->center(); mAlchemyWindow->center();
mScrollWindow->center(); mScrollWindow->center();
@ -649,7 +649,7 @@ void WindowManager::processChangedSettings(const Settings::CategorySettingVector
void WindowManager::pushGuiMode(GuiMode mode) void WindowManager::pushGuiMode(GuiMode mode)
{ {
if (mode==GM_Inventory && allowed==GW_None) if (mode==GM_Inventory && mAllowed==GW_None)
return; return;
mGuiModes.push_back(mode); mGuiModes.push_back(mode);
@ -690,32 +690,32 @@ void WindowManager::removeGuiMode(GuiMode mode)
void WindowManager::setSelectedSpell(const std::string& spellId, int successChancePercent) void WindowManager::setSelectedSpell(const std::string& spellId, int successChancePercent)
{ {
hud->setSelectedSpell(spellId, successChancePercent); mHud->setSelectedSpell(spellId, successChancePercent);
const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find(spellId); const ESM::Spell* spell = MWBase::Environment::get().getWorld()->getStore().spells.find(spellId);
mSpellWindow->setTitle(spell->name); mSpellWindow->setTitle(spell->name);
} }
void WindowManager::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent) void WindowManager::setSelectedEnchantItem(const MWWorld::Ptr& item, int chargePercent)
{ {
hud->setSelectedEnchantItem(item, chargePercent); mHud->setSelectedEnchantItem(item, chargePercent);
mSpellWindow->setTitle(MWWorld::Class::get(item).getName(item)); mSpellWindow->setTitle(MWWorld::Class::get(item).getName(item));
} }
void WindowManager::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent) void WindowManager::setSelectedWeapon(const MWWorld::Ptr& item, int durabilityPercent)
{ {
hud->setSelectedWeapon(item, durabilityPercent); mHud->setSelectedWeapon(item, durabilityPercent);
mInventoryWindow->setTitle(MWWorld::Class::get(item).getName(item)); mInventoryWindow->setTitle(MWWorld::Class::get(item).getName(item));
} }
void WindowManager::unsetSelectedSpell() void WindowManager::unsetSelectedSpell()
{ {
hud->unsetSelectedSpell(); mHud->unsetSelectedSpell();
mSpellWindow->setTitle("#{sNone}"); mSpellWindow->setTitle("#{sNone}");
} }
void WindowManager::unsetSelectedWeapon() void WindowManager::unsetSelectedWeapon()
{ {
hud->unsetSelectedWeapon(); mHud->unsetSelectedWeapon();
mInventoryWindow->setTitle("#{sSkillHandtohand}"); mInventoryWindow->setTitle("#{sSkillHandtohand}");
} }
@ -738,5 +738,5 @@ void WindowManager::getMousePosition(float &x, float &y)
bool WindowManager::getWorldMouseOver() bool WindowManager::getWorldMouseOver()
{ {
return hud->getWorldMouseOver(); return mHud->getWorldMouseOver();
} }

@ -10,10 +10,6 @@
this class. this class.
**/ **/
#include <string>
#include <vector>
#include <set>
#include "MyGUI_UString.h" #include "MyGUI_UString.h"
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
@ -123,27 +119,27 @@ namespace MWGui
void toggleVisible(GuiWindow wnd) void toggleVisible(GuiWindow wnd)
{ {
shown = (shown & wnd) ? (GuiWindow) (shown & ~wnd) : (GuiWindow) (shown | wnd); mShown = (mShown & wnd) ? (GuiWindow) (mShown & ~wnd) : (GuiWindow) (mShown | wnd);
updateVisible(); updateVisible();
} }
// Disallow all inventory mode windows // Disallow all inventory mode windows
void disallowAll() void disallowAll()
{ {
allowed = GW_None; mAllowed = GW_None;
updateVisible(); updateVisible();
} }
// Allow one or more windows // Allow one or more windows
void allow(GuiWindow wnd) void allow(GuiWindow wnd)
{ {
allowed = (GuiWindow)(allowed | wnd); mAllowed = (GuiWindow)(mAllowed | wnd);
updateVisible(); updateVisible();
} }
bool isAllowed(GuiWindow wnd) const bool isAllowed(GuiWindow wnd) const
{ {
return allowed & wnd; return mAllowed & wnd;
} }
MWGui::DialogueWindow* getDialogueWindow() {return mDialogueWindow;} MWGui::DialogueWindow* getDialogueWindow() {return mDialogueWindow;}
@ -155,9 +151,9 @@ namespace MWGui
MWGui::ConfirmationDialog* getConfirmationDialog() {return mConfirmationDialog;} MWGui::ConfirmationDialog* getConfirmationDialog() {return mConfirmationDialog;}
MWGui::TradeWindow* getTradeWindow() {return mTradeWindow;} MWGui::TradeWindow* getTradeWindow() {return mTradeWindow;}
MWGui::SpellWindow* getSpellWindow() {return mSpellWindow;} MWGui::SpellWindow* getSpellWindow() {return mSpellWindow;}
MWGui::Console* getConsole() {return console;} MWGui::Console* getConsole() {return mConsole;}
MyGUI::Gui* getGui() const { return gui; } MyGUI::Gui* getGui() const { return mGui; }
void wmUpdateFps(float fps, unsigned int triangleCount, unsigned int batchCount) void wmUpdateFps(float fps, unsigned int triangleCount, unsigned int batchCount)
{ {
@ -223,10 +219,10 @@ namespace MWGui
void onFrame (float frameDuration); void onFrame (float frameDuration);
std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > getPlayerSkillValues() { return playerSkillValues; } std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > getPlayerSkillValues() { return mPlayerSkillValues; }
std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > getPlayerAttributeValues() { return playerAttributes; } std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > getPlayerAttributeValues() { return mPlayerAttributes; }
SkillList getPlayerMinorSkills() { return playerMinorSkills; } SkillList getPlayerMinorSkills() { return mPlayerMinorSkills; }
SkillList getPlayerMajorSkills() { return playerMajorSkills; } SkillList getPlayerMajorSkills() { return mPlayerMajorSkills; }
/** /**
* Fetches a GMST string from the store, if there is no setting with the given * Fetches a GMST string from the store, if there is no setting with the given
@ -243,13 +239,13 @@ namespace MWGui
private: private:
OEngine::GUI::MyGUIManager *mGuiManager; OEngine::GUI::MyGUIManager *mGuiManager;
HUD *hud; HUD *mHud;
MapWindow *map; MapWindow *mMap;
MainMenu *menu; MainMenu *mMenu;
ToolTips *mToolTips; ToolTips *mToolTips;
StatsWindow *mStatsWindow; StatsWindow *mStatsWindow;
MessageBoxManager *mMessageBoxManager; MessageBoxManager *mMessageBoxManager;
Console *console; Console *mConsole;
JournalWindow* mJournal; JournalWindow* mJournal;
DialogueWindow *mDialogueWindow; DialogueWindow *mDialogueWindow;
ContainerWindow *mContainerWindow; ContainerWindow *mContainerWindow;
@ -267,33 +263,33 @@ namespace MWGui
CharacterCreation* mCharGen; CharacterCreation* mCharGen;
// Various stats about player as needed by window manager // Various stats about player as needed by window manager
ESM::Class playerClass; ESM::Class mPlayerClass;
std::string playerName; std::string mPlayerName;
std::string playerRaceId; std::string mPlayerRaceId;
std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > playerAttributes; std::map<ESM::Attribute::AttributeID, MWMechanics::Stat<int> > mPlayerAttributes;
SkillList playerMajorSkills, playerMinorSkills; SkillList mPlayerMajorSkills, mPlayerMinorSkills;
std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > playerSkillValues; std::map<ESM::Skill::SkillEnum, MWMechanics::Stat<float> > mPlayerSkillValues;
MWMechanics::DynamicStat<int> playerHealth, playerMagicka, playerFatigue; MWMechanics::DynamicStat<int> mPlayerHealth, mPlayerMagicka, mPlayerFatigue;
MyGUI::Gui *gui; // Gui MyGUI::Gui *mGui; // Gui
std::vector<GuiMode> mGuiModes; std::vector<GuiMode> mGuiModes;
std::vector<OEngine::GUI::Layout*> garbageDialogs; std::vector<OEngine::GUI::Layout*> mGarbageDialogs;
void cleanupGarbage(); void cleanupGarbage();
GuiWindow shown; // Currently shown windows in inventory mode GuiWindow mShown; // Currently shown windows in inventory mode
/* Currently ALLOWED windows in inventory mode. This is used at /* Currently ALLOWED windows in inventory mode. This is used at
the start of the game, when windows are enabled one by one the start of the game, when windows are enabled one by one
through script commands. You can manipulate this through using through script commands. You can manipulate this through using
allow() and disableAll(). allow() and disableAll().
*/ */
GuiWindow allowed; GuiWindow mAllowed;
void updateVisible(); // Update visibility of all windows based on mode, shown and allowed settings void updateVisible(); // Update visibility of all windows based on mode, shown and allowed settings
int showFPSLevel; int mShowFPSLevel;
float mFPS; float mFPS;
unsigned int mTriangleCount; unsigned int mTriangleCount;
unsigned int mBatchCount; unsigned int mBatchCount;

@ -102,15 +102,15 @@ private:
{ {
if (windows.isGuiMode()) return; if (windows.isGuiMode()) return;
DrawState state = player.getDrawState(); MWMechanics::DrawState_ state = player.getDrawState();
if (state == DrawState_Weapon || state == DrawState_Nothing) if (state == MWMechanics::DrawState_Weapon || state == MWMechanics::DrawState_Nothing)
{ {
player.setDrawState(DrawState_Spell); player.setDrawState(MWMechanics::DrawState_Spell);
std::cout << "Player has now readied his hands for spellcasting!\n"; std::cout << "Player has now readied his hands for spellcasting!\n";
} }
else else
{ {
player.setDrawState(DrawState_Nothing); player.setDrawState(MWMechanics::DrawState_Nothing);
std::cout << "Player does not have any kind of attack ready now.\n"; std::cout << "Player does not have any kind of attack ready now.\n";
} }
} }
@ -119,15 +119,15 @@ private:
{ {
if (windows.isGuiMode()) return; if (windows.isGuiMode()) return;
DrawState state = player.getDrawState(); MWMechanics::DrawState_ state = player.getDrawState();
if (state == DrawState_Spell || state == DrawState_Nothing) if (state == MWMechanics::DrawState_Spell || state == MWMechanics::DrawState_Nothing)
{ {
player.setDrawState(DrawState_Weapon); player.setDrawState(MWMechanics::DrawState_Weapon);
std::cout << "Player is now drawing his weapon.\n"; std::cout << "Player is now drawing his weapon.\n";
} }
else else
{ {
player.setDrawState(DrawState_Nothing); player.setDrawState(MWMechanics::DrawState_Nothing);
std::cout << "Player does not have any kind of attack ready now.\n"; std::cout << "Player does not have any kind of attack ready now.\n";
} }
} }
@ -336,7 +336,7 @@ private:
poller.bind(A_MoveRight, KC_D); poller.bind(A_MoveRight, KC_D);
poller.bind(A_MoveForward, KC_W); poller.bind(A_MoveForward, KC_W);
poller.bind(A_MoveBackward, KC_S); poller.bind(A_MoveBackward, KC_S);
poller.bind(A_Jump, KC_E); poller.bind(A_Jump, KC_E);
poller.bind(A_Crouch, KC_LCONTROL); poller.bind(A_Crouch, KC_LCONTROL);
} }

@ -3,6 +3,9 @@
#include <cstdlib> #include <cstdlib>
#include <components/esm/loadalch.hpp>
#include <components/esm/loadspel.hpp>
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"
@ -43,14 +46,13 @@ namespace MWMechanics
for (TIterator iter (begin()); iter!=end(); ++iter) for (TIterator iter (begin()); iter!=end(); ++iter)
{ {
const ESM::Spell& spell = const ESM::EffectList& effects = getEffectList (iter->first);
*MWBase::Environment::get().getWorld()->getStore().spells.find (iter->first);
const MWWorld::TimeStamp& start = iter->second.first; const MWWorld::TimeStamp& start = iter->second.first;
float magnitude = iter->second.second; float magnitude = iter->second.second;
for (std::vector<ESM::ENAMstruct>::const_iterator iter (spell.effects.list.begin()); for (std::vector<ESM::ENAMstruct>::const_iterator iter (effects.list.begin());
iter!=spell.effects.list.end(); ++iter) iter!=effects.list.end(); ++iter)
{ {
if (iter->duration) if (iter->duration)
{ {
@ -71,18 +73,31 @@ namespace MWMechanics
} }
} }
const ESM::EffectList& ActiveSpells::getEffectList (const std::string& id) const
{
if (const ESM::Spell *spell =
MWBase::Environment::get().getWorld()->getStore().spells.search (id))
return spell->effects;
if (const ESM::Potion *potion =
MWBase::Environment::get().getWorld()->getStore().potions.search (id))
return potion->effects;
throw std::runtime_error ("ID " + id + " can not produce lasting effects");
}
ActiveSpells::ActiveSpells() ActiveSpells::ActiveSpells()
: mSpellsChanged (false), mLastUpdate (MWBase::Environment::get().getWorld()->getTimeStamp()) : mSpellsChanged (false), mLastUpdate (MWBase::Environment::get().getWorld()->getTimeStamp())
{} {}
void ActiveSpells::addSpell (const std::string& id) bool ActiveSpells::addSpell (const std::string& id)
{ {
const ESM::Spell& spell = *MWBase::Environment::get().getWorld()->getStore().spells.find (id); const ESM::EffectList& effects = getEffectList (id);
bool found = false; bool found = false;
for (std::vector<ESM::ENAMstruct>::const_iterator iter (spell.effects.list.begin()); for (std::vector<ESM::ENAMstruct>::const_iterator iter (effects.list.begin());
iter!=spell.effects.list.end(); ++iter) iter!=effects.list.end(); ++iter)
{ {
if (iter->duration) if (iter->duration)
{ {
@ -92,7 +107,7 @@ namespace MWMechanics
} }
if (!found) if (!found)
return; return false;
TContainer::iterator iter = mSpells.find (id); TContainer::iterator iter = mSpells.find (id);
@ -105,6 +120,8 @@ namespace MWMechanics
iter->second = std::make_pair (MWBase::Environment::get().getWorld()->getTimeStamp(), random); iter->second = std::make_pair (MWBase::Environment::get().getWorld()->getTimeStamp(), random);
mSpellsChanged = true; mSpellsChanged = true;
return true;
} }
void ActiveSpells::removeSpell (const std::string& id) void ActiveSpells::removeSpell (const std::string& id)
@ -138,13 +155,12 @@ namespace MWMechanics
double ActiveSpells::timeToExpire (const TIterator& iterator) const double ActiveSpells::timeToExpire (const TIterator& iterator) const
{ {
const ESM::Spell& spell = const ESM::EffectList& effects = getEffectList (iterator->first);
*MWBase::Environment::get().getWorld()->getStore().spells.find (iterator->first);
int duration = 0; int duration = 0;
for (std::vector<ESM::ENAMstruct>::const_iterator iter (spell.effects.list.begin()); for (std::vector<ESM::ENAMstruct>::const_iterator iter (effects.list.begin());
iter!=spell.effects.list.end(); ++iter) iter!=effects.list.end(); ++iter)
{ {
if (iter->duration>duration) if (iter->duration>duration)
duration = iter->duration; duration = iter->duration;

@ -12,11 +12,15 @@
namespace ESM namespace ESM
{ {
struct Spell; struct Spell;
struct EffectList;
} }
namespace MWMechanics namespace MWMechanics
{ {
/// \brief Lasting spell effects /// \brief Lasting spell effects
///
/// \note The name of this class is slightly misleading, since it also handels lasting potion
/// effects.
class ActiveSpells class ActiveSpells
{ {
public: public:
@ -33,13 +37,17 @@ namespace MWMechanics
void update() const; void update() const;
const ESM::EffectList& getEffectList (const std::string& id) const;
public: public:
ActiveSpells(); ActiveSpells();
void addSpell (const std::string& id); bool addSpell (const std::string& id);
///< Overwrites an existing spell with the same ID. If the spell does not have any ///< Overwrites an existing spell with the same ID. If the spell does not have any
/// non-instant effects, it is ignored. /// non-instant effects, it is ignored.
///
/// \return Has the spell been added?
void removeSpell (const std::string& id); void removeSpell (const std::string& id);

@ -18,22 +18,8 @@ namespace MWMechanics
{ {
// magic effects // magic effects
adjustMagicEffects (ptr); adjustMagicEffects (ptr);
calculateCreatureStatModifiers (ptr);
CreatureStats& creatureStats = MWWorld::Class::get (ptr).getCreatureStats (ptr); calculateDynamicStats (ptr);
// calculate dynamic stats
int strength = creatureStats.mAttributes[0].getBase();
int intelligence = creatureStats.mAttributes[1].getBase();
int willpower = creatureStats.mAttributes[2].getBase();
int agility = creatureStats.mAttributes[3].getBase();
int endurance = creatureStats.mAttributes[5].getBase();
double magickaFactor = creatureStats.mMagicEffects.get (EffectKey (84)).mMagnitude*0.1 + 0.5;
creatureStats.mDynamic[0].setBase (static_cast<int> (0.5 * (strength + endurance)));
creatureStats.mDynamic[1].setBase (static_cast<int> (intelligence +
magickaFactor * intelligence));
creatureStats.mDynamic[2].setBase (strength+willpower+agility+endurance);
} }
void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused) void Actors::updateNpc (const MWWorld::Ptr& ptr, float duration, bool paused)
@ -64,6 +50,47 @@ namespace MWMechanics
// TODO apply diff to other stats // TODO apply diff to other stats
} }
void Actors::calculateDynamicStats (const MWWorld::Ptr& ptr)
{
CreatureStats& creatureStats = MWWorld::Class::get (ptr).getCreatureStats (ptr);
int strength = creatureStats.mAttributes[0].getBase();
int intelligence = creatureStats.mAttributes[1].getBase();
int willpower = creatureStats.mAttributes[2].getBase();
int agility = creatureStats.mAttributes[3].getBase();
int endurance = creatureStats.mAttributes[5].getBase();
double magickaFactor = creatureStats.mMagicEffects.get (EffectKey (84)).mMagnitude*0.1 + 0.5;
creatureStats.mDynamic[0].setBase (static_cast<int> (0.5 * (strength + endurance)));
creatureStats.mDynamic[1].setBase (static_cast<int> (intelligence +
magickaFactor * intelligence));
creatureStats.mDynamic[2].setBase (strength+willpower+agility+endurance);
}
void Actors::calculateCreatureStatModifiers (const MWWorld::Ptr& ptr)
{
CreatureStats& creatureStats = MWWorld::Class::get (ptr).getCreatureStats (ptr);
// attributes
for (int i=0; i<5; ++i)
{
int modifier = creatureStats.mMagicEffects.get (EffectKey (79, i)).mMagnitude
- creatureStats.mMagicEffects.get (EffectKey (17, i)).mMagnitude;
creatureStats.mAttributes[i].setModifier (modifier);
}
// dynamic stats
for (int i=0; i<3; ++i)
{
int modifier = creatureStats.mMagicEffects.get (EffectKey (80+i)).mMagnitude
- creatureStats.mMagicEffects.get (EffectKey (18+i)).mMagnitude;
creatureStats.mDynamic[i].setModifier (modifier);
}
}
Actors::Actors() : mDuration (0) {} Actors::Actors() : mDuration (0) {}
void Actors::addActor (const MWWorld::Ptr& ptr) void Actors::addActor (const MWWorld::Ptr& ptr)
@ -99,15 +126,16 @@ namespace MWMechanics
if (mDuration>=0.25) if (mDuration>=0.25)
{ {
float totalDuration = mDuration;
mDuration = 0;
for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end(); ++iter) for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end(); ++iter)
{ {
updateActor (*iter, mDuration); updateActor (*iter, totalDuration);
if (iter->getTypeName()==typeid (ESM::NPC).name()) if (iter->getTypeName()==typeid (ESM::NPC).name())
updateNpc (*iter, mDuration, paused); updateNpc (*iter, totalDuration, paused);
} }
mDuration = 0;
} }
for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end(); for (std::set<MWWorld::Ptr>::iterator iter (mActors.begin()); iter!=mActors.end();

@ -27,6 +27,10 @@ namespace MWMechanics
void adjustMagicEffects (const MWWorld::Ptr& creature); void adjustMagicEffects (const MWWorld::Ptr& creature);
void calculateDynamicStats (const MWWorld::Ptr& ptr);
void calculateCreatureStatModifiers (const MWWorld::Ptr& ptr);
public: public:
Actors(); Actors();

@ -1,13 +1,15 @@
#ifndef GAME_MWMECHANICS_DRAWSTATE_H #ifndef GAME_MWMECHANICS_DRAWSTATE_H
#define GAME_MWMECHANICS_DRAWSTATE_H #define GAME_MWMECHANICS_DRAWSTATE_H
#undef DrawState namespace MWMechanics
enum DrawState
{ {
DrawState_Weapon = 0, /// \note The _ suffix is required to avoid a collision with a Windoze macro. Die, Microsoft! Die!
DrawState_Spell = 1, enum DrawState_
DrawState_Nothing = 2, {
}; DrawState_Weapon = 0,
DrawState_Spell = 1,
DrawState_Nothing = 2,
};
}
#endif #endif

@ -28,7 +28,7 @@ namespace MWMechanics
creatureStats.mMagicEffects = MagicEffects(); creatureStats.mMagicEffects = MagicEffects();
for (int i=0; i<27; ++i) for (int i=0; i<27; ++i)
npcStats.mSkill[i].setBase (player->npdt52.skills[i]); npcStats.getSkill (i).setBase (player->npdt52.skills[i]);
creatureStats.mAttributes[0].setBase (player->npdt52.strength); creatureStats.mAttributes[0].setBase (player->npdt52.strength);
creatureStats.mAttributes[1].setBase (player->npdt52.intelligence); creatureStats.mAttributes[1].setBase (player->npdt52.intelligence);
@ -73,8 +73,8 @@ namespace MWMechanics
if (index>=0 && index<27) if (index>=0 && index<27)
{ {
npcStats.mSkill[index].setBase ( npcStats.getSkill (index).setBase (
npcStats.mSkill[index].getBase() + race->data.bonus[i].bonus); npcStats.getSkill (index).getBase() + race->data.bonus[i].bonus);
} }
} }
@ -124,8 +124,8 @@ namespace MWMechanics
if (index>=0 && index<27) if (index>=0 && index<27)
{ {
npcStats.mSkill[index].setBase ( npcStats.getSkill (index).setBase (
npcStats.mSkill[index].getBase() + bonus); npcStats.getSkill (index).getBase() + bonus);
} }
} }
} }
@ -141,8 +141,8 @@ namespace MWMechanics
if (index>=0 && index<27) if (index>=0 && index<27)
{ {
npcStats.mSkill[index].setBase ( npcStats.getSkill (index).setBase (
npcStats.mSkill[index].getBase() + 5); npcStats.getSkill (index).getBase() + 5);
} }
} }
} }
@ -236,11 +236,11 @@ namespace MWMechanics
//Loop over ESM::Skill::SkillEnum //Loop over ESM::Skill::SkillEnum
for(int i = 0; i < 27; ++i) for(int i = 0; i < 27; ++i)
{ {
if(npcStats.mSkill[i] != mWatchedNpc.mSkill[i]) if(npcStats.getSkill (i) != mWatchedNpc.getSkill (i))
{ {
update = true; update = true;
mWatchedNpc.mSkill[i] = npcStats.mSkill[i]; mWatchedNpc.getSkill (i) = npcStats.getSkill (i);
MWBase::Environment::get().getWindowManager()->setValue((ESM::Skill::SkillEnum)i, npcStats.mSkill[i]); MWBase::Environment::get().getWindowManager()->setValue((ESM::Skill::SkillEnum)i, npcStats.getSkill (i));
} }
} }

@ -0,0 +1,140 @@
#include "npcstats.hpp"
#include <cmath>
#include <stdexcept>
#include <components/esm/loadskil.hpp>
#include <components/esm/loadclas.hpp>
#include <components/esm/loadgmst.hpp>
#include <components/esm_store/store.hpp>
#include "../mwbase/environment.hpp"
#include "../mwbase/world.hpp"
MWMechanics::NpcStats::NpcStats()
: mMovementFlags (0), mDrawState (DrawState_Nothing)
{}
MWMechanics::DrawState_ MWMechanics::NpcStats::getDrawState() const
{
return mDrawState;
}
void MWMechanics::NpcStats::setDrawState (DrawState_ state)
{
mDrawState = state;
}
bool MWMechanics::NpcStats::getMovementFlag (Flag flag) const
{
return mMovementFlags & flag;
}
void MWMechanics::NpcStats::setMovementFlag (Flag flag, bool state)
{
if (state)
mMovementFlags |= flag;
else
mMovementFlags &= ~flag;
}
const MWMechanics::Stat<float>& MWMechanics::NpcStats::getSkill (int index) const
{
if (index<0 || index>=27)
throw std::runtime_error ("skill index out of range");
return mSkill[index];
}
MWMechanics::Stat<float>& MWMechanics::NpcStats::getSkill (int index)
{
if (index<0 || index>=27)
throw std::runtime_error ("skill index out of range");
return mSkill[index];
}
std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks()
{
return mFactionRank;
}
const std::map<std::string, int>& MWMechanics::NpcStats::getFactionRanks() const
{
return mFactionRank;
}
float MWMechanics::NpcStats::getSkillGain (int skillIndex, const ESM::Class& class_, int usageType,
int level) const
{
if (level<0)
level = static_cast<int> (getSkill (skillIndex).getBase());
const ESM::Skill *skill = MWBase::Environment::get().getWorld()->getStore().skills.find (skillIndex);
float skillFactor = 1;
if (usageType>=4)
throw std::runtime_error ("skill usage type out of range");
if (usageType>0)
{
skillFactor = skill->data.useValue[usageType];
if (skillFactor<=0)
throw std::runtime_error ("invalid skill gain factor");
}
float typeFactor =
MWBase::Environment::get().getWorld()->getStore().gameSettings.find ("fMiscSkillBonus")->f;
for (int i=0; i<5; ++i)
if (class_.data.skills[i][0]==skillIndex)
{
typeFactor =
MWBase::Environment::get().getWorld()->getStore().gameSettings.find ("fMinorSkillBonus")->f;
break;
}
for (int i=0; i<5; ++i)
if (class_.data.skills[i][1]==skillIndex)
{
typeFactor =
MWBase::Environment::get().getWorld()->getStore().gameSettings.find ("fMajorSkillBonus")->f;
break;
}
if (typeFactor<=0)
throw std::runtime_error ("invalid skill type factor");
float specialisationFactor = 1;
if (skill->data.specialization==class_.data.specialization)
{
specialisationFactor =
MWBase::Environment::get().getWorld()->getStore().gameSettings.find ("fSpecialSkillBonus")->f;
if (specialisationFactor<=0)
throw std::runtime_error ("invalid skill specialisation factor");
}
return 1.0 / (level +1) * (1.0 / skillFactor) * typeFactor * specialisationFactor;
}
void MWMechanics::NpcStats::useSkill (int skillIndex, const ESM::Class& class_, int usageType)
{
float base = getSkill (skillIndex).getBase();
int level = static_cast<int> (base);
base += getSkillGain (skillIndex, class_, usageType);
if (static_cast<int> (base)!=level)
base = level+1;
getSkill (skillIndex).setBase (base);
}

@ -3,10 +3,16 @@
#include <map> #include <map>
#include <set> #include <set>
#include <string>
#include "stat.hpp" #include "stat.hpp"
#include "drawstate.hpp" #include "drawstate.hpp"
namespace ESM
{
struct Class;
}
namespace MWMechanics namespace MWMechanics
{ {
/// \brief Additional stats for NPCs /// \brief Additional stats for NPCs
@ -16,24 +22,57 @@ namespace MWMechanics
/// \note For technical reasons the spell list and the currently selected spell is also handled by /// \note For technical reasons the spell list and the currently selected spell is also handled by
/// CreatureStats, even though they are actually NPC stats. /// CreatureStats, even though they are actually NPC stats.
struct NpcStats class NpcStats
{ {
// NPCs other than the player can only have one faction. But for the sake of consistency public:
// we use the same data structure for the PC and the NPCs.
/// \note the faction key must be in lowercase enum Flag
std::map<std::string, int> mFactionRank; {
Flag_ForceRun = 1,
Stat<float> mSkill[27]; Flag_ForceSneak = 2,
Flag_Run = 4,
bool mForceRun; Flag_Sneak = 8
bool mForceSneak; };
bool mRun;
bool mSneak; private:
bool mCombat;
DrawState mDrawState; /// NPCs other than the player can only have one faction. But for the sake of consistency
/// we use the same data structure for the PC and the NPCs.
NpcStats() : mForceRun (false), mForceSneak (false), mRun (false), mSneak (false), /// \note the faction key must be in lowercase
mCombat (false) , mDrawState(DrawState_Nothing) {} std::map<std::string, int> mFactionRank;
DrawState_ mDrawState;
unsigned int mMovementFlags;
Stat<float> mSkill[27];
public:
NpcStats();
DrawState_ getDrawState() const;
void setDrawState (DrawState_ state);
bool getMovementFlag (Flag flag) const;
void setMovementFlag (Flag flag, bool state);
const Stat<float>& getSkill (int index) const;
Stat<float>& getSkill (int index);
std::map<std::string, int>& getFactionRanks();
const std::map<std::string, int>& getFactionRanks() const;
float getSkillGain (int skillIndex, const ESM::Class& class_, int usageType = -1,
int level = -1) const;
///< \param usageType: Usage specific factor, specified in the respective skill record;
/// -1: use a factor of 1.0 instead.
/// \param level Level to base calculation on; -1: use current level.
void useSkill (int skillIndex, const ESM::Class& class_, int usageType = -1);
///< Increase skill by usage.
}; };
} }

@ -41,7 +41,7 @@ namespace MWMechanics
{ {
const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(it->effectID); const ESM::MagicEffect* effect = MWBase::Environment::get().getWorld()->getStore().magicEffects.find(it->effectID);
int _school = effect->data.school; int _school = effect->data.school;
int _skillLevel = stats.mSkill[spellSchoolToSkill(_school)].getModified(); int _skillLevel = stats.getSkill (spellSchoolToSkill(_school)).getModified();
if (school == -1) if (school == -1)
{ {
@ -78,7 +78,7 @@ namespace MWMechanics
NpcStats& stats = MWWorld::Class::get(actor).getNpcStats(actor); NpcStats& stats = MWWorld::Class::get(actor).getNpcStats(actor);
CreatureStats& creatureStats = MWWorld::Class::get(actor).getCreatureStats(actor); CreatureStats& creatureStats = MWWorld::Class::get(actor).getCreatureStats(actor);
int skillLevel = stats.mSkill[getSpellSchool(spellId, actor)].getModified(); int skillLevel = stats.getSkill (getSpellSchool(spellId, actor)).getModified();
// Sound magic effect (reduces spell casting chance) // Sound magic effect (reduces spell casting chance)
int soundMagnitude = creatureStats.mMagicEffects.get (MWMechanics::EffectKey (48)).mMagnitude; int soundMagnitude = creatureStats.mMagicEffects.get (MWMechanics::EffectKey (48)).mMagnitude;

@ -31,6 +31,11 @@ namespace MWMechanics
return mModified; return mModified;
} }
T getModifier() const
{
return mModified-mBase;
}
/// Set base and modified to \a value. /// Set base and modified to \a value.
void set (const T& value) void set (const T& value)
{ {
@ -65,10 +70,9 @@ namespace MWMechanics
mBase += diff; mBase += diff;
} }
/// Change modified relatively. void setModifier (const T& modifier)
void modify (const T& diff)
{ {
mModified += diff; mModified = mBase + modifier;
} }
}; };
@ -143,7 +147,7 @@ namespace MWMechanics
void modify (const T& diff) void modify (const T& diff)
{ {
mStatic.modify (diff); mStatic.modify (diff);
modifyCurrent (diff); setCurrent (getCurrent()+diff);
} }
void setCurrent (const T& value) void setCurrent (const T& value)
@ -155,6 +159,13 @@ namespace MWMechanics
else if (mCurrent>getModified()) else if (mCurrent>getModified())
mCurrent = getModified(); mCurrent = getModified();
} }
void setModifier (const T& modifier)
{
T diff = modifier - mStatic.getModifier();
mStatic.setModifier (modifier);
setCurrent (getCurrent()+diff);
}
}; };
template<typename T> template<typename T>

@ -1,18 +1,8 @@
#ifndef _GAME_RENDER_ACTORS_H #ifndef _GAME_RENDER_ACTORS_H
#define _GAME_RENDER_ACTORS_H #define _GAME_RENDER_ACTORS_H
#include <map>
#include <list>
#include <openengine/ogre/renderer.hpp>
#include "components/nifogre/ogre_nif_loader.hpp"
#include "../mwworld/refdata.hpp"
#include "../mwworld/actiontalk.hpp"
#include "npcanimation.hpp" #include "npcanimation.hpp"
#include "creatureanimation.hpp" #include "creatureanimation.hpp"
#include <openengine/bullet/physic.hpp>
namespace MWWorld namespace MWWorld
{ {

@ -6,25 +6,26 @@
#include <OgreBone.h> #include <OgreBone.h>
#include <OgreSubMesh.h> #include <OgreSubMesh.h>
namespace MWRender{ namespace MWRender
std::map<std::string, int> Animation::mUniqueIDs; {
std::map<std::string, int> Animation::sUniqueIDs;
Animation::Animation(OEngine::Render::OgreRenderer& _rend) Animation::Animation(OEngine::Render::OgreRenderer& _rend)
: insert(NULL) : mInsert(NULL)
, mRend(_rend) , mRend(_rend)
, vecRotPos() , mVecRotPos()
, time(0.0f) , mTime(0.0f)
, startTime(0.0f) , mStartTime(0.0f)
, stopTime(0.0f) , mStopTime(0.0f)
, animate(0) , mAnimate(0)
, rindexI() , mRindexI()
, tindexI() , mTindexI()
, shapeNumber(0) , mShapeNumber(0)
, shapeIndexI() , mShapeIndexI()
, shapes(NULL) , mShapes(NULL)
, transformations(NULL) , mTransformations(NULL)
, textmappings(NULL) , mTextmappings(NULL)
, base(NULL) , mBase(NULL)
{ {
} }
@ -32,178 +33,191 @@ namespace MWRender{
{ {
} }
std::string Animation::getUniqueID(std::string mesh){ std::string Animation::getUniqueID(std::string mesh)
int counter; {
std::string copy = mesh; int counter;
std::transform(copy.begin(), copy.end(), copy.begin(), ::tolower); std::string copy = mesh;
if(mUniqueIDs.find(copy) == mUniqueIDs.end()){ std::transform(copy.begin(), copy.end(), copy.begin(), ::tolower);
counter = mUniqueIDs[copy] = 0;
} if(sUniqueIDs.find(copy) == sUniqueIDs.end())
else{ {
mUniqueIDs[copy] = mUniqueIDs[copy] + 1; counter = sUniqueIDs[copy] = 0;
counter = mUniqueIDs[copy]; }
} else
{
sUniqueIDs[copy] = sUniqueIDs[copy] + 1;
counter = sUniqueIDs[copy];
}
std::stringstream out; std::stringstream out;
if(counter > 99 && counter < 1000)
out << "0"; if(counter > 99 && counter < 1000)
else if(counter > 9) out << "0";
out << "00"; else if(counter > 9)
else out << "00";
out << "000"; else
out << counter; out << "000";
return out.str(); out << counter;
}
void Animation::startScript(std::string groupname, int mode, int loops){ return out.str();
//If groupname is recognized set animate to true }
//Set the start time and stop time
//How many times to loop void Animation::startScript(std::string groupname, int mode, int loops)
if(groupname == "all"){ {
animate = loops; //If groupname is recognized set animate to true
time = startTime; //Set the start time and stop time
//How many times to loop
if(groupname == "all")
{
mAnimate = loops;
mTime = mStartTime;
} }
else if(textmappings){ else if(mTextmappings)
{
std::string startName = groupname + ": loop start"; std::string startName = groupname + ": loop start";
std::string stopName = groupname + ": loop stop"; std::string stopName = groupname + ": loop stop";
bool first = false; bool first = false;
if(loops > 1){ if(loops > 1)
{
startName = groupname + ": loop start"; startName = groupname + ": loop start";
stopName = groupname + ": loop stop"; stopName = groupname + ": loop stop";
for(std::map<std::string, float>::iterator iter = textmappings->begin(); iter != textmappings->end(); iter++){ for(std::map<std::string, float>::iterator iter = mTextmappings->begin(); iter != mTextmappings->end(); iter++)
{
std::string current = iter->first.substr(0, startName.size());
std::transform(current.begin(), current.end(), current.begin(), ::tolower);
std::string current2 = iter->first.substr(0, stopName.size());
std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower);
if(current == startName){ std::string current = iter->first.substr(0, startName.size());
startTime = iter->second; std::transform(current.begin(), current.end(), current.begin(), ::tolower);
animate = loops; std::string current2 = iter->first.substr(0, stopName.size());
time = startTime; std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower);
first = true;
} if(current == startName)
if(current2 == stopName){ {
stopTime = iter->second; mStartTime = iter->second;
if(first) mAnimate = loops;
break; mTime = mStartTime;
} first = true;
}
if(current2 == stopName)
{
mStopTime = iter->second;
if(first)
break;
}
} }
} }
if(!first){ if(!first)
{
startName = groupname + ": start"; startName = groupname + ": start";
stopName = groupname + ": stop"; stopName = groupname + ": stop";
for(std::map<std::string, float>::iterator iter = textmappings->begin(); iter != textmappings->end(); iter++){ for(std::map<std::string, float>::iterator iter = mTextmappings->begin(); iter != mTextmappings->end(); iter++)
{
std::string current = iter->first.substr(0, startName.size());
std::transform(current.begin(), current.end(), current.begin(), ::tolower);
std::string current2 = iter->first.substr(0, stopName.size());
std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower);
if(current == startName){ std::string current = iter->first.substr(0, startName.size());
startTime = iter->second; std::transform(current.begin(), current.end(), current.begin(), ::tolower);
animate = loops; std::string current2 = iter->first.substr(0, stopName.size());
time = startTime; std::transform(current2.begin(), current2.end(), current2.begin(), ::tolower);
first = true;
} if(current == startName)
if(current2 == stopName){ {
stopTime = iter->second; mStartTime = iter->second;
if(first) mAnimate = loops;
break; mTime = mStartTime;
first = true;
}
if(current2 == stopName)
{
mStopTime = iter->second;
if(first)
break;
}
} }
} }
}
} }
}
void Animation::stopScript(){
animate = 0;
} }
void Animation::handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel){ void Animation::stopScript()
shapeNumber = 0; {
mAnimate = 0;
}
void Animation::handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel)
{
mShapeNumber = 0;
if (allshapes == NULL || creaturemodel == NULL || skel == NULL) if (allshapes == NULL || creaturemodel == NULL || skel == NULL)
{
return; return;
}
std::vector<Nif::NiTriShapeCopy>::iterator allshapesiter; std::vector<Nif::NiTriShapeCopy>::iterator allshapesiter;
for(allshapesiter = allshapes->begin(); allshapesiter != allshapes->end(); allshapesiter++) for(allshapesiter = allshapes->begin(); allshapesiter != allshapes->end(); allshapesiter++)
{
//std::map<unsigned short, PosAndRot> vecPosRot;
{ Nif::NiTriShapeCopy& copy = *allshapesiter;
//std::map<unsigned short, PosAndRot> vecPosRot; std::vector<Ogre::Vector3>* allvertices = &copy.vertices;
Nif::NiTriShapeCopy& copy = *allshapesiter; //std::set<unsigned int> vertices;
std::vector<Ogre::Vector3>* allvertices = &copy.vertices; //std::set<unsigned int> normals;
//std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfovector = copy.boneinfo;
std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >* verticesToChange = &copy.vertsToWeights;
//std::cout << "Name " << copy.sname << "\n";
Ogre::HardwareVertexBufferSharedPtr vbuf = creaturemodel->getMesh()->getSubMesh(copy.sname)->vertexData->vertexBufferBinding->getBuffer(0);
Ogre::Real* pReal = static_cast<Ogre::Real*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
//std::set<unsigned int> vertices; std::vector<Ogre::Vector3> initialVertices = copy.morph.getInitialVertices();
//std::set<unsigned int> normals; //Each shape has multiple indices
//std::vector<Nif::NiSkinData::BoneInfoCopy> boneinfovector = copy.boneinfo; if(initialVertices.size() )
std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >* verticesToChange = &copy.vertsToWeights; {
if(copy.vertices.size() == initialVertices.size())
{
//Create if it doesn't already exist
if(mShapeIndexI.size() == static_cast<std::size_t> (mShapeNumber))
{
std::vector<int> vec;
mShapeIndexI.push_back(vec);
}
if(mTime >= copy.morph.getStartTime() && mTime <= copy.morph.getStopTime())
{
float x;
for (unsigned int i = 0; i < copy.morph.getAdditionalVertices().size(); i++)
{
int j = 0;
if(mShapeIndexI[mShapeNumber].size() <= i)
mShapeIndexI[mShapeNumber].push_back(0);
if(timeIndex(mTime,copy.morph.getRelevantTimes()[i],(mShapeIndexI[mShapeNumber])[i], j, x))
{
int indexI = (mShapeIndexI[mShapeNumber])[i];
std::vector<Ogre::Vector3> relevantData = (copy.morph.getRelevantData()[i]);
float v1 = relevantData[indexI].x;
float v2 = relevantData[j].x;
float t = v1 + (v2 - v1) * x;
if ( t < 0 )
t = 0;
if ( t > 1 )
t = 1;
if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size())
for (unsigned int v = 0; v < initialVertices.size(); v++)
initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t;
}
//std::cout << "Name " << copy.sname << "\n";
Ogre::HardwareVertexBufferSharedPtr vbuf = creaturemodel->getMesh()->getSubMesh(copy.sname)->vertexData->vertexBufferBinding->getBuffer(0);
Ogre::Real* pReal = static_cast<Ogre::Real*>(vbuf->lock(Ogre::HardwareBuffer::HBL_NORMAL));
std::vector<Ogre::Vector3> initialVertices = copy.morph.getInitialVertices();
//Each shape has multiple indices
if(initialVertices.size() )
{
if(copy.vertices.size() == initialVertices.size())
{
//Create if it doesn't already exist
if(shapeIndexI.size() == static_cast<std::size_t> (shapeNumber))
{
std::vector<int> vec;
shapeIndexI.push_back(vec);
}
if(time >= copy.morph.getStartTime() && time <= copy.morph.getStopTime()){
float x;
for (unsigned int i = 0; i < copy.morph.getAdditionalVertices().size(); i++){
int j = 0;
if(shapeIndexI[shapeNumber].size() <= i)
shapeIndexI[shapeNumber].push_back(0);
if(timeIndex(time,copy.morph.getRelevantTimes()[i],(shapeIndexI[shapeNumber])[i], j, x)){
int indexI = (shapeIndexI[shapeNumber])[i];
std::vector<Ogre::Vector3> relevantData = (copy.morph.getRelevantData()[i]);
float v1 = relevantData[indexI].x;
float v2 = relevantData[j].x;
float t = v1 + (v2 - v1) * x;
if ( t < 0 ) t = 0;
if ( t > 1 ) t = 1;
if( t != 0 && initialVertices.size() == copy.morph.getAdditionalVertices()[i].size())
{
for (unsigned int v = 0; v < initialVertices.size(); v++){
initialVertices[v] += ((copy.morph.getAdditionalVertices()[i])[v]) * t;
}
}
}
}
allvertices = &initialVertices;
} }
shapeNumber++;
} allvertices = &initialVertices;
} }
mShapeNumber++;
}
}
if(verticesToChange->size() > 0){ if(verticesToChange->size() > 0)
{
for(std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >::iterator iter = verticesToChange->begin(); for(std::map<int, std::vector<Nif::NiSkinData::IndividualWeight> >::iterator iter = verticesToChange->begin();
iter != verticesToChange->end(); iter++) iter != verticesToChange->end(); iter++)
@ -214,26 +228,25 @@ namespace MWRender{
Nif::NiSkinData::BoneInfoCopy* boneinfocopy = &(allshapesiter->boneinfo[inds[0].boneinfocopyindex]); Nif::NiSkinData::BoneInfoCopy* boneinfocopy = &(allshapesiter->boneinfo[inds[0].boneinfocopyindex]);
Ogre::Bone *bonePtr = 0; Ogre::Bone *bonePtr = 0;
Ogre::Vector3 vecPos; Ogre::Vector3 vecPos;
Ogre::Quaternion vecRot; Ogre::Quaternion vecRot;
std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot>::iterator result = vecRotPos.find(boneinfocopy); std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot>::iterator result = mVecRotPos.find(boneinfocopy);
if(result == vecRotPos.end()){ if(result == mVecRotPos.end())
{
bonePtr = skel->getBone(boneinfocopy->bonename); bonePtr = skel->getBone(boneinfocopy->bonename);
vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans; vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans;
vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation; vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation;
PosAndRot both;
PosAndRot both; both.vecPos = vecPos;
both.vecPos = vecPos; both.vecRot = vecRot;
both.vecRot = vecRot; mVecRotPos[boneinfocopy] = both;
vecRotPos[boneinfocopy] = both;
} }
else{ else
{
PosAndRot both = result->second; PosAndRot both = result->second;
vecPos = both.vecPos; vecPos = both.vecPos;
vecRot = both.vecRot; vecRot = both.vecRot;
@ -241,263 +254,249 @@ namespace MWRender{
Ogre::Vector3 absVertPos = (vecPos + vecRot * currentVertex) * inds[0].weight; Ogre::Vector3 absVertPos = (vecPos + vecRot * currentVertex) * inds[0].weight;
for(std::size_t i = 1; i < inds.size(); i++)
{
for(std::size_t i = 1; i < inds.size(); i++){
boneinfocopy = &(allshapesiter->boneinfo[inds[i].boneinfocopyindex]); boneinfocopy = &(allshapesiter->boneinfo[inds[i].boneinfocopyindex]);
result = vecRotPos.find(boneinfocopy); result = mVecRotPos.find(boneinfocopy);
if(result == mVecRotPos.end())
if(result == vecRotPos.end()){ {
bonePtr = skel->getBone(boneinfocopy->bonename); bonePtr = skel->getBone(boneinfocopy->bonename);
vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans; vecPos = bonePtr->_getDerivedPosition() + bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.trans;
vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation; vecRot = bonePtr->_getDerivedOrientation() * boneinfocopy->trafo.rotation;
PosAndRot both; PosAndRot both;
both.vecPos = vecPos; both.vecPos = vecPos;
both.vecRot = vecRot; both.vecRot = vecRot;
vecRotPos[boneinfocopy] = both; mVecRotPos[boneinfocopy] = both;
} }
else{ else
PosAndRot both = result->second; {
vecPos = both.vecPos; PosAndRot both = result->second;
vecRot = both.vecRot; vecPos = both.vecPos;
vecRot = both.vecRot;
} }
absVertPos += (vecPos + vecRot * currentVertex) * inds[i].weight; absVertPos += (vecPos + vecRot * currentVertex) * inds[i].weight;
} }
Ogre::Real* addr = (pReal + 3 * verIndex); Ogre::Real* addr = (pReal + 3 * verIndex);
*addr = absVertPos.x; *addr = absVertPos.x;
*(addr+1) = absVertPos.y; *(addr+1) = absVertPos.y;
*(addr+2) = absVertPos.z; *(addr+2) = absVertPos.z;
} }
}
else
{
//Ogre::Bone *bonePtr = creaturemodel->getSkeleton()->getBone(copy.bonename);
Ogre::Quaternion shaperot = copy.trafo.rotation;
Ogre::Vector3 shapetrans = copy.trafo.trans;
float shapescale = copy.trafo.scale;
std::vector<std::string> boneSequence = copy.boneSequence;
Ogre::Vector3 transmult;
Ogre::Quaternion rotmult;
float scale;
if(boneSequence.size() > 0)
{
std::vector<std::string>::iterator boneSequenceIter = boneSequence.begin();
if(skel->hasBone(*boneSequenceIter))
{
Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter);
transmult = bonePtr->getPosition();
rotmult = bonePtr->getOrientation();
scale = bonePtr->getScale().x;
boneSequenceIter++;
for(; boneSequenceIter != boneSequence.end(); boneSequenceIter++)
{
if(skel->hasBone(*boneSequenceIter))
{
Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter);
// Computes C = B + AxC*scale
transmult = transmult + rotmult * bonePtr->getPosition();
rotmult = rotmult * bonePtr->getOrientation();
scale = scale * bonePtr->getScale().x;
}
//std::cout << "Bone:" << *boneSequenceIter << " ";
}
transmult = transmult + rotmult * shapetrans;
rotmult = rotmult * shaperot;
scale = shapescale * scale;
//std::cout << "Position: " << transmult << "Rotation: " << rotmult << "\n";
}
else
{
//Ogre::Bone *bonePtr = creaturemodel->getSkeleton()->getBone(copy.bonename);
Ogre::Quaternion shaperot = copy.trafo.rotation;
Ogre::Vector3 shapetrans = copy.trafo.trans;
float shapescale = copy.trafo.scale;
std::vector<std::string> boneSequence = copy.boneSequence;
Ogre::Vector3 transmult;
Ogre::Quaternion rotmult;
float scale;
if(boneSequence.size() > 0){
std::vector<std::string>::iterator boneSequenceIter = boneSequence.begin();
if(skel->hasBone(*boneSequenceIter)){
Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter);
transmult = bonePtr->getPosition();
rotmult = bonePtr->getOrientation();
scale = bonePtr->getScale().x;
boneSequenceIter++;
for(; boneSequenceIter != boneSequence.end(); boneSequenceIter++)
{
if(skel->hasBone(*boneSequenceIter)){
Ogre::Bone *bonePtr = skel->getBone(*boneSequenceIter);
// Computes C = B + AxC*scale
transmult = transmult + rotmult * bonePtr->getPosition();
rotmult = rotmult * bonePtr->getOrientation();
scale = scale * bonePtr->getScale().x;
}
//std::cout << "Bone:" << *boneSequenceIter << " ";
}
transmult = transmult + rotmult * shapetrans;
rotmult = rotmult * shaperot;
scale = shapescale * scale;
//std::cout << "Position: " << transmult << "Rotation: " << rotmult << "\n";
}
} }
else }
{ else
transmult = shapetrans; {
rotmult = shaperot; transmult = shapetrans;
scale = shapescale; rotmult = shaperot;
} scale = shapescale;
}
// Computes C = B + AxC*scale
// final_vector = old_vector + old_rotation*new_vector*old_scale/
for(unsigned int i = 0; i < allvertices->size(); i++){
Ogre::Vector3 current = transmult + rotmult * (*allvertices)[i];
Ogre::Real* addr = pReal + i * 3;
*addr = current.x;
*(addr+1) = current.y;
*(addr + 2) = current.z;
}/*
for(int i = 0; i < allnormals.size(); i++){
Ogre::Vector3 current =rotmult * allnormals[i];
Ogre::Real* addr = pRealNormal + i * 3;
*addr = current.x;
*(addr+1) = current.y;
*(addr + 2) = current.z;
}*/
} // Computes C = B + AxC*scale
vbuf->unlock(); // final_vector = old_vector + old_rotation*new_vector*old_scale/
} for(unsigned int i = 0; i < allvertices->size(); i++)
{
Ogre::Vector3 current = transmult + rotmult * (*allvertices)[i];
Ogre::Real* addr = pReal + i * 3;
*addr = current.x;
*(addr+1) = current.y;
*(addr + 2) = current.z;
}/*
for(int i = 0; i < allnormals.size(); i++){
Ogre::Vector3 current =rotmult * allnormals[i];
Ogre::Real* addr = pRealNormal + i * 3;
*addr = current.x;
*(addr+1) = current.y;
*(addr + 2) = current.z;
}*/
}
vbuf->unlock();
}
} }
bool Animation::timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x ){
int count; bool Animation::timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x )
if ( (count = times.size()) > 0 ) {
{ int count;
if ( time <= times[0] ) if ( (count = times.size()) > 0 )
{ {
i = j = 0; if ( time <= times[0] )
x = 0.0; {
return true; i = j = 0;
} x = 0.0;
if ( time >= times[count - 1] ) return true;
{ }
i = j = count - 1; if ( time >= times[count - 1] )
x = 0.0; {
return true; i = j = count - 1;
} x = 0.0;
return true;
if ( i < 0 || i >= count ) }
i = 0;
float tI = times[i];
if ( time > tI )
{
j = i + 1;
float tJ;
while ( time >= ( tJ = times[j]) )
{
i = j++;
tI = tJ;
}
x = ( time - tI ) / ( tJ - tI );
return true;
}
else if ( time < tI )
{
j = i - 1;
float tJ;
while ( time <= ( tJ = times[j] ) )
{
i = j--;
tI = tJ;
}
x = ( time - tI ) / ( tJ - tI );
return true;
}
else
{
j = i;
x = 0.0;
return true;
}
}
else
return false;
}
void Animation::handleAnimationTransforms(){ if ( i < 0 || i >= count )
i = 0;
float tI = times[i];
if ( time > tI )
{
j = i + 1;
float tJ;
while ( time >= ( tJ = times[j]) )
{
i = j++;
tI = tJ;
}
x = ( time - tI ) / ( tJ - tI );
return true;
}
else if ( time < tI )
{
j = i - 1;
float tJ;
while ( time <= ( tJ = times[j] ) )
{
i = j--;
tI = tJ;
}
x = ( time - tI ) / ( tJ - tI );
return true;
}
else
{
j = i;
x = 0.0;
return true;
}
}
else
return false;
Ogre::SkeletonInstance* skel = base->getSkeleton(); }
void Animation::handleAnimationTransforms()
{
Ogre::SkeletonInstance* skel = mBase->getSkeleton();
Ogre::Bone* b = skel->getRootBone(); Ogre::Bone* b = skel->getRootBone();
b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3)); //This is a trick b->setOrientation(Ogre::Real(.3),Ogre::Real(.3),Ogre::Real(.3), Ogre::Real(.3)); //This is a trick
skel->_updateTransforms(); skel->_updateTransforms();
//skel->_notifyManualBonesDirty(); //skel->_notifyManualBonesDirty();
base->getAllAnimationStates()->_notifyDirty();
//base->_updateAnimation();
//base->_notifyMoved();
std::vector<Nif::NiKeyframeData>::iterator iter;
int slot = 0;
if(transformations){
for(iter = transformations->begin(); iter != transformations->end(); iter++){
if(time < iter->getStartTime() || time < startTime || time > iter->getStopTime())
{
slot++;
continue;
}
float x;
float x2;
const std::vector<Ogre::Quaternion> & quats = iter->getQuat();
const std::vector<float> & ttime = iter->gettTime();
const std::vector<float> & rtime = iter->getrTime(); mBase->getAllAnimationStates()->_notifyDirty();
int rindexJ = rindexI[slot]; //mBase->_updateAnimation();
//mBase->_notifyMoved();
timeIndex(time, rtime, rindexI[slot], rindexJ, x2); std::vector<Nif::NiKeyframeData>::iterator iter;
int tindexJ = tindexI[slot]; int slot = 0;
if(mTransformations)
{
const std::vector<Ogre::Vector3> & translist1 = iter->getTranslist1(); for(iter = mTransformations->begin(); iter != mTransformations->end(); iter++)
{
timeIndex(time, ttime, tindexI[slot], tindexJ, x); if(mTime < iter->getStartTime() || mTime < mStartTime || mTime > iter->getStopTime())
{
slot++;
continue;
}
Ogre::Vector3 t; float x;
Ogre::Quaternion r; float x2;
bool bTrans = translist1.size() > 0; const std::vector<Ogre::Quaternion> & quats = iter->getQuat();
const std::vector<float> & ttime = iter->gettTime();
const std::vector<float> & rtime = iter->getrTime();
int rindexJ = mRindexI[slot];
bool bQuats = quats.size() > 0; timeIndex(mTime, rtime, mRindexI[slot], rindexJ, x2);
int tindexJ = mTindexI[slot];
if(skel->hasBone(iter->getBonename())){ const std::vector<Ogre::Vector3> & translist1 = iter->getTranslist1();
Ogre::Bone* bone = skel->getBone(iter->getBonename());
if(bTrans){
Ogre::Vector3 v1 = translist1[tindexI[slot]];
Ogre::Vector3 v2 = translist1[tindexJ];
t = (v1 + (v2 - v1) * x);
bone->setPosition(t);
} timeIndex(mTime, ttime, mTindexI[slot], tindexJ, x);
if(bQuats){
r = Ogre::Quaternion::Slerp(x2, quats[rindexI[slot]], quats[rindexJ], true);
bone->setOrientation(r);
}
Ogre::Vector3 t;
Ogre::Quaternion r;
bool bTrans = translist1.size() > 0;
bool bQuats = quats.size() > 0;
if(skel->hasBone(iter->getBonename()))
{
Ogre::Bone* bone = skel->getBone(iter->getBonename());
if(bTrans)
{
Ogre::Vector3 v1 = translist1[mTindexI[slot]];
Ogre::Vector3 v2 = translist1[tindexJ];
t = (v1 + (v2 - v1) * x);
bone->setPosition(t);
} }
if(bQuats)
{
r = Ogre::Quaternion::Slerp(x2, quats[mRindexI[slot]], quats[rindexJ], true);
bone->setOrientation(r);
}
}
slot++; slot++;
}
skel->_updateTransforms();
mBase->getAllAnimationStates()->_notifyDirty();
}
} }
skel->_updateTransforms();
base->getAllAnimationStates()->_notifyDirty();
}
}
} }

@ -1,17 +1,13 @@
#ifndef _GAME_RENDER_ANIMATION_H #ifndef _GAME_RENDER_ANIMATION_H
#define _GAME_RENDER_ANIMATION_H #define _GAME_RENDER_ANIMATION_H
#include <components/nif/data.hpp>
#include <openengine/ogre/renderer.hpp> #include <openengine/ogre/renderer.hpp>
#include "../mwworld/refdata.hpp"
#include "../mwworld/ptr.hpp"
#include "../mwworld/actiontalk.hpp" #include "../mwworld/actiontalk.hpp"
#include <components/nif/node.hpp> #include <components/nif/node.hpp>
#include <map>
#include <openengine/bullet/physic.hpp> #include <openengine/bullet/physic.hpp>
namespace MWRender{ namespace MWRender{
struct PosAndRot{ struct PosAndRot{
@ -22,36 +18,30 @@ struct PosAndRot{
class Animation{ class Animation{
protected: protected:
Ogre::SceneNode* insert; Ogre::SceneNode* mInsert;
OEngine::Render::OgreRenderer &mRend; OEngine::Render::OgreRenderer &mRend;
std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot> vecRotPos; std::map<Nif::NiSkinData::BoneInfoCopy*, PosAndRot> mVecRotPos;
static std::map<std::string, int> mUniqueIDs; static std::map<std::string, int> sUniqueIDs;
float mTime;
float mStartTime;
float mStopTime;
int mAnimate;
float time; //Represents a rotation index for each bone
float startTime; std::vector<int>mRindexI;
float stopTime;
int animate;
//Represents a rotation index for each bone
std::vector<int>rindexI;
//Represents a translation index for each bone //Represents a translation index for each bone
std::vector<int>tindexI; std::vector<int>mTindexI;
//Only shapes with morphing data will use a shape number
int shapeNumber;
std::vector<std::vector<int> > shapeIndexI;
//Ogre::SkeletonInstance* skel; //Only shapes with morphing data will use a shape number
std::vector<Nif::NiTriShapeCopy>* shapes; //All the NiTriShapeData for a creature int mShapeNumber;
std::vector<std::vector<int> > mShapeIndexI;
//Ogre::SkeletonInstance* skel;
std::vector<Nif::NiTriShapeCopy>* mShapes; //All the NiTriShapeData for a creature
std::vector<Nif::NiKeyframeData>* mTransformations;
std::vector<Nif::NiKeyframeData>* transformations; std::map<std::string,float>* mTextmappings;
std::map<std::string,float>* textmappings; Ogre::Entity* mBase;
Ogre::Entity* base;
void handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel); void handleShapes(std::vector<Nif::NiTriShapeCopy>* allshapes, Ogre::Entity* creaturemodel, Ogre::SkeletonInstance *skel);
void handleAnimationTransforms(); void handleAnimationTransforms();
bool timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x ); bool timeIndex( float time, const std::vector<float> & times, int & i, int & j, float & x );
@ -63,7 +53,6 @@ class Animation{
void startScript(std::string groupname, int mode, int loops); void startScript(std::string groupname, int mode, int loops);
void stopScript(); void stopScript();
virtual ~Animation(); virtual ~Animation();
}; };

@ -12,26 +12,28 @@ using namespace Ogre;
using namespace NifOgre; using namespace NifOgre;
namespace MWRender{ namespace MWRender{
CreatureAnimation::~CreatureAnimation(){ CreatureAnimation::~CreatureAnimation()
{
}
} CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend): Animation(_rend)
CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend): Animation(_rend){ {
insert = ptr.getRefData().getBaseNode(); mInsert = ptr.getRefData().getBaseNode();
MWWorld::LiveCellRef<ESM::Creature> *ref = MWWorld::LiveCellRef<ESM::Creature> *ref = ptr.get<ESM::Creature>();
ptr.get<ESM::Creature>();
assert (ref->base != NULL); assert (ref->base != NULL);
if(!ref->base->model.empty()){ if(!ref->base->model.empty())
{
const std::string &mesh = "meshes\\" + ref->base->model; const std::string &mesh = "meshes\\" + ref->base->model;
std::string meshNumbered = mesh + getUniqueID(mesh) + ">|"; std::string meshNumbered = mesh + getUniqueID(mesh) + ">|";
NifOgre::NIFLoader::load(meshNumbered); NifOgre::NIFLoader::load(meshNumbered);
base = mRend.getScene()->createEntity(meshNumbered); mBase = mRend.getScene()->createEntity(meshNumbered);
base->setVisibilityFlags(RV_Actors); mBase->setVisibilityFlags(RV_Actors);
bool transparent = false; bool transparent = false;
for (unsigned int i=0; i<base->getNumSubEntities(); ++i) for (unsigned int i=0; i < mBase->getNumSubEntities(); ++i)
{ {
Ogre::MaterialPtr mat = base->getSubEntity(i)->getMaterial(); Ogre::MaterialPtr mat = mBase->getSubEntity(i)->getMaterial();
Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator(); Ogre::Material::TechniqueIterator techIt = mat->getTechniqueIterator();
while (techIt.hasMoreElements()) while (techIt.hasMoreElements())
{ {
@ -46,46 +48,51 @@ CreatureAnimation::CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::O
} }
} }
} }
base->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main); mBase->setRenderQueueGroup(transparent ? RQG_Alpha : RQG_Main);
std::string meshZero = mesh + "0000>|"; std::string meshZero = mesh + "0000>|";
if((transformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero))){ if((mTransformations = (NIFLoader::getSingletonPtr())->getAnim(meshZero)))
{
for(std::size_t init = 0; init < transformations->size(); init++){ for(std::size_t init = 0; init < mTransformations->size(); init++)
rindexI.push_back(0); {
tindexI.push_back(0); mRindexI.push_back(0);
} mTindexI.push_back(0);
stopTime = transformations->begin()->getStopTime(); }
startTime = transformations->begin()->getStartTime(); mStopTime = mTransformations->begin()->getStopTime();
shapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero); mStartTime = mTransformations->begin()->getStartTime();
mShapes = (NIFLoader::getSingletonPtr())->getShapes(meshZero);
} }
textmappings = NIFLoader::getSingletonPtr()->getTextIndices(meshZero); mTextmappings = NIFLoader::getSingletonPtr()->getTextIndices(meshZero);
insert->attachObject(base); mInsert->attachObject(mBase);
} }
} }
void CreatureAnimation::runAnimation(float timepassed){ void CreatureAnimation::runAnimation(float timepassed)
vecRotPos.clear(); {
if(animate > 0){ mVecRotPos.clear();
//Add the amount of time passed to time if(mAnimate > 0)
{
//Add the amount of time passed to time
//Handle the animation transforms dependent on time //Handle the animation transforms dependent on time
//Handle the shapes dependent on animation transforms //Handle the shapes dependent on animation transforms
time += timepassed; mTime += timepassed;
if(time >= stopTime){ if(mTime >= mStopTime)
animate--; {
mAnimate--;
//std::cout << "Stopping the animation\n"; //std::cout << "Stopping the animation\n";
if(animate == 0) if(mAnimate == 0)
time = stopTime; mTime = mStopTime;
else else
time = startTime + (time - stopTime); mTime = mStartTime + (mTime - mStopTime);
} }
handleAnimationTransforms(); handleAnimationTransforms();
handleShapes(shapes, base, base->getSkeleton()); handleShapes(mShapes, mBase, mBase->getSkeleton());
} }
} }
} }

@ -2,11 +2,7 @@
#define _GAME_RENDER_CREATUREANIMATION_H #define _GAME_RENDER_CREATUREANIMATION_H
#include "animation.hpp" #include "animation.hpp"
#include <components/nif/node.hpp>
#include "../mwworld/refdata.hpp"
#include "../mwworld/ptr.hpp"
#include "components/nifogre/ogre_nif_loader.hpp" #include "components/nifogre/ogre_nif_loader.hpp"
@ -17,8 +13,7 @@ class CreatureAnimation: public Animation{
public: public:
virtual ~CreatureAnimation(); virtual ~CreatureAnimation();
CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend); CreatureAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend);
virtual void runAnimation(float timepassed); virtual void runAnimation(float timepassed);
}; };
} }

File diff suppressed because it is too large Load Diff

@ -1,73 +1,63 @@
#ifndef _GAME_RENDER_NPCANIMATION_H #ifndef _GAME_RENDER_NPCANIMATION_H
#define _GAME_RENDER_NPCANIMATION_H #define _GAME_RENDER_NPCANIMATION_H
#include "animation.hpp" #include "animation.hpp"
#include <components/nif/data.hpp>
#include <components/nif/node.hpp>
#include <components/nif/property.hpp>
#include <components/nif/controller.hpp>
#include <components/nif/extra.hpp>
#include <utility>
#include "../mwworld/refdata.hpp"
#include "../mwworld/ptr.hpp"
#include "components/nifogre/ogre_nif_loader.hpp" #include "components/nifogre/ogre_nif_loader.hpp"
#include "../mwworld/inventorystore.hpp" #include "../mwworld/inventorystore.hpp"
#include "../mwclass/npc.hpp" #include "../mwclass/npc.hpp"
#include "../mwworld/containerstore.hpp" #include "../mwworld/containerstore.hpp"
#include "components/esm/loadarmo.hpp"
namespace MWRender{ namespace MWRender{
class NpcAnimation: public Animation{ class NpcAnimation: public Animation{
private: private:
MWWorld::InventoryStore& inv; MWWorld::InventoryStore& mInv;
int mStateID; int mStateID;
//Free Parts //Free Parts
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> chest; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mChest;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> skirt; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mSkirt;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> lhand; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mLhand;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> rhand; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mRhand;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> tail; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mTail;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> lFreeFoot; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mLFreeFoot;
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> rFreeFoot; std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mRFreeFoot;
int partslots[27]; //Each part slot is taken by clothing, armor, or is empty
int partpriorities[27];
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> zero;
int mPartslots[27]; //Each part slot is taken by clothing, armor, or is empty
int mPartPriorities[27];
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> mZero;
//Bounded Parts
Ogre::Entity* lclavicle;
Ogre::Entity* rclavicle;
Ogre::Entity* rupperArm;
Ogre::Entity* lupperArm;
Ogre::Entity* rUpperLeg;
Ogre::Entity* lUpperLeg;
Ogre::Entity* lForearm;
Ogre::Entity* rForearm;
Ogre::Entity* lWrist;
Ogre::Entity* rWrist;
Ogre::Entity* rKnee;
Ogre::Entity* lKnee;
Ogre::Entity* neck;
Ogre::Entity* rAnkle;
Ogre::Entity* lAnkle;
Ogre::Entity* groin;
Ogre::Entity* lfoot;
Ogre::Entity* rfoot;
Ogre::Entity* hair;
Ogre::Entity* head;
//Bounded Parts Ogre::SceneNode* insert;
Ogre::Entity* lclavicle;
Ogre::Entity* rclavicle;
Ogre::Entity* rupperArm;
Ogre::Entity* lupperArm;
Ogre::Entity* rUpperLeg;
Ogre::Entity* lUpperLeg;
Ogre::Entity* lForearm;
Ogre::Entity* rForearm;
Ogre::Entity* lWrist;
Ogre::Entity* rWrist;
Ogre::Entity* rKnee;
Ogre::Entity* lKnee;
Ogre::Entity* neck;
Ogre::Entity* rAnkle;
Ogre::Entity* lAnkle;
Ogre::Entity* groin;
Ogre::Entity* lfoot;
Ogre::Entity* rfoot;
Ogre::Entity* hair;
Ogre::Entity* head;
Ogre::SceneNode* insert;
bool isBeast; bool isBeast;
bool isFemale; bool isFemale;
std::string headModel; std::string headModel;
std::string hairModel; std::string hairModel;
std::string npcName; std::string npcName;
std::string bodyRaceID; std::string bodyRaceID;
float timeToChange; float timeToChange;
MWWorld::ContainerStoreIterator robe; MWWorld::ContainerStoreIterator robe;
MWWorld::ContainerStoreIterator helmet; MWWorld::ContainerStoreIterator helmet;
MWWorld::ContainerStoreIterator shirt; MWWorld::ContainerStoreIterator shirt;
MWWorld::ContainerStoreIterator cuirass; MWWorld::ContainerStoreIterator cuirass;
@ -80,22 +70,21 @@ private:
MWWorld::ContainerStoreIterator rightglove; MWWorld::ContainerStoreIterator rightglove;
MWWorld::ContainerStoreIterator skirtiter; MWWorld::ContainerStoreIterator skirtiter;
public: public:
NpcAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv); NpcAnimation(const MWWorld::Ptr& ptr, OEngine::Render::OgreRenderer& _rend, MWWorld::InventoryStore& _inv);
virtual ~NpcAnimation(); virtual ~NpcAnimation();
Ogre::Entity* insertBoundedPart(const std::string &mesh, std::string bonename); Ogre::Entity* insertBoundedPart(const std::string &mesh, std::string bonename);
std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> insertFreePart(const std::string &mesh, const std::string& suffix); std::pair<Ogre::Entity*, std::vector<Nif::NiTriShapeCopy>*> insertFreePart(const std::string &mesh, const std::string& suffix);
void insertFootPart(int type, const std::string &mesh); void insertFootPart(int type, const std::string &mesh);
virtual void runAnimation(float timepassed); virtual void runAnimation(float timepassed);
void updateParts(); void updateParts();
void removeIndividualPart(int type); void removeIndividualPart(int type);
void reserveIndividualPart(int type, int group, int priority); void reserveIndividualPart(int type, int group, int priority);
bool addOrReplaceIndividualPart(int type, int group, int priority, const std::string &mesh); bool addOrReplaceIndividualPart(int type, int group, int priority, const std::string &mesh);
void removePartGroup(int group); void removePartGroup(int group);
void addPartGroup(int group, int priority, std::vector<ESM::PartReference>& parts); void addPartGroup(int group, int priority, std::vector<ESM::PartReference>& parts);
}; };
} }
#endif #endif

@ -1,25 +1,14 @@
#ifndef _GAME_RENDERING_MANAGER_H #ifndef _GAME_RENDERING_MANAGER_H
#define _GAME_RENDERING_MANAGER_H #define _GAME_RENDERING_MANAGER_H
#include "sky.hpp" #include "sky.hpp"
#include "terrain.hpp" #include "terrain.hpp"
#include "debugging.hpp" #include "debugging.hpp"
#include "../mwworld/class.hpp"
#include <OgreWindowEventUtilities.h>
#include <utility>
#include <openengine/ogre/renderer.hpp>
#include <openengine/ogre/fader.hpp> #include <openengine/ogre/fader.hpp>
#include <openengine/bullet/physic.hpp>
#include <components/settings/settings.hpp> #include <components/settings/settings.hpp>
#include <vector>
#include <string>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include "renderinginterface.hpp" #include "renderinginterface.hpp"
@ -50,7 +39,6 @@ namespace sh
namespace MWRender namespace MWRender
{ {
class Shadows; class Shadows;
class LocalMap; class LocalMap;
class Water; class Water;

@ -59,54 +59,36 @@ namespace MWScript
}; };
template<class R> template<class R>
class OpClearForceRun : public Interpreter::Opcode0 class OpClearMovementFlag : public Interpreter::Opcode0
{ {
public: MWMechanics::NpcStats::Flag mFlag;
virtual void execute (Interpreter::Runtime& runtime)
{
MWWorld::Ptr ptr = R()(runtime);
MWWorld::Class::get (ptr).getNpcStats (ptr).mForceRun = false;
}
};
template<class R>
class OpForceRun : public Interpreter::Opcode0
{
public: public:
virtual void execute (Interpreter::Runtime& runtime) OpClearMovementFlag (MWMechanics::NpcStats::Flag flag) : mFlag (flag) {}
{
MWWorld::Ptr ptr = R()(runtime);
MWWorld::Class::get (ptr).getNpcStats (ptr).mForceRun = true;
}
};
template<class R>
class OpClearForceSneak : public Interpreter::Opcode0
{
public:
virtual void execute (Interpreter::Runtime& runtime) virtual void execute (Interpreter::Runtime& runtime)
{ {
MWWorld::Ptr ptr = R()(runtime); MWWorld::Ptr ptr = R()(runtime);
MWWorld::Class::get (ptr).getNpcStats (ptr).mForceSneak = false; MWWorld::Class::get (ptr).getNpcStats (ptr).setMovementFlag (mFlag, false);
} }
}; };
template<class R> template<class R>
class OpForceSneak : public Interpreter::Opcode0 class OpSetMovementFlag : public Interpreter::Opcode0
{ {
MWMechanics::NpcStats::Flag mFlag;
public: public:
OpSetMovementFlag (MWMechanics::NpcStats::Flag flag) : mFlag (flag) {}
virtual void execute (Interpreter::Runtime& runtime) virtual void execute (Interpreter::Runtime& runtime)
{ {
MWWorld::Ptr ptr = R()(runtime); MWWorld::Ptr ptr = R()(runtime);
MWWorld::Class::get (ptr).getNpcStats (ptr).mForceSneak = true; MWWorld::Class::get (ptr).getNpcStats (ptr).setMovementFlag (mFlag, true);
} }
}; };
@ -165,19 +147,23 @@ namespace MWScript
interpreter.installSegment5 (opcodeToggleCollision, new OpToggleCollision); interpreter.installSegment5 (opcodeToggleCollision, new OpToggleCollision);
interpreter.installSegment5 (opcodeClearForceRun, new OpClearForceRun<ImplicitRef>); interpreter.installSegment5 (opcodeClearForceRun,
interpreter.installSegment5 (opcodeForceRun, new OpForceRun<ImplicitRef>); new OpClearMovementFlag<ImplicitRef> (MWMechanics::NpcStats::Flag_ForceRun));
interpreter.installSegment5 (opcodeClearForceSneak, new OpClearForceSneak<ImplicitRef>); interpreter.installSegment5 (opcodeForceRun,
interpreter.installSegment5 (opcodeForceSneak, new OpForceSneak<ImplicitRef>); new OpSetMovementFlag<ImplicitRef> (MWMechanics::NpcStats::Flag_ForceRun));
interpreter.installSegment5 (opcodeClearForceSneak,
new OpClearMovementFlag<ImplicitRef> (MWMechanics::NpcStats::Flag_ForceSneak));
interpreter.installSegment5 (opcodeForceSneak,
new OpSetMovementFlag<ImplicitRef> (MWMechanics::NpcStats::Flag_ForceSneak));
interpreter.installSegment5 (opcodeClearForceRunExplicit, interpreter.installSegment5 (opcodeClearForceRunExplicit,
new OpClearForceRun<ExplicitRef>); new OpClearMovementFlag<ExplicitRef> (MWMechanics::NpcStats::Flag_ForceRun));
interpreter.installSegment5 (opcodeForceRunExplicit, interpreter.installSegment5 (opcodeForceRunExplicit,
new OpForceRun<ExplicitRef>); new OpSetMovementFlag<ExplicitRef> (MWMechanics::NpcStats::Flag_ForceRun));
interpreter.installSegment5 (opcodeClearForceSneakExplicit, interpreter.installSegment5 (opcodeClearForceSneakExplicit,
new OpClearForceSneak<ExplicitRef>); new OpClearMovementFlag<ExplicitRef> (MWMechanics::NpcStats::Flag_ForceSneak));
interpreter.installSegment5 (opcodeForceSneakExplicit, interpreter.installSegment5 (opcodeForceSneakExplicit,
new OpForceSneak<ExplicitRef>); new OpSetMovementFlag<ExplicitRef> (MWMechanics::NpcStats::Flag_ForceSneak));
} }
} }
} }

@ -2,7 +2,6 @@
#define GAME_SCRIPT_SCRIPTMANAGER_H #define GAME_SCRIPT_SCRIPTMANAGER_H
#include <map> #include <map>
#include <vector>
#include <string> #include <string>
#include <components/compiler/streamerrorhandler.hpp> #include <components/compiler/streamerrorhandler.hpp>

@ -1,8 +1,12 @@
#include "statsextensions.hpp" #include "statsextensions.hpp"
#include <cmath>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>
#include <components/esm/loadnpc.hpp>
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
#include <components/compiler/extensions.hpp> #include <components/compiler/extensions.hpp>
@ -237,7 +241,7 @@ namespace MWScript
MWWorld::Ptr ptr = R()(runtime); MWWorld::Ptr ptr = R()(runtime);
Interpreter::Type_Integer value = Interpreter::Type_Integer value =
MWWorld::Class::get (ptr).getNpcStats (ptr).mSkill[mIndex]. MWWorld::Class::get (ptr).getNpcStats (ptr).getSkill (mIndex).
getModified(); getModified();
runtime.push (value); runtime.push (value);
@ -260,8 +264,35 @@ namespace MWScript
Interpreter::Type_Integer value = runtime[0].mInteger; Interpreter::Type_Integer value = runtime[0].mInteger;
runtime.pop(); runtime.pop();
MWWorld::Class::get (ptr).getNpcStats (ptr).mSkill[mIndex]. MWMechanics::NpcStats& stats = MWWorld::Class::get (ptr).getNpcStats (ptr);
setModified (value, 0);
MWWorld::LiveCellRef<ESM::NPC> *ref = ptr.get<ESM::NPC>();
assert (ref);
const ESM::Class& class_ =
*MWBase::Environment::get().getWorld()->getStore().classes.find (ref->base->cls);
float level = 0;
float progress = std::modf (stats.getSkill (mIndex).getBase(), &level);
float modifier = stats.getSkill (mIndex).getModifier();
int newLevel = static_cast<int> (value-modifier);
if (newLevel<0)
newLevel = 0;
else if (newLevel>100)
newLevel = 100;
progress = (progress / stats.getSkillGain (mIndex, class_, -1, level))
* stats.getSkillGain (mIndex, class_, -1, newLevel);
if (progress>=1)
progress = 0.999999999;
stats.getSkill (mIndex).set (newLevel + progress);
stats.getSkill (mIndex).setModifier (modifier);
} }
}; };
@ -281,10 +312,10 @@ namespace MWScript
Interpreter::Type_Integer value = runtime[0].mInteger; Interpreter::Type_Integer value = runtime[0].mInteger;
runtime.pop(); runtime.pop();
value += MWWorld::Class::get (ptr).getNpcStats (ptr).mSkill[mIndex]. value += MWWorld::Class::get (ptr).getNpcStats (ptr).getSkill (mIndex).
getModified(); getModified();
MWWorld::Class::get (ptr).getNpcStats (ptr).mSkill[mIndex]. MWWorld::Class::get (ptr).getNpcStats (ptr).getSkill (mIndex).
setModified (value, 0, 100); setModified (value, 0, 100);
} }
}; };
@ -373,9 +404,9 @@ namespace MWScript
if(factionID != "") if(factionID != "")
{ {
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) if(MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().find(factionID) == MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().end())
{ {
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 0; MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] = 0;
} }
} }
} }
@ -402,13 +433,13 @@ namespace MWScript
if(factionID != "") if(factionID != "")
{ {
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) == MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) if(MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().find(factionID) == MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().end())
{ {
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = 0; MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] = 0;
} }
else else
{ {
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] +1; MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] = MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] +1;
} }
} }
} }
@ -435,9 +466,9 @@ namespace MWScript
if(factionID != "") if(factionID != "")
{ {
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) != MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) if(MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().find(factionID) != MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().end())
{ {
MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] = MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID] -1; MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] = MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID] -1;
} }
} }
} }
@ -460,22 +491,22 @@ namespace MWScript
} }
else else
{ {
if(MWWorld::Class::get(ptr).getNpcStats(ptr).mFactionRank.empty()) if(MWWorld::Class::get(ptr).getNpcStats(ptr).getFactionRanks().empty())
{ {
//throw exception? //throw exception?
} }
else else
{ {
factionID = MWWorld::Class::get(ptr).getNpcStats(ptr).mFactionRank.begin()->first; factionID = MWWorld::Class::get(ptr).getNpcStats(ptr).getFactionRanks().begin()->first;
} }
} }
boost::algorithm::to_lower(factionID); boost::algorithm::to_lower(factionID);
MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer(); MWWorld::Ptr player = MWBase::Environment::get().getWorld()->getPlayer().getPlayer();
if(factionID!="") if(factionID!="")
{ {
if(MWWorld::Class::get(player).getNpcStats(player).mFactionRank.find(factionID) != MWWorld::Class::get(player).getNpcStats(player).mFactionRank.end()) if(MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().find(factionID) != MWWorld::Class::get(player).getNpcStats(player).getFactionRanks().end())
{ {
runtime.push(MWWorld::Class::get(player).getNpcStats(player).mFactionRank[factionID]); runtime.push(MWWorld::Class::get(player).getNpcStats(player).getFactionRanks()[factionID]);
} }
else else
{ {

@ -3,6 +3,8 @@
#include <OgreVector3.h> #include <OgreVector3.h>
#include "soundmanager.hpp"
namespace MWSound namespace MWSound
{ {
class Sound class Sound

@ -5,6 +5,8 @@
#include <utility> #include <utility>
#include <map> #include <map>
#include <boost/shared_ptr.hpp>
#include <OgreResourceGroupManager.h> #include <OgreResourceGroupManager.h>
#include <components/settings/settings.hpp> #include <components/settings/settings.hpp>

@ -0,0 +1,28 @@
#include "actionapply.hpp"
#include "class.hpp"
namespace MWWorld
{
ActionApply::ActionApply (const Ptr& target, const std::string& id, const Ptr& actor)
: mTarget (target), mId (id), mActor (actor)
{}
void ActionApply::execute()
{
MWWorld::Class::get (mTarget).apply (mTarget, mId, mActor);
}
ActionApplyWithSkill::ActionApplyWithSkill (const Ptr& target, const std::string& id,
const Ptr& actor, int skillIndex, int usageType)
: mTarget (target), mId (id), mActor (actor), mSkillIndex (skillIndex), mUsageType (usageType)
{}
void ActionApplyWithSkill::execute()
{
if (MWWorld::Class::get (mTarget).apply (mTarget, mId, mActor) && mUsageType!=-1)
MWWorld::Class::get (mTarget).skillUsageSucceeded (mActor, mSkillIndex, mUsageType);
}
}

@ -0,0 +1,42 @@
#ifndef GAME_MWWORLD_ACTIONAPPLY_H
#define GAME_MWWORLD_ACTIONAPPLY_H
#include <string>
#include "action.hpp"
#include "ptr.hpp"
namespace MWWorld
{
class ActionApply : public Action
{
Ptr mTarget;
std::string mId;
Ptr mActor;
public:
ActionApply (const Ptr& target, const std::string& id, const Ptr& actor);
virtual void execute();
};
class ActionApplyWithSkill : public Action
{
Ptr mTarget;
std::string mId;
Ptr mActor;
int mSkillIndex;
int mUsageType;
public:
ActionApplyWithSkill (const Ptr& target, const std::string& id, const Ptr& actor,
int skillIndex, int usageType);
virtual void execute();
};
}
#endif

@ -1,9 +1,5 @@
#include "cells.hpp" #include "cells.hpp"
#include <cctype>
#include <algorithm>
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
#include "../mwbase/environment.hpp" #include "../mwbase/environment.hpp"

@ -4,9 +4,6 @@
#include <components/esm/records.hpp> #include <components/esm/records.hpp>
#include <list> #include <list>
#include <string>
#include <vector>
#include <stdexcept>
#include <algorithm> #include <algorithm>
#include "refdata.hpp" #include "refdata.hpp"

@ -34,6 +34,16 @@ namespace MWWorld
} }
bool Class::apply (const MWWorld::Ptr& ptr, const std::string& id, const MWWorld::Ptr& actor) const
{
return false;
}
void Class::skillUsageSucceeded (const MWWorld::Ptr& ptr, int skill, int usageType) const
{
throw std::runtime_error ("class does not represent an actor");
}
MWMechanics::CreatureStats& Class::getCreatureStats (const Ptr& ptr) const MWMechanics::CreatureStats& Class::getCreatureStats (const Ptr& ptr) const
{ {
throw std::runtime_error ("class does not have creature stats"); throw std::runtime_error ("class does not have creature stats");

@ -22,7 +22,7 @@ namespace MWRender
namespace MWMechanics namespace MWMechanics
{ {
struct CreatureStats; struct CreatureStats;
struct NpcStats; class NpcStats;
struct Movement; struct Movement;
} }
@ -165,6 +165,19 @@ namespace MWWorld
/// effects). Throws an exception, if the object can't hold other objects. /// effects). Throws an exception, if the object can't hold other objects.
/// (default implementation: throws an exception) /// (default implementation: throws an exception)
virtual bool apply (const MWWorld::Ptr& ptr, const std::string& id,
const MWWorld::Ptr& actor) const;
///< Apply \a id on \a ptr.
/// \param actor Actor that is resposible for the ID being applied to \a ptr.
/// \return Any effect?
///
/// (default implementation: ignore and return false)
virtual void skillUsageSucceeded (const MWWorld::Ptr& ptr, int skill, int usageType) const;
///< Inform actor \a ptr that a skill use has succeeded.
///
/// (default implementations: throws an exception)
static const Class& get (const std::string& key); static const Class& get (const std::string& key);
///< If there is no class for this \a key, an exception is thrown. ///< If there is no class for this \a key, an exception is thrown.

@ -3,8 +3,6 @@
#include <iterator> #include <iterator>
#include "cellstore.hpp"
#include "refdata.hpp"
#include "ptr.hpp" #include "ptr.hpp"
namespace ESM namespace ESM

@ -148,7 +148,7 @@ void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats)
bool use = false; bool use = false;
if (slots.at (*iter2)==end()) if (slots.at (*iter2)==end())
use = true; // slot was empty before -> skill all further checks use = true; // slot was empty before -> skip all further checks
else else
{ {
Ptr old = *slots.at (*iter2); Ptr old = *slots.at (*iter2);
@ -159,12 +159,14 @@ void MWWorld::InventoryStore::autoEquip (const MWMechanics::NpcStats& stats)
int oldSkill = int oldSkill =
MWWorld::Class::get (old).getEquipmentSkill (old); MWWorld::Class::get (old).getEquipmentSkill (old);
if (testSkill!=-1 || oldSkill!=-1 || testSkill!=oldSkill) if (testSkill!=-1 && oldSkill==-1)
use = true;
else if (testSkill!=-1 && oldSkill!=-1 && testSkill!=oldSkill)
{ {
if (stats.mSkill[oldSkill].getModified()>stats.mSkill[testSkill].getModified()) if (stats.getSkill (oldSkill).getModified()>stats.getSkill (testSkill).getModified())
continue; // rejected, because old item better matched the NPC's skills. continue; // rejected, because old item better matched the NPC's skills.
if (stats.mSkill[oldSkill].getModified()<stats.mSkill[testSkill].getModified()) if (stats.getSkill (oldSkill).getModified()<stats.getSkill (testSkill).getModified())
use = true; use = true;
} }
} }

@ -1,9 +1,7 @@
#ifndef GAME_MWWORLD_PHYSICSSYSTEM_H #ifndef GAME_MWWORLD_PHYSICSSYSTEM_H
#define GAME_MWWORLD_PHYSICSSYSTEM_H #define GAME_MWWORLD_PHYSICSSYSTEM_H
#include <vector>
#include <openengine/ogre/renderer.hpp> #include <openengine/ogre/renderer.hpp>
#include <openengine/bullet/physic.hpp>
#include "ptr.hpp" #include "ptr.hpp"
#include <openengine/bullet/pmove.h> #include <openengine/bullet/pmove.h>

@ -56,10 +56,10 @@ namespace MWWorld
mClass = new_class; mClass = new_class;
} }
void Player::setDrawState(const DrawState& value) void Player::setDrawState (MWMechanics::DrawState_ state)
{ {
MWWorld::Ptr ptr = getPlayer(); MWWorld::Ptr ptr = getPlayer();
MWWorld::Class::get(ptr).getNpcStats(ptr).mDrawState = value; MWWorld::Class::get(ptr).getNpcStats(ptr).setDrawState (state);
} }
void Player::setAutoMove (bool enable) void Player::setAutoMove (bool enable)
@ -111,10 +111,10 @@ namespace MWWorld
MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running); MWWorld::Class::get (ptr).setStance (ptr, MWWorld::Class::Run, !running);
} }
DrawState Player::getDrawState() MWMechanics::DrawState_ Player::getDrawState()
{ {
MWWorld::Ptr ptr = getPlayer(); MWWorld::Ptr ptr = getPlayer();
return MWWorld::Class::get(ptr).getNpcStats(ptr).mDrawState; return MWWorld::Class::get(ptr).getNpcStats(ptr).getDrawState();
} }
} }

@ -9,9 +9,6 @@
#include "../mwmechanics/drawstate.hpp" #include "../mwmechanics/drawstate.hpp"
#undef DrawState // How did this get defined again?
// Maybe it's defined by default in every file for windows?
namespace MWBase namespace MWBase
{ {
class World; class World;
@ -86,7 +83,7 @@ namespace MWWorld
void setClass (const ESM::Class& class_); void setClass (const ESM::Class& class_);
void setDrawState(const DrawState& state); void setDrawState (MWMechanics::DrawState_ state);
std::string getName() const std::string getName() const
{ {
@ -118,7 +115,7 @@ namespace MWWorld
return mAutoMove; return mAutoMove;
} }
DrawState getDrawState(); MWMechanics::DrawState_ getDrawState(); /// \todo constness
void setAutoMove (bool enable); void setAutoMove (bool enable);

@ -1,12 +1,8 @@
#ifndef GAME_MWWORLD_PTR_H #ifndef GAME_MWWORLD_PTR_H
#define GAME_MWWORLD_PTR_H #define GAME_MWWORLD_PTR_H
#include <cassert>
#include <boost/any.hpp> #include <boost/any.hpp>
#include <components/esm/loadcell.hpp>
#include "cellstore.hpp" #include "cellstore.hpp"
namespace MWWorld namespace MWWorld

@ -1,8 +1,6 @@
#ifndef GAME_MWWORLD_REFDATA_H #ifndef GAME_MWWORLD_REFDATA_H
#define GAME_MWWORLD_REFDATA_H #define GAME_MWWORLD_REFDATA_H
#include <string>
#include <components/esm/defs.hpp> #include <components/esm/defs.hpp>
#include "../mwscript/locals.hpp" #include "../mwscript/locals.hpp"

@ -11,9 +11,7 @@
#include "../mwworld/manualref.hpp" /// FIXME #include "../mwworld/manualref.hpp" /// FIXME
#include "ptr.hpp"
#include "player.hpp" #include "player.hpp"
#include "class.hpp"
#include "localscripts.hpp" #include "localscripts.hpp"
#include "cellfunctors.hpp" #include "cellfunctors.hpp"

@ -1,15 +1,7 @@
#ifndef GAME_MWWORLD_SCENE_H #ifndef GAME_MWWORLD_SCENE_H
#define GAME_MWWORLD_SCENE_H #define GAME_MWWORLD_SCENE_H
#include <vector>
#include <map>
#include <boost/filesystem.hpp>
#include <openengine/bullet/physic.hpp>
#include "../mwrender/renderingmanager.hpp" #include "../mwrender/renderingmanager.hpp"
#include "../mwrender/renderinginterface.hpp"
#include "physicssystem.hpp" #include "physicssystem.hpp"
#include "globals.hpp" #include "globals.hpp"

@ -1,8 +1,5 @@
#include "worldimp.hpp" #include "worldimp.hpp"
#include <cmath>
#include <iostream>
#include <components/bsa/bsa_archive.hpp> #include <components/bsa/bsa_archive.hpp>
#include <components/files/collections.hpp> #include <components/files/collections.hpp>
@ -17,16 +14,10 @@
#include "../mwgui/window_manager.hpp" #include "../mwgui/window_manager.hpp"
#include "ptr.hpp"
#include "class.hpp"
#include "player.hpp" #include "player.hpp"
#include "weather.hpp"
#include "manualref.hpp" #include "manualref.hpp"
#include "refdata.hpp"
#include "globals.hpp"
#include "cellfunctors.hpp" #include "cellfunctors.hpp"
#include <OgreVector3.h>
using namespace Ogre; using namespace Ogre;
namespace namespace

@ -1,32 +1,17 @@
#ifndef GAME_MWWORLD_WORLDIMP_H #ifndef GAME_MWWORLD_WORLDIMP_H
#define GAME_MWWORLD_WORLDIMP_H #define GAME_MWWORLD_WORLDIMP_H
#include <vector>
#include <map>
#include <boost/filesystem.hpp>
#include <components/esm_store/store.hpp> #include <components/esm_store/store.hpp>
#include <components/settings/settings.hpp>
#include "../mwrender/debugging.hpp" #include "../mwrender/debugging.hpp"
#include "../mwrender/renderingmanager.hpp"
#include "refdata.hpp"
#include "ptr.hpp" #include "ptr.hpp"
#include "globals.hpp"
#include "scene.hpp" #include "scene.hpp"
#include "physicssystem.hpp" #include "physicssystem.hpp"
#include "cells.hpp" #include "cells.hpp"
#include "localscripts.hpp" #include "localscripts.hpp"
#include "timestamp.hpp" #include "timestamp.hpp"
#include <openengine/bullet/physic.hpp>
#include <openengine/ogre/fader.hpp>
#include <OgreTimer.h>
#include "../mwbase/world.hpp" #include "../mwbase/world.hpp"
namespace Ogre namespace Ogre

@ -24,8 +24,8 @@
#include "bsa_file.hpp" #include "bsa_file.hpp"
#include <stdexcept> #include <stdexcept>
#include <stdlib.h> #include <cstdlib>
#include <assert.h> #include <cassert>
#include <OgreDataStream.h> #include <OgreDataStream.h>

@ -13,8 +13,8 @@
#include "config.h" #include "config.h"
#endif #endif
#include <stdio.h> #include <cstdio>
#include <stdlib.h> #include <cstdlib>
#include <string.h> #include <string.h>
#ifndef FIX_UNUSED #ifndef FIX_UNUSED

@ -13,7 +13,7 @@
#include "config.h" #include "config.h"
#endif #endif
#include <stdio.h> /* for FILE */ #include <cstdio> /* for FILE */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {

@ -35,4 +35,5 @@ namespace Compiler
<< " " << message << std::endl; << " " << message << std::endl;
} }
StreamErrorHandler::StreamErrorHandler (std::ostream& ErrorStream) : mStream (ErrorStream) {}} StreamErrorHandler::StreamErrorHandler (std::ostream& ErrorStream) : mStream (ErrorStream) {}
}

@ -107,15 +107,15 @@ void ESMReader::open(Ogre::DataStreamPtr _esm, const std::string &name)
void ESMReader::open(const std::string &file) void ESMReader::open(const std::string &file)
{ {
std::ifstream *stream = new std::ifstream(file.c_str(), std::ios_base::binary); std::ifstream *stream = OGRE_NEW_T(std::ifstream, Ogre::MEMCATEGORY_GENERAL)(file.c_str(), std::ios_base::binary);
// Ogre will delete the stream for us // Ogre will delete the stream for us
open(Ogre::DataStreamPtr(new Ogre::FileStreamDataStream(stream)), file); open(Ogre::DataStreamPtr(new Ogre::FileStreamDataStream(stream)), file);
} }
void ESMReader::openRaw(const std::string &file) void ESMReader::openRaw(const std::string &file)
{ {
std::ifstream *stream = new std::ifstream(file.c_str(), std::ios_base::binary); std::ifstream *stream = OGRE_NEW_T(std::ifstream, Ogre::MEMCATEGORY_GENERAL)(file.c_str(), std::ios_base::binary);
// Ogre will delete the stream for us // Ogre will delete the stream for us
openRaw(Ogre::DataStreamPtr(new Ogre::FileStreamDataStream(stream)), file); openRaw(Ogre::DataStreamPtr(new Ogre::FileStreamDataStream(stream)), file);
} }

@ -1,15 +1,11 @@
#ifndef _ESM_READER_H #ifndef _ESM_READER_H
#define _ESM_READER_H #define _ESM_READER_H
#include <string.h>
#include <string>
#include <libs/platform/stdint.h> #include <libs/platform/stdint.h>
#include <libs/platform/string.h> #include <libs/platform/string.h>
#include <assert.h> #include <cassert>
#include <vector> #include <vector>
#include <sstream> #include <sstream>
#include <stdexcept>
#include <OgreDataStream.h> #include <OgreDataStream.h>

@ -2,8 +2,10 @@
namespace ESM namespace ESM
{ {
void Potion::load(ESMReader &esm) void Potion::load(ESMReader &esm, const std::string& id)
{ {
mId = id;
model = esm.getHNString("MODL"); model = esm.getHNString("MODL");
icon = esm.getHNOString("TEXT"); // not ITEX here for some reason icon = esm.getHNOString("TEXT"); // not ITEX here for some reason
script = esm.getHNOString("SCRI"); script = esm.getHNOString("SCRI");

@ -24,7 +24,9 @@ struct Potion
std::string name, model, icon, script; std::string name, model, icon, script;
EffectList effects; EffectList effects;
void load(ESMReader &esm); std::string mId;
void load(ESMReader &esm, const std::string& id);
}; };
} }
#endif #endif

@ -3,8 +3,10 @@
namespace ESM namespace ESM
{ {
void Ingredient::load(ESMReader &esm) void Ingredient::load(ESMReader &esm, const std::string& id)
{ {
mId = id;
model = esm.getHNString("MODL"); model = esm.getHNString("MODL");
name = esm.getHNString("FNAM"); name = esm.getHNString("FNAM");
esm.getHNT(data, "IRDT", 56); esm.getHNT(data, "IRDT", 56);

@ -24,7 +24,9 @@ struct Ingredient
IRDTstruct data; IRDTstruct data;
std::string name, model, icon, script; std::string name, model, icon, script;
void load(ESMReader &esm); std::string mId;
void load(ESMReader &esm, const std::string& id);
}; };
} }
#endif #endif

@ -7,7 +7,7 @@
#include <vector> #include <vector>
#include <algorithm> #include <algorithm>
#include <cctype> #include <cctype>
#include <assert.h> #include <cassert>
#include <stdexcept> #include <stdexcept>
#include <iterator> #include <iterator>
#include <boost/algorithm/string.hpp> #include <boost/algorithm/string.hpp>

@ -30,7 +30,7 @@ namespace ESMS
// Each individual list // Each individual list
RecListT<Activator> activators; RecListT<Activator> activators;
RecListT<Potion> potions; RecListWithIDT<Potion> potions;
RecListT<Apparatus> appas; RecListT<Apparatus> appas;
RecListT<Armor> armors; RecListT<Armor> armors;
RecListT<BodyPart> bodyParts; RecListT<BodyPart> bodyParts;
@ -47,7 +47,7 @@ namespace ESMS
RecListT<Enchantment> enchants; RecListT<Enchantment> enchants;
RecListT<Faction> factions; RecListT<Faction> factions;
RecListT<Global> globals; RecListT<Global> globals;
RecListT<Ingredient> ingreds; RecListWithIDT<Ingredient> ingreds;
RecListT<CreatureLevList> creatureLists; RecListT<CreatureLevList> creatureLists;
RecListT<ItemLevList> itemLists; RecListT<ItemLevList> itemLists;
RecListT<Light> lights; RecListT<Light> lights;

@ -1,8 +1,6 @@
#ifndef COMPONENTS_FILES_COLLECTION_HPP #ifndef COMPONENTS_FILES_COLLECTION_HPP
#define COMPONENTS_FILES_COLLECTION_HPP #define COMPONENTS_FILES_COLLECTION_HPP
#include <string>
#include <map>
#include <boost/filesystem.hpp> #include <boost/filesystem.hpp>
#include "multidircollection.hpp" #include "multidircollection.hpp"

@ -8,7 +8,6 @@
#endif #endif
#include <boost/program_options.hpp> #include <boost/program_options.hpp>
#include <boost/filesystem.hpp>
#include <components/files/fixedpath.hpp> #include <components/files/fixedpath.hpp>
#include <components/files/collections.hpp> #include <components/files/collections.hpp>

@ -2,8 +2,6 @@
using namespace std; using namespace std;
#include <assert.h>
#include "../slice_array.hpp" #include "../slice_array.hpp"
int main() int main()

@ -1,4 +1,4 @@
#include <assert.h> #include <cassert>
#include "../stringops.hpp" #include "../stringops.hpp"

@ -32,8 +32,7 @@
#include <stdexcept> #include <stdexcept>
#include <vector> #include <vector>
#include <string> #include <cassert>
#include <assert.h>
#include "record.hpp" #include "record.hpp"
#include "nif_types.hpp" #include "nif_types.hpp"

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save