Continued work on Class Create dialog. Added sub-dialogs for picking specialization, attribute and skill. Also added some definitions in ESM for attributes and specializations.

actorid
Jan Borsodi 14 years ago
parent d97dad7a86
commit ee101440a2

@ -107,6 +107,8 @@ file(GLOB ESM_HEADER ${COMP_DIR}/esm/*.hpp)
set(ESM
${COMP_DIR}/esm/load_impl.cpp
${COMP_DIR}/esm/skill.cpp
${COMP_DIR}/esm/attr.cpp
${COMP_DIR}/esm/class.cpp
)
source_group(components\\esm FILES ${ESM_HEADER} ${ESM})

@ -230,6 +230,9 @@ void PickClassDialog::updateStats()
CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_create_class_layout.xml")
, environment(environment)
, specDialog(nullptr)
, attribDialog(nullptr)
, skillDialog(nullptr)
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
@ -240,12 +243,16 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment, MyGUI::I
WindowManager *wm = environment.mWindowManager;
setText("SpecializationT", wm->getGameSettingString("sChooseClassMenu1", "Specialization"));
getWidget(specializationName, "SpecializationName");
specializationName->setCaption(wm->getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""));
specializationName->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationClicked);
setText("FavoriteAttributesT", wm->getGameSettingString("sChooseClassMenu2", "Favorite Attributes:"));
getWidget(favoriteAttribute0, "FavoriteAttribute0");
getWidget(favoriteAttribute1, "FavoriteAttribute1");
favoriteAttribute0->setWindowManager(wm);
favoriteAttribute1->setWindowManager(wm);
favoriteAttribute0->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
favoriteAttribute1->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeClicked);
setText("MajorSkillT", wm->getGameSettingString("sChooseClassMenu3", "Major Skills:"));
getWidget(majorSkill0, "MajorSkill0");
@ -253,11 +260,11 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment, MyGUI::I
getWidget(majorSkill2, "MajorSkill2");
getWidget(majorSkill3, "MajorSkill3");
getWidget(majorSkill4, "MajorSkill4");
majorSkill0->setWindowManager(wm);
majorSkill1->setWindowManager(wm);
majorSkill2->setWindowManager(wm);
majorSkill3->setWindowManager(wm);
majorSkill4->setWindowManager(wm);
skills.push_back(majorSkill0);
skills.push_back(majorSkill1);
skills.push_back(majorSkill2);
skills.push_back(majorSkill3);
skills.push_back(majorSkill4);
setText("MinorSkillT", wm->getGameSettingString("sChooseClassMenu4", "Minor Skills:"));
getWidget(minorSkill0, "MinorSkill0");
@ -265,15 +272,25 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment, MyGUI::I
getWidget(minorSkill2, "MinorSkill2");
getWidget(minorSkill3, "MinorSkill3");
getWidget(minorSkill4, "MinorSkill4");
minorSkill0->setWindowManager(wm);
minorSkill1->setWindowManager(wm);
minorSkill2->setWindowManager(wm);
minorSkill3->setWindowManager(wm);
minorSkill4->setWindowManager(wm);
skills.push_back(minorSkill0);
skills.push_back(minorSkill1);
skills.push_back(minorSkill2);
skills.push_back(minorSkill3);
skills.push_back(minorSkill4);
std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end();
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it)
{
(*it)->setWindowManager(wm);
(*it)->eventClicked = MyGUI::newDelegate(this, &CreateClassDialog::onSkillClicked);
}
setText("LabelT", wm->getGameSettingString("sName", ""));
getWidget(editName, "EditName");
// Make sure the edit box has focus
MyGUI::InputManager::getInstance().setKeyFocusWidget(editName);
// TODO: These buttons should be managed by a Dialog class
MyGUI::ButtonPtr descriptionButton;
getWidget(descriptionButton, "DescriptionButton");
@ -287,7 +304,29 @@ CreateClassDialog::CreateClassDialog(MWWorld::Environment& environment, MyGUI::I
getWidget(okButton, "OKButton");
okButton->eventMouseButtonClick = MyGUI::newDelegate(this, &CreateClassDialog::onOkClicked);
updateStats();
// Set default skills, attributes
favoriteAttribute0->setAttributeId(ESM::Attribute::Strength);
favoriteAttribute1->setAttributeId(ESM::Attribute::Agility);
majorSkill0->setSkillId(ESM::Skill::Block);
majorSkill1->setSkillId(ESM::Skill::Armorer);
majorSkill2->setSkillId(ESM::Skill::MediumArmor);
majorSkill3->setSkillId(ESM::Skill::HeavyArmor);
majorSkill4->setSkillId(ESM::Skill::BluntWeapon);
minorSkill0->setSkillId(ESM::Skill::LongBlade);
minorSkill1->setSkillId(ESM::Skill::Axe);
minorSkill2->setSkillId(ESM::Skill::Spear);
minorSkill3->setSkillId(ESM::Skill::Athletics);
minorSkill4->setSkillId(ESM::Skill::Enchant);
}
CreateClassDialog::~CreateClassDialog()
{
delete specDialog;
delete attribDialog;
delete skillDialog;
}
void CreateClassDialog::setNextButtonShow(bool shown)
@ -322,29 +361,100 @@ void CreateClassDialog::setNextButtonShow(bool shown)
void CreateClassDialog::open()
{
updateStats();
setVisible(true);
}
// widget controls
//void CreateClassDialog::setClassId(const std::string &classId)
//{
// currentClassId = classId;
// classList->setIndexSelected(MyGUI::ITEM_NONE);
// size_t count = classList->getItemCount();
// for (size_t i = 0; i < count; ++i)
// {
// if (boost::iequals(*classList->getItemDataAt<std::string>(i), classId))
// {
// classList->setIndexSelected(i);
// break;
// }
// }
//
// updateStats();
//}
void CreateClassDialog::onDialogCancel()
{
if (specDialog)
specDialog->setVisible(false);
if (attribDialog)
attribDialog->setVisible(false);
if (skillDialog)
skillDialog->setVisible(false);
// TODO: Delete dialogs here
}
// widget controls
void CreateClassDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender)
{
if (specDialog)
delete specDialog;
specDialog = new SelectSpecializationDialog(environment, environment.mWindowManager->getGui()->getViewSize());
specDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
specDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onSpecializationSelected);
specDialog->setVisible(true);
}
void CreateClassDialog::onSpecializationSelected()
{
specializationId = specDialog->getSpecializationId();
specializationName->setCaption(environment.mWindowManager->getGameSettingString(ESM::Class::gmstSpecializationIds[specializationId], ""));
specDialog->setVisible(false);
}
void CreateClassDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
{
if (attribDialog)
delete attribDialog;
attribDialog = new SelectAttributeDialog(environment, environment.mWindowManager->getGui()->getViewSize());
attribDialog->setAffectedWidget(_sender);
attribDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
attribDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onAttributeSelected);
attribDialog->setVisible(true);
}
void CreateClassDialog::onAttributeSelected()
{
ESM::Attribute::AttributeID id = attribDialog->getAttributeId();
Widgets::MWAttributePtr attribute = attribDialog->getAffectedWidget();
if (attribute == favoriteAttribute0)
{
if (favoriteAttribute1->getAttributeId() == id)
favoriteAttribute1->setAttributeId(favoriteAttribute0->getAttributeId());
}
else if (attribute == favoriteAttribute1)
{
if (favoriteAttribute0->getAttributeId() == id)
favoriteAttribute0->setAttributeId(favoriteAttribute1->getAttributeId());
}
attribute->setAttributeId(id);
attribDialog->setVisible(false);
}
void CreateClassDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
{
if (skillDialog)
delete skillDialog;
skillDialog = new SelectSkillDialog(environment, environment.mWindowManager->getGui()->getViewSize());
skillDialog->setAffectedWidget(_sender);
skillDialog->eventCancel = MyGUI::newDelegate(this, &CreateClassDialog::onDialogCancel);
skillDialog->eventItemSelected = MyGUI::newDelegate(this, &CreateClassDialog::onSkillSelected);
skillDialog->setVisible(true);
}
void CreateClassDialog::onSkillSelected()
{
ESM::Skill::SkillEnum id = skillDialog->getSkillId();
Widgets::MWSkillPtr skill = skillDialog->getAffectedWidget();
// Avoid duplicate skills by swapping any skill field that matches the selected one
std::vector<Widgets::MWSkillPtr>::const_iterator end = skills.end();
for (std::vector<Widgets::MWSkillPtr>::const_iterator it = skills.begin(); it != end; ++it)
{
if (*it == skill)
continue;
if ((*it)->getSkillId() == id)
{
(*it)->setSkillId(skill->getSkillId());
break;
}
}
skill->setSkillId(skillDialog->getSkillId());
skillDialog->setVisible(false);
}
void CreateClassDialog::onDescriptionClicked(MyGUI::Widget* _sender)
{
@ -361,46 +471,234 @@ void CreateClassDialog::onBackClicked(MyGUI::Widget* _sender)
eventBack();
}
// update widget content
/* SelectSpecializationDialog */
void CreateClassDialog::updateStats()
SelectSpecializationDialog::SelectSpecializationDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_specialization_layout.xml")
{
if (currentClassId.empty())
return;
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
WindowManager *wm = environment.mWindowManager;
ESMS::ESMStore &store = environment.mWorld->getStore();
const ESM::Class *klass = store.classes.find(currentClassId);
ESM::Class::Specialization specialization = static_cast<ESM::Class::Specialization>(klass->data.specialization);
setText("LabelT", wm->getGameSettingString("sSpecializationMenu1", ""));
static const char *specIds[3] = {
"sSpecializationCombat",
"sSpecializationMagic",
"sSpecializationStealth"
};
specializationName->setCaption(wm->getGameSettingString(specIds[specialization], specIds[specialization]));
getWidget(specialization0, "Specialization0");
getWidget(specialization1, "Specialization1");
getWidget(specialization2, "Specialization2");
specialization0->setCaption(wm->getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Combat], ""));
specialization0->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specialization1->setCaption(wm->getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Magic], ""));
specialization1->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specialization2->setCaption(wm->getGameSettingString(ESM::Class::gmstSpecializationIds[ESM::Class::Stealth], ""));
specialization2->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onSpecializationClicked);
specializationId = ESM::Class::Combat;
favoriteAttribute0->setAttributeId(klass->data.attribute[0]);
favoriteAttribute1->setAttributeId(klass->data.attribute[1]);
// TODO: These buttons should be managed by a Dialog class
MyGUI::ButtonPtr cancelButton;
getWidget(cancelButton, "CancelButton");
cancelButton->setCaption(wm->getGameSettingString("sCancel", ""));
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSpecializationDialog::onCancelClicked);
}
Widgets::MWSkillPtr majorSkills[5] = {
majorSkill0,
majorSkill1,
majorSkill2,
majorSkill3,
majorSkill4
// widget controls
void SelectSpecializationDialog::onSpecializationClicked(MyGUI::WidgetPtr _sender)
{
if (_sender == specialization0)
specializationId = ESM::Class::Combat;
else if (_sender == specialization1)
specializationId = ESM::Class::Magic;
else if (_sender == specialization2)
specializationId = ESM::Class::Stealth;
else
return;
eventItemSelected();
}
void SelectSpecializationDialog::onCancelClicked(MyGUI::Widget* _sender)
{
eventCancel();
}
/* SelectAttributeDialog */
SelectAttributeDialog::SelectAttributeDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_attribute_layout.xml")
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
WindowManager *wm = environment.mWindowManager;
setText("LabelT", wm->getGameSettingString("sAttributesMenu1", ""));
getWidget(attribute0, "Attribute0");
getWidget(attribute1, "Attribute1");
getWidget(attribute2, "Attribute2");
getWidget(attribute3, "Attribute3");
getWidget(attribute4, "Attribute4");
getWidget(attribute5, "Attribute5");
getWidget(attribute6, "Attribute6");
getWidget(attribute7, "Attribute7");
Widgets::MWAttributePtr attributes[8] = {
attribute0,
attribute1,
attribute2,
attribute3,
attribute4,
attribute5,
attribute6,
attribute7
};
Widgets::MWSkillPtr minorSkills[5] = {
minorSkill0,
minorSkill1,
minorSkill2,
minorSkill3,
minorSkill4
for (int i = 0; i < 8; ++i)
{
attributes[i]->setWindowManager(wm);
attributes[i]->setAttributeId(ESM::Attribute::attributeIds[i]);
attributes[i]->eventClicked = MyGUI::newDelegate(this, &SelectAttributeDialog::onAttributeClicked);
}
// TODO: These buttons should be managed by a Dialog class
MyGUI::ButtonPtr cancelButton;
getWidget(cancelButton, "CancelButton");
cancelButton->setCaption(wm->getGameSettingString("sCancel", ""));
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectAttributeDialog::onCancelClicked);
}
// widget controls
void SelectAttributeDialog::onAttributeClicked(Widgets::MWAttributePtr _sender)
{
// TODO: Change MWAttribute to set and get AttributeID enum instead of int
attributeId = static_cast<ESM::Attribute::AttributeID>(_sender->getAttributeId());
eventItemSelected();
}
void SelectAttributeDialog::onCancelClicked(MyGUI::Widget* _sender)
{
eventCancel();
}
/* SelectSkillDialog */
SelectSkillDialog::SelectSkillDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize)
: Layout("openmw_chargen_select_skill_layout.xml")
{
// Centre dialog
MyGUI::IntCoord coord = mMainWidget->getCoord();
coord.left = (gameWindowSize.width - coord.width)/2;
coord.top = (gameWindowSize.height - coord.height)/2;
mMainWidget->setCoord(coord);
WindowManager *wm = environment.mWindowManager;
setText("LabelT", wm->getGameSettingString("sSkillsMenu1", ""));
setText("CombatLabelT", wm->getGameSettingString("sSpecializationCombat", ""));
setText("MagicLabelT", wm->getGameSettingString("sSpecializationMagic", ""));
setText("StealthLabelT", wm->getGameSettingString("sSpecializationStealth", ""));
getWidget(combatSkill0, "CombatSkill0");
getWidget(combatSkill1, "CombatSkill1");
getWidget(combatSkill2, "CombatSkill2");
getWidget(combatSkill3, "CombatSkill3");
getWidget(combatSkill4, "CombatSkill4");
getWidget(combatSkill5, "CombatSkill5");
getWidget(combatSkill6, "CombatSkill6");
getWidget(combatSkill7, "CombatSkill7");
getWidget(combatSkill8, "CombatSkill8");
getWidget(magicSkill0, "MagicSkill0");
getWidget(magicSkill1, "MagicSkill1");
getWidget(magicSkill2, "MagicSkill2");
getWidget(magicSkill3, "MagicSkill3");
getWidget(magicSkill4, "MagicSkill4");
getWidget(magicSkill5, "MagicSkill5");
getWidget(magicSkill6, "MagicSkill6");
getWidget(magicSkill7, "MagicSkill7");
getWidget(magicSkill8, "MagicSkill8");
getWidget(stealthSkill0, "StealthSkill0");
getWidget(stealthSkill1, "StealthSkill1");
getWidget(stealthSkill2, "StealthSkill2");
getWidget(stealthSkill3, "StealthSkill3");
getWidget(stealthSkill4, "StealthSkill4");
getWidget(stealthSkill5, "StealthSkill5");
getWidget(stealthSkill6, "StealthSkill6");
getWidget(stealthSkill7, "StealthSkill7");
getWidget(stealthSkill8, "StealthSkill8");
struct {Widgets::MWSkillPtr widget; ESM::Skill::SkillEnum skillId;} skills[3][9] = {
{
{combatSkill0, ESM::Skill::Block},
{combatSkill1, ESM::Skill::Armorer},
{combatSkill2, ESM::Skill::MediumArmor},
{combatSkill3, ESM::Skill::HeavyArmor},
{combatSkill4, ESM::Skill::BluntWeapon},
{combatSkill5, ESM::Skill::LongBlade},
{combatSkill6, ESM::Skill::Axe},
{combatSkill7, ESM::Skill::Spear},
{combatSkill8, ESM::Skill::Athletics}
},
{
{magicSkill0, ESM::Skill::Enchant},
{magicSkill1, ESM::Skill::Destruction},
{magicSkill2, ESM::Skill::Alteration},
{magicSkill3, ESM::Skill::Illusion},
{magicSkill4, ESM::Skill::Conjuration},
{magicSkill5, ESM::Skill::Mysticism},
{magicSkill6, ESM::Skill::Restoration},
{magicSkill7, ESM::Skill::Alchemy},
{magicSkill8, ESM::Skill::Unarmored}
},
{
{stealthSkill0, ESM::Skill::Security},
{stealthSkill1, ESM::Skill::Sneak},
{stealthSkill2, ESM::Skill::Acrobatics},
{stealthSkill3, ESM::Skill::LightArmor},
{stealthSkill4, ESM::Skill::ShortBlade},
{stealthSkill5 ,ESM::Skill::Marksman},
{stealthSkill6 ,ESM::Skill::Mercantile},
{stealthSkill7 ,ESM::Skill::Speechcraft},
{stealthSkill8 ,ESM::Skill::HandToHand}
}
};
for (int i = 0; i < 5; ++i)
for (int spec = 0; spec < 3; ++spec)
{
majorSkills[i]->setSkillNumber(klass->data.skills[i][0]);
minorSkills[i]->setSkillNumber(klass->data.skills[i][1]);
for (int i = 0; i < 9; ++i)
{
skills[spec][i].widget->setWindowManager(wm);
skills[spec][i].widget->setSkillId(skills[spec][i].skillId);
skills[spec][i].widget->eventClicked = MyGUI::newDelegate(this, &SelectSkillDialog::onSkillClicked);
}
}
// TODO: These buttons should be managed by a Dialog class
MyGUI::ButtonPtr cancelButton;
getWidget(cancelButton, "CancelButton");
cancelButton->setCaption(wm->getGameSettingString("sCancel", ""));
cancelButton->eventMouseButtonClick = MyGUI::newDelegate(this, &SelectSkillDialog::onCancelClicked);
}
// widget controls
void SelectSkillDialog::onSkillClicked(Widgets::MWSkillPtr _sender)
{
skillId = _sender->getSkillId();
eventItemSelected();
}
void SelectSkillDialog::onCancelClicked(MyGUI::Widget* _sender)
{
eventCancel();
}

@ -69,10 +69,113 @@ namespace MWGui
std::string currentClassId;
};
class SelectSpecializationDialog : public OEngine::GUI::Layout
{
public:
SelectSpecializationDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
ESM::Class::Specialization getSpecializationId() const { return specializationId; }
// Events
typedef delegates::CDelegate0 EventHandle_Void;
/** Event : Cancel button clicked.\n
signature : void method()\n
*/
EventHandle_Void eventCancel;
/** Event : Dialog finished, specialization selected.\n
signature : void method()\n
*/
EventHandle_Void eventItemSelected;
protected:
void onSpecializationClicked(MyGUI::Widget* _sender);
void onCancelClicked(MyGUI::Widget* _sender);
private:
MyGUI::WidgetPtr specialization0, specialization1, specialization2;
ESM::Class::Specialization specializationId;
};
class SelectAttributeDialog : public OEngine::GUI::Layout
{
public:
SelectAttributeDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
ESM::Attribute::AttributeID getAttributeId() const { return attributeId; }
Widgets::MWAttributePtr getAffectedWidget() const { return affectedWidget; }
void setAffectedWidget(Widgets::MWAttributePtr widget) { affectedWidget = widget; }
// Events
typedef delegates::CDelegate0 EventHandle_Void;
/** Event : Cancel button clicked.\n
signature : void method()\n
*/
EventHandle_Void eventCancel;
/** Event : Dialog finished, attribute selected.\n
signature : void method()\n
*/
EventHandle_Void eventItemSelected;
protected:
void onAttributeClicked(Widgets::MWAttributePtr _sender);
void onCancelClicked(MyGUI::Widget* _sender);
private:
Widgets::MWAttributePtr attribute0, attribute1, attribute2, attribute3,
attribute4, attribute5, attribute6, attribute7;
Widgets::MWAttributePtr affectedWidget;
ESM::Attribute::AttributeID attributeId;
};
class SelectSkillDialog : public OEngine::GUI::Layout
{
public:
SelectSkillDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
ESM::Skill::SkillEnum getSkillId() const { return skillId; }
Widgets::MWSkillPtr getAffectedWidget() const { return affectedWidget; }
void setAffectedWidget(Widgets::MWSkillPtr widget) { affectedWidget = widget; }
// Events
typedef delegates::CDelegate0 EventHandle_Void;
/** Event : Cancel button clicked.\n
signature : void method()\n
*/
EventHandle_Void eventCancel;
/** Event : Dialog finished, skill selected.\n
signature : void method()\n
*/
EventHandle_Void eventItemSelected;
protected:
void onSkillClicked(Widgets::MWSkillPtr _sender);
void onCancelClicked(MyGUI::Widget* _sender);
private:
Widgets::MWSkillPtr combatSkill0, combatSkill1, combatSkill2, combatSkill3, combatSkill4,
combatSkill5, combatSkill6, combatSkill7, combatSkill8;
Widgets::MWSkillPtr magicSkill0, magicSkill1, magicSkill2, magicSkill3, magicSkill4,
magicSkill5, magicSkill6, magicSkill7, magicSkill8;
Widgets::MWSkillPtr stealthSkill0, stealthSkill1, stealthSkill2, stealthSkill3, stealthSkill4,
stealthSkill5, stealthSkill6, stealthSkill7, stealthSkill8;
Widgets::MWSkillPtr affectedWidget;
ESM::Skill::SkillEnum skillId;
};
class CreateClassDialog : public OEngine::GUI::Layout
{
public:
CreateClassDialog(MWWorld::Environment& environment, MyGUI::IntSize gameWindowSize);
virtual ~CreateClassDialog();
// const std::string &getClassId() const { return currentClassId; }
// void setClassId(const std::string &classId);
@ -98,18 +201,29 @@ namespace MWGui
void onOkClicked(MyGUI::Widget* _sender);
void onBackClicked(MyGUI::Widget* _sender);
private:
void updateStats();
void onSpecializationClicked(MyGUI::WidgetPtr _sender);
void onSpecializationSelected();
void onAttributeClicked(Widgets::MWAttributePtr _sender);
void onAttributeSelected();
void onSkillClicked(Widgets::MWSkillPtr _sender);
void onSkillSelected();
void onDialogCancel();
private:
MWWorld::Environment& environment;
MyGUI::EditPtr editName;
MyGUI::StaticTextPtr specializationName;
MyGUI::WidgetPtr specializationName;
Widgets::MWAttributePtr favoriteAttribute0, favoriteAttribute1;
Widgets::MWSkillPtr majorSkill0, majorSkill1, majorSkill2, majorSkill3, majorSkill4;
Widgets::MWSkillPtr minorSkill0, minorSkill1, minorSkill2, minorSkill3, minorSkill4;
std::vector<Widgets::MWSkillPtr> skills;
std::string currentClassId;
SelectSpecializationDialog *specDialog;
SelectAttributeDialog *attribDialog;
SelectSkillDialog *skillDialog;
ESM::Class::Specialization specializationId;
};
}
#endif

@ -82,6 +82,11 @@ void MWSkill::updateWidgets()
}
}
void MWSkill::onClicked(MyGUI::Widget* _sender)
{
eventClicked(this);
}
void MWSkill::_initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name)
{
Base::_initialise(_style, _coord, _align, _info, _parent, _croppedParent, _creator, _name);
@ -116,6 +121,20 @@ void MWSkill::initialiseWidgetSkin(ResourceSkin* _info)
MYGUI_DEBUG_ASSERT( ! skillValueWidget, "widget already assigned");
skillValueWidget = (*iter)->castType<StaticText>();
}
else if (name == "StatNameButton")
{
MYGUI_DEBUG_ASSERT( ! skillNameWidget, "widget already assigned");
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
skillNameWidget = button;
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWSkill::onClicked);
}
else if (name == "StatValueButton")
{
MYGUI_DEBUG_ASSERT( ! skillValueWidget, "widget already assigned");
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
skillNameWidget = button;
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWSkill::onClicked);
}
}
}
@ -145,6 +164,11 @@ void MWAttribute::setAttributeValue(const AttributeValue& value_)
updateWidgets();
}
void MWAttribute::onClicked(MyGUI::Widget* _sender)
{
eventClicked(this);
}
void MWAttribute::updateWidgets()
{
if (attributeNameWidget && manager)
@ -216,6 +240,20 @@ void MWAttribute::initialiseWidgetSkin(ResourceSkin* _info)
MYGUI_DEBUG_ASSERT( ! attributeValueWidget, "widget already assigned");
attributeValueWidget = (*iter)->castType<StaticText>();
}
else if (name == "StatNameButton")
{
MYGUI_DEBUG_ASSERT( ! attributeNameWidget, "widget already assigned");
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
attributeNameWidget = button;
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWAttribute::onClicked);
}
else if (name == "StatValue")
{
MYGUI_DEBUG_ASSERT( ! attributeValueWidget, "widget already assigned");
MyGUI::ButtonPtr button = (*iter)->castType<Button>();
attributeNameWidget = button;
button->eventMouseButtonClick = MyGUI::newDelegate(this, &MWAttribute::onClicked);
}
}
}

@ -42,6 +42,14 @@ namespace MWGui
ESM::Skill::SkillEnum getSkillId() const { return skillId; }
const SkillValue& getSkillValue() const { return value; }
// Events
typedef delegates::CDelegate1<MWSkill*> EventHandle_SkillVoid;
/** Event : Skill clicked.\n
signature : void method(MWSkill* _sender)\n
*/
EventHandle_SkillVoid eventClicked;
/*internal:*/
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
@ -50,6 +58,8 @@ namespace MWGui
void baseChangeWidgetSkin(ResourceSkin* _info);
void onClicked(MyGUI::Widget* _sender);
private:
void initialiseWidgetSkin(ResourceSkin* _info);
void shutdownWidgetSkin();
@ -59,7 +69,7 @@ namespace MWGui
WindowManager *manager;
ESM::Skill::SkillEnum skillId;
SkillValue value;
MyGUI::StaticTextPtr skillNameWidget, skillValueWidget;
MyGUI::WidgetPtr skillNameWidget, skillValueWidget;
};
typedef MWSkill* MWSkillPtr;
@ -79,6 +89,14 @@ namespace MWGui
int getAttributeId() const { return id; }
const AttributeValue& getAttributeValue() const { return value; }
// Events
typedef delegates::CDelegate1<MWAttribute*> EventHandle_AttributeVoid;
/** Event : Attribute clicked.\n
signature : void method(MWAttribute* _sender)\n
*/
EventHandle_AttributeVoid eventClicked;
/*internal:*/
virtual void _initialise(WidgetStyle _style, const IntCoord& _coord, Align _align, ResourceSkin* _info, Widget* _parent, ICroppedRectangle * _croppedParent, IWidgetCreator * _creator, const std::string& _name);
@ -87,6 +105,8 @@ namespace MWGui
void baseChangeWidgetSkin(ResourceSkin* _info);
void onClicked(MyGUI::Widget* _sender);
private:
void initialiseWidgetSkin(ResourceSkin* _info);
void shutdownWidgetSkin();
@ -96,7 +116,7 @@ namespace MWGui
WindowManager *manager;
int id;
AttributeValue value;
MyGUI::StaticTextPtr attributeNameWidget, attributeValueWidget;
MyGUI::WidgetPtr attributeNameWidget, attributeValueWidget;
};
typedef MWAttribute* MWAttributePtr;

@ -0,0 +1,36 @@
#include "attr.hpp"
using namespace ESM;
const Attribute::AttributeID Attribute::attributeIds[Attribute::Length] = {
Attribute::Strength,
Attribute::Intelligence,
Attribute::Willpower,
Attribute::Agility,
Attribute::Speed,
Attribute::Endurance,
Attribute::Personality,
Attribute::Luck
};
const std::string Attribute::gmstAttributeIds[Attribute::Length] = {
"sAttributeStrength",
"sAttributeIntelligence",
"sAttributeWillpower",
"sAttributeAgility",
"sAttributeSpeed",
"sAttributeEndurance",
"sAttributePersonality",
"sAttributeLuck"
};
const std::string Attribute::gmstAttributeDescIds[Attribute::Length] = {
"sStrDesc",
"sIntDesc",
"sWilDesc",
"sAgiDesc",
"sSpdDesc",
"sEndDesc",
"sPerDesc",
"sLucDesc"
};

@ -0,0 +1,42 @@
#ifndef _ESM_ATTR_H
#define _ESM_ATTR_H
#include <string>
namespace ESM {
/*
* Attribute definitions
*/
struct Attribute
{
enum AttributeID
{
Strength = 0,
Intelligence = 1,
Willpower = 2,
Agility = 3,
Speed = 4,
Endurance = 5,
Personality = 6,
Luck = 7,
Length
};
AttributeID id;
std::string name, description;
static const AttributeID attributeIds[Length];
static const std::string gmstAttributeIds[Length];
static const std::string gmstAttributeDescIds[Length];
Attribute(AttributeID id, const std::string &name, const std::string &description)
: id(id)
, name(name)
, description(description)
{
}
};
}
#endif

@ -0,0 +1,15 @@
#include "loadclas.hpp"
using namespace ESM;
const Class::Specialization Class::specializationIds[3] = {
Class::Combat,
Class::Magic,
Class::Stealth
};
const char *Class::gmstSpecializationIds[3] = {
"sSpecializationCombat",
"sSpecializationMagic",
"sSpecializationStealth"
};

@ -42,6 +42,9 @@ struct Class
Stealth = 2
};
static const Specialization specializationIds[3];
static const char *gmstSpecializationIds[3];
struct CLDTstruct
{
int attribute[2]; // Attributes that get class bonus

@ -43,6 +43,9 @@
#include "loadstat.hpp"
#include "loadweap.hpp"
// Special records which are not loaded from ESM
#include "attr.hpp"
namespace ESM {
// Integer versions of all the record names, used for faster lookup

@ -90,6 +90,12 @@ void ESMStore::load(ESMReader &esm)
}
}
for (int i = 0; i < Attribute::Length; ++i)
{
Attribute::AttributeID id = Attribute::attributeIds[i];
attributes.list.insert(std::make_pair(id, Attribute(id, Attribute::gmstAttributeIds[i], Attribute::gmstAttributeDescIds[i])));
}
/* This information isn't needed on screen. But keep the code around
for debugging purposes later.

@ -76,6 +76,9 @@ namespace ESMS
IndexListT<Skill> skills;
//RecListT<PathGrid> pathgrids;
// Special entry which is hardcoded and not loaded from an ESM
IndexListT<Attribute> attributes;
// Lookup of all IDs. Makes looking up references faster. Just
// maps the id name to the record type.
typedef std::map<std::string, int> AllMap;

@ -45,6 +45,9 @@ configure_file("${SDIR}/openmw_text_input_layout.xml" "${DDIR}/openmw_text_input
configure_file("${SDIR}/openmw_chargen_race_layout.xml" "${DDIR}/openmw_chargen_race_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_class_layout.xml" "${DDIR}/openmw_chargen_class_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_create_class_layout.xml" "${DDIR}/openmw_chargen_create_class_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_select_specialization_layout.xml" "${DDIR}/openmw_chargen_select_specialization_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_select_attribute_layout.xml" "${DDIR}/openmw_chargen_select_attribute_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_select_skill_layout.xml" "${DDIR}/openmw_chargen_select_skill_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_chargen_birth_layout.xml" "${DDIR}/openmw_chargen_birth_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_inventory_window_layout.xml" "${DDIR}/openmw_inventory_window_layout.xml" COPYONLY)
configure_file("${SDIR}/openmw_layers.xml" "${DDIR}/openmw_layers.xml" COPYONLY)

@ -28,30 +28,30 @@
<Property key="Widget_Caption" value="Favorite Attributes:"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWAttribute" skin="MW_StatName" position="0 59 156 18" name="FavoriteAttribute0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatName" position="0 77 156 18" name="FavoriteAttribute1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButton" position="0 59 156 18" name="FavoriteAttribute0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButton" position="0 77 156 18" name="FavoriteAttribute1" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Major Skills -->
<Widget type="StaticText" skin="HeaderText" position="156 0 158 18" name="MajorSkillT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Major Skills:"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatName" position="156 18 158 18" name="MajorSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="156 36 158 18" name="MajorSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="156 54 158 18" name="MajorSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="156 72 158 18" name="MajorSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="156 90 158 18" name="MajorSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 18 158 18" name="MajorSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 36 158 18" name="MajorSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 54 158 18" name="MajorSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 72 158 18" name="MajorSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="156 90 158 18" name="MajorSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Minor Skills -->
<Widget type="StaticText" skin="HeaderText" position="314 0 140 18" name="MinorSkillT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Minor Skills:"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatName" position="314 18 140 18" name="MinorSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="341 36 140 18" name="MinorSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="314 54 140 18" name="MinorSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="314 72 140 18" name="MinorSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatName" position="314 90 140 18" name="MinorSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 18 140 18" name="MinorSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 36 140 18" name="MinorSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 54 140 18" name="MinorSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 72 140 18" name="MinorSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="314 90 140 18" name="MinorSkill4" align="ALIGN_LEFT ALIGN_TOP" />
</Widget>

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 217 234" name="_Main">
<Widget type="Widget" skin="" position="14 14 186 203" align="ALIGN_STRETCH">
<!-- Label -->
<Widget type="StaticText" skin="HeaderText" position="0 0 186 18" name="LabelT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Choose a Specialization"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<!-- Attribute list -->
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 28 186 18" name="Attribute0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 46 186 18" name="Attribute1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 64 186 18" name="Attribute2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 82 186 18" name="Attribute3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 100 186 18" name="Attribute4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 118 186 18" name="Attribute5" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 136 186 18" name="Attribute6" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWAttribute" skin="MW_StatNameButtonC" position="0 154 186 18" name="Attribute7" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Dialog buttons -->
<Widget type="Button" skin="MW_Button" position="120 180 66 21" name="CancelButton">
<Property key="Widget_Caption" value="Cancel"/>
</Widget>
</Widget>
</Widget>
</MyGUI>

@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 477 270" name="_Main">
<Widget type="Widget" skin="" position="17 14 447 239" align="ALIGN_STRETCH">
<!-- Label -->
<Widget type="StaticText" skin="HeaderText" position="0 0 447 18" name="LabelT" align="ALIGN_HCENTRE ALIGN_TOP">
<Property key="Widget_Caption" value="Choose a Skill"/>
<Property key="Widget_AlignText" value="ALIGN_HCENTRE ALIGN_TOP"/>
</Widget>
<!-- Combat list -->
<Widget type="StaticText" skin="HeaderText" position="0 32 154 18" name="CombatLabelT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Combat"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 50 154 18" name="CombatSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 68 154 18" name="CombatSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 86 154 18" name="CombatSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 104 154 18" name="CombatSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 122 154 18" name="CombatSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 140 154 18" name="CombatSkill5" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 158 154 18" name="CombatSkill6" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 176 154 18" name="CombatSkill7" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="0 194 154 18" name="CombatSkill8" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Magic list -->
<Widget type="StaticText" skin="HeaderText" position="158 32 154 18" name="MagicLabelT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Magic"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 50 154 18" name="MagicSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 68 154 18" name="MagicSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 86 154 18" name="MagicSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 104 154 18" name="MagicSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 122 154 18" name="MagicSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 140 154 18" name="MagicSkill5" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 158 154 18" name="MagicSkill6" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 176 154 18" name="MagicSkill7" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="158 194 154 18" name="MagicSkill8" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Stealth list -->
<Widget type="StaticText" skin="HeaderText" position="316 32 131 18" name="StealthLabelT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Stealth"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 50 131 18" name="StealthSkill0" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 68 131 18" name="StealthSkill1" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 86 131 18" name="StealthSkill2" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 104 131 18" name="StealthSkill3" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 122 131 18" name="StealthSkill4" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 140 131 18" name="StealthSkill5" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 158 131 18" name="StealthSkill6" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 176 131 18" name="StealthSkill7" align="ALIGN_LEFT ALIGN_TOP" />
<Widget type="MWSkill" skin="MW_StatNameButton" position="316 194 131 18" name="StealthSkill8" align="ALIGN_LEFT ALIGN_TOP" />
<!-- Dialog buttons -->
<Widget type="Button" skin="MW_Button" position="381 218 66 21" name="CancelButton">
<Property key="Widget_Caption" value="Cancel"/>
</Widget>
</Widget>
</Widget>
</MyGUI>

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Layout">
<!-- correct size is 247 144, adjust when skin is changed to a dialog -->
<Widget type="Window" skin="MW_Dialog" layer="Windows" position="0 0 247 144" name="_Main">
<Widget type="Widget" skin="" position="14 14 216 113" align="ALIGN_STRETCH">
<!-- Label -->
<Widget type="StaticText" skin="HeaderText" position="0 0 216 18" name="LabelT" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_Caption" value="Choose a Specialization"/>
<Property key="Widget_AlignText" value="ALIGN_LEFT ALIGN_TOP"/>
</Widget>
<!-- Specialization list -->
<Widget type="StaticText" skin="SandText" position="0 28 216 18" name="Specialization0" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_AlignText" value="ALIGN_TOP ALIGN_HCENTRE"/>
</Widget>
<Widget type="StaticText" skin="SandText" position="0 46 216 18" name="Specialization1" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_AlignText" value="ALIGN_TOP ALIGN_HCENTRE"/>
</Widget>
<Widget type="StaticText" skin="SandText" position="0 64 216 18" name="Specialization2" align="ALIGN_LEFT ALIGN_TOP">
<Property key="Widget_AlignText" value="ALIGN_TOP ALIGN_HCENTRE"/>
</Widget>
<!-- Dialog buttons -->
<Widget type="Button" skin="MW_Button" position="150 90 66 21" name="CancelButton">
<Property key="Widget_Caption" value="Cancel"/>
</Widget>
</Widget>
</Widget>
</MyGUI>

@ -17,6 +17,14 @@
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
</Skin>
<Skin name = "SandTextC" size = "16 16">
<Property key="FontName" value = "MyGUI_CoreFont.18" />
<Property key="FontHeight" value = "18" />
<Property key="AlignText" value = "TOP HCENTER" />
<Property key="Colour" value = "0.75 0.6 0.35" />
<BasisSkin type="SimpleText" offset = "0 0 16 16" align = "ALIGN_STRETCH"/>
</Skin>
<Skin name = "SandTextRight" size = "16 16">
<Property key="FontName" value = "MyGUI_CoreFont.18" />
<Property key="FontHeight" value = "18" />
@ -57,11 +65,28 @@
<Child type="StaticText" skin="SandText" offset = "0 0 200 18" align = "ALIGN_LEFT ALIGN_HSTRETCH" name = "StatName" />
</Skin>
<Skin name = "MW_StatNameC" size = "200 18">
<Child type="StaticTextC" skin="SandText" offset = "0 0 200 18" align = "LEFT HSTRETCH" name = "StatName" />
</Skin>
<Skin name = "MW_StatNameValue" size = "200 18">
<Child type="StaticText" skin="SandText" offset = "0 0 160 18" align = "ALIGN_LEFT ALIGN_HSTRETCH" name = "StatName" />
<Child type="StaticText" skin="SandTextRight" offset = "160 0 40 18" align = "ALIGN_RIGHT ALIGN_TOP" name = "StatValue" />
</Skin>
<Skin name = "MW_StatNameButtonC" size = "200 18">
<Child type="Button" skin="SandTextC" offset = "0 0 200 18" align = "LEFT HSTRETCH" name = "StatNameButton" />
</Skin>
<Skin name = "MW_StatNameButton" size = "200 18">
<Child type="Button" skin="SandText" offset = "0 0 200 18" align = "ALIGN_LEFT ALIGN_HSTRETCH" name = "StatNameButton" />
</Skin>
<Skin name = "MW_StatNameValueButton" size = "200 18">
<Child type="Button" skin="SandText" offset = "0 0 160 18" align = "ALIGN_LEFT ALIGN_HSTRETCH" name = "StatNameButton" />
<Child type="Button" skin="SandTextRight" offset = "160 0 40 18" align = "ALIGN_RIGHT ALIGN_TOP" name = "StatValueButton" />
</Skin>
<Skin name = "MW_EffectImage" size = "200 24">
<Child type="StaticImage" skin="StaticImage" offset = "4 4 16 16" align = "ALIGN_LEFT ALIGN_TOP" name = "Image" />
<Child type="StaticText" skin="SandText" offset = "24 0 176 20" align = "ALIGN_VCENTRE ALIGN_HSTRETCH" name = "Text" />

@ -1,13 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<MyGUI type="Skin">
<!-- Defines a pure black background -->
<!-- Defines a transparent background -->
<Skin name = "BlackBG" size = "8 8" texture = "transparent.png">
<BasisSkin type="MainSkin" offset = "0 0 8 8">
<State name="normal" offset = "0 0 8 8"/>
</BasisSkin>
</Skin>
<!-- Defines a pure black background -->
<Skin name = "DialogBG" size = "8 8" texture = "black.png">
<BasisSkin type="MainSkin" offset = "0 0 8 8">
<State name="normal" offset = "0 0 8 8"/>
</BasisSkin>
</Skin>
<!-- These define the window borders -->
<Skin name="TB_B" size="512 4" texture="textures\menu_thick_border_bottom.dds">
<Property key="Pointer" value = "vresize" />
@ -241,4 +248,40 @@
<Property key="Scale" value = "1 1 0 0"/>
</Child>
</Skin>
<Skin name = "MW_Dialog" size = "256 54">
<Property key="FontName" value = "MyGUI_CoreFont.18" />
<Property key="FontHeight" value = "18" />
<Property key="AlignText" value = "ALIGN_CENTER" />
<Property key="Colour" value = "0.8 0.8 0.8" />
<Child type="Widget" skin="DialogBG" offset = "4 4 248 46" align = "ALIGN_STRETCH" name = "Client"/>
<!-- Outer borders -->
<Child type="Widget" skin="TB_T" offset="4 0 248 4" align="ALIGN_TOP ALIGN_HSTRETCH" name="Border">
<Property key="Scale" value = "0 1 0 -1"/>
</Child>
<Child type="Widget" skin="TB_L" offset="0 4 4 46" align="ALIGN_LEFT ALIGN_VSTRETCH" name="Border">
<Property key="Scale" value = "1 0 -1 0"/>
</Child>
<Child type="Widget" skin="TB_B" offset="4 50 248 4" align="ALIGN_BOTTOM ALIGN_HSTRETCH" name="Border">
<Property key="Scale" value = "0 0 0 1"/>
</Child>
<Child type="Widget" skin="TB_R" offset="252 4 4 46" align="ALIGN_RIGHT ALIGN_VSTRETCH" name="Border">
<Property key="Scale" value = "0 0 1 0"/>
</Child>
<Child type="Widget" skin="TB_BR" offset="252 50 4 4" align="ALIGN_RIGHT ALIGN_BOTTOM" name="Border">
<Property key="Scale" value = "0 0 1 1"/>
</Child>
<Child type="Widget" skin="TB_BL" offset="0 50 4 4" align="ALIGN_LEFT ALIGN_BOTTOM" name="Border">
<Property key="Scale" value = "1 0 -1 1"/>
</Child>
<Child type="Widget" skin="TB_TR" offset="252 0 4 4" align="ALIGN_RIGHT ALIGN_TOP" name="Border">
<Property key="Scale" value = "0 1 1 -1"/>
</Child>
<Child type="Widget" skin="TB_TL" offset="0 0 4 4" align="ALIGN_LEFT ALIGN_TOP" name="Border">
<Property key="Scale" value = "1 1 -1 -1"/>
</Child>
</Skin>
</MyGUI>

Loading…
Cancel
Save