Triggers should now be save and load able.

This commit is contained in:
Justin Marshall
2020-06-09 21:40:10 -07:00
parent 17464353dd
commit 6fcd7a484e
2 changed files with 452 additions and 219 deletions
+9
View File
@@ -2330,7 +2330,15 @@ void ImGui_SelectTrigger(void) {
ImGui::SetNextWindowPos(ImVec2(100, 100));
ImGui::Begin("Trigger Editor", &toolActive, ImGuiWindowFlags_AlwaysAutoResize);
ImGui::PushItemWidth(450);
bool forceClear = false;
if (triggerlist.size() == 0) {
forceClear = true;
triggerlist.push_back("<NONE>");
}
ImGui::ListBox("", &select_trigger_seleceted, &triggerlist[0], triggerlist.size());
if (forceClear) {
triggerlist.clear();
}
ImGui::PopItemWidth();
ImGui::NewLine();
ImGui::Columns(4, "outert", true);
@@ -2400,6 +2408,7 @@ int MapEditClass::Select_Trigger(void)
{
selectTriggerButtonState = SELECT_TRIGGER_BUTTON_NONE;
Imgui_Dialog_Function = ImGui_SelectTrigger;
select_trigger_seleceted = 0;
/*
** Dialog & button dimensions
+443 -219
View File
@@ -247,11 +247,450 @@ static char* _perstext[3] = {
};
static TriggerTypeClass *currentTriggerClass;
bool edittrigger_process = true;
int FindIndexInVector(std::vector<const char *> &vec, const char* txt) {
for (int i = 0; i < vec.size(); i++) {
if (!strcmp(vec[i], txt)) {
return i;
}
}
return -1;
}
void ImGui_UpdateUITrigger(void) {
//EventChoices
/*
** Primary event specific data retrieval.
*/
//EventControl = MultiStyleType(eventflag);
current_trig_event = currentTriggerClass->Event1.Event;
switch (Event_Needs(currentTriggerClass->Event1.Event)) {
case NEED_HOUSE:
current_event1 = currentTriggerClass->Event1.Data.House;
break;
case NEED_TIME:
current_event1 = currentTriggerClass->Event1.Data.Value;
break;
case NEED_NUMBER:
current_event1 = currentTriggerClass->Event1.Data.Value;
break;
case NEED_STRUCTURE:
current_event1 = currentTriggerClass->Event1.Data.Structure;
break;
case NEED_UNIT:
current_event1 = currentTriggerClass->Event1.Data.Unit;
break;
case NEED_INFANTRY:
current_event1 = currentTriggerClass->Event1.Data.Infantry;
break;
case NEED_AIRCRAFT:
current_event1 = currentTriggerClass->Event1.Data.Aircraft;
break;
case NEED_WAYPOINT:
//Event1.Data.Value = toupper(way1[0]) - 'A';
//if (way1[1] != '\0') {
// Event1.Data.Value = (Event1.Data.Value + 1) * 26;
// Event1.Data.Value += toupper(way1[1]) - 'A';
//}
break;
case NEED_TEAM:
//currentTriggerClass->Event1.Team = TeamTypeClass::From_Name(current_trig_event);
break;
}
/*
** Secondary event specific data retrieval.
*/
current_trig2_event = currentTriggerClass->Event2.Event;
switch (Event_Needs(currentTriggerClass->Event2.Event)) {
case NEED_HOUSE:
current_event2 = currentTriggerClass->Event2.Data.House;
break;
case NEED_TIME:
current_event2 = currentTriggerClass->Event2.Data.Value;
break;
case NEED_NUMBER:
current_event2 = currentTriggerClass->Event2.Data.Value;
break;
case NEED_STRUCTURE:
current_event2 = currentTriggerClass->Event2.Data.Structure;
break;
case NEED_UNIT:
current_event2 = currentTriggerClass->Event2.Data.Unit;
break;
case NEED_INFANTRY:
current_event2 = currentTriggerClass->Event2.Data.Infantry;
break;
case NEED_AIRCRAFT:
current_event2 = currentTriggerClass->Event2.Data.Aircraft;
break;
case NEED_WAYPOINT:
//currentTriggerClass->Event2.Data.Value = toupper(way2[0]) - 'A';
//if (way2[1] != '\0') {
// Event2.Data.Value = (Event2.Data.Value + 1) * 26;
// Event2.Data.Value += toupper(way2[1]) - 'A';
//}
break;
case NEED_TEAM:
//currentTriggerClass->Event2.Team = TeamTypeClass::As_Pointer(ttype2list.Current_Item());
break;
}
/*
** Primary action data retrieval.
*/
//currentTriggerClass->ActionControl = MultiStyleType(actionflag);
current_trig_action = currentTriggerClass->Action1.Action;
switch (Action_Needs(currentTriggerClass->Action1.Action)) {
case NEED_SPECIAL:
current_event3 = currentTriggerClass->Action1.Data.Special;
break;
case NEED_HOUSE:
current_event3 = currentTriggerClass->Action1.Data.House;
break;
case NEED_TRIGGER:
current_event3 = FindIndexInVector(triggerentrylist, currentTriggerClass->Action1.Trigger->Description());
break;
case NEED_TEAM:
//currentTriggerClass->Action1.Team = TeamTypeClass::From_Name(ttype3list.Current_Item());
break;
case NEED_NUMBER:
current_event3 = currentTriggerClass->Action1.Data.Value;
break;
case NEED_WAYPOINT:
//currentTriggerClass->Action1.Data.Value = toupper(way3[0]) - 'A';
//if (way3[1] != '\0') {
// Action1.Data.Value = (Action1.Data.Value + 1) * 26;
// Action1.Data.Value += toupper(way3[1]) - 'A';
//}
break;
case NEED_BOOL:
current_event3 = currentTriggerClass->Action1.Data.Bool;
break;
case NEED_THEME:
current_event3 = currentTriggerClass->Action1.Data.Theme;
break;
case NEED_SOUND:
current_event3 = currentTriggerClass->Action1.Data.Sound;
break;
case NEED_MOVIE:
current_event3 = currentTriggerClass->Action1.Data.Movie;
break;
case NEED_SPEECH:
current_event3 = currentTriggerClass->Action1.Data.Speech;
break;
case NEED_QUARRY:
current_event3 = currentTriggerClass->Action1.Data.Quarry;
break;
}
/*
** Secondary action data retrieval.
*/
current_trig2_action = currentTriggerClass->Action2.Action;
switch (Action_Needs(currentTriggerClass->Action2.Action)) {
case NEED_SPECIAL:
current_event4 = currentTriggerClass->Action2.Data.Special;
break;
case NEED_HOUSE:
current_event4 = currentTriggerClass->Action2.Data.House;
break;
case NEED_TRIGGER:
current_event4 = FindIndexInVector(triggerentrylist, currentTriggerClass->Action2.Trigger->Description());
break;
case NEED_TEAM:
//currentTriggerClass->Action2.Team = TeamTypeClass::From_Name(ttype4list.Current_Item());
break;
case NEED_NUMBER:
current_event4 = currentTriggerClass->Action2.Data.Value;
break;
case NEED_WAYPOINT:
//currentTriggerClass->Action2.Data.Value = toupper(way4[0]) - 'A';
//if (way4[1] != '\0') {
// currentTriggerClass->Action2.Data.Value = (Action2.Data.Value + 1) * 26;
// currentTriggerClass->Action2.Data.Value += toupper(way4[1]) - 'A';
//}
break;
case NEED_BOOL:
current_event4 = currentTriggerClass->Action2.Data.Bool;
break;
case NEED_THEME:
current_event4 = currentTriggerClass->Action2.Data.Theme;
break;
case NEED_MOVIE:
current_event4 = currentTriggerClass->Action2.Data.Movie;
break;
case NEED_SOUND:
current_event4 = currentTriggerClass->Action2.Data.Sound;
break;
case NEED_SPEECH:
current_event4 = currentTriggerClass->Action2.Data.Speech;
break;
case NEED_QUARRY:
current_event4 = currentTriggerClass->Action2.Data.Quarry;
break;
}
}
void ImGui_SaveTrigger(void) {
//EventChoices
/*
** Primary event specific data retrieval.
*/
//EventControl = MultiStyleType(eventflag);
currentTriggerClass->Event1.Event = (TEventType)current_trig_event;
switch (Event_Needs(currentTriggerClass->Event1.Event)) {
case NEED_HOUSE:
currentTriggerClass->Event1.Data.House = (HousesType)current_event1;
break;
case NEED_TIME:
currentTriggerClass->Event1.Data.Value = current_event1;
break;
case NEED_NUMBER:
currentTriggerClass->Event1.Data.Value = current_event1;
break;
case NEED_STRUCTURE:
currentTriggerClass->Event1.Data.Structure = StructType(current_event1);
break;
case NEED_UNIT:
currentTriggerClass->Event1.Data.Unit = UnitType(current_event1);
break;
case NEED_INFANTRY:
currentTriggerClass->Event1.Data.Infantry = InfantryType(current_event1);
break;
case NEED_AIRCRAFT:
currentTriggerClass->Event1.Data.Aircraft = AircraftType(current_event1);
break;
case NEED_WAYPOINT:
//Event1.Data.Value = toupper(way1[0]) - 'A';
//if (way1[1] != '\0') {
// Event1.Data.Value = (Event1.Data.Value + 1) * 26;
// Event1.Data.Value += toupper(way1[1]) - 'A';
//}
break;
case NEED_TEAM:
//currentTriggerClass->Event1.Team = TeamTypeClass::From_Name(current_trig_event);
break;
}
/*
** Secondary event specific data retrieval.
*/
currentTriggerClass->Event2.Event = (TEventType)current_trig2_event;
switch (Event_Needs(currentTriggerClass->Event2.Event)) {
case NEED_HOUSE:
currentTriggerClass->Event2.Data.House = HousesType(current_event2);
break;
case NEED_TIME:
currentTriggerClass->Event2.Data.Value = current_event2;
break;
case NEED_NUMBER:
currentTriggerClass->Event2.Data.Value = current_event2;
break;
case NEED_STRUCTURE:
currentTriggerClass->Event2.Data.Structure = StructType(current_event2);
break;
case NEED_UNIT:
currentTriggerClass->Event2.Data.Unit = UnitType(current_event2);
break;
case NEED_INFANTRY:
currentTriggerClass->Event2.Data.Infantry = InfantryType(current_event2);
break;
case NEED_AIRCRAFT:
currentTriggerClass->Event2.Data.Aircraft = AircraftType(current_event2);
break;
case NEED_WAYPOINT:
//currentTriggerClass->Event2.Data.Value = toupper(way2[0]) - 'A';
//if (way2[1] != '\0') {
// Event2.Data.Value = (Event2.Data.Value + 1) * 26;
// Event2.Data.Value += toupper(way2[1]) - 'A';
//}
break;
case NEED_TEAM:
//currentTriggerClass->Event2.Team = TeamTypeClass::As_Pointer(ttype2list.Current_Item());
break;
}
/*
** Primary action data retrieval.
*/
//currentTriggerClass->ActionControl = MultiStyleType(actionflag);
currentTriggerClass->Action1.Action = (TActionType)current_trig_action;
switch (Action_Needs(currentTriggerClass->Action1.Action)) {
case NEED_SPECIAL:
currentTriggerClass->Action1.Data.Special = SpecialWeaponType(current_event3);
break;
case NEED_HOUSE:
currentTriggerClass->Action1.Data.House = HousesType(current_event3);
break;
case NEED_TRIGGER:
currentTriggerClass->Action1.Trigger = TriggerTypeClass::From_Name(typelist[current_event3]);
break;
case NEED_TEAM:
//currentTriggerClass->Action1.Team = TeamTypeClass::From_Name(ttype3list.Current_Item());
break;
case NEED_NUMBER:
currentTriggerClass->Action1.Data.Value = current_event3;
break;
case NEED_WAYPOINT:
//currentTriggerClass->Action1.Data.Value = toupper(way3[0]) - 'A';
//if (way3[1] != '\0') {
// Action1.Data.Value = (Action1.Data.Value + 1) * 26;
// Action1.Data.Value += toupper(way3[1]) - 'A';
//}
break;
case NEED_BOOL:
currentTriggerClass->Action1.Data.Bool = current_event3;
break;
case NEED_THEME:
currentTriggerClass->Action1.Data.Theme = ThemeType(current_event3);
break;
case NEED_SOUND:
currentTriggerClass->Action1.Data.Sound = VocType(current_event3);
break;
case NEED_MOVIE:
currentTriggerClass->Action1.Data.Movie = VQType(current_event3);
break;
case NEED_SPEECH:
currentTriggerClass->Action1.Data.Speech = VoxType(current_event3);
break;
case NEED_QUARRY:
currentTriggerClass->Action1.Data.Quarry = QuarryType(current_event3);
break;
}
/*
** Secondary action data retrieval.
*/
currentTriggerClass->Action2.Action = (TActionType)current_trig2_action;
switch (Action_Needs(currentTriggerClass->Action2.Action)) {
case NEED_SPECIAL:
currentTriggerClass->Action2.Data.Special = SpecialWeaponType(current_event4);
break;
case NEED_HOUSE:
currentTriggerClass->Action2.Data.House = HousesType(current_event4);
break;
case NEED_TRIGGER:
currentTriggerClass->Action2.Trigger = TriggerTypeClass::From_Name(typelist[current_event4]);
break;
case NEED_TEAM:
//currentTriggerClass->Action2.Team = TeamTypeClass::From_Name(ttype4list.Current_Item());
break;
case NEED_NUMBER:
currentTriggerClass->Action2.Data.Value = current_event4;
break;
case NEED_WAYPOINT:
//currentTriggerClass->Action2.Data.Value = toupper(way4[0]) - 'A';
//if (way4[1] != '\0') {
// currentTriggerClass->Action2.Data.Value = (Action2.Data.Value + 1) * 26;
// currentTriggerClass->Action2.Data.Value += toupper(way4[1]) - 'A';
//}
break;
case NEED_BOOL:
currentTriggerClass->Action2.Data.Bool = current_event4;
break;
case NEED_THEME:
currentTriggerClass->Action2.Data.Theme = ThemeType(current_event4);
break;
case NEED_MOVIE:
currentTriggerClass->Action2.Data.Movie = VQType(current_event4);
break;
case NEED_SOUND:
currentTriggerClass->Action2.Data.Sound = VocType(current_event4);
break;
case NEED_SPEECH:
currentTriggerClass->Action2.Data.Speech = VoxType(current_event4);
break;
case NEED_QUARRY:
currentTriggerClass->Action2.Data.Quarry = QuarryType(current_event4);
break;
}
}
void ImGui_TriggerEdit(void) {
bool toolActive = false;
current_trig_house = currentTriggerClass->House;
current_trig_perst = currentTriggerClass->IsPersistant;
ImGui_UpdateUITrigger();
ImGuiStyle& style = ImGui::GetStyle();
style.FramePadding = ImVec2(0, 0);
@@ -343,6 +782,8 @@ void ImGui_TriggerEdit(void) {
currentTriggerClass->House = (HousesType)current_trig_house;
currentTriggerClass->IsPersistant = (TriggerTypeClass::PersistantType)current_trig_perst;
ImGui_SaveTrigger();
}
/***********************************************************************************************
@@ -1562,224 +2003,7 @@ bool TriggerTypeClass::Edit(void)
*/
case KN_RETURN:
case BUTTON_OK | KN_BUTTON:
House = HousesType(housebtn.Current_Index());
IsPersistant = PersistantType(persbtn.Current_Index());
if (strlen(selected_trigger_name) == 0) {
Set_Name("____");
}
else {
Set_Name(selected_trigger_name);
}
/*
** Primary event specific data retrieval.
*/
EventControl = MultiStyleType(eventflag);
Event1.Event = *event1list.Current_Item();
switch (Event_Needs(Event1.Event)) {
case NEED_HOUSE:
Event1.Data.House = HousesType(htype1list.Current_Index());
break;
case NEED_TIME:
Event1.Data.Value = atoi(event1data.Get_Text());
break;
case NEED_NUMBER:
Event1.Data.Value = atoi(event1data.Get_Text());
break;
case NEED_STRUCTURE:
Event1.Data.Structure = StructType(btype1list.Current_Index());
break;
case NEED_UNIT:
Event1.Data.Unit = UnitType(utype1list.Current_Index());
break;
case NEED_INFANTRY:
Event1.Data.Infantry = InfantryType(itype1list.Current_Index());
break;
case NEED_AIRCRAFT:
Event1.Data.Aircraft = AircraftType(atype1list.Current_Index());
break;
case NEED_WAYPOINT:
Event1.Data.Value = toupper(way1[0]) - 'A';
if (way1[1] != '\0') {
Event1.Data.Value = (Event1.Data.Value + 1) * 26;
Event1.Data.Value += toupper(way1[1]) - 'A';
}
break;
case NEED_TEAM:
Event1.Team = TeamTypeClass::From_Name(ttype1list.Current_Item());
break;
}
/*
** Secondary event specific data retrieval.
*/
Event2.Event = *event2list.Current_Item();
switch (Event_Needs(Event2.Event)) {
case NEED_HOUSE:
Event2.Data.House = HousesType(htype2list.Current_Index());
break;
case NEED_TIME:
Event2.Data.Value = atoi(event2data.Get_Text());
break;
case NEED_NUMBER:
Event2.Data.Value = atoi(event2data.Get_Text());
break;
case NEED_STRUCTURE:
Event2.Data.Structure = StructType(btype2list.Current_Index());
break;
case NEED_UNIT:
Event2.Data.Unit = UnitType(utype2list.Current_Index());
break;
case NEED_INFANTRY:
Event2.Data.Infantry = InfantryType(itype2list.Current_Index());
break;
case NEED_AIRCRAFT:
Event2.Data.Aircraft = AircraftType(atype2list.Current_Index());
break;
case NEED_WAYPOINT:
Event2.Data.Value = toupper(way2[0]) - 'A';
if (way2[1] != '\0') {
Event2.Data.Value = (Event2.Data.Value + 1) * 26;
Event2.Data.Value += toupper(way2[1]) - 'A';
}
break;
case NEED_TEAM:
Event2.Team = TeamTypeClass::As_Pointer(ttype2list.Current_Item());
break;
}
/*
** Primary action data retrieval.
*/
ActionControl = MultiStyleType(actionflag);
Action1.Action = *action1list.Current_Item();
switch (Action_Needs(Action1.Action)) {
case NEED_SPECIAL:
Action1.Data.Special = SpecialWeaponType(spc1.Current_Index());
break;
case NEED_HOUSE:
Action1.Data.House = HousesType(htype3list.Current_Index());
break;
case NEED_TRIGGER:
Action1.Trigger = TriggerTypeClass::From_Name(trtype1list.Current_Item());
break;
case NEED_TEAM:
Action1.Team = TeamTypeClass::From_Name(ttype3list.Current_Item());
break;
case NEED_NUMBER:
Action1.Data.Value = atoi(action1data.Get_Text());
break;
case NEED_WAYPOINT:
Action1.Data.Value = toupper(way3[0]) - 'A';
if (way3[1] != '\0') {
Action1.Data.Value = (Action1.Data.Value + 1) * 26;
Action1.Data.Value += toupper(way3[1]) - 'A';
}
break;
case NEED_BOOL:
Action1.Data.Bool = booltype1list.Current_Index();
break;
case NEED_THEME:
Action1.Data.Theme = ThemeType(themetype1list.Current_Index());
break;
case NEED_SOUND:
Action1.Data.Sound = VocType(soundtype1list.Current_Index());
break;
case NEED_MOVIE:
Action1.Data.Movie = VQType(movietype1list.Current_Index());
break;
case NEED_SPEECH:
Action1.Data.Speech = VoxType(speechtype1list.Current_Index());
break;
case NEED_QUARRY:
Action1.Data.Quarry = QuarryType(qlist1.Current_Index());
break;
}
/*
** Secondary action data retrieval.
*/
Action2.Action = *action2list.Current_Item();
switch (Action_Needs(Action2.Action)) {
case NEED_SPECIAL:
Action2.Data.Special = SpecialWeaponType(spc2.Current_Index());
break;
case NEED_HOUSE:
Action2.Data.House = HousesType(htype4list.Current_Index());
break;
case NEED_TRIGGER:
Action2.Trigger = TriggerTypeClass::From_Name(trtype2list.Current_Item());
break;
case NEED_TEAM:
Action2.Team = TeamTypeClass::From_Name(ttype4list.Current_Item());
break;
case NEED_NUMBER:
Action2.Data.Value = atoi(action2data.Get_Text());
break;
case NEED_WAYPOINT:
Action2.Data.Value = toupper(way4[0]) - 'A';
if (way4[1] != '\0') {
Action2.Data.Value = (Action2.Data.Value + 1) * 26;
Action2.Data.Value += toupper(way4[1]) - 'A';
}
break;
case NEED_BOOL:
Action2.Data.Bool = booltype2list.Current_Index();
break;
case NEED_THEME:
Action2.Data.Theme = ThemeType(themetype2list.Current_Index());
break;
case NEED_MOVIE:
Action2.Data.Movie = VQType(movietype2list.Current_Index());
break;
case NEED_SOUND:
Action2.Data.Sound = VocType(soundtype2list.Current_Index());
break;
case NEED_SPEECH:
Action2.Data.Speech = VoxType(speechtype2list.Current_Index());
break;
case NEED_QUARRY:
Action2.Data.Quarry = QuarryType(qlist1.Current_Index());
break;
}
return(true);
case KN_ESC: