OpenXcom  1.0
Open-source clone of the original X-Com
Soldier.h
1 #pragma once
2 /*
3  * Copyright 2010-2016 OpenXcom Developers.
4  *
5  * This file is part of OpenXcom.
6  *
7  * OpenXcom is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11  *
12  * OpenXcom is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with OpenXcom. If not, see <http://www.gnu.org/licenses/>.
19  */
20 #include <string>
21 #include <yaml-cpp/yaml.h>
22 #include "../Mod/Unit.h"
23 #include "../Mod/StatString.h"
24 
25 namespace OpenXcom
26 {
27 
28 enum SoldierRank { RANK_ROOKIE, RANK_SQUADDIE, RANK_SERGEANT, RANK_CAPTAIN, RANK_COLONEL, RANK_COMMANDER};
29 enum SoldierGender { GENDER_MALE, GENDER_FEMALE };
30 enum SoldierLook { LOOK_BLONDE, LOOK_BROWNHAIR, LOOK_ORIENTAL, LOOK_AFRICAN };
31 
32 class Craft;
33 class SoldierNamePool;
34 class Mod;
35 class RuleSoldier;
36 class Armor;
37 class Language;
38 class EquipmentLayoutItem;
39 class SoldierDeath;
40 class SoldierDiary;
41 class SavedGame;
42 
48 class Soldier
49 {
50 private:
51  std::string _name;
52  int _id, _improvement, _psiStrImprovement;
53  RuleSoldier *_rules;
54  UnitStats _initialStats, _currentStats;
55  SoldierRank _rank;
56  Craft *_craft;
57  SoldierGender _gender;
58  SoldierLook _look;
59  int _missions, _kills, _recovery;
60  bool _recentlyPromoted, _psiTraining;
61  Armor *_armor;
62  std::vector<EquipmentLayoutItem*> _equipmentLayout;
63  SoldierDeath *_death;
64  SoldierDiary *_diary;
65  std::string _statString;
66 public:
68  Soldier(RuleSoldier *rules, Armor *armor, int id = 0);
70  ~Soldier();
72  void load(const YAML::Node& node, const Mod *mod, SavedGame *save);
74  YAML::Node save() const;
76  std::string getName(bool statstring = false, unsigned int maxLength = 20) const;
78  void setName(const std::string &name);
80  Craft *getCraft() const;
82  void setCraft(Craft *craft);
84  std::string getCraftString(Language *lang) const;
86  std::string getRankString() const;
88  int getRankSprite() const;
90  SoldierRank getRank() const;
92  void promoteRank();
94  int getMissions() const;
96  int getKills() const;
98  SoldierGender getGender() const;
100  SoldierLook getLook() const;
102  RuleSoldier *getRules() const;
104  int getId() const;
106  void addMissionCount();
108  void addKillCount(int count);
114  bool isPromoted();
116  Armor *getArmor() const;
118  void setArmor(Armor *armor);
120  int getWoundRecovery() const;
122  void setWoundRecovery(int recovery);
124  void heal();
126  std::vector<EquipmentLayoutItem*> *getEquipmentLayout();
128  void trainPsi();
130  void trainPsi1Day();
132  bool isInPsiTraining() const;
134  void setPsiTraining();
136  int getImprovement() const;
138  int getPsiStrImprovement() const;
140  SoldierDeath *getDeath() const;
142  void die(SoldierDeath *death);
146  void calcStatString(const std::vector<StatString *> &statStrings, bool psiStrengthEval);
147 };
148 
149 }
void addKillCount(int count)
Add a kill to the counter.
Definition: Soldier.cpp:397
bool isPromoted()
Get whether the unit was recently promoted.
Definition: Soldier.cpp:422
std::string getName(bool statstring=false, unsigned int maxLength=20) const
Gets the soldier&#39;s name.
Definition: Soldier.cpp:200
std::string getCraftString(Language *lang) const
Gets the soldier&#39;s craft string.
Definition: Soldier.cpp:253
Represents a craft stored in a base.
Definition: Craft.h:45
Armor * getArmor() const
Gets the soldier armor.
Definition: Soldier.cpp:433
Definition: SoldierDiary.h:70
UnitStats * getInitStats()
Get pointer to initial stats.
Definition: Soldier.cpp:405
void addMissionCount()
Add a mission to the counter.
Definition: Soldier.cpp:389
void setPsiTraining()
set the psi training status
Definition: Soldier.cpp:576
void setCraft(Craft *craft)
Sets the soldier&#39;s craft.
Definition: Soldier.cpp:241
RuleSoldier * getRules() const
Gets soldier rules.
Definition: Soldier.cpp:371
Stores info about a soldier&#39;s death.
Definition: SoldierDeath.h:31
void trainPsi1Day()
Trains a soldier&#39;s psionic abilities (anytimePsiTraining option).
Definition: Soldier.cpp:527
std::vector< EquipmentLayoutItem * > * getEquipmentLayout()
Gets the soldier&#39;s equipment-layout.
Definition: Soldier.cpp:483
void load(const YAML::Node &node, const Mod *mod, SavedGame *save)
Loads the soldier from YAML.
Definition: Soldier.cpp:100
UnitStats * getCurrentStats()
Get pointer to current stats.
Definition: Soldier.cpp:413
The game data that gets written to disk when the game is saved.
Definition: SavedGame.h:99
void trainPsi()
Trains a soldier&#39;s psychic stats.
Definition: Soldier.cpp:491
Craft * getCraft() const
Gets the soldier&#39;s craft.
Definition: Soldier.cpp:232
SoldierGender getGender() const
Gets the soldier&#39;s gender.
Definition: Soldier.cpp:353
Contains all the game-specific static data that never changes throughout the game, like rulesets and resources.
Definition: Mod.h:87
int getMissions() const
Gets the soldier&#39;s missions.
Definition: Soldier.cpp:335
int getPsiStrImprovement() const
returns this soldier&#39;s psionic strength improvement score for this month.
Definition: Soldier.cpp:593
SoldierDeath * getDeath() const
Gets the soldier death info.
Definition: Soldier.cpp:602
void setName(const std::string &name)
Sets the soldier&#39;s name.
Definition: Soldier.cpp:223
int getImprovement() const
returns this soldier&#39;s psionic skill improvement score for this month.
Definition: Soldier.cpp:585
SoldierLook getLook() const
Gets the soldier&#39;s look.
Definition: Soldier.cpp:362
void setArmor(Armor *armor)
Sets the soldier armor.
Definition: Soldier.cpp:442
bool isInPsiTraining() const
Returns whether the unit is in psi training or not.
Definition: Soldier.cpp:568
void heal()
Heals wound recoveries.
Definition: Soldier.cpp:474
int getRankSprite() const
Gets a sprite version of the soldier&#39;s rank.
Definition: Soldier.cpp:303
void die(SoldierDeath *death)
Kills the soldier.
Definition: Soldier.cpp:611
void setWoundRecovery(int recovery)
Sets the soldier&#39;s wound recovery time.
Definition: Soldier.cpp:460
SoldierDiary * getDiary()
Gets the soldier&#39;s diary.
Definition: Soldier.cpp:632
Contains strings used throughout the game for localization.
Definition: Language.h:39
int getKills() const
Gets the soldier&#39;s kills.
Definition: Soldier.cpp:344
Represents a specific type of armor.
Definition: Armor.h:35
Represents a soldier hired by the player.
Definition: Soldier.h:48
SoldierRank getRank() const
Gets the soldier&#39;s rank.
Definition: Soldier.cpp:313
std::string getRankString() const
Gets a string version of the soldier&#39;s rank.
Definition: Soldier.cpp:276
This struct holds some plain unit attribute data together.
Definition: Unit.h:30
int getId() const
Gets the soldier&#39;s unique ID.
Definition: Soldier.cpp:381
Represents the creation data for an X-COM unit.
Definition: RuleSoldier.h:35
void calcStatString(const std::vector< StatString *> &statStrings, bool psiStrengthEval)
Calculate statString.
Definition: Soldier.cpp:643
int getWoundRecovery() const
Gets the soldier&#39;s wound recovery time.
Definition: Soldier.cpp:451
~Soldier()
Cleans up the soldier.
Definition: Soldier.cpp:84
Soldier(RuleSoldier *rules, Armor *armor, int id=0)
Creates a new soldier.
Definition: Soldier.cpp:42
Definition: BaseInfoState.cpp:40
void promoteRank()
Increase the soldier&#39;s military rank.
Definition: Soldier.cpp:321
YAML::Node save() const
Saves the soldier to YAML.
Definition: Soldier.cpp:153