alchemy: try to add some information to the basic dialog (to be improved...)

This commit is contained in:
ALONSO Laurent
2021-10-04 13:41:48 +02:00
committed by Celtic Minstrel
parent 896e6c699b
commit 57c03dfc82
2 changed files with 26 additions and 14 deletions

View File

@@ -3,7 +3,7 @@
<dialog defbtn='done'> <dialog defbtn='done'>
<text size='large' top='10' left='54' width='163' height='15'>Alchemy known:</text> <text size='large' top='10' left='54' width='163' height='15'>Alchemy known:</text>
<pict type='dlog' num='20' top='6' left='6'/> <pict type='dlog' num='20' top='6' left='6'/>
<button name='done' type='done' top='174' left='356'/> <button name='done' type='done' top='235' left='356'/>
<led name='potion1' state='off' top='33' left='217'/> <led name='potion1' state='off' top='33' left='217'/>
<led name='potion2' state='off' top='47' left='217'/> <led name='potion2' state='off' top='47' left='217'/>
<led name='potion3' state='off' top='61' left='217'/> <led name='potion3' state='off' top='61' left='217'/>
@@ -28,4 +28,5 @@
TODO: This originally had width=119; if it looks wrong in-game, try reverting to that TODO: This originally had width=119; if it looks wrong in-game, try reverting to that
--> -->
<text top='179' left='8' width='250' height='16'>Number in ( ) is minimum skill to make.</text> <text top='179' left='8' width='250' height='16'>Number in ( ) is minimum skill to make.</text>
<text name='info' framed='true' top='200' left='8' width='300' height='59'>Select a potion.</text>
</dialog> </dialog>

View File

@@ -291,34 +291,45 @@ extern const eItemAbil alch_ingred2[20] = {
eItemAbil::ASPTONGUE,eItemAbil::EMBERF,eItemAbil::EMBERF,eItemAbil::ASPTONGUE,eItemAbil::EMBERF, eItemAbil::ASPTONGUE,eItemAbil::EMBERF,eItemAbil::EMBERF,eItemAbil::ASPTONGUE,eItemAbil::EMBERF,
}; };
static bool pick_alchemy_led(cDialog& me, std::string item_hit, bool, bool allowEdit) {
if(item_hit.substr(0,6) != "potion")
return false;
int hit = item_hit[6] - '0';
if (item_hit.size()==8)
hit=10*hit+(item_hit[7] - '0');
--hit;
if (hit<0 || hit>=20)
return false;
if (allowEdit) {
univ.party.alchemy[hit]=!univ.party.alchemy[hit];
cLed& led = dynamic_cast<cLed&>(me.getControl(item_hit));
led.setState(univ.party.alchemy[hit] ? led_red : led_off);
}
// TODO: change message when hit==0
// use a variable to store the beginning of the potion details
me["info"].setText(get_str("alchemy", hit+8));
return true;
}
void display_alchemy(bool allowEdit,cDialog* parent) { void display_alchemy(bool allowEdit,cDialog* parent) {
using namespace std::placeholders;
set_cursor(sword_curs); set_cursor(sword_curs);
cChoiceDlog showAlch("pc-alchemy-info", {"done"}, parent); cChoiceDlog showAlch("pc-alchemy-info", {"done"}, parent);
auto led_selector = std::bind(pick_alchemy_led, _1, _2, _3, allowEdit);
for(short i = 0; i < 20; i++) { for(short i = 0; i < 20; i++) {
std::string id = "potion" + std::to_string(i + 1); std::string id = "potion" + std::to_string(i + 1);
std::string name = get_str("magic-names", i + 200) + " ("; std::string name = get_str("magic-names", i + 200) + " (";
name += std::to_string(alch_difficulty[i]); name += std::to_string(alch_difficulty[i]);
name += ')'; name += ')';
showAlch->addLabelFor(id, name, LABEL_LEFT, 83, true); showAlch->addLabelFor(id, name, LABEL_LEFT, 83, true);
if(!allowEdit)
showAlch->getControl(id).attachClickHandler(&cLed::noAction);
cLed& led = dynamic_cast<cLed&>(showAlch->getControl(id)); cLed& led = dynamic_cast<cLed&>(showAlch->getControl(id));
if(univ.party.alchemy[i]) led.attachClickHandler(led_selector);
led.setState(led_red); led.setState(univ.party.alchemy[i] ? led_red : led_off);
else led.setState(led_off);
} }
showAlch.show(); showAlch.show();
if(!allowEdit) return;
for(short i = 0; i < 20; i++) {
std::string id = "potion" + std::to_string(i + 1);
cLed& led = dynamic_cast<cLed&>(showAlch->getControl(id));
if(led.getState() == led_red) univ.party.alchemy[i] = true;
else univ.party.alchemy[i] = false;
}
} }
// MARK: Start spend XP dialog // MARK: Start spend XP dialog