diff options
-rw-r--r-- | src/game.cpp | 6 | ||||
-rw-r--r-- | src/gui/skill.cpp | 186 | ||||
-rw-r--r-- | src/gui/skill.h | 49 | ||||
-rw-r--r-- | src/main.h | 4 |
4 files changed, 102 insertions, 143 deletions
diff --git a/src/game.cpp b/src/game.cpp index 142cfbe2..b38f1368 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -890,13 +890,13 @@ void do_parse() { RFIFOB(4 + k * 37 + 36)!=0) { int skillId = RFIFOW(4 + k * 37); - if (skillDialog->getModel()->hasSkill(skillId)) { - skillDialog->getModel()->setSkill(skillId, + if (skillDialog->hasSkill(skillId)) { + skillDialog->setSkill(skillId, RFIFOW(4 + k * 37 + 6), RFIFOW(4 + k * 37 + 36)); } else { - skillDialog->getModel()->addSkill( + skillDialog->addSkill( RFIFOW(4 + k * 37), RFIFOW(4 + k * 37 + 6), RFIFOW(4 + k * 37 + 8)); diff --git a/src/gui/skill.cpp b/src/gui/skill.cpp index 65214e4a..4c3feedf 100644 --- a/src/gui/skill.cpp +++ b/src/gui/skill.cpp @@ -28,99 +28,35 @@ #include "../main.h" char *skill_db[] = { - // 0-99 - "", "Basic", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - // 100-199 - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "First aid", "Play as dead", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", - "", "", "", "", "", "", "", "", "", "", + // 0-99 + "", "Basic", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + // 100-199 + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "First aid", "Play as dead", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", + "", "", "", "", "", "", "", "", "", "", }; -SkillListModel::SkillListModel() -{ -} - -SkillListModel::~SkillListModel() -{ - for (int i = skillList.size() - 1; i >= 0; i--) - { - delete skillList[i]; - skillList.pop_back(); - } -} - -int SkillListModel::getNumberOfElements() -{ - return skillList.size(); -} - -std::string SkillListModel::getElementAt(int i) -{ - if (i >= 0 && i < (int)skillList.size()) - { - //return skill_db[skillList[i]->id]; - char tmp[128]; - sprintf(tmp, "%s Lv: %i Sp: %i", - skill_db[skillList[i]->id], - skillList[i]->lv, - skillList[i]->sp); - return tmp; - } - return ""; -} - -bool SkillListModel::hasSkill(int id) -{ - for (unsigned int i = 0; i < skillList.size(); i++) { - if (skillList[i]->id == id) { - return true; - } - } - return false; -} - -void SkillListModel::addSkill(int id, int lv, int sp) -{ - SKILL *tmp = new SKILL; - tmp->id = id; - tmp->lv = lv; - tmp->sp = sp; - skillList.push_back(tmp); -} - -void SkillListModel::setSkill(int id, int lv, int sp) -{ - for (unsigned int i = 0; i < skillList.size(); i++) { - if (skillList[i]->id == id) { - skillList[i]->lv = lv; - skillList[i]->sp = sp; - } - } -} - - SkillDialog::SkillDialog(): Window("Skills") { - skills = new SkillListModel(); - skillListBox = new ListBox(skills); + skillListBox = new ListBox(this); skillScrollArea = new ScrollArea(skillListBox); pointsLabel = new gcn::Label("Skill Points:"); incButton = new Button(" Up "); @@ -154,20 +90,27 @@ SkillDialog::~SkillDialog() delete incButton; delete closeButton; - delete skills; + for (int i = skillList.size() - 1; i >= 0; i--) + { + delete skillList[i]; + skillList.pop_back(); + } } void SkillDialog::action(const std::string& eventId) { if (eventId == "inc") { - //increment skill - //if (char_info->skill_point > 0) { - // WFIFOW(0) = net_w_value(0x0112); - // WFIFOW(2) = net_w_value( - // get_skill_id(skill_list_dialog[3].d1)); - // WFIFOSET(4); - //} + // Increment skill + int selectedSkill = skillListBox->getSelected(); + std::cout << "SkillDialog::action(" << selectedSkill << ")\n"; + if (char_info->skill_point > 0 && selectedSkill >= 0) { + std::cout << "Sending upgrade of id " << skillList[selectedSkill]->id << "\n"; + WFIFOW(0) = net_w_value(0x0112); + WFIFOW(2) = net_w_value( + skillList[selectedSkill]->id); + WFIFOSET(4); + } } else if (eventId == "close") { @@ -175,11 +118,6 @@ void SkillDialog::action(const std::string& eventId) } } -SkillListModel* SkillDialog::getModel() -{ - return skills; -} - void SkillDialog::setPoints(int i) { char tmp[128]; @@ -189,3 +127,51 @@ void SkillDialog::setPoints(int i) } } +int SkillDialog::getNumberOfElements() +{ + return skillList.size(); +} + +std::string SkillDialog::getElementAt(int i) +{ + if (i >= 0 && i < (int)skillList.size()) + { + char tmp[128]; + sprintf(tmp, "%s Lv: %i Sp: %i", + skill_db[skillList[i]->id], + skillList[i]->lv, + skillList[i]->sp); + return tmp; + } + return ""; +} + +bool SkillDialog::hasSkill(int id) +{ + for (unsigned int i = 0; i < skillList.size(); i++) { + if (skillList[i]->id == id) { + return true; + } + } + return false; +} + +void SkillDialog::addSkill(int id, int lv, int sp) +{ + SKILL *tmp = new SKILL(); + tmp->id = id; + tmp->lv = lv; + tmp->sp = sp; + skillList.push_back(tmp); +} + +void SkillDialog::setSkill(int id, int lv, int sp) +{ + for (unsigned int i = 0; i < skillList.size(); i++) { + if (skillList[i]->id == id) { + skillList[i]->lv = lv; + skillList[i]->sp = sp; + } + } +} + diff --git a/src/gui/skill.h b/src/gui/skill.h index 1d68bffe..5db90f04 100644 --- a/src/gui/skill.h +++ b/src/gui/skill.h @@ -24,59 +24,31 @@ #ifndef _TMW_SKILL_H #define _TMW_SKILL_H -#include <allegro.h> +#include <guichan.hpp> #include "window.h" struct SKILL { - short id; //index into "skill_db" array + short id; /**< Index into "skill_db" array */ short lv, sp; }; /** - * The skill list model. - * - * \ingroup GUI - */ -class SkillListModel : public gcn::ListModel -{ - private: - std::vector<SKILL*> skillList; - - public: - /** - * Constructor. - */ - SkillListModel(); - - /** - * Destructor. - */ - virtual ~SkillListModel(); - - int getNumberOfElements(); - std::string getElementAt(int); - - bool hasSkill(int id); - void addSkill(int id, int lv, int sp); - void setSkill(int id, int lv, int sp); -}; - -/** * The skill dialog. * * \ingroup GUI */ -class SkillDialog : public Window, public gcn::ActionListener +class SkillDialog : public Window, public gcn::ActionListener, + public gcn::ListModel { private: gcn::ListBox *skillListBox; gcn::ScrollArea *skillScrollArea; - SkillListModel *skills; gcn::Label *pointsLabel; - gcn::Button *incButton; gcn::Button *closeButton; + std::vector<SKILL*> skillList; + public: /** * Constructor. @@ -90,9 +62,14 @@ class SkillDialog : public Window, public gcn::ActionListener void action(const std::string&); - SkillListModel* getModel(); - void setPoints(int i); + + int getNumberOfElements(); + std::string getElementAt(int); + + bool hasSkill(int id); + void addSkill(int id, int lv, int sp); + void setSkill(int id, int lv, int sp); }; #endif @@ -24,10 +24,6 @@ #ifndef _TMW_MAIN_H #define _TMW_MAIN_H -#ifdef WIN32 - #pragma warning (disable:4312) -#endif - #include <guichan.hpp> #include <guichan/allegro.hpp> |