1 #ifndef CHARACTER_CREATION_HPP 2 #define CHARACTER_CREATION_HPP 3 4 #include <components/esm/loadclas.hpp> 5 6 #include <map> 7 #include <vector> 8 9 #include "statswatcher.hpp" 10 11 namespace osg 12 { 13 class Group; 14 } 15 16 namespace Resource 17 { 18 class ResourceSystem; 19 } 20 21 namespace MWGui 22 { 23 class WindowBase; 24 25 class TextInputDialog; 26 class InfoBoxDialog; 27 class RaceDialog; 28 class DialogueWindow; 29 class ClassChoiceDialog; 30 class GenerateClassResultDialog; 31 class PickClassDialog; 32 class CreateClassDialog; 33 class BirthDialog; 34 class ReviewDialog; 35 class MessageBoxManager; 36 37 class CharacterCreation : public StatsListener 38 { 39 public: 40 typedef std::vector<int> SkillList; 41 42 CharacterCreation(osg::Group* parent, Resource::ResourceSystem* resourceSystem); 43 virtual ~CharacterCreation(); 44 45 //Show a dialog 46 void spawnDialog(const char id); 47 48 void setValue (const std::string& id, const MWMechanics::AttributeValue& value) override; 49 void setValue (const std::string& id, const MWMechanics::DynamicStat<float>& value) override; 50 void setValue(const ESM::Skill::SkillEnum parSkill, const MWMechanics::SkillValue& value) override; 51 void configureSkills(const SkillList& major, const SkillList& minor) override; 52 53 void onFrame(float duration); 54 55 private: 56 osg::Group* mParent; 57 Resource::ResourceSystem* mResourceSystem; 58 59 SkillList mPlayerMajorSkills, mPlayerMinorSkills; 60 std::map<int, MWMechanics::AttributeValue> mPlayerAttributes; 61 std::map<int, MWMechanics::SkillValue> mPlayerSkillValues; 62 63 //Dialogs 64 TextInputDialog* mNameDialog; 65 RaceDialog* mRaceDialog; 66 ClassChoiceDialog* mClassChoiceDialog; 67 InfoBoxDialog* mGenerateClassQuestionDialog; 68 GenerateClassResultDialog* mGenerateClassResultDialog; 69 PickClassDialog* mPickClassDialog; 70 CreateClassDialog* mCreateClassDialog; 71 BirthDialog* mBirthSignDialog; 72 ReviewDialog* mReviewDialog; 73 74 //Player data 75 std::string mPlayerName; 76 std::string mPlayerRaceId; 77 std::string mPlayerBirthSignId; 78 ESM::Class mPlayerClass; 79 80 //Class generation vars 81 unsigned mGenerateClassStep; // Keeps track of current step in Generate Class dialog 82 ESM::Class::Specialization mGenerateClassResponses[3]; 83 unsigned mGenerateClassSpecializations[3]; // A counter for each specialization which is increased when an answer is chosen 84 std::string mGenerateClass; // In order: Combat, Magic, Stealth 85 86 ////Dialog events 87 //Name dialog 88 void onNameDialogDone(WindowBase* parWindow); 89 90 //Race dialog 91 void onRaceDialogDone(WindowBase* parWindow); 92 void onRaceDialogBack(); 93 void selectRace(); 94 95 //Class dialogs 96 void onClassChoice(int _index); 97 void onPickClassDialogDone(WindowBase* parWindow); 98 void onPickClassDialogBack(); 99 void onCreateClassDialogDone(WindowBase* parWindow); 100 void onCreateClassDialogBack(); 101 void showClassQuestionDialog(); 102 void onClassQuestionChosen(int _index); 103 void onGenerateClassBack(); 104 void onGenerateClassDone(WindowBase* parWindow); 105 void selectGeneratedClass(); 106 void selectCreatedClass(); 107 void selectPickedClass(); 108 109 //Birthsign dialog 110 void onBirthSignDialogDone(WindowBase* parWindow); 111 void onBirthSignDialogBack(); 112 void selectBirthSign(); 113 114 //Review dialog 115 void onReviewDialogDone(WindowBase* parWindow); 116 void onReviewDialogBack(); 117 void onReviewActivateDialog(int parDialog); 118 119 enum CSE //Creation Stage Enum 120 { 121 CSE_NotStarted, 122 CSE_NameChosen, 123 CSE_RaceChosen, 124 CSE_ClassChosen, 125 CSE_BirthSignChosen, 126 CSE_ReviewBack, 127 CSE_ReviewNext 128 }; 129 130 CSE mCreationStage; // Which state the character creating is in, controls back/next/ok buttons 131 132 void handleDialogDone(CSE currentStage, int nextMode); 133 }; 134 } 135 136 #endif 137