1 #include "SitRepEntry.h"
2
3 #include "i18n.h"
4 #include "Logger.h"
5 #include "AppInterface.h"
6 #include "../universe/Predicates.h"
7 #include "../universe/Building.h"
8 #include "../universe/Planet.h"
9 #include "../universe/System.h"
10 #include "../universe/Ship.h"
11 #include "../universe/Fleet.h"
12 #include "../universe/Universe.h"
13
14
SitRepEntry()15 SitRepEntry::SitRepEntry() :
16 VarText(),
17 m_turn(INVALID_GAME_TURN),
18 m_icon("/icons/sitrep/generic.png")
19 {}
20
SitRepEntry(const std::string & template_string,int turn,const std::string & icon,const std::string label,bool stringtable_lookup)21 SitRepEntry::SitRepEntry(const std::string& template_string, int turn,
22 const std::string& icon, const std::string label,
23 bool stringtable_lookup) :
24 VarText(template_string, stringtable_lookup),
25 m_turn(turn),
26 m_icon(icon.empty() ? "/icons/sitrep/generic.png" : icon),
27 m_label(label)
28 {}
29
GetDataIDNumber(const std::string & tag) const30 int SitRepEntry::GetDataIDNumber(const std::string& tag) const {
31 auto elem = m_variables.find(tag);
32 try {
33 if (elem != m_variables.end())
34 return boost::lexical_cast<int>(elem->second);
35 } catch (...) {
36 return -1;
37 }
38 return -1;
39 }
40
GetDataString(const std::string & tag) const41 const std::string& SitRepEntry::GetDataString(const std::string& tag) const {
42 static const std::string EMPTY_STRING;
43 auto elem = m_variables.find(tag);
44 if (elem == m_variables.end())
45 return EMPTY_STRING;
46 return elem->second;
47 }
48
Dump() const49 std::string SitRepEntry::Dump() const {
50 std::string retval = "SitRep template_string = \"" + m_template_string + "\"";
51 for (const auto& variable : m_variables)
52 retval += " " + variable.first + " = " + variable.second;
53 retval += " turn = " + std::to_string(m_turn);
54 retval += " icon = " + m_icon;
55 retval += " label = " + m_label;
56 return retval;
57 }
58
CreateTechResearchedSitRep(const std::string & tech_name)59 SitRepEntry CreateTechResearchedSitRep(const std::string& tech_name) {
60 SitRepEntry sitrep(
61 UserStringNop("SITREP_TECH_RESEARCHED"),
62 CurrentTurn(),
63 "icons/sitrep/tech_researched.png",
64 UserStringNop("SITREP_TECH_RESEARCHED_LABEL"), true);
65 sitrep.AddVariable(VarText::TECH_TAG, tech_name);
66 return sitrep;
67 }
68
CreateShipBuiltSitRep(int ship_id,int system_id,int shipdesign_id)69 SitRepEntry CreateShipBuiltSitRep(int ship_id, int system_id, int shipdesign_id) {
70 SitRepEntry sitrep(
71 UserStringNop("SITREP_SHIP_BUILT"),
72 CurrentTurn() + 1,
73 "icons/sitrep/ship_produced.png",
74 UserStringNop("SITREP_SHIP_BUILT_LABEL"), true);
75 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
76 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(ship_id));
77 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(shipdesign_id));
78 return sitrep;
79 }
80
CreateShipBlockBuiltSitRep(int system_id,int shipdesign_id,int number)81 SitRepEntry CreateShipBlockBuiltSitRep(int system_id, int shipdesign_id, int number) {
82 SitRepEntry sitrep(
83 UserStringNop("SITREP_SHIP_BATCH_BUILT"),
84 CurrentTurn() + 1,
85 "icons/sitrep/ship_produced.png",
86 UserStringNop("SITREP_SHIP_BATCH_BUILT_LABEL"), true);
87 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
88 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(shipdesign_id));
89 sitrep.AddVariable(VarText::RAW_TEXT_TAG, std::to_string(number));
90 return sitrep;
91 }
92
CreateBuildingBuiltSitRep(int building_id,int planet_id)93 SitRepEntry CreateBuildingBuiltSitRep(int building_id, int planet_id) {
94 SitRepEntry sitrep(
95 UserStringNop("SITREP_BUILDING_BUILT"),
96 CurrentTurn() + 1,
97 "icons/sitrep/building_produced.png",
98 UserStringNop("SITREP_BUILDING_BUILT_LABEL"), true);
99 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
100 sitrep.AddVariable(VarText::BUILDING_ID_TAG, std::to_string(building_id));
101 return sitrep;
102 }
103
CreateTechUnlockedSitRep(const std::string & tech_name)104 SitRepEntry CreateTechUnlockedSitRep(const std::string& tech_name) {
105 SitRepEntry sitrep(
106 UserStringNop("SITREP_TECH_UNLOCKED"),
107 CurrentTurn(),
108 "icons/sitrep/tech_unlocked.png",
109 UserStringNop("SITREP_TECH_UNLOCKED_LABEL"), true);
110 sitrep.AddVariable(VarText::TECH_TAG, tech_name);
111 return sitrep;
112 }
113
CreateBuildingTypeUnlockedSitRep(const std::string & building_type_name)114 SitRepEntry CreateBuildingTypeUnlockedSitRep(const std::string& building_type_name) {
115 SitRepEntry sitrep(
116 UserStringNop("SITREP_BUILDING_TYPE_UNLOCKED"),
117 CurrentTurn(),
118 "icons/sitrep/building_type_unlocked.png",
119 UserStringNop("SITREP_BUILDING_TYPE_UNLOCKED_LABEL"), true);
120 sitrep.AddVariable(VarText::BUILDING_TYPE_TAG, building_type_name);
121 return sitrep;
122 }
123
CreateShipHullUnlockedSitRep(const std::string & ship_hull_name)124 SitRepEntry CreateShipHullUnlockedSitRep(const std::string& ship_hull_name) {
125 SitRepEntry sitrep(
126 UserStringNop("SITREP_SHIP_HULL_UNLOCKED"),
127 CurrentTurn(),
128 "icons/sitrep/ship_hull_unlocked.png",
129 UserStringNop("SITREP_SHIP_HULL_UNLOCKED_LABEL"), true);
130 sitrep.AddVariable(VarText::SHIP_HULL_TAG, ship_hull_name);
131 return sitrep;
132 }
133
CreateShipPartUnlockedSitRep(const std::string & ship_part_name)134 SitRepEntry CreateShipPartUnlockedSitRep(const std::string& ship_part_name) {
135 SitRepEntry sitrep(
136 UserStringNop("SITREP_SHIP_PART_UNLOCKED"),
137 CurrentTurn(),
138 "icons/sitrep/ship_part_unlocked.png",
139 UserStringNop("SITREP_SHIP_PART_UNLOCKED_LABEL"), true);
140 sitrep.AddVariable(VarText::SHIP_PART_TAG, ship_part_name);
141 return sitrep;
142 }
143
CreateCombatSitRep(int system_id,int log_id,int enemy_id)144 SitRepEntry CreateCombatSitRep(int system_id, int log_id, int enemy_id) {
145 std::string template_string = (enemy_id == ALL_EMPIRES)
146 ? UserStringNop("SITREP_COMBAT_SYSTEM")
147 : UserStringNop("SITREP_COMBAT_SYSTEM_ENEMY");
148 std::string label_string = (enemy_id == ALL_EMPIRES)
149 ? UserStringNop("SITREP_COMBAT_SYSTEM_LABEL")
150 : UserStringNop("SITREP_COMBAT_SYSTEM_ENEMY_LABEL");
151 SitRepEntry sitrep(
152 template_string,
153 CurrentTurn() + 1, "icons/sitrep/combat.png", label_string, true);
154 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
155 sitrep.AddVariable(VarText::COMBAT_ID_TAG, std::to_string(log_id));
156 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(enemy_id));
157 return sitrep;
158 }
159
CreateGroundCombatSitRep(int planet_id,int enemy_id)160 SitRepEntry CreateGroundCombatSitRep(int planet_id, int enemy_id) {
161 std::string template_string = (enemy_id == ALL_EMPIRES)
162 ? UserStringNop("SITREP_GROUND_BATTLE")
163 : UserStringNop("SITREP_GROUND_BATTLE_ENEMY");
164 std::string label_string = (enemy_id == ALL_EMPIRES)
165 ? UserStringNop("SITREP_GROUND_BATTLE_LABEL")
166 : UserStringNop("SITREP_GROUND_BATTLE_ENEMY_LABEL");
167 SitRepEntry sitrep(
168 template_string,
169 CurrentTurn() + 1, "icons/sitrep/ground_combat.png", label_string, true);
170 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
171 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(enemy_id));
172 return sitrep;
173 }
174
CreatePlanetCapturedSitRep(int planet_id,int empire_id)175 SitRepEntry CreatePlanetCapturedSitRep(int planet_id, int empire_id) {
176 SitRepEntry sitrep(
177 UserStringNop("SITREP_PLANET_CAPTURED"),
178 CurrentTurn() + 1,
179 "icons/sitrep/planet_captured.png",
180 UserStringNop("SITREP_PLANET_CAPTURED_LABEL"), true);
181 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
182 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(empire_id));
183 return sitrep;
184 }
185
186 namespace {
GenericCombatDamagedObjectSitrep(int combat_system_id)187 SitRepEntry GenericCombatDamagedObjectSitrep(int combat_system_id) {
188 SitRepEntry sitrep(
189 UserStringNop("SITREP_OBJECT_DAMAGED_AT_SYSTEM"),
190 CurrentTurn() + 1,
191 "icons/sitrep/combat_damage.png",
192 UserStringNop("SITREP_OBJECT_DAMAGED_AT_SYSTEM_LABEL"), true);
193 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(combat_system_id));
194 return sitrep;
195 }
196
GenericCombatDestroyedObjectSitrep(int combat_system_id)197 SitRepEntry GenericCombatDestroyedObjectSitrep(int combat_system_id) {
198 SitRepEntry sitrep(
199 UserStringNop("SITREP_OBJECT_DESTROYED_AT_SYSTEM"),
200 CurrentTurn() + 1,
201 "icons/sitrep/combat_destroyed.png",
202 UserStringNop("SITREP_OBJECT_DESTROYED_AT_SYSTEM_LABEL"), true);
203 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(combat_system_id));
204 return sitrep;
205 }
206 }
207
CreateCombatDamagedObjectSitRep(int object_id,int combat_system_id,int empire_id)208 SitRepEntry CreateCombatDamagedObjectSitRep(int object_id, int combat_system_id, int empire_id) {
209 auto obj = Objects().get(object_id);
210 if (!obj)
211 return GenericCombatDamagedObjectSitrep(combat_system_id);
212
213 SitRepEntry sitrep;
214
215 if (auto ship = std::dynamic_pointer_cast<const Ship>(obj)) {
216 if (ship->Unowned())
217 sitrep = SitRepEntry(
218 UserStringNop("SITREP_UNOWNED_SHIP_DAMAGED_AT_SYSTEM"),
219 CurrentTurn() + 1,
220 "icons/sitrep/combat_damage.png",
221 UserStringNop("SITREP_UNOWNED_SHIP_DAMAGED_AT_SYSTEM_LABEL"), true);
222 else
223 sitrep = SitRepEntry(
224 UserStringNop("SITREP_SHIP_DAMAGED_AT_SYSTEM"),
225 CurrentTurn() + 1,
226 "icons/sitrep/combat_damage.png",
227 UserStringNop("SITREP_SHIP_DAMAGED_AT_SYSTEM_LABEL"), true);
228 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(object_id));
229 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(ship->DesignID()));
230
231 } else if (auto planet = std::dynamic_pointer_cast<const Planet>(obj)) {
232 if (planet->Unowned())
233 sitrep = SitRepEntry(
234 UserStringNop("SITREP_UNOWNED_PLANET_ATTACKED_AT_SYSTEM"),
235 CurrentTurn() + 1,
236 "icons/sitrep/colony_bombarded.png",
237 UserStringNop("SITREP_UNOWNED_PLANET_ATTACKED_AT_SYSTEM_LABEL"), true);
238 else
239 sitrep = SitRepEntry(
240 UserStringNop("SITREP_PLANET_ATTACKED_AT_SYSTEM"),
241 CurrentTurn() + 1,
242 "icons/sitrep/colony_bombarded.png",
243 UserStringNop("SITREP_PLANET_ATTACKED_AT_SYSTEM_LABEL"), true);
244 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(object_id));
245
246 } else {
247 sitrep = GenericCombatDestroyedObjectSitrep(combat_system_id);
248 }
249
250 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(obj->Owner()));
251 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(combat_system_id));
252
253 return sitrep;
254 }
255
CreateCombatDestroyedObjectSitRep(int object_id,int combat_system_id,int empire_id)256 SitRepEntry CreateCombatDestroyedObjectSitRep(int object_id, int combat_system_id, int empire_id) {
257 auto obj = EmpireKnownObjects(empire_id).get(object_id);
258 if (!obj) {
259 DebugLogger() << "Object " << object_id << " does not exist!!!";
260 return GenericCombatDestroyedObjectSitrep(combat_system_id);
261 }
262
263 SitRepEntry sitrep;
264
265 if (auto ship = std::dynamic_pointer_cast<const Ship>(obj)) {
266 if (ship->Unowned())
267 sitrep = SitRepEntry(
268 UserStringNop("SITREP_UNOWNED_SHIP_DESTROYED_AT_SYSTEM"),
269 CurrentTurn() + 1,
270 "icons/sitrep/combat_destroyed.png",
271 UserStringNop("SITREP_UNOWNED_SHIP_DESTROYED_AT_SYSTEM_LABEL"), true);
272 else if (ship->OwnedBy(empire_id))
273 sitrep = SitRepEntry(
274 UserStringNop("SITREP_OWN_SHIP_DESTROYED_AT_SYSTEM"),
275 CurrentTurn() + 1,
276 "icons/sitrep/combat_destroyed.png",
277 UserStringNop("SITREP_OWN_SHIP_DESTROYED_AT_SYSTEM_LABEL"), true);
278 else
279 sitrep = SitRepEntry(
280 UserStringNop("SITREP_SHIP_DESTROYED_AT_SYSTEM"),
281 CurrentTurn() + 1,
282 "icons/sitrep/combat_destroyed.png",
283 UserStringNop("SITREP_SHIP_DESTROYED_AT_SYSTEM_LABEL"), true);
284 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(object_id));
285 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(ship->DesignID()));
286
287 } else if (auto fleet = std::dynamic_pointer_cast<const Fleet>(obj)) {
288 if (fleet->Unowned())
289 sitrep = SitRepEntry(
290 UserStringNop("SITREP_UNOWNED_FLEET_DESTROYED_AT_SYSTEM"),
291 CurrentTurn() + 1,
292 "icons/sitrep/combat_destroyed.png",
293 UserStringNop("SITREP_UNOWNED_FLEET_DESTROYED_AT_SYSTEM_LABEL"), true);
294 else
295 sitrep = SitRepEntry(
296 UserStringNop("SITREP_FLEET_DESTROYED_AT_SYSTEM"),
297 CurrentTurn() + 1,
298 "icons/sitrep/combat_destroyed.png",
299 UserStringNop("SITREP_FLEET_DESTROYED_AT_SYSTEM_LABEL"), true);
300 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(object_id));
301
302 } else if (auto planet = std::dynamic_pointer_cast<const Planet>(obj)) {
303 if (planet->Unowned())
304 sitrep = SitRepEntry(
305 UserStringNop("SITREP_UNOWNED_PLANET_DESTROYED_AT_SYSTEM"),
306 CurrentTurn() + 1,
307 "icons/sitrep/combat_destroyed.png",
308 UserStringNop("SITREP_UNOWNED_PLANET_DESTROYED_AT_SYSTEM_LABEL"), true);
309 else
310 sitrep = SitRepEntry(
311 UserStringNop("SITREP_PLANET_DESTROYED_AT_SYSTEM"),
312 CurrentTurn() + 1,
313 "icons/sitrep/combat_destroyed.png",
314 UserStringNop("SITREP_PLANET_DESTROYED_AT_SYSTEM_LABEL"), true);
315 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(object_id));
316
317 } else if (auto building = std::dynamic_pointer_cast<const Building>(obj)) {
318 if (building->Unowned())
319 sitrep = SitRepEntry(
320 UserStringNop("SITREP_UNOWNED_BUILDING_DESTROYED_ON_PLANET_AT_SYSTEM"),
321 CurrentTurn() + 1,
322 "icons/sitrep/combat_destroyed.png",
323 UserStringNop("SITREP_UNOWNED_BUILDING_DESTROYED_ON_PLANET_AT_SYSTEM_LABEL"), true);
324 else
325 sitrep = SitRepEntry(
326 UserStringNop("SITREP_BUILDING_DESTROYED_ON_PLANET_AT_SYSTEM"),
327 CurrentTurn() + 1,
328 "icons/sitrep/combat_destroyed.png",
329 UserStringNop("SITREP_BUILDING_DESTROYED_ON_PLANET_AT_SYSTEM_LABEL"), true);
330 sitrep.AddVariable(VarText::BUILDING_ID_TAG, std::to_string(object_id));
331 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(building->PlanetID()));
332 } else {
333 sitrep = GenericCombatDestroyedObjectSitrep(combat_system_id);
334 }
335
336 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(obj->Owner()));
337 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(combat_system_id));
338
339 return sitrep;
340 }
341
CreatePlanetDepopulatedSitRep(int planet_id)342 SitRepEntry CreatePlanetDepopulatedSitRep(int planet_id) {
343 SitRepEntry sitrep(
344 UserStringNop("SITREP_PLANET_DEPOPULATED"),
345 CurrentTurn() + 1,
346 "icons/sitrep/colony_destroyed.png",
347 UserStringNop("SITREP_PLANET_DEPOPULATED_LABEL"), true);
348 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
349 return sitrep;
350 }
351
CreatePlanetColonizedSitRep(int planet_id,const std::string & species)352 SitRepEntry CreatePlanetColonizedSitRep(int planet_id, const std::string& species) {
353 SitRepEntry sitrep(
354 UserStringNop("SITREP_PLANET_COLONIZED"),
355 CurrentTurn() + 1,
356 "icons/sitrep/planet_colonized.png",
357 UserStringNop("SITREP_PLANET_COLONIZED_LABEL"), true);
358 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
359 sitrep.AddVariable(VarText::SPECIES_TAG, species);
360 return sitrep;
361 }
362
CreatePlanetOutpostedSitRep(int planet_id)363 SitRepEntry CreatePlanetOutpostedSitRep(int planet_id) {
364 SitRepEntry sitrep(
365 UserStringNop("SITREP_PLANET_OUTPOSTED"),
366 CurrentTurn() + 1,
367 "icons/sitrep/planet_colonized.png",
368 UserStringNop("SITREP_PLANET_OUTPOSTED_LABEL"), true);
369 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
370 return sitrep;
371 }
372
CreatePlanetGiftedSitRep(int planet_id,int empire_id)373 SitRepEntry CreatePlanetGiftedSitRep(int planet_id, int empire_id) {
374 SitRepEntry sitrep(
375 UserStringNop("SITREP_PLANET_GIFTED"),
376 CurrentTurn() + 1,
377 "icons/sitrep/gift.png",
378 UserStringNop("SITREP_PLANET_GIFTED_LABEL"), true);
379 sitrep.AddVariable(VarText::PLANET_ID_TAG, std::to_string(planet_id));
380 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(empire_id));
381 return sitrep;
382 }
383
CreateFleetGiftedSitRep(int fleet_id,int empire_id)384 SitRepEntry CreateFleetGiftedSitRep(int fleet_id, int empire_id) {
385 SitRepEntry sitrep(
386 UserStringNop("SITREP_FLEET_GIFTED"),
387 CurrentTurn() + 1,
388 "icons/sitrep/gift.png",
389 UserStringNop("SITREP_FLEET_GIFTED_LABEL"), true);
390 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
391 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(empire_id));
392 return sitrep;
393 }
394
CreateFleetArrivedAtDestinationSitRep(int system_id,int fleet_id,int recipient_empire_id)395 SitRepEntry CreateFleetArrivedAtDestinationSitRep(int system_id, int fleet_id, int recipient_empire_id) {
396 auto fleet = Objects().get<Fleet>(fleet_id);
397
398 //bool system_contains_recipient_empire_planets = false;
399 //if (const System* system = Objects().get<System>(system_id)) {
400 // for (const auto& planet : system->all<Planet>()) {
401 // if (!planet || planet->Unowned())
402 // continue;
403 // if (planet->OwnedBy(recipient_empire_id)) {
404 // system_contains_recipient_empire_planets = true;
405 // break;
406 // }
407 // }
408 //}
409
410 //There are variants of this message for {monster, own, foreign} * {one ship, fleet}.
411 // TODO: More variants for systems with / without recipient-owned planets
412 //These should really be assembled from several pieces: a fleet description,
413 //a system description, and a message template into which both are substituted.
414 if (!fleet) {
415 SitRepEntry sitrep(
416 UserStringNop("SITREP_FLEET_ARRIVED_AT_SYSTEM"),
417 CurrentTurn() + 1,
418 "icons/sitrep/fleet_arrived.png",
419 UserStringNop("SITREP_FLEET_ARRIVED_AT_SYSTEM_LABEL"), true);
420 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
421 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
422 return sitrep;
423 } else if (fleet->Unowned() && fleet->HasMonsters()) {
424 if (fleet->NumShips() == 1) {
425 SitRepEntry sitrep(
426 UserStringNop("SITREP_MONSTER_SHIP_ARRIVED_AT_DESTINATION"),
427 CurrentTurn() + 1,
428 "icons/sitrep/fleet_arrived.png",
429 UserStringNop("SITREP_MONSTER_SHIP_ARRIVED_AT_DESTINATION_LABEL"), true);
430 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
431 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
432 int ship_id = *fleet->ShipIDs().begin();
433 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(ship_id));
434 if (auto ship = Objects().get<Ship>(ship_id))
435 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(ship->DesignID()));
436 return sitrep;
437 } else {
438 SitRepEntry sitrep(
439 UserStringNop("SITREP_MONSTER_FLEET_ARRIVED_AT_DESTINATION"),
440 CurrentTurn() + 1,
441 "icons/sitrep/fleet_arrived.png",
442 UserStringNop("SITREP_MONSTER_FLEET_ARRIVED_AT_DESTINATION_LABEL"), true);
443 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
444 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
445 sitrep.AddVariable(VarText::RAW_TEXT_TAG, std::to_string(fleet->NumShips()));
446 return sitrep;
447 }
448 } else if (fleet->Unowned()) {
449 SitRepEntry sitrep(
450 UserStringNop("SITREP_FLEET_ARRIVED_AT_DESTINATION"),
451 CurrentTurn() + 1,
452 "icons/sitrep/fleet_arrived.png",
453 UserStringNop("SITREP_FLEET_ARRIVED_AT_DESTINATION_LABEL"), true);
454 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
455 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
456 sitrep.AddVariable(VarText::RAW_TEXT_TAG, std::to_string(fleet->NumShips()));
457 return sitrep;
458 } else if (fleet->OwnedBy(recipient_empire_id)) {
459 if (fleet->NumShips() == 1) {
460 SitRepEntry sitrep(
461 UserStringNop("SITREP_OWN_SHIP_ARRIVED_AT_DESTINATION"),
462 CurrentTurn() + 1,
463 "icons/sitrep/fleet_arrived.png",
464 UserStringNop("SITREP_OWN_SHIP_ARRIVED_AT_DESTINATION_LABEL"), true);
465 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
466 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
467 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(fleet->Owner()));
468 int ship_id = *fleet->ShipIDs().begin();
469 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(ship_id));
470 if (auto ship = Objects().get<Ship>(ship_id))
471 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(ship->DesignID()));
472 return sitrep;
473 } else {
474 SitRepEntry sitrep(
475 UserStringNop("SITREP_OWN_FLEET_ARRIVED_AT_DESTINATION"),
476 CurrentTurn() + 1,
477 "icons/sitrep/fleet_arrived.png",
478 UserStringNop("SITREP_OWN_FLEET_ARRIVED_AT_DESTINATION_LABEL"), true);
479 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
480 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
481 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(fleet->Owner()));
482 sitrep.AddVariable(VarText::RAW_TEXT_TAG, std::to_string(fleet->NumShips()));
483 return sitrep;
484 }
485 } else {
486 if (fleet->NumShips() == 1) {
487 SitRepEntry sitrep(
488 UserStringNop("SITREP_FOREIGN_SHIP_ARRIVED_AT_DESTINATION"),
489 CurrentTurn() + 1,
490 "icons/sitrep/fleet_arrived.png",
491 UserStringNop("SITREP_FOREIGN_SHIP_ARRIVED_AT_DESTINATION_LABEL"), true);
492 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
493 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
494 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(fleet->Owner()));
495 int ship_id = *fleet->ShipIDs().begin();
496 sitrep.AddVariable(VarText::SHIP_ID_TAG, std::to_string(ship_id));
497 if (auto ship = Objects().get<Ship>(ship_id))
498 sitrep.AddVariable(VarText::DESIGN_ID_TAG, std::to_string(ship->DesignID()));
499 return sitrep;
500 } else {
501 SitRepEntry sitrep(
502 UserStringNop("SITREP_FOREIGN_FLEET_ARRIVED_AT_DESTINATION"),
503 CurrentTurn() + 1,
504 "icons/sitrep/fleet_arrived.png",
505 UserStringNop("SITREP_FOREIGN_FLEET_ARRIVED_AT_DESTINATION_LABEL"), true);
506 sitrep.AddVariable(VarText::SYSTEM_ID_TAG, std::to_string(system_id));
507 sitrep.AddVariable(VarText::FLEET_ID_TAG, std::to_string(fleet_id));
508 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(fleet->Owner()));
509 sitrep.AddVariable(VarText::RAW_TEXT_TAG, std::to_string(fleet->NumShips()));
510 return sitrep;
511 }
512 }
513 }
514
CreateEmpireEliminatedSitRep(int empire_id)515 SitRepEntry CreateEmpireEliminatedSitRep(int empire_id) {
516 SitRepEntry sitrep(
517 UserStringNop("SITREP_EMPIRE_ELIMINATED"),
518 CurrentTurn() + 1,
519 "icons/sitrep/empire_eliminated.png",
520 UserStringNop("SITREP_EMPIRE_ELIMINATED_LABEL"), true);
521 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(empire_id));
522 return sitrep;
523 }
524
CreateVictorySitRep(const std::string & reason_string,int empire_id)525 SitRepEntry CreateVictorySitRep(const std::string& reason_string, int empire_id) {
526 SitRepEntry sitrep(reason_string, CurrentTurn() + 1, "icons/sitrep/victory.png", UserStringNop("SITREP_VICTORY_LABEL"), true);
527 sitrep.AddVariable(VarText::EMPIRE_ID_TAG, std::to_string(empire_id));
528 return sitrep;
529 }
530
CreateSitRep(const std::string & template_string,int turn,const std::string & icon,const std::vector<std::pair<std::string,std::string>> & parameters,const std::string label,bool stringtable_lookup)531 SitRepEntry CreateSitRep(const std::string& template_string, int turn, const std::string& icon,
532 const std::vector<std::pair<std::string, std::string>>& parameters,
533 const std::string label, bool stringtable_lookup)
534 {
535 SitRepEntry sitrep(template_string, turn, icon, label, stringtable_lookup);
536 for (const std::pair<std::string, std::string>& parameter : parameters)
537 { sitrep.AddVariable(parameter.first, parameter.second); }
538 return sitrep;
539 }
540