Army ant simulation
Terrain.cpp
1 /*
2  * Terrain.cpp
3  *
4  * Created on: 12 Feb 2019
5  * Author: lucie
6  */
7 
8 #include "Terrain.h"
9 
10 Terrain::Terrain() {
11  m_groundBody = nullptr;
12  // TODO Auto-generated constructor stub
13 }
14 
15 Terrain::Terrain(b2World* world, sf::RenderWindow& window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength){
16  m_bodyLength = bodyLength;
17  m_groundBody = nullptr;
18  if(terrainParam.v_angle > 0){
19  m_angle = terrainParam.v_angle;
20  m_width = tan(terrainParam.v_angle)*2*terrainParam.v_height;
21  m_width = m_width * bodyLength;
22  }
23  else{
24  m_angle = atan2(terrainParam.v_height, terrainParam.v_width/2);
25  m_width = terrainParam.v_width * bodyLength;
26  }
27 
28  m_height = terrainParam.v_height * bodyLength;
29  m_runaway = terrainParam.runaway * bodyLength;
30 
31  m_M_TO_PX = WINDOW_X_PX / (m_width);
32 }
33 
34 Terrain::~Terrain() {
35  // TODO Auto-generated destructor stub
36 }
37 
38 void Terrain::create(b2World* world, sf::RenderWindow& window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength){
39  m_bodyLength = bodyLength;
40  if(terrainParam.v_angle > 0){
41  m_angle = terrainParam.v_angle;
42  m_width = tan(terrainParam.v_angle)*2*terrainParam.v_height;
43  m_width = m_width * bodyLength;
44  }
45  else{
46  m_angle = atan2(terrainParam.v_height, terrainParam.v_width/2);
47  m_width = terrainParam.v_width * bodyLength;
48  }
49 
50  m_height = terrainParam.v_height * bodyLength;
51  m_runaway = terrainParam.runaway * bodyLength;
52 
53  m_M_TO_PX = WINDOW_X_PX / (2*m_runaway);
54  printf("m_M_TO_PX parent: %f, \n", m_M_TO_PX);
55 }
56 
57 void Terrain::createBody(b2World* world){
58 
59  b2BodyDef BodyDef;
60  BodyDef.position = b2Vec2(0, 0);
61  BodyDef.type = b2_staticBody;
62  m_groundBody = world->CreateBody(&BodyDef);
63 
64  b2EdgeShape edgeShape;
65 
66  b2FixtureDef ground;
67  edgeShape.Set( b2Vec2(0,m_posY), b2Vec2(3*m_runaway,m_posY) );
68  ground.shape = &edgeShape;
69  m_groundBody->CreateFixture(&ground);
70 
71 }
72 
73 void Terrain::drawBody(sf::RenderWindow& window){
74  sf::VertexArray lines(sf::LinesStrip, 2);
75  lines[0].position = sf::Vector2f(0, m_posY*m_M_TO_PX);
76  lines[1].position = sf::Vector2f(2*m_runaway*m_M_TO_PX, m_posY*m_M_TO_PX);
77 
78  lines[0].color = sf::Color::Black;
79  lines[1].color = sf::Color::Black;
80 
81  window.draw(lines);
82 }
83 
84 b2Body* Terrain::getBody(){
85  return m_groundBody;
86 }
87 
88 const double Terrain::getScale(){
89  return m_M_TO_PX;
90 }
91 
93  return DEFAULT;
94 }
95 
96 b2Vec2 Terrain::getTopLeftCorner(){return b2Vec2(m_runaway,m_posY);};
97 b2Vec2 Terrain::getTopRightCorner(){return b2Vec2(m_runaway,m_posY);};
98 b2Vec2 Terrain::getBottom(){return b2Vec2(m_runaway,m_posY);};
virtual e_terrain_type getType()
Definition: Terrain.cpp:92
virtual b2Vec2 getTopRightCorner()
Definition: Terrain.cpp:97
Implementation of the Terrain class.
virtual void drawBody(sf::RenderWindow &window)
Definition: Terrain.cpp:73
virtual void createBody(b2World *world)
Definition: Terrain.cpp:57
const double getScale()
Definition: Terrain.cpp:88
e_terrain_type
Definition: Terrain.h:23
virtual b2Vec2 getBottom()
Definition: Terrain.cpp:98
virtual b2Vec2 getTopLeftCorner()
Definition: Terrain.cpp:96
b2Body * getBody()
Definition: Terrain.cpp:84
double runaway
Definition: Config.h:32
virtual void create(b2World *world, sf::RenderWindow &window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength)
Definition: Terrain.cpp:38