generated from sigonasr2/CPlusPlusProjectTemplate
Prep choice dialog text messages
Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
This commit is contained in:
parent
7361111292
commit
4483444dd9
Binary file not shown.
99
main.cpp
99
main.cpp
@ -166,9 +166,13 @@ int EQUIP_ITEM_MENU_CURSOR=0;
|
||||
int EQUIP_ITEM_MENU_OFFSET=0;
|
||||
std::vector<int> EQUIP_ITEM_MENU_CONTENTS={};
|
||||
std::vector<std::pair<Item*,int>> SHOP_MENU_CONTENTS={};
|
||||
std::array<int,16> MESSAGE_BOX_DIALOG_ANSWERS={};
|
||||
std::array<std::string,3> MESSAGE_BOX_CHOICE_LIST={"","",""};
|
||||
std::array<int,16> MESSAGE_BOX_DIALOG_ANSWERS={-1};
|
||||
int MESSAGE_BOX_DIALOG_CHOICES_MADE=0;
|
||||
std::vector<std::string> MESSAGE_BOX_CHOICE_LIST={};
|
||||
bool waitingForChoice=false;
|
||||
int MESSAGE_BOX_DIALOG_CHOICE_CURSOR=0;
|
||||
bool insideChoice=false;
|
||||
bool selectionMade=false;
|
||||
|
||||
/*
|
||||
[Choice1,Choice2,Choice3]
|
||||
@ -188,6 +192,10 @@ void DisplayMessageBox(std::string targetT) {
|
||||
messageBoxMarker=0;
|
||||
messageBoxStartMarker=0;
|
||||
messageBoxStopMarker=0;
|
||||
for (int i=0;i<MESSAGE_BOX_DIALOG_ANSWERS.size();i++) {
|
||||
MESSAGE_BOX_DIALOG_ANSWERS[i]=-1;
|
||||
}
|
||||
MESSAGE_BOX_DIALOG_CHOICES_MADE=0;
|
||||
}
|
||||
|
||||
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
|
||||
@ -369,7 +377,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
lastPress=frameCount;
|
||||
lastRepeatedFrame=frameCount;
|
||||
}
|
||||
if (messageBoxVisible) {
|
||||
if (messageBoxVisible&&!waitingForChoice) {
|
||||
if (messageBoxMarker==messageBoxFinalText.length()) {
|
||||
if (messageBoxStartMarker+messageBoxStopMarker<targetText.length()) {
|
||||
messageBoxStartMarker+=messageBoxStopMarker;
|
||||
@ -378,6 +386,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
messageBoxText="";
|
||||
messageBoxMarker=0;
|
||||
messageBoxLoad=true;
|
||||
printf("Called 2\n");
|
||||
} else {
|
||||
messageBoxVisible=false;
|
||||
if (CLOSE_OVERWORLD_WINDOW&&INTERACTION_MESSAGES.size()==0) {
|
||||
@ -399,6 +408,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
target->AddHP(healAmt);
|
||||
targetText+=target->obj->name+" recovered "+std::to_string(healAmt)+" hitpoints.\n";
|
||||
messageBoxLoad=true;
|
||||
printf("Called 3\n");
|
||||
messageBoxVisible=true;
|
||||
HEALING_OVERWORLD_MEMBER++;
|
||||
break;
|
||||
@ -424,13 +434,14 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
targetText+="But it failed.";
|
||||
}
|
||||
messageBoxLoad=true;
|
||||
printf("Called 4\n");
|
||||
messageBoxVisible=true;
|
||||
HEALING_OVERWORLD_SINGLE_MEMBER=false;
|
||||
castingMember->selectedMove=nullptr;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
while (messageBoxMarker<messageBoxFinalText.length()&&!waitingForChoice) {
|
||||
while (MessageBoxAllowedToAdvance()) {
|
||||
AdvanceMessageBox();
|
||||
}
|
||||
}
|
||||
@ -665,9 +676,10 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
std::string lastLine="";
|
||||
while (messageBoxStartMarker+messageBoxStopMarker<targetText.length()&&GetTextSizeProp(messageBoxFinalText).y<HEIGHT/4-MESSAGE_BORDER_Y) {
|
||||
if (targetText[messageBoxStopMarker+messageBoxStartMarker]=='[') {
|
||||
while (targetText[messageBoxStopMarker+messageBoxStartMarker]!=']') {
|
||||
while (targetText[messageBoxStopMarker+messageBoxStartMarker]!='<') {
|
||||
messageBoxFinalText+=targetText[messageBoxStopMarker+++messageBoxStartMarker];
|
||||
}
|
||||
messageBoxFinalText+=targetText[messageBoxStopMarker+++messageBoxStartMarker];
|
||||
break;
|
||||
}
|
||||
while (messageBoxStartMarker+messageBoxStopMarker<targetText.length()&&GetTextSizeProp(messageBoxFinalText).x<WIDTH/2-MESSAGE_BORDER_X) {
|
||||
@ -691,27 +703,55 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
}
|
||||
}
|
||||
messageBoxLoad=false;
|
||||
for (int i=0;i<16;i++) {
|
||||
MESSAGE_BOX_DIALOG_ANSWERS[i]=-1;
|
||||
}
|
||||
MESSAGE_BOX_DIALOG_CHOICES_MADE=0;
|
||||
} else {
|
||||
if (messageBoxMarker<messageBoxFinalText.length()) {
|
||||
if (MessageBoxAllowedToAdvance()) {
|
||||
printf("In here: %c\n",messageBoxFinalText[messageBoxMarker]);
|
||||
if (messageBoxFinalText[messageBoxMarker]=='[') {
|
||||
messageBoxMarker++;
|
||||
waitingForChoice=true;
|
||||
MESSAGE_BOX_CHOICE_LIST={"","",""};
|
||||
int counter=0;
|
||||
MESSAGE_BOX_CHOICE_LIST.clear();
|
||||
std::string newMessageBoxChoice="";
|
||||
while (messageBoxFinalText[messageBoxMarker]!=']') {
|
||||
if (messageBoxFinalText[messageBoxMarker]==',') {
|
||||
counter++;
|
||||
MESSAGE_BOX_CHOICE_LIST.push_back(newMessageBoxChoice);
|
||||
newMessageBoxChoice="";
|
||||
messageBoxMarker++;
|
||||
}
|
||||
if (messageBoxFinalText[messageBoxMarker]!=']') {
|
||||
MESSAGE_BOX_CHOICE_LIST[counter]+=messageBoxFinalText[messageBoxMarker++];
|
||||
} else
|
||||
{
|
||||
newMessageBoxChoice+=messageBoxFinalText[messageBoxMarker++];
|
||||
}
|
||||
}
|
||||
MESSAGE_BOX_CHOICE_LIST.push_back(newMessageBoxChoice);
|
||||
newMessageBoxChoice="";
|
||||
for (int i=0;i<MESSAGE_BOX_CHOICE_LIST.size();i++) {
|
||||
printf("%s\n",MESSAGE_BOX_CHOICE_LIST[i].c_str());
|
||||
}
|
||||
MESSAGE_BOX_DIALOG_CHOICE_CURSOR=0;
|
||||
messageBoxMarker++;
|
||||
} else
|
||||
if (messageBoxFinalText[messageBoxMarker]=='>') {
|
||||
messageBoxMarker++;
|
||||
int counter=0;
|
||||
if (messageBoxFinalText[messageBoxMarker]-'0'==MESSAGE_BOX_DIALOG_CHOICE_CURSOR) {
|
||||
messageBoxMarker+=2;
|
||||
insideChoice=true;
|
||||
} else {
|
||||
while(messageBoxFinalText[messageBoxMarker]!='>'&&messageBoxFinalText[messageBoxMarker]!='<') {
|
||||
messageBoxMarker++;
|
||||
}
|
||||
}
|
||||
} else
|
||||
if (!waitingForChoice){
|
||||
if (!insideChoice||insideChoice&&messageBoxFinalText[messageBoxMarker]!='<'&&messageBoxFinalText[messageBoxMarker]!='>') {
|
||||
messageBoxText+=messageBoxFinalText[messageBoxMarker++];
|
||||
} else
|
||||
if (messageBoxFinalText[messageBoxMarker]=='<') {
|
||||
messageBoxMarker++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -763,6 +803,29 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
KEY_LASTPRESSED=NONE;
|
||||
}
|
||||
|
||||
if (waitingForChoice) {
|
||||
if (UpPressed()) {
|
||||
MESSAGE_BOX_DIALOG_CHOICE_CURSOR--;
|
||||
if (MESSAGE_BOX_DIALOG_CHOICE_CURSOR<0) {
|
||||
MESSAGE_BOX_DIALOG_CHOICE_CURSOR=MESSAGE_BOX_CHOICE_LIST.size()-1;
|
||||
}
|
||||
if (MESSAGE_BOX_DIALOG_CHOICE_CURSOR==0) {
|
||||
KEY_LASTPRESSED=NONE;
|
||||
}
|
||||
}
|
||||
if (DownPressed()) {
|
||||
MESSAGE_BOX_DIALOG_CHOICE_CURSOR=(MESSAGE_BOX_DIALOG_CHOICE_CURSOR+1)%MESSAGE_BOX_CHOICE_LIST.size();
|
||||
if (MESSAGE_BOX_DIALOG_CHOICE_CURSOR==MESSAGE_BOX_CHOICE_LIST.size()-1) {
|
||||
KEY_LASTPRESSED=NONE;
|
||||
}
|
||||
}
|
||||
if (ACTIONKEYPRESSED) {
|
||||
MESSAGE_BOX_DIALOG_ANSWERS[MESSAGE_BOX_DIALOG_CHOICES_MADE++]=MESSAGE_BOX_DIALOG_CHOICE_CURSOR;
|
||||
waitingForChoice=false;
|
||||
}
|
||||
goto reset;
|
||||
}
|
||||
|
||||
if (BATTLE_ENCOUNTER!=nullptr&&!messageBoxVisible) {
|
||||
switch (BATTLE_STATE) {
|
||||
case BattleState::SELECT_ACTION:{
|
||||
@ -1727,6 +1790,7 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
}
|
||||
}break;
|
||||
}
|
||||
reset:
|
||||
ANYKEYPRESSED=ACTIONKEYPRESSED=false;
|
||||
if (KEY_LASTPRESSED!=NONE) {
|
||||
lastRepeatedFrame=frameCount;
|
||||
@ -2249,6 +2313,13 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
if (messageBoxVisible) {
|
||||
DrawDialogBox({1,1},{WIDTH/2,HEIGHT/4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||
DrawStringPropDecal({6,6},messageBoxText);
|
||||
if (waitingForChoice) {
|
||||
DrawDialogBox({1,1+HEIGHT/4},{WIDTH/3,(int)MESSAGE_BOX_CHOICE_LIST.size()*12+4},Pixel(70, 33, 105,220),Pixel(62, 54, 69,220),Pixel(185, 148, 255,220));
|
||||
for (int i=0;i<MESSAGE_BOX_CHOICE_LIST.size();i++) {
|
||||
DrawStringPropDecal({13,(float)(1+HEIGHT/4+4+i*12)},MESSAGE_BOX_CHOICE_LIST[i]);
|
||||
}
|
||||
DrawDecal({5,(float)(1+HEIGHT/4+MESSAGE_BOX_DIALOG_CHOICE_CURSOR*12+4)},SPRITES["cursor.png"]);
|
||||
}
|
||||
}
|
||||
for (int i=0;i<PARTICLES.size();i++) {
|
||||
PARTICLES[i]->render(this);
|
||||
@ -4676,6 +4747,10 @@ This is a test message that lets us trigger straight from a cutscene! Cool!)"),
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool MessageBoxAllowedToAdvance() {
|
||||
return messageBoxMarker<messageBoxFinalText.length()&&!waitingForChoice;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
|
2
object.h
2
object.h
@ -183,7 +183,7 @@ class TrashCan_Obj : public Object{
|
||||
class Shopkeeper_Obj : public Object{
|
||||
DynamicObject(Shopkeeper_Obj)
|
||||
std::vector<std::pair<Item*,int>> itemList;
|
||||
std::string welcomeMessage="Welcome! Please choose an option: [BUY,SELL]";
|
||||
std::string welcomeMessage="Welcome! Please choose an option: [BUY,SELL]>0:Please take a look through our wares.>1:What would you like to sell?<";
|
||||
Interaction Interact()override{
|
||||
return {{welcomeMessage}};
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user