Choose button for personality of a talk node

This commit is contained in:
2025-01-23 18:25:33 -06:00
committed by Celtic Minstrel
parent 06ac8569a7
commit f5afcea2b5
4 changed files with 17 additions and 5 deletions

View File

@@ -36,10 +36,7 @@
<text top='184' left='77' width='24' height='14'>D</text> <text top='184' left='77' width='24' height='14'>D</text>
<text size='large' top='203' left='49' width='83' height='15'>Message 1:</text> <text size='large' top='203' left='49' width='83' height='15'>Message 1:</text>
<text size='large' top='309' left='49' width='80' height='14'>Message 2:</text> <text size='large' top='309' left='49' width='80' height='14'>Message 2:</text>
<text top='21' left='256' width='207' height='29'> <button name='choose-personality' type='regular' top='24' left='256'>Choose</button>
If -1: Node is unused,
-2: All personalities use this response.
</text>
<button name='chooseB' type='regular' top='135' left='414'>Choose</button> <button name='chooseB' type='regular' top='135' left='414'>Choose</button>
<button name='chooseA' type='large' top='112' left='414'>Create/Edit</button> <button name='chooseA' type='large' top='112' left='414'>Create/Edit</button>
<button name='chooseA-regular' type='regular' top='112' left='414'>Choose</button> <button name='chooseA-regular' type='regular' top='112' left='414'>Choose</button>

View File

@@ -413,6 +413,10 @@ short choose_text(eStrType list, unsigned short cur_choice, cDialog* parent, std
case STRT_SUMMON: case STRT_SUMMON:
strings = {"0 - no summon (weak)", "1 - weak summoning", "2 - summoning", "3 - major summoning", "4 - no summon (unique/powerful"}; strings = {"0 - no summon (weak)", "1 - weak summoning", "2 - summoning", "3 - major summoning", "4 - no summon (unique/powerful"};
break; break;
case STRT_TALK_NODE_PERSON:
strings.push_back("All personalities use this response");
strings.push_back("Node is unused");
BOOST_FALLTHROUGH;
case STRT_TALK: case STRT_TALK:
for(cTown* town : scenario.towns) { for(cTown* town : scenario.towns) {
for(cPersonality who : town->talking.people) { for(cPersonality who : town->talking.people) {

View File

@@ -11,7 +11,7 @@ enum eStrType {
STRT_PICT, STRT_CMP, STRT_ACCUM, STRT_TRAP, STRT_PICT, STRT_CMP, STRT_ACCUM, STRT_TRAP,
STRT_ATTITUDE, STRT_STAIR, STRT_LIGHT, STRT_CONTEXT, STRT_ATTITUDE, STRT_STAIR, STRT_LIGHT, STRT_CONTEXT,
STRT_SHOP, STRT_COST_ADJ, STRT_STAIR_MODE, STRT_TALK_NODE, STRT_SHOP, STRT_COST_ADJ, STRT_STAIR_MODE, STRT_TALK_NODE,
STRT_STATUS, STRT_SPELL_PAT, STRT_SUMMON, STRT_TALK, STRT_STATUS, STRT_SPELL_PAT, STRT_SUMMON, STRT_TALK, STRT_TALK_NODE_PERSON,
STRT_ENCHANT, STRT_DIR, STRT_QUEST, STRT_QUEST_STATUS, STRT_ENCHANT, STRT_DIR, STRT_QUEST, STRT_QUEST_STATUS,
STRT_HEALING, STRT_TREASURE, STRT_MONST_STAT, STRT_POS_MODE, STRT_HEALING, STRT_TREASURE, STRT_MONST_STAT, STRT_POS_MODE,
}; };

View File

@@ -1191,6 +1191,16 @@ static bool select_talk_node_type(cDialog& me, std::stack<node_ref_t>& talk_edit
return true; return true;
} }
static bool select_talk_node_personality(cDialog& me, std::stack<node_ref_t>& talk_edit_stack) {
save_talk_node(me, talk_edit_stack, false, false);
short i = short(talk_edit_stack.top().second.personality);
// 2 negative possible values, so +2 and -2 to convert from selectedIndex
i = choose_text(STRT_TALK_NODE_PERSON, i + 2, &me, "Which personality(s)?") - 2;
talk_edit_stack.top().second.personality = i;
put_talk_node_in_dlog(me, talk_edit_stack);
return true;
}
static bool select_talk_node_value(cDialog& me, std::string item_hit, const std::stack<node_ref_t>& talk_edit_stack) { static bool select_talk_node_value(cDialog& me, std::string item_hit, const std::stack<node_ref_t>& talk_edit_stack) {
const auto& talk_node = talk_edit_stack.top().second; const auto& talk_node = talk_edit_stack.top().second;
if(item_hit == "chooseB") { if(item_hit == "chooseB") {
@@ -1225,6 +1235,7 @@ short edit_talk_node(short which_node) {
talk_dlg["back"].attachClickHandler(std::bind(talk_node_back, _1, std::ref(talk_edit_stack))); talk_dlg["back"].attachClickHandler(std::bind(talk_node_back, _1, std::ref(talk_edit_stack)));
talk_dlg["new"].attachClickHandler(std::bind(talk_node_branch, _1, std::ref(talk_edit_stack))); talk_dlg["new"].attachClickHandler(std::bind(talk_node_branch, _1, std::ref(talk_edit_stack)));
talk_dlg["choose-type"].attachClickHandler(std::bind(select_talk_node_type, _1, std::ref(talk_edit_stack))); talk_dlg["choose-type"].attachClickHandler(std::bind(select_talk_node_type, _1, std::ref(talk_edit_stack)));
talk_dlg["choose-personality"].attachClickHandler(std::bind(select_talk_node_personality, _1, std::ref(talk_edit_stack)));
talk_dlg.attachClickHandlers(std::bind(select_talk_node_value, _1, _2, std::ref(talk_edit_stack)), {"chooseA","chooseA-regular","chooseB"}); talk_dlg.attachClickHandlers(std::bind(select_talk_node_value, _1, _2, std::ref(talk_edit_stack)), {"chooseA","chooseA-regular","chooseB"});
talk_dlg["who"].attachFocusHandler(check_talk_personality); talk_dlg["who"].attachFocusHandler(check_talk_personality);
talk_dlg.attachFocusHandlers(check_talk_key, {"key1", "key2"}); talk_dlg.attachFocusHandlers(check_talk_key, {"key1", "key2"});