Army ant simulation
BoxTerrain.cpp
1 /*
2  * World.cpp
3  *
4  * Created on: 27 sept. 2018
5  * Author: lucie
6  */
7 
8 #include "BoxTerrain.h"
9 
10 BoxTerrain::BoxTerrain(){};
11 
12 BoxTerrain::BoxTerrain(b2World* world, sf::RenderWindow& window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength)
13 : Terrain(world, window, terrainParam, WINDOW_X_PX, bodyLength){
14  // TODO Auto-generated constructor stub
15  m_M_TO_PX = WINDOW_X_PX / (1.2*m_width);
16  m_posY=window.getSize().y/m_M_TO_PX - (window.getSize().y/m_M_TO_PX-m_height)/2;
17  m_window_x = window.getSize().x;
18  m_window_y = window.getSize().y;
19 
20 }
21 
22 BoxTerrain::~BoxTerrain() {
23  // TODO Auto-generated destructor stub
24 }
25 
26 void BoxTerrain::create(b2World* world, sf::RenderWindow& window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength){
27  Terrain::create(world, window, terrainParam, WINDOW_X_PX, bodyLength);
28  m_M_TO_PX = WINDOW_X_PX / (1.2*m_width);
29  printf("m_M_TO_PX: %f, \n", m_M_TO_PX);
30  m_posY=window.getSize().y/m_M_TO_PX - (window.getSize().y/m_M_TO_PX-m_height)/2;
31  m_window_x = window.getSize().x;
32  m_window_y = window.getSize().y;
33 }
34 
35 void BoxTerrain::createBody(b2World* world){
36 
37  b2BodyDef BodyDef;
38  BodyDef.position = b2Vec2(0, 0);
39  BodyDef.type = b2_staticBody;
40  m_groundBody = world->CreateBody(&BodyDef);
41 
42  b2EdgeShape edgeShape;
43  float h = m_window_y/m_M_TO_PX-m_height;//window_y_px/m_to_pix - wall_h_m;
44  float l = m_window_x/m_M_TO_PX-m_width;//window_x_px/m_to_pix - wall_w_m;
45 
46  b2FixtureDef topEdgeFixtureDef;
47  edgeShape.Set( b2Vec2(l/2,h/2), b2Vec2(m_window_x/m_M_TO_PX - l/2,h/2) );
48  topEdgeFixtureDef.shape = &edgeShape;
49  m_groundBody->CreateFixture(&topEdgeFixtureDef);
50 
51  b2FixtureDef bottomEdgeFixtureDef;
52  edgeShape.Set( b2Vec2(l/2,m_window_y/m_M_TO_PX - h/2), b2Vec2(m_window_x/m_M_TO_PX - l/2,m_window_y/m_M_TO_PX - h/2) );
53  bottomEdgeFixtureDef.shape = &edgeShape;
54  m_groundBody->CreateFixture(&bottomEdgeFixtureDef);
55 
56  b2FixtureDef leftEdgeFixtureDef;
57  edgeShape.Set( b2Vec2(l/2,h/2), b2Vec2(l/2,m_window_y/m_M_TO_PX - h/2) );
58  leftEdgeFixtureDef.shape = &edgeShape;
59  m_groundBody->CreateFixture(&leftEdgeFixtureDef);
60 
61  b2FixtureDef rightEdgeFixtureDef;
62  edgeShape.Set( b2Vec2(m_window_x/m_M_TO_PX - l/2,m_window_y/m_M_TO_PX - h/2), b2Vec2(m_window_x/m_M_TO_PX - l/2,h/2) );
63  rightEdgeFixtureDef.shape = &edgeShape;
64  m_groundBody->CreateFixture(&rightEdgeFixtureDef);
65 
66 }
67 
68 void BoxTerrain::drawBody(sf::RenderWindow& window){
69 
70  float h = window.getSize().y - m_height*m_M_TO_PX;
71  float l = window.getSize().x - m_width*m_M_TO_PX;
72 
73  sf::VertexArray lines(sf::LinesStrip, 5);
74  lines[0].position = sf::Vector2f(l/2, h/2);
75  lines[1].position = sf::Vector2f(l/2, window.getSize().y-h/2);
76  lines[2].position = sf::Vector2f(window.getSize().x-l/2, window.getSize().y-h/2);
77  lines[3].position = sf::Vector2f(window.getSize().x-l/2, h/2);
78  lines[4].position = sf::Vector2f(l/2, h/2);
79 
80  lines[0].color = sf::Color::Black;
81  lines[1].color = sf::Color::Black;
82  lines[2].color = sf::Color::Black;
83  lines[3].color = sf::Color::Black;
84  lines[4].color = sf::Color::Black;
85 
86  window.draw(lines);
87 
88 }
89 
91  return BOX;
92 }
93 
void drawBody(sf::RenderWindow &window)
Definition: BoxTerrain.cpp:68
e_terrain_type getType()
Definition: BoxTerrain.cpp:90
e_terrain_type
Definition: Terrain.h:23
void create(b2World *world, sf::RenderWindow &window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength=1)
Definition: BoxTerrain.cpp:26
void createBody(b2World *world)
Definition: BoxTerrain.cpp:35
virtual void create(b2World *world, sf::RenderWindow &window, config::sTerrain terrainParam, int WINDOW_X_PX, double bodyLength)
Definition: Terrain.cpp:38