when training, display maxed-out skills
This commit is contained in:
@@ -272,18 +272,28 @@ static void do_xp_keep(xp_dlog_state& save) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int get_skill_max(eSkill skill) {
|
||||||
|
switch(skill){
|
||||||
|
case eSkill::MAX_HP:
|
||||||
|
return 250;
|
||||||
|
case eSkill::MAX_SP:
|
||||||
|
return 150;
|
||||||
|
default:
|
||||||
|
return skill_max[skill];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static bool can_change_skill(eSkill skill, xp_dlog_state& save, bool increase) {
|
static bool can_change_skill(eSkill skill, xp_dlog_state& save, bool increase) {
|
||||||
unsigned int min_level, max_level, cur_level, orig_level, cost, g_cost;
|
unsigned int min_level, max_level, cur_level, orig_level, cost, g_cost;
|
||||||
|
max_level = get_skill_max(skill);
|
||||||
if(skill == eSkill::MAX_HP) {
|
if(skill == eSkill::MAX_HP) {
|
||||||
min_level = 6;
|
min_level = 6;
|
||||||
max_level = 250;
|
|
||||||
cur_level = save.hp;
|
cur_level = save.hp;
|
||||||
orig_level = univ.party[save.who].max_health;
|
orig_level = univ.party[save.who].max_health;
|
||||||
cost = 1;
|
cost = 1;
|
||||||
g_cost = 10;
|
g_cost = 10;
|
||||||
} else if(skill == eSkill::MAX_SP) {
|
} else if(skill == eSkill::MAX_SP) {
|
||||||
min_level = 0;
|
min_level = 0;
|
||||||
max_level = 150;
|
|
||||||
cur_level = save.sp;
|
cur_level = save.sp;
|
||||||
orig_level = univ.party[save.who].max_sp;
|
orig_level = univ.party[save.who].max_sp;
|
||||||
cost = 1;
|
cost = 1;
|
||||||
@@ -292,7 +302,6 @@ static bool can_change_skill(eSkill skill, xp_dlog_state& save, bool increase) {
|
|||||||
if(skill == eSkill::STRENGTH || skill == eSkill::DEXTERITY || skill == eSkill::INTELLIGENCE)
|
if(skill == eSkill::STRENGTH || skill == eSkill::DEXTERITY || skill == eSkill::INTELLIGENCE)
|
||||||
min_level = 1;
|
min_level = 1;
|
||||||
else min_level = 0;
|
else min_level = 0;
|
||||||
max_level = skill_max[skill];
|
|
||||||
cur_level = save.skills[skill];
|
cur_level = save.skills[skill];
|
||||||
orig_level = univ.party[save.who].skills[skill];
|
orig_level = univ.party[save.who].skills[skill];
|
||||||
cost = skill_cost[skill];
|
cost = skill_cost[skill];
|
||||||
@@ -316,15 +325,42 @@ static bool can_change_skill(eSkill skill, xp_dlog_state& save, bool increase) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void draw_xp_skills(cDialog& me,xp_dlog_state& save) {
|
static void draw_xp_skills(cDialog& me,xp_dlog_state& save) {
|
||||||
|
auto add_cost_to_label = [&me, save](std::string skill, int skp, int gold, bool max) {
|
||||||
|
cControl& label = me[skill + "-label"];
|
||||||
|
// If cost is already there, start over
|
||||||
|
if(label.getText().find('(') != std::string::npos){
|
||||||
|
label.setText(label.getText().substr(0, label.getText().find('(') - 1));
|
||||||
|
}
|
||||||
|
if(max){
|
||||||
|
label.appendText (" (MAX)");
|
||||||
|
}else if(save.mode < 2){
|
||||||
|
label.appendText(" (");
|
||||||
|
label.appendText(std::to_string(skp) + " pt");
|
||||||
|
if(skp != 1){
|
||||||
|
label.appendText("s");
|
||||||
|
}
|
||||||
|
label.appendText(".");
|
||||||
|
if(save.mode == 1){
|
||||||
|
label.appendText("/" + std::to_string(gold) + "gp");
|
||||||
|
}
|
||||||
|
label.appendText(")");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
add_cost_to_label("hp", 1, 10, univ.party[save.who].max_health == get_skill_max(eSkill::MAX_HP));
|
||||||
|
add_cost_to_label("sp", 1, 15, univ.party[save.who].max_sp == get_skill_max(eSkill::MAX_SP));
|
||||||
// TODO: Wouldn't it make more sense for it to be red when you can't buy the skill rather than red when you can?
|
// TODO: Wouldn't it make more sense for it to be red when you can't buy the skill rather than red when you can?
|
||||||
for(short i = 0; i <= 20; i++) {
|
for(short i = 0; i <= 20; i++) {
|
||||||
eSkill skill = eSkill(i);
|
eSkill skill = eSkill(i);
|
||||||
|
std::string id = boost::lexical_cast<std::string>(skill);
|
||||||
cControl& cur = me[boost::lexical_cast<std::string>(skill)];
|
cControl& cur = me[boost::lexical_cast<std::string>(skill)];
|
||||||
if(can_change_skill(skill, save, true))
|
if(can_change_skill(skill, save, true))
|
||||||
cur.setColour(Colours::RED);
|
cur.setColour(Colours::RED);
|
||||||
else cur.setColour(me.getDefTextClr());
|
else cur.setColour(me.getDefTextClr());
|
||||||
if(i < 19)
|
if(i < 19){
|
||||||
cur.setTextToNum(save.skills[skill]);
|
cur.setTextToNum(save.skills[skill]);
|
||||||
|
add_cost_to_label(id, skill_cost[skill], skill_g_cost[skill], save.skills[skill] == get_skill_max(skill));
|
||||||
|
}
|
||||||
else cur.setTextToNum(skill == eSkill::MAX_HP ? save.hp : save.sp);
|
else cur.setTextToNum(skill == eSkill::MAX_HP ? save.hp : save.sp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -531,28 +567,10 @@ bool spend_xp(short pc_num, short mode, cDialog* parent) {
|
|||||||
|
|
||||||
cDialog xpDlog(*ResMgr::dialogs.get("spend-xp"),parent);
|
cDialog xpDlog(*ResMgr::dialogs.get("spend-xp"),parent);
|
||||||
|
|
||||||
auto add_cost_to_label = [&xpDlog, mode](std::string skill, int skp, int gold) {
|
|
||||||
if(mode < 2){
|
|
||||||
cControl& label = xpDlog[skill + "-label"];
|
|
||||||
label.appendText(" (");
|
|
||||||
label.appendText(std::to_string(skp) + " pt");
|
|
||||||
if(skp != 1){
|
|
||||||
label.appendText("s");
|
|
||||||
}
|
|
||||||
label.appendText(".");
|
|
||||||
if(mode == 1){
|
|
||||||
label.appendText("/" + std::to_string(gold) + "gp");
|
|
||||||
}
|
|
||||||
label.appendText(")");
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const int LABEL_OFFSET_COL1 = 85;
|
const int LABEL_OFFSET_COL1 = 85;
|
||||||
const int LABEL_OFFSET_COL2 = 74;
|
const int LABEL_OFFSET_COL2 = 74;
|
||||||
xpDlog.addLabelFor("hp","Health",LABEL_LEFT,LABEL_OFFSET_COL1,true);
|
xpDlog.addLabelFor("hp","Health",LABEL_LEFT,LABEL_OFFSET_COL1,true);
|
||||||
add_cost_to_label("hp", 1, 10);
|
|
||||||
xpDlog.addLabelFor("sp","Spell Pts.",LABEL_LEFT,LABEL_OFFSET_COL1,true);
|
xpDlog.addLabelFor("sp","Spell Pts.",LABEL_LEFT,LABEL_OFFSET_COL1,true);
|
||||||
add_cost_to_label("sp", 1, 15);
|
|
||||||
auto spend_xp_filter = std::bind(spend_xp_event_filter,_1,_2,_3,std::ref(save));
|
auto spend_xp_filter = std::bind(spend_xp_event_filter,_1,_2,_3,std::ref(save));
|
||||||
static const std::string minus = "-m", plus = "-p";
|
static const std::string minus = "-m", plus = "-p";
|
||||||
for(int i = 54; i < 73; i++) {
|
for(int i = 54; i < 73; i++) {
|
||||||
@@ -560,7 +578,6 @@ bool spend_xp(short pc_num, short mode, cDialog* parent) {
|
|||||||
eSkill skill = eSkill(i - 54);
|
eSkill skill = eSkill(i - 54);
|
||||||
std::string id = boost::lexical_cast<std::string>(skill);
|
std::string id = boost::lexical_cast<std::string>(skill);
|
||||||
xpDlog.addLabelFor(id,get_str("skills",1 + 2 * (i - 54)),LABEL_LEFT,(i < 63) ? LABEL_OFFSET_COL1 : LABEL_OFFSET_COL2,true);
|
xpDlog.addLabelFor(id,get_str("skills",1 + 2 * (i - 54)),LABEL_LEFT,(i < 63) ? LABEL_OFFSET_COL1 : LABEL_OFFSET_COL2,true);
|
||||||
add_cost_to_label(id, skill_cost[skill], skill_g_cost[skill]);
|
|
||||||
xpDlog[id + minus].attachClickHandler(spend_xp_filter);
|
xpDlog[id + minus].attachClickHandler(spend_xp_filter);
|
||||||
xpDlog[id + plus].attachClickHandler(spend_xp_filter);
|
xpDlog[id + plus].attachClickHandler(spend_xp_filter);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user