mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-01 05:15:36 +00:00
Merge branch 'journal'
This commit is contained in:
commit
58cbdfd762
26 changed files with 699 additions and 26 deletions
|
@ -70,9 +70,17 @@ source_group(apps\\openmw\\mwgui FILES ${GAMEGUI_HEADER} ${GAMEGUI})
|
||||||
|
|
||||||
set(GAMEDIALOGUE_HEADER
|
set(GAMEDIALOGUE_HEADER
|
||||||
mwdialogue/dialoguemanager.hpp
|
mwdialogue/dialoguemanager.hpp
|
||||||
|
mwdialogue/journal.hpp
|
||||||
|
mwdialogue/journalentry.hpp
|
||||||
|
mwdialogue/quest.hpp
|
||||||
|
mwdialogue/topic.hpp
|
||||||
)
|
)
|
||||||
set(GAMEDIALOGUE
|
set(GAMEDIALOGUE
|
||||||
mwdialogue/dialoguemanager.cpp
|
mwdialogue/dialoguemanager.cpp
|
||||||
|
mwdialogue/journal.cpp
|
||||||
|
mwdialogue/journalentry.cpp
|
||||||
|
mwdialogue/quest.cpp
|
||||||
|
mwdialogue/topic.cpp
|
||||||
)
|
)
|
||||||
source_group(apps\\openmw\\mwdialogue FILES ${GAMEDIALOGUE_HEADER} ${GAMEDIALOGUE})
|
source_group(apps\\openmw\\mwdialogue FILES ${GAMEDIALOGUE_HEADER} ${GAMEDIALOGUE})
|
||||||
|
|
||||||
|
@ -91,6 +99,7 @@ set(GAMESCRIPT
|
||||||
mwscript/controlextensions.cpp
|
mwscript/controlextensions.cpp
|
||||||
mwscript/extensions.cpp
|
mwscript/extensions.cpp
|
||||||
mwscript/globalscripts.cpp
|
mwscript/globalscripts.cpp
|
||||||
|
mwscript/dialogueextensions.cpp
|
||||||
)
|
)
|
||||||
set(GAMESCRIPT_HEADER
|
set(GAMESCRIPT_HEADER
|
||||||
mwscript/locals.hpp
|
mwscript/locals.hpp
|
||||||
|
@ -109,6 +118,7 @@ set(GAMESCRIPT_HEADER
|
||||||
mwscript/extensions.hpp
|
mwscript/extensions.hpp
|
||||||
mwscript/globalscripts.hpp
|
mwscript/globalscripts.hpp
|
||||||
mwscript/ref.hpp
|
mwscript/ref.hpp
|
||||||
|
mwscript/dialogueextensions.hpp
|
||||||
)
|
)
|
||||||
source_group(apps\\openmw\\mwscript FILES ${GAMESCRIPT} ${GAMESCRIPT_HEADER})
|
source_group(apps\\openmw\\mwscript FILES ${GAMESCRIPT} ${GAMESCRIPT_HEADER})
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@
|
||||||
#include "mwclass/classes.hpp"
|
#include "mwclass/classes.hpp"
|
||||||
|
|
||||||
#include "mwdialogue/dialoguemanager.hpp"
|
#include "mwdialogue/dialoguemanager.hpp"
|
||||||
|
#include "mwdialogue/journal.hpp"
|
||||||
|
|
||||||
#include "mwmechanics/mechanicsmanager.hpp"
|
#include "mwmechanics/mechanicsmanager.hpp"
|
||||||
|
|
||||||
|
@ -229,6 +230,7 @@ OMW::Engine::~Engine()
|
||||||
delete mEnvironment.mGlobalScripts;
|
delete mEnvironment.mGlobalScripts;
|
||||||
delete mEnvironment.mMechanicsManager;
|
delete mEnvironment.mMechanicsManager;
|
||||||
delete mEnvironment.mDialogueManager;
|
delete mEnvironment.mDialogueManager;
|
||||||
|
delete mEnvironment.mJournal;
|
||||||
delete mScriptManager;
|
delete mScriptManager;
|
||||||
delete mScriptContext;
|
delete mScriptContext;
|
||||||
delete mPhysicEngine;
|
delete mPhysicEngine;
|
||||||
|
@ -395,6 +397,7 @@ void OMW::Engine::go()
|
||||||
mEnvironment.mMechanicsManager = new MWMechanics::MechanicsManager (mEnvironment);
|
mEnvironment.mMechanicsManager = new MWMechanics::MechanicsManager (mEnvironment);
|
||||||
|
|
||||||
// Create dialog system
|
// Create dialog system
|
||||||
|
mEnvironment.mJournal = new MWDialogue::Journal (mEnvironment);
|
||||||
mEnvironment.mDialogueManager = new MWDialogue::DialogueManager (mEnvironment);
|
mEnvironment.mDialogueManager = new MWDialogue::DialogueManager (mEnvironment);
|
||||||
|
|
||||||
// load cell
|
// load cell
|
||||||
|
|
95
apps/openmw/mwdialogue/journal.cpp
Normal file
95
apps/openmw/mwdialogue/journal.cpp
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
|
||||||
|
#include "journal.hpp"
|
||||||
|
|
||||||
|
#include "../mwworld/environment.hpp"
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
Quest& Journal::getQuest (const std::string& id)
|
||||||
|
{
|
||||||
|
TQuestContainer::iterator iter = mQuests.find (id);
|
||||||
|
|
||||||
|
if (iter==mQuests.end())
|
||||||
|
{
|
||||||
|
std::pair<TQuestContainer::iterator, bool> result =
|
||||||
|
mQuests.insert (std::make_pair (id, Quest (id)));
|
||||||
|
|
||||||
|
iter = result.first;
|
||||||
|
}
|
||||||
|
|
||||||
|
return iter->second;
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::Journal (MWWorld::Environment& environment)
|
||||||
|
: mEnvironment (environment)
|
||||||
|
{}
|
||||||
|
|
||||||
|
void Journal::addEntry (const std::string& id, int index)
|
||||||
|
{
|
||||||
|
StampedJournalEntry entry =
|
||||||
|
StampedJournalEntry::makeFromQuest (id, index, *mEnvironment.mWorld);
|
||||||
|
|
||||||
|
mJournal.push_back (entry);
|
||||||
|
|
||||||
|
Quest& quest = getQuest (id);
|
||||||
|
|
||||||
|
quest.addEntry (entry, *mEnvironment.mWorld); // we are doing slicing on purpose here
|
||||||
|
}
|
||||||
|
|
||||||
|
void Journal::setJournalIndex (const std::string& id, int index)
|
||||||
|
{
|
||||||
|
Quest& quest = getQuest (id);
|
||||||
|
|
||||||
|
quest.setIndex (index, *mEnvironment.mWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Journal::addTopic (const std::string& topicId, const std::string& infoId)
|
||||||
|
{
|
||||||
|
TTopicContainer::iterator iter = mTopics.find (topicId);
|
||||||
|
|
||||||
|
if (iter==mTopics.end())
|
||||||
|
{
|
||||||
|
std::pair<TTopicContainer::iterator, bool> result
|
||||||
|
= mTopics.insert (std::make_pair (topicId, Topic (topicId)));
|
||||||
|
|
||||||
|
iter = result.first;
|
||||||
|
}
|
||||||
|
|
||||||
|
iter->second.addEntry (JournalEntry (topicId, infoId), *mEnvironment.mWorld);
|
||||||
|
}
|
||||||
|
|
||||||
|
int Journal::getJournalIndex (const std::string& id) const
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TEntryIter Journal::begin() const
|
||||||
|
{
|
||||||
|
return mJournal.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TEntryIter Journal::end() const
|
||||||
|
{
|
||||||
|
return mJournal.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TQuestIter Journal::questBegin() const
|
||||||
|
{
|
||||||
|
return mQuests.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TQuestIter Journal::questEnd() const
|
||||||
|
{
|
||||||
|
return mQuests.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TTopicIter Journal::topicBegin() const
|
||||||
|
{
|
||||||
|
return mTopics.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
Journal::TTopicIter Journal::topicEnd() const
|
||||||
|
{
|
||||||
|
return mTopics.end();
|
||||||
|
}
|
||||||
|
}
|
78
apps/openmw/mwdialogue/journal.hpp
Normal file
78
apps/openmw/mwdialogue/journal.hpp
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
#ifndef GAME_MMDIALOG_JOURNAL_H
|
||||||
|
#define GAME_MWDIALOG_JOURNAL_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <deque>
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#include "journalentry.hpp"
|
||||||
|
#include "quest.hpp"
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
struct Environment;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
/// \brief The player's journal
|
||||||
|
class Journal
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef std::deque<StampedJournalEntry> TEntryContainer;
|
||||||
|
typedef TEntryContainer::const_iterator TEntryIter;
|
||||||
|
typedef std::map<std::string, Quest> TQuestContainer; // topc, quest
|
||||||
|
typedef TQuestContainer::const_iterator TQuestIter;
|
||||||
|
typedef std::map<std::string, Topic> TTopicContainer; // topic-id, topic-content
|
||||||
|
typedef TTopicContainer::const_iterator TTopicIter;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
MWWorld::Environment& mEnvironment;
|
||||||
|
TEntryContainer mJournal;
|
||||||
|
TQuestContainer mQuests;
|
||||||
|
TTopicContainer mTopics;
|
||||||
|
|
||||||
|
Quest& getQuest (const std::string& id);
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Journal (MWWorld::Environment& environment);
|
||||||
|
|
||||||
|
void addEntry (const std::string& id, int index);
|
||||||
|
///< Add a journal entry.
|
||||||
|
|
||||||
|
void setJournalIndex (const std::string& id, int index);
|
||||||
|
///< Set the journal index without adding an entry.
|
||||||
|
|
||||||
|
int getJournalIndex (const std::string& id) const;
|
||||||
|
///< Get the journal index.
|
||||||
|
|
||||||
|
void addTopic (const std::string& topicId, const std::string& infoId);
|
||||||
|
|
||||||
|
TEntryIter begin() const;
|
||||||
|
///< Iterator pointing to the begin of the main journal.
|
||||||
|
///
|
||||||
|
/// \note Iterators to main journal entries will never become invalid.
|
||||||
|
|
||||||
|
TEntryIter end() const;
|
||||||
|
///< Iterator pointing past the end of the main journal.
|
||||||
|
|
||||||
|
TQuestIter questBegin() const;
|
||||||
|
///< Iterator pointing to the first quest (sorted by topic ID)
|
||||||
|
|
||||||
|
TQuestIter questEnd() const;
|
||||||
|
///< Iterator pointing past the last quest.
|
||||||
|
|
||||||
|
TTopicIter topicBegin() const;
|
||||||
|
///< Iterator pointing to the first topic (sorted by topic ID)
|
||||||
|
///
|
||||||
|
/// \note The topic ID is identical with the user-visible topic string.
|
||||||
|
|
||||||
|
TTopicIter topicEnd() const;
|
||||||
|
///< Iterator pointing past the last topic.
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
69
apps/openmw/mwdialogue/journalentry.cpp
Normal file
69
apps/openmw/mwdialogue/journalentry.cpp
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
|
||||||
|
#include "journalentry.hpp"
|
||||||
|
|
||||||
|
#include <stdexcept>
|
||||||
|
|
||||||
|
#include <components/esm_store/store.hpp>
|
||||||
|
|
||||||
|
#include "../mwworld/world.hpp"
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
JournalEntry::JournalEntry() {}
|
||||||
|
|
||||||
|
JournalEntry::JournalEntry (const std::string& topic, const std::string& infoId)
|
||||||
|
: mTopic (topic), mInfoId (infoId)
|
||||||
|
{}
|
||||||
|
|
||||||
|
std::string JournalEntry::getText (const ESMS::ESMStore& store) const
|
||||||
|
{
|
||||||
|
const ESM::Dialogue *dialogue = store.dialogs.find (mTopic);
|
||||||
|
|
||||||
|
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||||
|
iter!=dialogue->mInfo.end(); ++iter)
|
||||||
|
if (iter->id==mInfoId)
|
||||||
|
return iter->response;
|
||||||
|
|
||||||
|
throw std::runtime_error ("unknown info ID " + mInfoId + " for topic " + mTopic);
|
||||||
|
}
|
||||||
|
|
||||||
|
JournalEntry JournalEntry::makeFromQuest (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
return JournalEntry (topic, idFromIndex (topic, index, world));
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string JournalEntry::idFromIndex (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
const ESM::Dialogue *dialogue = world.getStore().dialogs.find (topic);
|
||||||
|
|
||||||
|
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||||
|
iter!=dialogue->mInfo.end(); ++iter)
|
||||||
|
if (iter->data.disposition==index) /// \todo cleanup info structure
|
||||||
|
{
|
||||||
|
iter->id;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::runtime_error ("unknown journal index for topic " + topic);
|
||||||
|
}
|
||||||
|
|
||||||
|
StampedJournalEntry::StampedJournalEntry()
|
||||||
|
: mDay (0), mMonth (0), mDayOfMonth (0)
|
||||||
|
{}
|
||||||
|
|
||||||
|
StampedJournalEntry::StampedJournalEntry (const std::string& topic, const std::string& infoId,
|
||||||
|
int day, int month, int dayOfMonth)
|
||||||
|
: JournalEntry (topic, infoId), mDay (day), mMonth (month), mDayOfMonth (dayOfMonth)
|
||||||
|
{}
|
||||||
|
|
||||||
|
StampedJournalEntry StampedJournalEntry::makeFromQuest (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
int day = world.getGlobalVariable ("dayspassed").mLong;
|
||||||
|
int month = world.getGlobalVariable ("day").mLong;
|
||||||
|
int dayOfMonth = world.getGlobalVariable ("month").mLong;
|
||||||
|
|
||||||
|
return StampedJournalEntry (topic, idFromIndex (topic, index, world), day, month, dayOfMonth);
|
||||||
|
}
|
||||||
|
}
|
54
apps/openmw/mwdialogue/journalentry.hpp
Normal file
54
apps/openmw/mwdialogue/journalentry.hpp
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
#ifndef GAME_MMDIALOGUE_JOURNALENTRY_H
|
||||||
|
#define GAME_MMDIALOGUE_JOURNALENTRY_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace ESMS
|
||||||
|
{
|
||||||
|
struct ESMStore;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
class World;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
/// \brief A quest or dialogue entry
|
||||||
|
struct JournalEntry
|
||||||
|
{
|
||||||
|
std::string mTopic;
|
||||||
|
std::string mInfoId;
|
||||||
|
|
||||||
|
JournalEntry();
|
||||||
|
|
||||||
|
JournalEntry (const std::string& topic, const std::string& infoId);
|
||||||
|
|
||||||
|
std::string getText (const ESMS::ESMStore& store) const;
|
||||||
|
|
||||||
|
static JournalEntry makeFromQuest (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world);
|
||||||
|
|
||||||
|
static std::string idFromIndex (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world);
|
||||||
|
};
|
||||||
|
|
||||||
|
/// \biref A quest entry with a timestamp.
|
||||||
|
struct StampedJournalEntry : public JournalEntry
|
||||||
|
{
|
||||||
|
int mDay;
|
||||||
|
int mMonth;
|
||||||
|
int mDayOfMonth;
|
||||||
|
|
||||||
|
StampedJournalEntry();
|
||||||
|
|
||||||
|
StampedJournalEntry (const std::string& topic, const std::string& infoId,
|
||||||
|
int day, int month, int dayOfMonth);
|
||||||
|
|
||||||
|
static StampedJournalEntry makeFromQuest (const std::string& topic, int index,
|
||||||
|
const MWWorld::World& world);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
86
apps/openmw/mwdialogue/quest.cpp
Normal file
86
apps/openmw/mwdialogue/quest.cpp
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
|
||||||
|
#include "quest.hpp"
|
||||||
|
|
||||||
|
#include <components/esm_store/store.hpp>
|
||||||
|
|
||||||
|
#include "../mwworld/world.hpp"
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
Quest::Quest()
|
||||||
|
: Topic(), mIndex (0), mFinished (false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
Quest::Quest (const std::string& topic)
|
||||||
|
: Topic (topic), mIndex (0), mFinished (false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
const std::string Quest::getName (const MWWorld::World& world) const
|
||||||
|
{
|
||||||
|
const ESM::Dialogue *dialogue = world.getStore().dialogs.find (mTopic);
|
||||||
|
|
||||||
|
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||||
|
iter!=dialogue->mInfo.end(); ++iter)
|
||||||
|
if (iter->questStatus==ESM::DialInfo::QS_Name)
|
||||||
|
return iter->response;
|
||||||
|
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
int Quest::getIndex() const
|
||||||
|
{
|
||||||
|
return mIndex;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Quest::setIndex (int index, const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
const ESM::Dialogue *dialogue = world.getStore().dialogs.find (mTopic);
|
||||||
|
|
||||||
|
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||||
|
iter!=dialogue->mInfo.end(); ++iter)
|
||||||
|
if (iter->data.disposition==index && iter->questStatus!=ESM::DialInfo::QS_Name)
|
||||||
|
{
|
||||||
|
mIndex = index;
|
||||||
|
|
||||||
|
if (iter->questStatus==ESM::DialInfo::QS_Finished)
|
||||||
|
mFinished = true;
|
||||||
|
else if (iter->questStatus==ESM::DialInfo::QS_Restart)
|
||||||
|
mFinished = false;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
throw std::runtime_error ("unknown journal index for topic " + mTopic);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Quest::isFinished() const
|
||||||
|
{
|
||||||
|
return mFinished;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Quest::addEntry (const JournalEntry& entry, const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
int index = -1;
|
||||||
|
|
||||||
|
const ESM::Dialogue *dialogue = world.getStore().dialogs.find (entry.mTopic);
|
||||||
|
|
||||||
|
for (std::vector<ESM::DialInfo>::const_iterator iter (dialogue->mInfo.begin());
|
||||||
|
iter!=dialogue->mInfo.end(); ++iter)
|
||||||
|
if (iter->id==entry.mInfoId)
|
||||||
|
{
|
||||||
|
index = iter->data.disposition; /// \todo cleanup info structure
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index==-1)
|
||||||
|
throw std::runtime_error ("unknown journal entry for topic " + mTopic);
|
||||||
|
|
||||||
|
setIndex (index, world);
|
||||||
|
|
||||||
|
for (TEntryIter iter (mEntries.begin()); iter!=mEntries.end(); ++iter)
|
||||||
|
if (*iter==entry.mInfoId)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mEntries.push_back (entry.mInfoId);
|
||||||
|
}
|
||||||
|
}
|
37
apps/openmw/mwdialogue/quest.hpp
Normal file
37
apps/openmw/mwdialogue/quest.hpp
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#ifndef GAME_MMDIALOG_QUEST_H
|
||||||
|
#define GAME_MWDIALOG_QUEST_H
|
||||||
|
|
||||||
|
#include "topic.hpp"
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
/// \brief A quest in progress or a compelted quest
|
||||||
|
class Quest : public Topic
|
||||||
|
{
|
||||||
|
int mIndex;
|
||||||
|
bool mFinished;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Quest();
|
||||||
|
|
||||||
|
Quest (const std::string& topic);
|
||||||
|
|
||||||
|
const std::string getName (const MWWorld::World& world) const;
|
||||||
|
///< May be an empty string
|
||||||
|
|
||||||
|
int getIndex() const;
|
||||||
|
|
||||||
|
void setIndex (int index, const MWWorld::World& world);
|
||||||
|
///< Calling this function with a non-existant index while throw an exception.
|
||||||
|
|
||||||
|
bool isFinished() const;
|
||||||
|
|
||||||
|
virtual void addEntry (const JournalEntry& entry, const MWWorld::World& world);
|
||||||
|
///< Add entry and adjust index accordingly.
|
||||||
|
///
|
||||||
|
/// \note Redundant entries are ignored, but the index is still adjusted.
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
46
apps/openmw/mwdialogue/topic.cpp
Normal file
46
apps/openmw/mwdialogue/topic.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
|
||||||
|
#include "topic.hpp"
|
||||||
|
|
||||||
|
#include <components/esm_store/store.hpp>
|
||||||
|
|
||||||
|
#include "../mwworld/world.hpp"
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
Topic::Topic()
|
||||||
|
{}
|
||||||
|
|
||||||
|
Topic::Topic (const std::string& topic)
|
||||||
|
: mTopic (topic)
|
||||||
|
{}
|
||||||
|
|
||||||
|
Topic::~Topic()
|
||||||
|
{}
|
||||||
|
|
||||||
|
void Topic::addEntry (const JournalEntry& entry, const MWWorld::World& world)
|
||||||
|
{
|
||||||
|
if (entry.mTopic!=mTopic)
|
||||||
|
throw std::runtime_error ("topic does not match: " + mTopic);
|
||||||
|
|
||||||
|
for (TEntryIter iter = begin(); iter!=end(); ++iter)
|
||||||
|
if (*iter==entry.mInfoId)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mEntries.push_back (entry.mInfoId);
|
||||||
|
}
|
||||||
|
|
||||||
|
Topic::TEntryIter Topic::begin()
|
||||||
|
{
|
||||||
|
return mEntries.begin();
|
||||||
|
}
|
||||||
|
|
||||||
|
Topic::TEntryIter Topic::end()
|
||||||
|
{
|
||||||
|
return mEntries.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
JournalEntry Topic::getEntry (const std::string& infoId)
|
||||||
|
{
|
||||||
|
return JournalEntry (mTopic, infoId);
|
||||||
|
}
|
||||||
|
}
|
52
apps/openmw/mwdialogue/topic.hpp
Normal file
52
apps/openmw/mwdialogue/topic.hpp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
#ifndef GAME_MMDIALOG_TOPIC_H
|
||||||
|
#define GAME_MWDIALOG_TOPIC_H
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "journalentry.hpp"
|
||||||
|
|
||||||
|
namespace MWWorld
|
||||||
|
{
|
||||||
|
class World;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWDialogue
|
||||||
|
{
|
||||||
|
/// \brief Collection of seen responses for a topic
|
||||||
|
class Topic
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
typedef std::vector<std::string> TEntryContainer;
|
||||||
|
typedef TEntryContainer::const_iterator TEntryIter;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
std::string mTopic;
|
||||||
|
TEntryContainer mEntries; // info-IDs
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
Topic();
|
||||||
|
|
||||||
|
Topic (const std::string& topic);
|
||||||
|
|
||||||
|
virtual ~Topic();
|
||||||
|
|
||||||
|
virtual void addEntry (const JournalEntry& entry, const MWWorld::World& world);
|
||||||
|
///< Add entry
|
||||||
|
///
|
||||||
|
/// \note Redundant entries are ignored.
|
||||||
|
|
||||||
|
TEntryIter begin();
|
||||||
|
///< Iterator pointing to the begin of the journal for this topic.
|
||||||
|
|
||||||
|
TEntryIter end();
|
||||||
|
///< Iterator pointing past the end of the journal for this topic.
|
||||||
|
|
||||||
|
JournalEntry getEntry (const std::string& infoId);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -119,7 +119,7 @@ void BirthDialog::updateBirths()
|
||||||
{
|
{
|
||||||
birthList->removeAllItems();
|
birthList->removeAllItems();
|
||||||
|
|
||||||
ESMS::ESMStore &store = mWindowManager.getStore();
|
const ESMS::ESMStore &store = mWindowManager.getStore();
|
||||||
|
|
||||||
ESMS::RecListT<ESM::BirthSign>::MapType::const_iterator it = store.birthSigns.list.begin();
|
ESMS::RecListT<ESM::BirthSign>::MapType::const_iterator it = store.birthSigns.list.begin();
|
||||||
ESMS::RecListT<ESM::BirthSign>::MapType::const_iterator end = store.birthSigns.list.end();
|
ESMS::RecListT<ESM::BirthSign>::MapType::const_iterator end = store.birthSigns.list.end();
|
||||||
|
@ -149,7 +149,7 @@ void BirthDialog::updateSpells()
|
||||||
const int lineHeight = 18;
|
const int lineHeight = 18;
|
||||||
MyGUI::IntCoord coord(0, 0, spellArea->getWidth(), 18);
|
MyGUI::IntCoord coord(0, 0, spellArea->getWidth(), 18);
|
||||||
|
|
||||||
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(currentBirthId);
|
||||||
|
|
||||||
std::string texturePath = std::string("textures\\") + birth->texture;
|
std::string texturePath = std::string("textures\\") + birth->texture;
|
||||||
|
|
|
@ -50,7 +50,7 @@ void GenerateClassResultDialog::setClassId(const std::string &classId)
|
||||||
{
|
{
|
||||||
currentClassId = classId;
|
currentClassId = classId;
|
||||||
classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds");
|
classImage->setImageTexture(std::string("textures\\levelup\\") + currentClassId + ".dds");
|
||||||
ESMS::ESMStore &store = mWindowManager.getStore();
|
const ESMS::ESMStore &store = mWindowManager.getStore();
|
||||||
className->setCaption(store.classes.find(currentClassId)->name);
|
className->setCaption(store.classes.find(currentClassId)->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -196,7 +196,7 @@ void PickClassDialog::updateClasses()
|
||||||
{
|
{
|
||||||
classList->removeAllItems();
|
classList->removeAllItems();
|
||||||
|
|
||||||
ESMS::ESMStore &store = mWindowManager.getStore();
|
const ESMS::ESMStore &store = mWindowManager.getStore();
|
||||||
|
|
||||||
ESMS::RecListT<ESM::Class>::MapType::const_iterator it = store.classes.list.begin();
|
ESMS::RecListT<ESM::Class>::MapType::const_iterator it = store.classes.list.begin();
|
||||||
ESMS::RecListT<ESM::Class>::MapType::const_iterator end = store.classes.list.end();
|
ESMS::RecListT<ESM::Class>::MapType::const_iterator end = store.classes.list.end();
|
||||||
|
@ -220,7 +220,7 @@ void PickClassDialog::updateStats()
|
||||||
{
|
{
|
||||||
if (currentClassId.empty())
|
if (currentClassId.empty())
|
||||||
return;
|
return;
|
||||||
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(currentClassId);
|
||||||
if (!klass)
|
if (!klass)
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -212,7 +212,7 @@ void RaceDialog::updateRaces()
|
||||||
{
|
{
|
||||||
raceList->removeAllItems();
|
raceList->removeAllItems();
|
||||||
|
|
||||||
ESMS::ESMStore &store = mWindowManager.getStore();
|
const ESMS::ESMStore &store = mWindowManager.getStore();
|
||||||
|
|
||||||
ESMS::RecListT<ESM::Race>::MapType::const_iterator it = store.races.list.begin();
|
ESMS::RecListT<ESM::Race>::MapType::const_iterator it = store.races.list.begin();
|
||||||
ESMS::RecListT<ESM::Race>::MapType::const_iterator end = store.races.list.end();
|
ESMS::RecListT<ESM::Race>::MapType::const_iterator end = store.races.list.end();
|
||||||
|
@ -246,7 +246,7 @@ void RaceDialog::updateSkills()
|
||||||
const int lineHeight = 18;
|
const int lineHeight = 18;
|
||||||
MyGUI::IntCoord coord1(0, 0, skillList->getWidth(), 18);
|
MyGUI::IntCoord coord1(0, 0, skillList->getWidth(), 18);
|
||||||
|
|
||||||
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(currentRaceId);
|
||||||
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)
|
||||||
|
@ -282,7 +282,7 @@ void RaceDialog::updateSpellPowers()
|
||||||
const int lineHeight = 18;
|
const int lineHeight = 18;
|
||||||
MyGUI::IntCoord coord(0, 0, spellPowerList->getWidth(), 18);
|
MyGUI::IntCoord coord(0, 0, spellPowerList->getWidth(), 18);
|
||||||
|
|
||||||
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(currentRaceId);
|
||||||
|
|
||||||
std::vector<std::string>::const_iterator it = race->powers.list.begin();
|
std::vector<std::string>::const_iterator it = race->powers.list.begin();
|
||||||
|
|
|
@ -323,7 +323,7 @@ void StatsWindow::updateSkillArea()
|
||||||
if (!miscSkills.empty())
|
if (!miscSkills.empty())
|
||||||
addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2);
|
addSkills(miscSkills, "sSkillClassMisc", "Misc Skills", coord1, coord2);
|
||||||
|
|
||||||
ESMS::ESMStore &store = mWindowManager.getStore();
|
const ESMS::ESMStore &store = mWindowManager.getStore();
|
||||||
|
|
||||||
if (!factions.empty())
|
if (!factions.empty())
|
||||||
{
|
{
|
||||||
|
|
|
@ -278,7 +278,7 @@ void MWSpell::setSpellId(const std::string &spellId)
|
||||||
|
|
||||||
void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord)
|
void MWSpell::createEffectWidgets(std::vector<MyGUI::WidgetPtr> &effects, MyGUI::WidgetPtr creator, MyGUI::IntCoord &coord)
|
||||||
{
|
{
|
||||||
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(id);
|
||||||
MYGUI_ASSERT(spell, "spell with id '" << id << "' not found");
|
MYGUI_ASSERT(spell, "spell with id '" << id << "' not found");
|
||||||
|
|
||||||
|
@ -298,7 +298,7 @@ void MWSpell::updateWidgets()
|
||||||
{
|
{
|
||||||
if (spellNameWidget && mWindowManager)
|
if (spellNameWidget && mWindowManager)
|
||||||
{
|
{
|
||||||
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(id);
|
||||||
if (spell)
|
if (spell)
|
||||||
spellNameWidget->setCaption(spell->name);
|
spellNameWidget->setCaption(spell->name);
|
||||||
|
@ -363,7 +363,7 @@ void MWSpellEffect::updateWidgets()
|
||||||
if (!mWindowManager)
|
if (!mWindowManager)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ESMS::ESMStore &store = mWindowManager->getStore();
|
const ESMS::ESMStore &store = mWindowManager->getStore();
|
||||||
const ESM::MagicEffect *magicEffect = store.magicEffects.search(effect.effectID);
|
const ESM::MagicEffect *magicEffect = store.magicEffects.search(effect.effectID);
|
||||||
if (textWidget)
|
if (textWidget)
|
||||||
{
|
{
|
||||||
|
|
|
@ -940,7 +940,7 @@ void WindowManager::onReviewActivateDialog(int parDialog)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
ESMS::ESMStore& WindowManager::getStore()
|
const ESMS::ESMStore& WindowManager::getStore() const
|
||||||
{
|
{
|
||||||
return environment.mWorld->getStore();
|
return environment.mWorld->getStore();
|
||||||
}
|
}
|
||||||
|
|
|
@ -257,7 +257,7 @@ namespace MWGui
|
||||||
*/
|
*/
|
||||||
const std::string &getGameSettingString(const std::string &id, const std::string &default_);
|
const std::string &getGameSettingString(const std::string &id, const std::string &default_);
|
||||||
|
|
||||||
ESMS::ESMStore& getStore();
|
const ESMS::ESMStore& getStore() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
94
apps/openmw/mwscript/dialogueextensions.cpp
Normal file
94
apps/openmw/mwscript/dialogueextensions.cpp
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
|
||||||
|
#include "dialogueextensions.hpp"
|
||||||
|
|
||||||
|
#include <components/compiler/extensions.hpp>
|
||||||
|
|
||||||
|
#include <components/interpreter/interpreter.hpp>
|
||||||
|
#include <components/interpreter/runtime.hpp>
|
||||||
|
#include <components/interpreter/opcodes.hpp>
|
||||||
|
|
||||||
|
#include "../mwdialogue/journal.hpp"
|
||||||
|
|
||||||
|
#include "interpretercontext.hpp"
|
||||||
|
|
||||||
|
namespace MWScript
|
||||||
|
{
|
||||||
|
namespace Dialogue
|
||||||
|
{
|
||||||
|
class OpJournal : public Interpreter::Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Interpreter::Runtime& runtime)
|
||||||
|
{
|
||||||
|
MWScript::InterpreterContext& context
|
||||||
|
= static_cast<MWScript::InterpreterContext&> (runtime.getContext());
|
||||||
|
|
||||||
|
std::string quest = runtime.getStringLiteral (runtime[0].mInteger);
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
Interpreter::Type_Integer index = runtime[0].mInteger;
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
context.getEnvironment().mJournal->addEntry (quest, index);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpSetJournalIndex : public Interpreter::Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Interpreter::Runtime& runtime)
|
||||||
|
{
|
||||||
|
MWScript::InterpreterContext& context
|
||||||
|
= static_cast<MWScript::InterpreterContext&> (runtime.getContext());
|
||||||
|
|
||||||
|
std::string quest = runtime.getStringLiteral (runtime[0].mInteger);
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
Interpreter::Type_Integer index = runtime[0].mInteger;
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
context.getEnvironment().mJournal->setJournalIndex (quest, index);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class OpGetJournalIndex : public Interpreter::Opcode0
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void execute (Interpreter::Runtime& runtime)
|
||||||
|
{
|
||||||
|
MWScript::InterpreterContext& context
|
||||||
|
= static_cast<MWScript::InterpreterContext&> (runtime.getContext());
|
||||||
|
|
||||||
|
std::string quest = runtime.getStringLiteral (runtime[0].mInteger);
|
||||||
|
runtime.pop();
|
||||||
|
|
||||||
|
int index = context.getEnvironment().mJournal->getJournalIndex (quest);
|
||||||
|
|
||||||
|
runtime.push (index);
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const int opcodeJournal = 0x2000133;
|
||||||
|
const int opcodeSetJournalIndex = 0x2000134;
|
||||||
|
const int opcodeGetJournalIndex = 0x2000135;
|
||||||
|
|
||||||
|
void registerExtensions (Compiler::Extensions& extensions)
|
||||||
|
{
|
||||||
|
extensions.registerInstruction ("journal", "cl", opcodeJournal);
|
||||||
|
extensions.registerInstruction ("setjournalindex", "cl", opcodeSetJournalIndex);
|
||||||
|
extensions.registerFunction ("getjournalindex", 'l', "c", opcodeGetJournalIndex);
|
||||||
|
}
|
||||||
|
|
||||||
|
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||||
|
{
|
||||||
|
interpreter.installSegment5 (opcodeJournal, new OpJournal);
|
||||||
|
interpreter.installSegment5 (opcodeSetJournalIndex, new OpSetJournalIndex);
|
||||||
|
interpreter.installSegment5 (opcodeGetJournalIndex, new OpGetJournalIndex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
25
apps/openmw/mwscript/dialogueextensions.hpp
Normal file
25
apps/openmw/mwscript/dialogueextensions.hpp
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#ifndef GAME_SCRIPT_DIALOGUEEXTENSIONS_H
|
||||||
|
#define GAME_SCRIPT_DIALOGUEEXTENSIONS_H
|
||||||
|
|
||||||
|
namespace Compiler
|
||||||
|
{
|
||||||
|
class Extensions;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Interpreter
|
||||||
|
{
|
||||||
|
class Interpreter;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace MWScript
|
||||||
|
{
|
||||||
|
/// \brief Dialogue/Journal-related script functionality
|
||||||
|
namespace Dialogue
|
||||||
|
{
|
||||||
|
void registerExtensions (Compiler::Extensions& extensions);
|
||||||
|
|
||||||
|
void installOpcodes (Interpreter::Interpreter& interpreter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
|
@ -104,4 +104,7 @@ op 0x2000115-0x200012f: ModSKill, explicit reference
|
||||||
op 0x2000130: ToggleCollision
|
op 0x2000130: ToggleCollision
|
||||||
op 0x2000131: GetInterior
|
op 0x2000131: GetInterior
|
||||||
op 0x2000132: ToggleCollsionDebug
|
op 0x2000132: ToggleCollsionDebug
|
||||||
opcodes 0x2000133-0x3ffffff unused
|
op 0x2000133: Journal
|
||||||
|
op 0x2000134: SetJournalIndex
|
||||||
|
op 0x2000135: GetJournalIndex
|
||||||
|
opcodes 0x2000136-0x3ffffff unused
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "containerextensions.hpp"
|
#include "containerextensions.hpp"
|
||||||
#include "aiextensions.hpp"
|
#include "aiextensions.hpp"
|
||||||
#include "controlextensions.hpp"
|
#include "controlextensions.hpp"
|
||||||
|
#include "dialogueextensions.hpp"
|
||||||
|
|
||||||
namespace MWScript
|
namespace MWScript
|
||||||
{
|
{
|
||||||
|
@ -27,6 +28,7 @@ namespace MWScript
|
||||||
Container::registerExtensions (extensions);
|
Container::registerExtensions (extensions);
|
||||||
Ai::registerExtensions (extensions);
|
Ai::registerExtensions (extensions);
|
||||||
Control::registerExtensions (extensions);
|
Control::registerExtensions (extensions);
|
||||||
|
Dialogue::registerExtensions (extensions);
|
||||||
}
|
}
|
||||||
|
|
||||||
void installOpcodes (Interpreter::Interpreter& interpreter)
|
void installOpcodes (Interpreter::Interpreter& interpreter)
|
||||||
|
@ -41,5 +43,6 @@ namespace MWScript
|
||||||
Container::installOpcodes (interpreter);
|
Container::installOpcodes (interpreter);
|
||||||
Ai::installOpcodes (interpreter);
|
Ai::installOpcodes (interpreter);
|
||||||
Control::installOpcodes (interpreter);
|
Control::installOpcodes (interpreter);
|
||||||
|
Dialogue::installOpcodes (interpreter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -260,6 +260,11 @@ namespace MWScript
|
||||||
mEnvironment.mWorld->disable (ref);
|
mEnvironment.mWorld->disable (ref);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MWWorld::Environment& InterpreterContext::getEnvironment()
|
||||||
|
{
|
||||||
|
return mEnvironment;
|
||||||
|
}
|
||||||
|
|
||||||
MWGui::WindowManager& InterpreterContext::getWindowManager()
|
MWGui::WindowManager& InterpreterContext::getWindowManager()
|
||||||
{
|
{
|
||||||
return *mEnvironment.mWindowManager;
|
return *mEnvironment.mWindowManager;
|
||||||
|
|
|
@ -106,6 +106,10 @@ namespace MWScript
|
||||||
|
|
||||||
virtual void disable (const std::string& id = "");
|
virtual void disable (const std::string& id = "");
|
||||||
|
|
||||||
|
MWWorld::Environment& getEnvironment();
|
||||||
|
|
||||||
|
/// \todo remove the following functions (extentions should use getEnvironment instead)
|
||||||
|
|
||||||
MWWorld::World& getWorld();
|
MWWorld::World& getWorld();
|
||||||
|
|
||||||
MWSound::SoundManager& getSoundManager();
|
MWSound::SoundManager& getSoundManager();
|
||||||
|
|
|
@ -24,6 +24,7 @@ namespace MWMechanics
|
||||||
namespace MWDialogue
|
namespace MWDialogue
|
||||||
{
|
{
|
||||||
class DialogueManager;
|
class DialogueManager;
|
||||||
|
class Journal;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace MWInput
|
namespace MWInput
|
||||||
|
@ -41,7 +42,7 @@ namespace MWWorld
|
||||||
public:
|
public:
|
||||||
Environment()
|
Environment()
|
||||||
: mWorld (0), mSoundManager (0), mGlobalScripts (0), mWindowManager (0),
|
: mWorld (0), mSoundManager (0), mGlobalScripts (0), mWindowManager (0),
|
||||||
mMechanicsManager (0), mDialogueManager (0), mFrameDuration (0),
|
mMechanicsManager (0), mDialogueManager (0), mJournal (0), mFrameDuration (0),
|
||||||
mInputManager (0)
|
mInputManager (0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
@ -51,6 +52,7 @@ namespace MWWorld
|
||||||
MWGui::WindowManager *mWindowManager;
|
MWGui::WindowManager *mWindowManager;
|
||||||
MWMechanics::MechanicsManager *mMechanicsManager;
|
MWMechanics::MechanicsManager *mMechanicsManager;
|
||||||
MWDialogue::DialogueManager *mDialogueManager;
|
MWDialogue::DialogueManager *mDialogueManager;
|
||||||
|
MWDialogue::Journal *mJournal;
|
||||||
float mFrameDuration;
|
float mFrameDuration;
|
||||||
|
|
||||||
// For setting GUI mode
|
// For setting GUI mode
|
||||||
|
|
|
@ -460,7 +460,7 @@ namespace MWWorld
|
||||||
return *mPlayer;
|
return *mPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ESMS::ESMStore& World::getStore()
|
const ESMS::ESMStore& World::getStore() const
|
||||||
{
|
{
|
||||||
return mStore;
|
return mStore;
|
||||||
}
|
}
|
||||||
|
@ -480,6 +480,11 @@ namespace MWWorld
|
||||||
return (*mGlobalVariables)[name];
|
return (*mGlobalVariables)[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Globals::Data World::getGlobalVariable (const std::string& name) const
|
||||||
|
{
|
||||||
|
return (*mGlobalVariables)[name];
|
||||||
|
}
|
||||||
|
|
||||||
char World::getGlobalVariableType (const std::string& name) const
|
char World::getGlobalVariableType (const std::string& name) const
|
||||||
{
|
{
|
||||||
return mGlobalVariables->getType (name);
|
return mGlobalVariables->getType (name);
|
||||||
|
|
|
@ -115,7 +115,7 @@ namespace MWWorld
|
||||||
|
|
||||||
MWWorld::Player& getPlayer();
|
MWWorld::Player& getPlayer();
|
||||||
|
|
||||||
ESMS::ESMStore& getStore();
|
const ESMS::ESMStore& getStore() const;
|
||||||
|
|
||||||
const ScriptList& getLocalScripts() const;
|
const ScriptList& getLocalScripts() const;
|
||||||
///< Names and local variable state of all local scripts in active cells.
|
///< Names and local variable state of all local scripts in active cells.
|
||||||
|
@ -125,6 +125,8 @@ namespace MWWorld
|
||||||
|
|
||||||
Globals::Data& getGlobalVariable (const std::string& name);
|
Globals::Data& getGlobalVariable (const std::string& name);
|
||||||
|
|
||||||
|
Globals::Data getGlobalVariable (const std::string& name) const;
|
||||||
|
|
||||||
char getGlobalVariableType (const std::string& name) const;
|
char getGlobalVariableType (const std::string& name) const;
|
||||||
///< Return ' ', if there is no global variable with this name.
|
///< Return ' ', if there is no global variable with this name.
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue