22 #include <yaml-cpp/yaml.h> 23 #include "BattleUnit.h" 24 #include "../Engine/Language.h" 36 std::string type, rank, race, weapon, weaponAmmo;
39 int mission, turn, id;
41 UnitBodyPart bodypart;
47 return turn += mission * 300;
53 if ((turn - 1) % 3 == 0)
return true;
58 void setTurn(
int unitTurn, UnitFaction unitFaction)
60 turn = unitTurn * 3 + (int)unitFaction;
64 void load(
const YAML::Node &node)
66 if (
const YAML::Node n = node[
"name"])
68 name = n.as<std::string>();
70 type = node[
"type"].as<std::string>(type);
71 rank = node[
"rank"].as<std::string>(rank);
72 race = node[
"race"].as<std::string>(race);
73 weapon = node[
"weapon"].as<std::string>(weapon);
74 weaponAmmo = node[
"weaponAmmo"].as<std::string>(weaponAmmo);
75 status = (UnitStatus)node[
"status"].as<int>();
76 faction = (UnitFaction)node[
"faction"].as<int>();
77 mission = node[
"mission"].as<
int>(mission);
78 turn = node[
"turn"].as<
int>(turn);
79 side = (UnitSide)node[
"side"].as<int>();
80 bodypart = (UnitBodyPart)node[
"bodypart"].as<int>();
81 id = node[
"id"].as<
int>(id);
94 node[
"weapon"] = weapon;
95 node[
"weaponAmmo"] = weaponAmmo;
96 node[
"status"] = (int)status;
97 node[
"faction"] = (int)faction;
98 node[
"mission"] = mission;
100 node[
"side"] = (int)side;
101 node[
"bodypart"] = (int)bodypart;
111 case STATUS_DEAD:
return "STR_KILLED";
112 case STATUS_UNCONSCIOUS:
return "STR_STUNNED";
113 case STATUS_PANICKING:
return "STR_PANICKED";
114 case STATUS_TURNING:
return "STR_MINDCONTROLLED";
115 default:
return "status error";
124 case STATUS_DEAD:
return "STATUS_DEAD";
125 case STATUS_UNCONSCIOUS:
return "STATUS_UNCONSCIOUS";
126 case STATUS_PANICKING:
return "STATUS_PANICKING";
127 case STATUS_TURNING:
return "STATUS_TURNING";
128 default:
return "status error";
137 case FACTION_PLAYER:
return "FACTION_PLAYER";
138 case FACTION_HOSTILE:
return "FACTION_HOSTILE";
139 case FACTION_NEUTRAL:
return "FACTION_NEUTRAL";
140 default:
return "faction error";
149 case SIDE_FRONT:
return "SIDE_FRONT";
150 case SIDE_LEFT:
return "SIDE_LEFT";
151 case SIDE_RIGHT:
return "SIDE_RIGHT";
152 case SIDE_REAR:
return "SIDE_REAR";
153 case SIDE_UNDER:
return "SIDE_UNDER";
154 default:
return "side error";
163 case BODYPART_HEAD:
return "BODYPART_HEAD";
164 case BODYPART_TORSO:
return "BODYPART_TORSO";
165 case BODYPART_RIGHTARM:
return "BODYPART_RIGHTARM";
166 case BODYPART_LEFTARM:
return "BODYPART_LEFTARM";
167 case BODYPART_RIGHTLEG:
return "BODYPART_RIGHTLEG";
168 case BODYPART_LEFTLEG:
return "BODYPART_LEFTLEG";
169 default:
return "body part error";
180 else if (!type.empty())
186 std::ostringstream ss;
217 rank =
"STR_SOLDIER";
219 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRace().empty())
221 race = unit->getUnitRules()->
getRace();
225 race =
"STR_FRIENDLY";
231 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRank().empty())
233 rank = unit->getUnitRules()->
getRank();
239 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRace().empty())
241 race = unit->getUnitRules()->
getRace();
245 race =
"STR_FRIENDLY";
252 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRank().empty())
254 rank = unit->getUnitRules()->
getRank();
258 rank =
"STR_LIVE_SOLDIER";
260 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRace().empty())
262 race = unit->getUnitRules()->
getRace();
266 race =
"STR_HOSTILE";
272 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRank().empty())
274 rank = unit->getUnitRules()->
getRank();
278 rank =
"STR_CIVILIAN";
280 if (unit->getUnitRules() != 0 && !unit->getUnitRules()->
getRace().empty())
282 race = unit->getUnitRules()->
getRace();
286 race =
"STR_NEUTRAL";
292 rank =
"STR_UNKNOWN";
293 race =
"STR_UNKNOWN";
298 BattleUnitKills(): faction(FACTION_HOSTILE), status(STATUS_IGNORE_ME), mission(0), turn(0), id(0), side(SIDE_FRONT), bodypart(BODYPART_HEAD) { }
299 ~BattleUnitKills() { }
319 std::vector<BattleUnitKills*>
kills;
339 for (std::vector<BattleUnitKills*>::const_iterator i =
kills.begin(); i !=
kills.end(); ++i)
341 if ((*i)->id ==
id && (*i)->status == status)
352 for (std::vector<BattleUnitKills*>::const_iterator i =
kills.begin(); i !=
kills.end(); ++i)
354 if ((*i)->faction == FACTION_PLAYER)
361 void load(
const YAML::Node& node)
364 if (
const YAML::Node &YAMLkills = node[
"kills"])
366 for (YAML::const_iterator i = YAMLkills.begin(); i != YAMLkills.end(); ++i)
398 for (std::vector<BattleUnitKills*>::const_iterator i =
kills.begin(); i !=
kills.end(); ++i)
399 node[
"kills"].push_back((*i)->save());
425 BattleUnitStatistics() :
wasUnconcious(false),
shotAtCounter(0),
hitCounter(0),
shotByFriendlyCounter(0),
shotFriendlyCounter(0),
loneSurvivor(false),
ironMan(false),
longDistanceHitCounter(0),
lowAccuracyHitCounter(0),
shotsFiredCounter(0),
shotsLandedCounter(0),
kills(),
daysWounded(0),
KIA(false),
nikeCross(false),
mercyCross(false),
woundsHealed(0),
appliedStimulant(0),
appliedPainKill(0),
revivedSoldier(0),
revivedHostile(0),
revivedNeutral(0),
MIA(false),
martyr(0),
slaveKills(0) { }
426 ~BattleUnitStatistics() { }
std::string getName(bool statstring=false, unsigned int maxLength=20) const
Gets the soldier's name.
Definition: Soldier.cpp:200
YAML::Node save() const
Save.
Definition: BattleUnitStatistics.h:85
std::string getKillStatusString() const
Convert kill Status to string.
Definition: BattleUnitStatistics.h:107
YAML::Node save() const
Save function.
Definition: BattleUnitStatistics.h:392
std::string getUnitStatusString() const
Convert victim Status to string.
Definition: BattleUnitStatistics.h:120
std::string getRace() const
Gets the alien race type.
Definition: Unit.cpp:160
int longDistanceHitCounter
Tracks how many long distance shots were landed.
Definition: BattleUnitStatistics.h:315
bool hostileTurn() const
Check to see if turn was on HOSTILE side.
Definition: BattleUnitStatistics.h:51
std::vector< BattleUnitKills * > kills
Tracks kills.
Definition: BattleUnitStatistics.h:319
int revivedNeutral
Tracks how many times this soldier revived another civilian.
Definition: BattleUnitStatistics.h:330
int slaveKills
Tracks how many kills the soldier landed thanks to a mind controlled unit.
Definition: BattleUnitStatistics.h:333
void load(const YAML::Node &node)
Load function.
Definition: BattleUnitStatistics.h:361
Soldier * getGeoscapeSoldier() const
Get the geoscape-soldier object.
Definition: BattleUnit.cpp:2617
void setTurn(int unitTurn, UnitFaction unitFaction)
Make turn unique across mission.
Definition: BattleUnitStatistics.h:58
int shotAtCounter
Tracks how many times the unit was shot at.
Definition: BattleUnitStatistics.h:309
int appliedPainKill
Tracks how many times this soldier applied pain killers.
Definition: BattleUnitStatistics.h:327
int lowAccuracyHitCounter
Tracks how many times the unit landed a low probability shot.
Definition: BattleUnitStatistics.h:316
Container for battle unit kills statistics.
Definition: BattleUnitStatistics.h:32
bool MIA
Tracks if the soldier was left behind :(.
Definition: BattleUnitStatistics.h:331
UnitFaction getOriginalFaction() const
Get this unit's original faction.
Definition: BattleUnit.cpp:2779
bool loneSurvivor
Tracks if the soldier was the only survivor.
Definition: BattleUnitStatistics.h:313
Contains strings used throughout the game for localization.
Definition: Language.h:39
int hitCounter
Tracks how many times the unit was hit.
Definition: BattleUnitStatistics.h:310
bool nikeCross
Tracks if a soldier killed every alien or killed and stunned every alien.
Definition: BattleUnitStatistics.h:322
int martyr
Tracks how many kills the soldier landed on the turn of his death.
Definition: BattleUnitStatistics.h:332
int shotsFiredCounter
Tracks how many times a unit has shot.
Definition: BattleUnitStatistics.h:317
std::string getType() const
Get unit type.
Definition: BattleUnit.cpp:2634
const LocalizedText & getString(const std::string &id) const
Get a localized text.
Definition: Language.cpp:275
int makeTurnUnique()
Make turn unique across all kills.
Definition: BattleUnitStatistics.h:45
std::string getUnitName(Language *lang) const
Get human-readable victim name.
Definition: BattleUnitStatistics.h:174
bool KIA
Tracks if the soldier was killed in battle.
Definition: BattleUnitStatistics.h:321
void setUnitStats(BattleUnit *unit)
Decide victim name, race and rank.
Definition: BattleUnitStatistics.h:193
UnitStats delta
Tracks the increase in unit stats (is not saved, only used during debriefing)
Definition: BattleUnitStatistics.h:325
std::string getUnitSideString() const
Convert victim Side to string.
Definition: BattleUnitStatistics.h:145
bool mercyCross
Tracks if a soldier stunned every alien.
Definition: BattleUnitStatistics.h:323
std::string getRankString() const
Gets a string version of the soldier's rank.
Definition: Soldier.cpp:276
This struct holds some plain unit attribute data together.
Definition: Unit.h:30
int appliedStimulant
Tracks how many times this soldier applied stimulant.
Definition: BattleUnitStatistics.h:326
int shotByFriendlyCounter
Tracks how many times the unit was hit by a friendly.
Definition: BattleUnitStatistics.h:311
int daysWounded
Tracks how many days the unit was wounded for.
Definition: BattleUnitStatistics.h:320
int shotFriendlyCounter
Tracks how many times the unit was hit a friendly.
Definition: BattleUnitStatistics.h:312
bool wasUnconcious
Tracks if the soldier fell unconcious.
Definition: BattleUnitStatistics.h:308
void load(const YAML::Node &node)
Load.
Definition: BattleUnitStatistics.h:64
std::string getRank() const
Gets the alien rank.
Definition: Unit.cpp:169
Container for battle unit statistics.
Definition: BattleUnitStatistics.h:305
std::string getUnitBodyPartString() const
Convert victim Body part to string.
Definition: BattleUnitStatistics.h:159
bool duplicateEntry(UnitStatus status, int id) const
Duplicate entry check.
Definition: BattleUnitStatistics.h:337
int revivedHostile
Tracks how many times this soldier revived another hostile.
Definition: BattleUnitStatistics.h:329
bool ironMan
Tracks if the soldier was the only soldier on the mission.
Definition: BattleUnitStatistics.h:314
int shotsLandedCounter
Tracks how many times a unit has hit his target.
Definition: BattleUnitStatistics.h:318
Represents a moving unit in the battlescape, player controlled or AI controlled it holds info about i...
Definition: BattleUnit.h:59
Definition: BaseInfoState.cpp:40
int revivedSoldier
Tracks how many times this soldier revived another soldier.
Definition: BattleUnitStatistics.h:328
std::string getUnitFactionString() const
Convert victim Faction to string.
Definition: BattleUnitStatistics.h:133
int woundsHealed
Tracks how many times a fatal wound was healed by this unit.
Definition: BattleUnitStatistics.h:324
bool hasFriendlyFired() const
Friendly fire check.
Definition: BattleUnitStatistics.h:350