UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
cp_mission_callbacks.cpp
Go to the documentation of this file.
1 
8 /*
9 Copyright (C) 2002-2020 UFO: Alien Invasion.
10 
11 This program is free software; you can redistribute it and/or
12 modify it under the terms of the GNU General Public License
13 as published by the Free Software Foundation; either version 2
14 of the License, or (at your option) any later version.
15 
16 This program is distributed in the hope that it will be useful,
17 but WITHOUT ANY WARRANTY; without even the implied warranty of
18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19 
20 See the GNU General Public License for more details.
21 
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software
24 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
25 */
26 
27 #include "cp_mission_callbacks.h"
28 #include "../../cl_shared.h"
29 #include "../../ui/ui_dataids.h"
30 #include "cp_campaign.h"
31 #include "cp_geoscape.h"
32 #include "cp_missions.h"
33 #include "cp_auto_mission.h"
34 #include "cp_popup.h"
35 
39 static void AM_Go_f (void)
40 {
41  mission_t* mission = GEO_GetSelectedMission();
42  missionResults_t* results = &(mission->missionResults);
43  battleParam_t* battleParam = &ccs.battleParameters;
44 
45  if (!mission) {
46  cgi->Com_DPrintf(DEBUG_CLIENT, "GAME_CP_MissionAutoGo_f: No update after automission\n");
47  return;
48  }
49 
50  if (GEO_GetMissionAircraft() == nullptr) {
51  cgi->Com_Printf("GAME_CP_MissionAutoGo_f: No aircraft at target pos\n");
52  return;
53  }
54 
55  if (GEO_GetInterceptorAircraft() == nullptr) {
56  cgi->Com_Printf("GAME_CP_MissionAutoGo_f: No intercept aircraft given\n");
57  return;
58  }
59 
60  cgi->UI_PopWindow(false);
61 
62  if (mission->stage != STAGE_BASE_ATTACK) {
63  if (!mission->active) {
64  MS_AddNewMessage(_("Notice"), _("Your dropship is not near the landing zone"));
65  return;
66  } else if (mission->mapDef->storyRelated) {
67  cgi->Com_DPrintf(DEBUG_CLIENT, "You have to play this mission, because it's story related\n");
68  /* ensure, that the automatic button is no longer visible */
69  cgi->Cvar_Set("cp_mission_autogo_available", "0");
70  return;
71  }
72  }
73 
74  /* start the map */
75  CP_CreateBattleParameters(mission, battleParam, GEO_GetMissionAircraft());
76  battleParam->retriable = false;
77 
78  results->state = LOST;
79  AM_Go(mission, GEO_GetInterceptorAircraft(), ccs.curCampaign, battleParam, results);
80 }
81 
89 static void AM_Check_f (void)
90 {
91  const mission_t* mission = GEO_GetSelectedMission();
92 
93  if (!mission || GEO_GetInterceptorAircraft() == nullptr) {
94  cgi->Com_DPrintf(DEBUG_CLIENT, "GAME_CP_MissionAutoCheck_f: No update after automission\n");
95  return;
96  }
97 
98  if (mission->mapDef->storyRelated) {
99  cgi->Com_DPrintf(DEBUG_CLIENT, "GAME_CP_MissionAutoCheck_f: story related - auto mission is disabled\n");
100  cgi->Cvar_Set("cp_mission_autogo_available", "0");
101  } else {
102  cgi->Com_DPrintf(DEBUG_CLIENT, "GAME_CP_MissionAutoCheck_f: auto mission is enabled\n");
103  cgi->Cvar_Set("cp_mission_autogo_available", "1");
104  }
105 }
106 
112 {
113  linkedList_t* list = nullptr;
114 
115  /* init result text */
116  cgi->UI_ResetData(TEXT_LIST2);
117 
118  /* aliens */
119  cgi->LIST_AddString(&list, va("%s\t%i", _("Aliens killed"), results->aliensKilled));
120  cgi->LIST_AddString(&list, va("%s\t%i", _("Aliens captured"), results->aliensStunned));
121  cgi->LIST_AddString(&list, va("%s\t%i", _("Alien survivors"), results->aliensSurvived));
122  cgi->LIST_AddString(&list, "");
123  /* phalanx */
124  cgi->LIST_AddString(&list, va("%s\t%i", _("PHALANX soldiers killed in action"), results->ownKilled));
125  /* @todo FIXME right now stunned soldiers are shown as MIA when the game ends in a draw or the
126  * mission is aborted and they are in the rescue zone, and in both cases they aren't MIA they'll,
127  * return safely to base, on the other hand stunned soldiers left behind when aborting are
128  * killed at mission end, so there's never a valid case of soldiers going MIA */
129  cgi->LIST_AddString(&list, va("%s\t%i", _("PHALANX soldiers missing in action"), results->ownStunned));
130  cgi->LIST_AddString(&list, va("%s\t%i", _("PHALANX friendly fire losses"), results->ownKilledFriendlyFire));
131  cgi->LIST_AddString(&list, va("%s\t%i", _("PHALANX survivors"), results->ownSurvived));
132  cgi->LIST_AddString(&list, "");
133 
134  cgi->LIST_AddString(&list, va("%s\t%i", _("Civilians killed"), results->civiliansKilled));
135  cgi->LIST_AddString(&list, va("%s\t%i", _("Civilians killed by friendly fire"), results->civiliansKilledFriendlyFire));
136  cgi->LIST_AddString(&list, va("%s\t%i", _("Civilians saved"), results->civiliansSurvived));
137  cgi->LIST_AddString(&list, "");
138 
139  if (results->itemTypes > 0 && results->itemAmount > 0)
140  cgi->LIST_AddString(&list, va("%s\t%i/%i", _("Gathered items (types/all)"), results->itemTypes, results->itemAmount));
141 
142  cgi->UI_RegisterLinkedListText(TEXT_LIST2, list);
143 }
144 
148 static void MIS_GeoSelectMission_f (void)
149 {
150  if (cgi->Cmd_Argc() < 2) {
151  return;
152  }
153 
154  const int index = atoi(cgi->Cmd_Argv(1));
155  mission_t* mission = MIS_GetByIdx(index);
156  if (mission == nullptr)
157  return;
158 
159  if (!GEO_IsMissionSelected(mission))
160  GEO_SelectMission(mission);
163 }
164 
165 static const cmdList_t missionCallbacks[] = {
166  {"cp_missionauto_check", AM_Check_f, "Checks whether this mission can be done automatically"},
167  {"cp_mission_autogo", AM_Go_f, "Let the current selection mission be done automatically"},
168  {"geo_mission_select", MIS_GeoSelectMission_f, nullptr},
169  {nullptr, nullptr, nullptr}
170 };
174 void MIS_InitCallbacks (void)
175 {
176  cgi->Cmd_TableAddList(missionCallbacks);
177 }
178 
183 {
184  cgi->Cmd_TableRemoveList(missionCallbacks);
185 }
Header file for single player automatic (quick, simulated) missions, without going to the battlescape...
const char * va(const char *format,...)
does a varargs printf into a temp buffer, so I don't need to have varargs versions of all text functi...
Definition: shared.cpp:410
header file UI callbacks for missions.
#define _(String)
Definition: cl_shared.h:43
mission definition
Definition: cp_missions.h:85
uiMessageListNodeMessage_t * MS_AddNewMessage(const char *title, const char *text, messageType_t type, technology_t *pedia, bool popup, bool playSound)
Adds a new message to message stack.
Definition: cp_messages.cpp:61
cvar_t *IMPORT * Cvar_Set(const char *varName, const char *value,...) __attribute__((format(__printf__
#define DEBUG_CLIENT
Definition: defines.h:59
void CL_DisplayPopupInterceptMission(mission_t *mission)
Display the popup_mission.
Definition: cp_popup.cpp:184
battleParam_t battleParameters
Definition: cp_campaign.h:235
Campaign missions headers.
const cgame_import_t * cgi
#define GEO_IsMissionSelected(mission)
Definition: cp_geoscape.h:54
bool storyRelated
Definition: q_shared.h:489
ccs_t ccs
Definition: cp_campaign.cpp:62
Definition: cmd.h:86
void CP_CreateBattleParameters(mission_t *mission, battleParam_t *param, const aircraft_t *aircraft)
Create parameters needed for battle. This is the data that is used for starting the tactical part of ...
Header for Geoscape management.
void AM_Go(mission_t *mission, aircraft_t *aircraft, const campaign_t *campaign, const battleParam_t *battleParameters, missionResults_t *results)
Handles the auto mission.
missionState_t state
Definition: cp_missions.h:62
int ownKilledFriendlyFire
Definition: cp_missions.h:74
bool active
Definition: cp_missions.h:89
#define GEO_GetMissionAircraft()
Definition: cp_geoscape.h:60
QGL_EXTERN GLuint index
Definition: r_gl.h:110
int civiliansKilledFriendlyFire
Definition: cp_missions.h:77
static void MIS_GeoSelectMission_f(void)
Select mission on Geoscape.
static const cmdList_t missionCallbacks[]
void MIS_InitCallbacks(void)
Init UI callbacks for missions-subsystem.
#define GEO_GetSelectedMission()
Definition: cp_geoscape.h:59
missionResults_t missionResults
Definition: cp_missions.h:112
Header file for single player campaign control.
mapDef_t * mapDef
Definition: cp_missions.h:88
campaign_t * curCampaign
Definition: cp_campaign.h:377
void MIS_ShutdownCallbacks(void)
Close UI callbacks for missions-subsystem.
static void AM_Check_f(void)
Checks whether you have to play this mission or can be done via automission You can mark a mission as...
mission_t * MIS_GetByIdx(int id)
Find mission corresponding to idx.
Structure with mission info needed to create results summary at menu won.
Definition: cp_missions.h:60
const char *IMPORT * Cmd_Argv(int n)
mission_t * GEO_SelectMission(mission_t *mission)
Select the specified mission.
#define GEO_GetInterceptorAircraft()
Definition: cp_geoscape.h:57
missionStage_t stage
Definition: cp_missions.h:98
void MIS_InitResultScreen(const missionResults_t *results)
Updates mission result menu text with appropriate values.
static void AM_Go_f(void)
Callback function to start automission.