Scenerio Dialog front end moved over to imgui.

This commit is contained in:
Justin Marshall
2020-06-08 17:18:51 -07:00
parent 0fd2b13225
commit 797ba8fa64
+170 -75
View File
@@ -1174,9 +1174,17 @@ std::vector<const char*> scenario_briefing;
std::vector<const char*> scenario_action; std::vector<const char*> scenario_action;
std::vector<const char*> scenario_win; std::vector<const char*> scenario_win;
std::vector<const char*> scenario_loose; std::vector<const char*> scenario_loose;
std::vector<const char*> scenario_theme;
std::vector<const char*> scenario_houses;
char description[DESCRIP_MAX] = ""; char description[DESCRIP_MAX] = "";
int scenario_intromovie = 0; int scenario_intromovie = 0;
bool scenerio_general_options[9] = { 0 };
bool scenerio_process = true;
bool scenerio_cancel = false; // true = user cancels
HouseStaticClass hdata[HOUSE_COUNT];
void ImGui_ScenerioDialog(void) { void ImGui_ScenerioDialog(void) {
bool toolActive = false; bool toolActive = false;
int theater = Scen.Theater; int theater = Scen.Theater;
@@ -1184,49 +1192,127 @@ void ImGui_ScenerioDialog(void) {
int action = Scen.ActionMovie + 1; int action = Scen.ActionMovie + 1;
int win = Scen.WinMovie + 1; int win = Scen.WinMovie + 1;
int lose = Scen.LoseMovie + 1; int lose = Scen.LoseMovie + 1;
int theme = -1;
int base_house = Base.House;
int house = PlayerPtr->Class->House;
HousesType newhouse = (HousesType)house;
HouseStaticClass* hstatic = &hdata[newhouse];
if (Scen.TransitTheme != THEME_NONE) {
theme = Scen.TransitTheme + 1;
}
else {
theme = 0;
}
int ally = 0;
ImGuiStyle& style = ImGui::GetStyle(); ImGuiStyle& style = ImGui::GetStyle();
style.FramePadding = ImVec2(0, 0); style.FramePadding = ImVec2(0, 0);
ImGui::SetNextWindowSize(ImVec2(320 * RESFACTOR, 200 * RESFACTOR)); ImGui::SetNextWindowSize(ImVec2(840, 400));
ImGui::SetNextWindowPos(ImVec2(0, 0)); ImGui::SetNextWindowPos(ImVec2(100, 100));
ImGui::Begin("Scenario Editor", &toolActive, ImGuiWindowFlags_AlwaysAutoResize); ImGui::Begin("Scenario Editor", &toolActive, ImGuiWindowFlags_AlwaysAutoResize);
ImGui::Columns(2, "outer", true); ImGui::Columns(2, "outer", true);
ImGui::Text("Theater"); ImGui::Text("Theater");
ImGui::PushID("t_text"); ImGui::PushID("t_text");
ImGui::Combo("", (int *)&theater, &scenerio_theaters[0], scenerio_theaters.size()); ImGui::Combo("", (int *)&theater, &scenerio_theaters[0], scenerio_theaters.size());
ImGui::PopID(); ImGui::PopID();
ImGui::NextColumn(); ImGui::NextColumn();
ImGui::Text("Scenario Name:"); ImGui::Text("Scenario Name:");
ImGui::PushID("s_name"); ImGui::PushID("s_name");
ImGui::InputText("", description, sizeof(description)); ImGui::InputText("", description, sizeof(description));
ImGui::PopID(); ImGui::PopID();
ImGui::Columns(1); ImGui::Columns(1);
ImGui::Columns(5, "outer2", true); ImGui::Columns(5, "outer2", true);
ImGui::Text("Intro"); ImGui::Text("Intro");
ImGui::PushID("s_intro"); ImGui::PushID("s_intro");
ImGui::Combo("", (int*)&scenario_intromovie, &scenerio_intros[0], scenerio_intros.size()); ImGui::Combo("", (int*)&scenario_intromovie, &scenerio_intros[0], scenerio_intros.size());
ImGui::PopID(); ImGui::PopID();
ImGui::NextColumn(); ImGui::NextColumn();
ImGui::Text("Briefing"); ImGui::Text("Briefing");
ImGui::PushID("brief_txt"); ImGui::PushID("brief_txt");
ImGui::Combo("", (int*)&briefmovie, &scenario_briefing[0], scenario_briefing.size()); ImGui::Combo("", (int*)&briefmovie, &scenario_briefing[0], scenario_briefing.size());
ImGui::PopID(); ImGui::PopID();
ImGui::NextColumn(); ImGui::NextColumn();
ImGui::Text("Action"); ImGui::Text("Action");
ImGui::PushID("action_txt"); ImGui::PushID("action_txt");
ImGui::Combo("", (int*)&action, &scenario_action[0], scenario_action.size()); ImGui::Combo("", (int*)&action, &scenario_action[0], scenario_action.size());
ImGui::PopID(); ImGui::PopID();
ImGui::NextColumn(); ImGui::NextColumn();
ImGui::Text("Win"); ImGui::Text("Win");
ImGui::PushID("win_txt"); ImGui::PushID("win_txt");
ImGui::Combo("", (int*)&win, &scenario_win[0], scenario_win.size()); ImGui::Combo("", (int*)&win, &scenario_win[0], scenario_win.size());
ImGui::PopID(); ImGui::PopID();
ImGui::NextColumn(); ImGui::NextColumn();
ImGui::Text("Lose"); ImGui::Text("Lose");
ImGui::PushID("lose_txt"); ImGui::PushID("lose_txt");
ImGui::Combo("", (int*)&lose, &scenario_loose[0], scenario_loose.size()); ImGui::Combo("", (int*)&lose, &scenario_loose[0], scenario_loose.size());
ImGui::PopID(); ImGui::PopID();
ImGui::Columns(1); ImGui::Columns(1);
ImGui::Columns(2, "outer3", true);
ImGui::Text("Prebuild base");
ImGui::PushID("prebuild_txt");
ImGui::Combo("", (int*)&base_house, &scenario_houses[0], scenario_houses.size());
ImGui::PopID();
ImGui::NextColumn();
ImGui::Text("Theme");
ImGui::PushID("theme_txt");
ImGui::Combo("", (int*)&theme, &scenario_theme[0], scenario_theme.size());
ImGui::PopID();
ImGui::Columns(1);
ImGui::Columns(5, "outer4", true);
ImGui::Text("Country:");
ImGui::PushID("country_box");
ImGui::ListBox("", (int *)&house, &scenario_houses[0], scenario_houses.size());
ImGui::PopID();
ImGui::NextColumn();
ImGui::Text("Tech Level");
ImGui::PushID("tech_slider");
ImGui::SliderInt("", &hstatic->TechLevel, 1, 16);
ImGui::PopID();
ImGui::Text("Credits");
ImGui::PushID("credits_slider");
ImGui::SliderInt("", (int *)&hstatic->InitialCredits, 0, 20000);
ImGui::PopID();
ImGui::Text("Unit Max");
ImGui::PushID("unit_max_slider");
ImGui::SliderInt("", (int*)&hstatic->MaxUnit, 0, 500);
ImGui::PopID();
ImGui::Text("Home Edge");
ImGui::Text("IQ");
ImGui::NextColumn();
ImGui::Text("Allies(broke):");
ImGui::PushID("Allies_Control");
ImGui::ListBox("", (int*)&ally, &scenario_houses[0], scenario_houses.size());
ImGui::PopID();
ImGui::NextColumn();
ImGui::Text("Plyr Control");
ImGui::PushID("Plyr_Control");
ImGui::ListBox("", (int*)&house, &scenario_houses[0], scenario_houses.size());
ImGui::PopID();
ImGui::NextColumn();
ImGui::Checkbox("Inherit Stored Scenario?", &scenerio_general_options[0]);
ImGui::Checkbox("Store Scenario?", &scenerio_general_options[1]);
ImGui::Checkbox("Auto Evac. Tanya(Civilian)?", &scenerio_general_options[2]);
ImGui::Checkbox("Last Mission of Game?", &scenerio_general_options[3]);
ImGui::Checkbox("Inherit Mission Timer from last scenario?", &scenerio_general_options[4]);
ImGui::Checkbox("Disable Spyplane?", &scenerio_general_options[5]);
ImGui::Checkbox("Skip the score screen?", &scenerio_general_options[6]);
ImGui::Checkbox("No Map Selection(Force Var 'B')?", &scenerio_general_options[7]);
ImGui::Checkbox("Return to main menu after scenario finishes?", &scenerio_general_options[8]);
ImGui::Columns(1);
ImGui::NewLine();
ImGui::NewLine();
if (ImGui::Button("Ok")) {
scenerio_process = false;
scenerio_cancel = false; // true = user cancels
}
ImGui::SameLine();
if (ImGui::Button("Cancel")) {
scenerio_process = false;
scenerio_cancel = true; // true = user cancels
}
ImGui::End(); ImGui::End();
Scen.Theater = (TheaterType)(theater); Scen.Theater = (TheaterType)(theater);
@@ -1234,6 +1320,11 @@ void ImGui_ScenerioDialog(void) {
Scen.ActionMovie = (VQType)(action - 1); Scen.ActionMovie = (VQType)(action - 1);
Scen.WinMovie = (VQType)(win - 1); Scen.WinMovie = (VQType)(win - 1);
Scen.LoseMovie = (VQType)(lose - 1); Scen.LoseMovie = (VQType)(lose - 1);
Base.House = (HousesType)base_house;
PlayerPtr->Class->House = (HousesType)house;
if (Scen.TransitTheme != THEME_NONE) {
Scen.TransitTheme = (ThemeType)(theme - 1);
}
} }
@@ -1258,10 +1349,11 @@ void ImGui_ScenerioDialog(void) {
*=========================================================================*/ *=========================================================================*/
int MapEditClass::Scenario_Dialog(void) int MapEditClass::Scenario_Dialog(void)
{ {
scenerio_process = true;
scenerio_cancel = false; // true = user cancels
HousesType house = PlayerPtr->Class->House; HousesType house = PlayerPtr->Class->House;
HousesType newhouse = house; HousesType newhouse = house;
HouseStaticClass hdata[HOUSE_COUNT];
Imgui_Dialog_Function = ImGui_ScenerioDialog; Imgui_Dialog_Function = ImGui_ScenerioDialog;
@@ -1272,12 +1364,15 @@ int MapEditClass::Scenario_Dialog(void)
scenario_action.clear(); scenario_action.clear();
scenario_win.clear(); scenario_win.clear();
scenario_loose.clear(); scenario_loose.clear();
scenario_theme.clear();
scenario_houses.clear();
scenerio_intros.push_back("<NONE>"); scenerio_intros.push_back("<NONE>");
scenario_briefing.push_back("<NONE>"); scenario_briefing.push_back("<NONE>");
scenario_action.push_back("<NONE>"); scenario_action.push_back("<NONE>");
scenario_win.push_back("<NONE>"); scenario_win.push_back("<NONE>");
scenario_loose.push_back("<NONE>"); scenario_loose.push_back("<NONE>");
scenario_theme.push_back("<NONE>");
/* /*
** Fill in the house data for each house that exists. ** Fill in the house data for each house that exists.
@@ -1560,10 +1655,10 @@ int MapEditClass::Scenario_Dialog(void)
TPF_EFNT|TPF_NOSHADOW, TPF_EFNT|TPF_NOSHADOW,
MFCD::Retrieve("EBTN-UP.SHP"), MFCD::Retrieve("EBTN-UP.SHP"),
MFCD::Retrieve("EBTN-DN.SHP")); MFCD::Retrieve("EBTN-DN.SHP"));
for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) { //for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) {
housebtn.Add_Item(HouseTypeClass::As_Reference(h).IniName); // housebtn.Add_Item(HouseTypeClass::As_Reference(h).IniName);
} //}
housebtn.Set_Selected_Index(PlayerPtr->Class->House); //housebtn.Set_Selected_Index(PlayerPtr->Class->House);
/* /*
** Base house choice drop down list. ** Base house choice drop down list.
@@ -1575,7 +1670,8 @@ int MapEditClass::Scenario_Dialog(void)
MFCD::Retrieve("EBTN-UP.SHP"), MFCD::Retrieve("EBTN-UP.SHP"),
MFCD::Retrieve("EBTN-DN.SHP")); MFCD::Retrieve("EBTN-DN.SHP"));
for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) { for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) {
basebtn.Add_Item(HouseTypeClass::As_Reference(h).IniName); //basebtn.Add_Item(HouseTypeClass::As_Reference(h).IniName);
scenario_houses.push_back(HouseTypeClass::As_Reference(h).IniName);
} }
if (Base.House != HOUSE_NONE) { if (Base.House != HOUSE_NONE) {
basebtn.Set_Selected_Index(Base.House); basebtn.Set_Selected_Index(Base.House);
@@ -1590,15 +1686,16 @@ int MapEditClass::Scenario_Dialog(void)
basebtn.X+basebtn.Width+15*RESFACTOR, basebtn.Y, 85, 7*10, basebtn.X+basebtn.Width+15*RESFACTOR, basebtn.Y, 85, 7*10,
MFCD::Retrieve("EBTN-UP.SHP"), MFCD::Retrieve("EBTN-UP.SHP"),
MFCD::Retrieve("EBTN-DN.SHP")); MFCD::Retrieve("EBTN-DN.SHP"));
themebtn.Add_Item("<none>"); //themebtn.Add_Item("<none>");
for (ThemeType th = THEME_FIRST; th < THEME_COUNT; th++) { for (ThemeType th = THEME_FIRST; th < THEME_COUNT; th++) {
themebtn.Add_Item(Theme.Full_Name(th)); //themebtn.Add_Item(Theme.Full_Name(th));
} scenario_theme.push_back(Theme.Full_Name(th));
if (Scen.TransitTheme != THEME_NONE) {
themebtn.Set_Selected_Index(Scen.TransitTheme+1);
} else {
themebtn.Set_Selected_Index(0);
} }
//if (Scen.TransitTheme != THEME_NONE) {
// themebtn.Set_Selected_Index(Scen.TransitTheme+1);
//} else {
// themebtn.Set_Selected_Index(0);
//}
/* /*
** Build level (technology). ** Build level (technology).
@@ -1730,12 +1827,10 @@ int MapEditClass::Scenario_Dialog(void)
*/ */
bool housechange = true; bool housechange = true;
bool display = true; bool display = true;
bool process = true;
bool cancel = false; // true = user cancels
bool dotext = true; // display the text. bool dotext = true; // display the text.
bool fetch = false; // Fetch data from dialog into tracking structure. bool fetch = false; // Fetch data from dialog into tracking structure.
//Set_Logic_Page(SeenBuff); //Set_Logic_Page(SeenBuff);
while (process) { while (scenerio_process) {
/* /*
** Invoke game callback ** Invoke game callback
@@ -1918,15 +2013,15 @@ int MapEditClass::Scenario_Dialog(void)
case (KN_RETURN): case (KN_RETURN):
case (BUTTON_OK | KN_BUTTON): case (BUTTON_OK | KN_BUTTON):
cancel = false; //cancel = false;
process = false; //process = false;
fetch = true; fetch = true;
break; break;
case (KN_ESC): case (KN_ESC):
case (BUTTON_CANCEL | KN_BUTTON): case (BUTTON_CANCEL | KN_BUTTON):
cancel = true; //cancel = true;
process = false; //process = false;
break; break;
default: default:
@@ -1938,25 +2033,25 @@ int MapEditClass::Scenario_Dialog(void)
** If the house changes, then all the gadgets that reflect the settings of the ** If the house changes, then all the gadgets that reflect the settings of the
** house should change as well. ** house should change as well.
*/ */
if (fetch) { //if (fetch) {
fetch = false; // fetch = false;
HouseStaticClass * hstatic = &hdata[house]; // HouseStaticClass * hstatic = &hdata[house];
//
Base.House = HousesType(basebtn.Current_Index()); // Base.House = HousesType(basebtn.Current_Index());
hstatic->InitialCredits = creditbtn.Get_Value() * 100; // hstatic->InitialCredits = creditbtn.Get_Value() * 100;
hstatic->Edge = SourceType(sourcebtn.Current_Index()); // hstatic->Edge = SourceType(sourcebtn.Current_Index());
hstatic->TechLevel = techlevel.Get_Value(); // hstatic->TechLevel = techlevel.Get_Value();
hstatic->MaxUnit = maxunit.Get_Value()/2; // hstatic->MaxUnit = maxunit.Get_Value()/2;
hstatic->MaxInfantry = maxunit.Get_Value()/2; // hstatic->MaxInfantry = maxunit.Get_Value()/2;
hstatic->IQ = smarties.Get_Value(); // hstatic->IQ = smarties.Get_Value();
for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) { // for (h = HOUSE_FIRST; h < HOUSE_COUNT; h++) {
if (allies.Is_Checked(h)) { // if (allies.Is_Checked(h)) {
hstatic->Allies |= (1L << h); // hstatic->Allies |= (1L << h);
} else { // } else {
hstatic->Allies &= ~(1L << h); // hstatic->Allies &= ~(1L << h);
} // }
} // }
} //}
} }
/* /*
@@ -1969,7 +2064,7 @@ int MapEditClass::Scenario_Dialog(void)
/* /*
** If cancel, just return ** If cancel, just return
*/ */
if (cancel) { if (scenerio_cancel) {
return(-1); return(-1);
} }