1
0
mirror of https://gitlab.com/OpenMW/openmw.git synced 2025-01-30 12:32:36 +00:00
OpenMW/apps/openmw/mwgui/charactercreation.hpp

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

139 lines
4.3 KiB
C++
Raw Normal View History

2012-01-30 19:27:49 +02:00
#ifndef CHARACTER_CREATION_HPP
#define CHARACTER_CREATION_HPP
#include <components/esm3/loadclas.hpp>
2014-02-23 20:11:05 +01:00
#include <map>
#include <memory>
2015-01-10 01:00:52 +01:00
#include <vector>
2020-06-05 18:22:53 +04:00
#include "statswatcher.hpp"
namespace osg
2015-05-20 02:18:20 +02:00
{
class Group;
2015-05-20 02:18:20 +02:00
}
namespace Resource
{
class ResourceSystem;
}
2012-01-30 19:27:49 +02:00
namespace MWGui
{
class WindowBase;
2012-01-30 19:27:49 +02:00
class TextInputDialog;
class InfoBoxDialog;
class RaceDialog;
class DialogueWindow;
class ClassChoiceDialog;
class GenerateClassResultDialog;
class PickClassDialog;
class CreateClassDialog;
class BirthDialog;
class ReviewDialog;
class MessageBoxManager;
2020-06-05 18:22:53 +04:00
class CharacterCreation : public StatsListener
2012-01-30 19:27:49 +02:00
{
public:
typedef std::vector<int> SkillList;
CharacterCreation(osg::Group* parent, Resource::ResourceSystem* resourceSystem);
2020-06-05 18:22:53 +04:00
virtual ~CharacterCreation();
2012-01-30 19:27:49 +02:00
// Show a dialog
void spawnDialog(const char id);
2020-06-05 18:22:53 +04:00
void setValue(const std::string& id, const MWMechanics::AttributeValue& value) override;
void setValue(const std::string& id, const MWMechanics::DynamicStat<float>& value) override;
void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value) override;
void configureSkills(const SkillList& major, const SkillList& minor) override;
void onFrame(float duration);
2012-01-30 19:27:49 +02:00
private:
osg::Group* mParent;
2015-05-20 02:18:20 +02:00
Resource::ResourceSystem* mResourceSystem;
2022-09-22 21:26:05 +03:00
SkillList mPlayerMajorSkills, mPlayerMinorSkills;
std::map<int, MWMechanics::AttributeValue> mPlayerAttributes;
std::map<int, MWMechanics::SkillValue> mPlayerSkillValues;
2022-09-22 21:26:05 +03:00
2012-01-30 19:27:49 +02:00
// Dialogs
std::unique_ptr<TextInputDialog> mNameDialog;
std::unique_ptr<RaceDialog> mRaceDialog;
std::unique_ptr<ClassChoiceDialog> mClassChoiceDialog;
std::unique_ptr<InfoBoxDialog> mGenerateClassQuestionDialog;
std::unique_ptr<GenerateClassResultDialog> mGenerateClassResultDialog;
std::unique_ptr<PickClassDialog> mPickClassDialog;
std::unique_ptr<CreateClassDialog> mCreateClassDialog;
std::unique_ptr<BirthDialog> mBirthSignDialog;
std::unique_ptr<ReviewDialog> mReviewDialog;
2022-09-22 21:26:05 +03:00
2012-01-30 19:27:49 +02:00
// Player data
std::string mPlayerName;
std::string mPlayerRaceId;
std::string mPlayerBirthSignId;
ESM::Class mPlayerClass;
2022-09-22 21:26:05 +03:00
// Class generation vars
unsigned mGenerateClassStep; // Keeps track of current step in Generate Class dialog
2019-08-12 00:22:02 +12:00
ESM::Class::Specialization mGenerateClassResponses[3];
unsigned mGenerateClassSpecializations[3]; // A counter for each specialization which is increased when an
// answer is chosen
2019-08-12 00:22:02 +12:00
std::string mGenerateClass; // In order: Combat, Magic, Stealth
2022-09-22 21:26:05 +03:00
2012-01-30 19:27:49 +02:00
////Dialog events
// Name dialog
void onNameDialogDone(WindowBase* parWindow);
2022-09-22 21:26:05 +03:00
2012-01-30 19:27:49 +02:00
// Race dialog
void onRaceDialogDone(WindowBase* parWindow);
void onRaceDialogBack();
void selectRace();
2022-09-22 21:26:05 +03:00
// Class dialogs
2012-01-30 19:27:49 +02:00
void onClassChoice(int _index);
void onPickClassDialogDone(WindowBase* parWindow);
void onPickClassDialogBack();
void onCreateClassDialogDone(WindowBase* parWindow);
void onCreateClassDialogBack();
void showClassQuestionDialog();
void onClassQuestionChosen(int _index);
void onGenerateClassBack();
void onGenerateClassDone(WindowBase* parWindow);
void selectGeneratedClass();
void selectCreatedClass();
void selectPickedClass();
2022-09-22 21:26:05 +03:00
// Birthsign dialog
void onBirthSignDialogDone(WindowBase* parWindow);
void onBirthSignDialogBack();
void selectBirthSign();
2022-09-22 21:26:05 +03:00
// Review dialog
void onReviewDialogDone(WindowBase* parWindow);
void onReviewDialogBack();
void onReviewActivateDialog(int parDialog);
2022-09-22 21:26:05 +03:00
enum CSE // Creation Stage Enum
2012-01-30 19:27:49 +02:00
{
CSE_NotStarted,
CSE_NameChosen,
CSE_RaceChosen,
CSE_ClassChosen,
CSE_BirthSignChosen,
CSE_ReviewBack,
CSE_ReviewNext
2012-01-30 19:27:49 +02:00
};
2022-09-22 21:26:05 +03:00
CSE mCreationStage; // Which state the character creating is in, controls back/next/ok buttons
2022-09-22 21:26:05 +03:00
2015-03-12 00:43:28 +01:00
void handleDialogDone(CSE currentStage, int nextMode);
};
2012-01-30 19:27:49 +02:00
}
#endif