WorldSim  inDev
2D tile-based sandbox RPG with procedurally generated fantasy world simulator 🌏
World_Landmass.hpp
Go to the documentation of this file.
1 #pragma once
2 #ifndef WORLDSIM_WORLD_LANDMASS_HPP
3 #define WORLDSIM_WORLD_LANDMASS_HPP
4 
5 /* WorldSim: World_Landmass.hpp
6  #include "World_Landmass.hpp"
7 
8 
9 */
10 
11 #include <Container/Table/TableInterface.hpp>
12 
13 class World_Landmass: public TableInterface
14 {
15  public:
16 
17  std::string name;
18  int size; /* size in tiles */
19 
20  double averageX, averageY; /* For zooming to landmass. */
21  int centerX, centerY; /* The closest tile to the average which is owned by the landmass */
22 
24  {
25  name="";
26  size=0;
27 
28  averageX=-1;
29  averageY=-1;
30 
31  centerX=-1;
32  centerY=-1;
33  }
34 
35  virtual ~World_Landmass()
36  {
37  }
38 
39 
40  std::string getColumn(std::string _column)
41  {
42  if ( _column=="name" )
43  {
44  return name;
45  }
46  else if ( _column=="size" )
47  {
48  return DataTools::toString(size);
49  }
50 
51 
52  return "?";
53  }
54  std::string getColumnType(std::string _column)
55  {
56  if ( _column == "size" || _column == "territory" || _column == "food" )
57  {
58  return "number";
59  }
60  return "string";
61  }
62 
63  // Uses a safe rolling average to prevent overflow.
64  void getAverageCoordinates(Vector <HasXY*> * vXY)
65  {
66  int n = 0;
67  int n2 = 0;
68  averageX = 0;
69  averageY = 0;
70  for ( int i=0;i<vXY->size();++i)
71  {
72  double deltaX = (*vXY)(i)->x - averageX;
73  averageX += deltaX/++n;
74 
75  double deltaY = (*vXY)(i)->y - averageY;
76  averageY += deltaY/++n2;
77  }
78 
79  // now find the tile closest to these average points.
80  double closestDistance = -1;
81  for ( int i=0;i<vXY->size();++i)
82  {
83  double deltaX = abs((*vXY)(i)->x - averageX);
84  double deltaY = abs((*vXY)(i)->y - averageY);
85 
86  if ( closestDistance == -1 || closestDistance > deltaX+deltaY)
87  {
88  centerX = (*vXY)(i)->x;
89  centerY = (*vXY)(i)->y;
90  closestDistance = deltaX+deltaY;
91  }
92  }
93  }
94 };
95 
96 #endif
double averageY
Definition: World_Landmass.hpp:20
void getAverageCoordinates(Vector< HasXY *> *vXY)
Definition: World_Landmass.hpp:64
std::string name
Definition: World_Landmass.hpp:17
virtual ~World_Landmass()
Definition: World_Landmass.hpp:35
std::string getColumn(std::string _column)
Definition: World_Landmass.hpp:40
double averageX
Definition: World_Landmass.hpp:20
std::string getColumnType(std::string _column)
Definition: World_Landmass.hpp:54
int size
Definition: World_Landmass.hpp:18
int centerX
Definition: World_Landmass.hpp:21
int centerY
Definition: World_Landmass.hpp:21
Definition: World_Landmass.hpp:13
World_Landmass()
Definition: World_Landmass.hpp:23