WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
Character.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_CHARACTER_HPP
3 #define WORLDSIM_CHARACTER_HPP
4 
5 /* WorldSim: Character
6  #include "Character.hpp"
7 
8  Characters can be either NPCs or the player. They interact with the world.
9 
10  Characters may be either human, elven, or dwarven.
11 */
12 
13 #include "Social.hpp"
14 #include "Idea.cpp"
15 
16 
17 #include "Character_Skill.cpp" // Learned skills
18 #include "Character_Attribute.cpp" // Base skills like Strength
19 
20 #include <Game/Calendar/Calendar.hpp>
21 #include <Container/Table/TableInterface.hpp>
22 
23 #include "WorldObject.hpp"
24 #include "WorldObject_Tree.hpp"
25 #include "Item.hpp"
26 
27 #include "HasMoney.cpp"
28 
29 class Job;
30 class Tribe;
31 class Item;
32 class Civ;
33 class Settlement;
35 class World_Local;
36 class Location;
37 
38 class Character: public WorldObject, public TableInterface, public SaveFileInterface, public CanRequestItem
39 {
40  public:
41 
42  std::string firstName;
43  std::string lastName;
44  std::string epithet;
45  long unsigned int id;
46 
47  bool isMale;
48  int age; /* In years. (or days?) */
49  int daysCounter; /* 0-DAYS_PER_YEAR */
50  int tickCounter; /* 0 - TICKS_PER_DAY */
51 
52  int actionPoints; /* Base: 100. Points are deducted for each action. */
53 
54  bool isPregnant;
56 
57  bool isAlive;
58  bool isMarried; /* Change to partner pointer */
59 
60  //bool isUnderground; /* Is on the subterranean layer. */
61 
62  short int maxHealth;
63  short int health;
64  short int hunger; /* 500 = MAX_HUNGER */
65  short int thirst;
66 
67  // Base skills 0-10.
69 
70  /* Skills */
71 
72  unsigned char skillFishing;
73  unsigned char skillMarksmanship;
74  unsigned char skillMining;
75  unsigned char skillFarming;
76  // skillMetalSmithing modifies chances of making high-quality items. Each level improves chances by 1%
77  //unsigned char skillMetalsmithing;
79 
80  void levelUpMetalsmithing(unsigned char /* _amount */ );
81 
82  // True if player has flagged this character as favourite.
84 
85 
87  Vector <HasXY2 <unsigned long int> * > vMovesToProcess;
88  Vector <HasXY2 <unsigned long int> * > vMovesToProcessSneak;
89 
90  Vector <Item*> vInventory;
91 
92  //INTERACTION
93  int nPelt;
94  int nMeat;
95 
96 
97  bool isSneaking;
98 
99  /* Right now each character has a biological mother and father. In the future we might also have guardians */
103  Vector <Character*> vChildren;
104  Vector <Character*> vSiblings;
105 
106  //People this character has killed.
107  Vector <Character*> vKills;
108 
109  Calendar dateOfBirth;
110  Calendar dateOfMarriage;
111  Calendar dateOfDeath;
112 
114 
117 
121 
122  //int worldX, worldY;
123 
125 
126  // All loaded Characters can get a link to their world.
128 
129  //Character's knowledge of the world (optional).
131 
132  //Manage social connections
134 
135  // Any potential ideas the person has learned
136  Vector <Idea> vIdea;
137 
138  //Ideas the Character has originally invented.
139  Vector <Idea> vOriginalIdea;
140  // Any particularly interesting Ideas this Character invented
141  Vector <SpecialIdea> vOriginalSpecialIdea;
142 
143  // Events relevant to this character
144  Vector <Event*> vEvent;
145 
146 
147  /* INITIALIZATION */
148  Character();
149  // Initialise, including roll for stats. 0 - Roll gender. 1 - Male. 2 - Female.
150  void init( int _sex = 0);
151 
152  /* GETTER AND SETTER */
153 
154  char getCharisma();
155  void setCharisma(char amount);
156 
157  char getIntelligence();
158  void setIntelligence(char amount);
159 
160  char getStrength();
161  void setStrength(char amount);
162 
164  void setBaseSkill(AttributeManager::TYPE skill, char value);
165 
166  void skillUpFarming();
167  void skillUpMining();
168  void skillUpMarksmanship();
169 
170  Vector <Character*> getAllKnownCharacters();
171 
172  bool hasIdea(Idea idea);
173  void giveIdea(Idea idea);
174 
175 
176 
177  // INTERACTION
178 
179  void shareIdeas(Character* c); // Share 1 new idea per call.
180 
181  /* UPDATE FUNCTIONS */
182 
183  void updateSocial();
184 
185  /* AI FUNCTIONS
186 
187  */
188  void incrementTicks(int = 1);
189 
190  // MOVE FUNCTIONS
191  virtual void wander();
192 
193  Texture* currentTexture ();
194 
195 
196  /* ITEM FUNCTIONS */
197 
198  virtual void recieveRequestedItem(Item* item);
199 
200  // For consumables or crafting/alchemy.
201  void useItem(Item* item)
202  {
203  }
204 
205  // For now this should just drop item at player's feet because
206  // Inventory is not fully implemented.
207  void giveItem(Item* _item);
208  void takeItem(Item* _item);
209  // food or potion can be consumed.
210  void consume(Item* _item);
211 
212  void removeFromInventoryGrid(Item* _item); /* Player-only function */
213 
214  bool hasItemType(ItemType);
215 
217  //Item* getBestItemFor(enumJob job);
218  Item* getBestItemFor(Job job);
219  Item* getBestItemFor(Job* job);
220 
221 
222  /* SOCIAL FUNCTIONS
223  marry
224  canMarry
225 
226  getDescendants
227  Return all characters descended from this one.
228 
229 
230  */
231 
232  bool marry(Character* );
233  /* Checks that the couple is not closely related, and several other conditions. */
234  bool canMarry (Character*);
235 
236 
237  Character* giveBirth();
238 
239 
240  /* RECURSIVE ALGORITHM WHICH RETURNS ALL CHILDREN AND CHILDREN'S CHILDREN UNTIL NO CHILDREN REMAIN */
241  Vector <Character*> * getDescendants(Vector <Character*> * vDescendants);
242 
243  /* RETURNS ALL DESCENDANTS OF ALL GRANDPARENTS. INCLUDES SELF. */
244  Vector <Character*> * getRelatives();
245 
246 
247  void die(enumCauseOfDeath = UNKNOWN);
248 
249  void starve();
250 
251  /* INFORMATION FUNCTIONS
252 
253  */
254 
255  /* getBiography
256  returns a string of text which provides a description of this character's name,
257  appearance, life, achievements, etc.
258  */
259  std::string getBiography();
260  std::string getFullName() const;
261  std::string getName();
262  std::string getBestSkills();
263 
264  std::string getLocation();
265 
266  bool moveToLocationType(enumLocation location);
267 
268  // LOCATION
269 
270  // Returns true if the Character is at this world map coordinate.
271  bool isOnMap(int /* _mapX */, int /* _mapY */);
272 
273 
274  // KNOWLEDGE
275 
276  //returns true if the Character has seen this tile.
277  char hasSeen( World_Local* /* _map */, int /* _x */, int /* _y */, bool isSubterranean = false );
278 
279 
280  // Debug functions
281  // reveal all of current map
282  void revealMap(unsigned int _range);
283 
284  // main AI manager, defines current AI state based on situation
285  void aiManager();
286 
287  // AI STATES
288  // HUNTING
289  // CRAFTING
290  // COMBAT
291  // CULTURE
292 
293  // aiCrafting() - Has chance of creating advancement points
294  // aiCulture() - has chance of creating advancement points
295  // aiHunting()
296 
297 
298 
299  /* TABLE INTERFACE */
300  std::string getColumn(std::string _column);
301  std::string getColumnType(std::string _column);
302 
303 
304  /* COMBAT FUNCTIONS */
305 
306  //Attack a character once.
307  void attack (Character*);
308 
309  //Get attacked by a Creature
311 
312  //Ensure the character's knowledge object exists.
313  void initialiseKnowledge();
314 
315  //Update knowledge with current instance.
316  void updateKnowledge();
317  // Extra processing available
318  bool updateKnowledgeIdle();
319 
320 
321 
322  // ABSTRACT FUNCTIONS
323  bool abstractResearchMonth();
324  // Characters will learn about each other and spread Ideas.
325  void abstractSocial(Character*);
326 
327 
328 };
329 
330 #endif
Calendar dateOfDeath
Definition: Character.hpp:111
Definition: Character_Attribute.cpp:12
char hasSeen(World_Local *, int, int, bool isSubterranean=false)
Definition: Character.cpp:1106
std::string epithet
Definition: Character.hpp:44
Definition: Creature.hpp:34
void incrementTicks(int=1)
Definition: Character.cpp:563
void shareIdeas(Character *c)
Definition: Character.cpp:289
void attack(Character *)
Definition: Character.cpp:1020
char getBaseSkill(AttributeManager::TYPE skill)
Definition: Character.cpp:188
AttributeManager baseSkill
Definition: Character.hpp:68
Definition: Driver_Settings_Enums.hpp:59
void levelUpMetalsmithing(unsigned char)
Definition: WorldObject.hpp:18
void giveItem(Item *_item)
Definition: Character.cpp:320
void setCharisma(char amount)
Definition: Character.cpp:227
short int thirst
Definition: Character.hpp:65
void skillUpMarksmanship()
Definition: Character.cpp:214
void starve()
Definition: Character.cpp:950
Item * getBestFarmingEquipment()
bool moveToLocationType(enumLocation location)
Definition: Character.cpp:157
int actionPoints
Definition: Character.hpp:52
void updateSocial()
Definition: Character.cpp:283
short int health
Definition: Character.hpp:63
bool isOnMap(int, int)
Definition: Character.cpp:1080
Tribe * tribe
Definition: Character.hpp:118
TYPE
Definition: Character_Attribute.cpp:16
Definition: Civ.hpp:28
void aiManager()
Definition: Character.cpp:557
void useItem(Item *item)
Definition: Character.hpp:201
Calendar dateOfMarriage
Definition: Character.hpp:110
enumLocation
Definition: Driver_Settings_Enums.hpp:76
void removeFromInventoryGrid(Item *_item)
Definition: Character.cpp:361
void initialiseKnowledge()
Definition: Character.cpp:1097
void updateKnowledge()
Definition: Character.cpp:1174
unsigned char skillFarming
Definition: Character.hpp:75
Vector< Item * > vInventory
Definition: Character.hpp:90
bool hasIdea(Idea idea)
Definition: Character.cpp:265
Item * getBestItemFor(Job job)
Definition: Character.cpp:387
Character_Knowledge * knowledge
Definition: Character.hpp:130
Vector< Character * > vSiblings
Definition: Character.hpp:104
unsigned char skillFishing
Definition: Character.hpp:72
void getAttacked(Creature *, Creature_Attack *)
Definition: Character.cpp:1055
char getIntelligence()
Definition: Character.cpp:232
enumCauseOfDeath
Definition: Driver_Settings_Enums.hpp:57
std::string getName()
Definition: Character.cpp:1411
Definition: Item.hpp:51
int daysCounter
Definition: Character.hpp:49
World_Local * map
Definition: Character.hpp:127
void consume(Item *_item)
Definition: Character.cpp:344
bool updateKnowledgeIdle()
Definition: Character.cpp:1257
void init(int _sex=0)
Definition: Character.cpp:100
Civ * civ
Definition: Character.hpp:119
enumCauseOfDeath causeOfDeath
Definition: Character.hpp:124
Vector< Character * > * getRelatives()
Definition: Character.cpp:892
Definition: World_Local.hpp:58
std::string getLocation()
Definition: Character.cpp:148
unsigned char skillMining
Definition: Character.hpp:74
bool canMarry(Character *)
Definition: Character.cpp:967
int nMeat
Definition: Character.hpp:94
Vector< Idea > vOriginalIdea
Definition: Character.hpp:139
char getCharisma()
Definition: Character.cpp:222
HasXY birthLocation
Definition: Character.hpp:115
Character * giveBirth()
Definition: Character.cpp:987
void revealMap(unsigned int _range)
Definition: Character.cpp:1119
long unsigned int id
Definition: Character.hpp:45
bool isMale
Definition: Character.hpp:47
int age
Definition: Character.hpp:48
Definition: Job.hpp:7
bool isFavourite
Definition: Character.hpp:83
Vector< Character * > getAllKnownCharacters()
Definition: Character.cpp:252
void die(enumCauseOfDeath=UNKNOWN)
Definition: Character.cpp:802
Character()
Definition: Character.cpp:28
Definition: Character_Skill.cpp:12
Character * father
Definition: Character.hpp:100
std::string firstName
Definition: Character.hpp:42
HasXY deathLocation
Definition: Character.hpp:116
void giveIdea(Idea idea)
Definition: Character.cpp:277
int tickCounter
Definition: Character.hpp:50
Definition: Settlement.hpp:15
Definition: Creature_Attack.hpp:16
int pregnantCounter
Definition: Character.hpp:55
short int hunger
Definition: Character.hpp:64
bool isSneaking
Definition: Character.hpp:97
std::string lastName
Definition: Character.hpp:43
Vector< HasXY2< unsigned long int > *> vMovesToProcess
Definition: Character.hpp:87
bool marry(Character *)
Definition: Character.cpp:818
Definition: Character.hpp:38
int nPelt
Definition: Character.hpp:93
virtual void recieveRequestedItem(Item *item)
Definition: Character.cpp:330
char idleCounter
Definition: Character.hpp:86
Location * location
Definition: Character.hpp:113
bool hasItemType(ItemType)
Definition: Character.cpp:375
std::string getColumn(std::string _column)
Definition: Character.cpp:1427
Vector< Character * > * getDescendants(Vector< Character *> *vDescendants)
Definition: Character.cpp:854
Vector< Idea > vIdea
Definition: Character.hpp:136
Settlement * settlement
Definition: Character.hpp:120
Vector< Character * > vKills
Definition: Character.hpp:107
unsigned char skillMarksmanship
Definition: Character.hpp:73
Skill skillMetalsmithing
Definition: Character.hpp:78
Social social
Definition: Character.hpp:133
bool abstractResearchMonth()
Definition: Character.cpp:1341
std::string getBestSkills()
Definition: Character.cpp:497
void skillUpFarming()
Definition: Character.cpp:198
Definition: Tribe.hpp:23
void abstractSocial(Character *)
Definition: Character.cpp:1389
Definition: Idea.hpp:18
std::string getColumnType(std::string _column)
Definition: Character.cpp:1494
Character * spouse
Definition: Character.hpp:102
Definition: Character_Knowledge.hpp:14
bool isPregnant
Definition: Character.hpp:54
Definition: HasMoney.cpp:60
void setIntelligence(char amount)
Definition: Character.cpp:237
void skillUpMining()
Definition: Character.cpp:206
Character * mother
Definition: Character.hpp:101
Calendar dateOfBirth
Definition: Character.hpp:109
std::string getBiography()
Definition: Character.cpp:404
void setBaseSkill(AttributeManager::TYPE skill, char value)
Definition: Character.cpp:193
Definition: Location.hpp:19
Vector< HasXY2< unsigned long int > *> vMovesToProcessSneak
Definition: Character.hpp:88
virtual void wander()
Definition: Character.cpp:616
Vector< SpecialIdea > vOriginalSpecialIdea
Definition: Character.hpp:141
std::string getFullName() const
Definition: Character.cpp:397
Vector< Character * > vChildren
Definition: Character.hpp:103
bool isMarried
Definition: Character.hpp:58
char getStrength()
Definition: Character.cpp:242
void setStrength(char amount)
Definition: Character.cpp:247
void takeItem(Item *_item)
Definition: Character.cpp:336
Vector< Event * > vEvent
Definition: Character.hpp:144
Definition: Social.hpp:47
short int maxHealth
Definition: Character.hpp:62
bool isAlive
Definition: Character.hpp:57
Texture * currentTexture()
Definition: Character.cpp:1403
ItemType
Definition: Driver_Settings_Enums.hpp:268