-
Notifications
You must be signed in to change notification settings - Fork 0
/
box.cpp
112 lines (100 loc) · 2.49 KB
/
box.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//box.cpp file
#include "box.h"
const int PPM = 30;
int CBox::n = 0;
CBox::CBox(b2World & world) {
m_shape = sf::RectangleShape(sf::Vector2f(20,20));//(0,0,50,50,sf::Color(255,255,255));
m_shape.SetOrigin(10,10);
m_shape.SetFillColor(sf::Color(255, 0, 255, 255));
m_bodyDef.position.Set(300.0f/PPM,-300.0f/PPM-n*5/PPM);
m_bodyDef.type = b2_dynamicBody;
m_bodyShape.SetAsBox(10.0f/PPM,10.0f/PPM);
m_bodyFix.shape = &m_bodyShape;
m_bodyFix.density = 0.3f;
m_bodyFix.friction = 0.5f;
m_body = world.CreateBody(&m_bodyDef);
m_body->CreateFixture(&m_bodyFix);
}
void CBox::SetWorld(b2World & world) {
m_body = world.CreateBody(&m_bodyDef);
m_body->CreateFixture(&m_bodyFix);
}
CBox::CBox() {
m_shape = sf::RectangleShape(sf::Vector2f(10.f,10.f));//(0,0,10,10,sf::Color(255,255,255));
m_shape.SetOrigin(5,5);
m_shape.SetFillColor(randColor());
//cout << 300/PPM << " : " << -300/PPM-n*5/PPM << endl;
m_bodyDef.position.Set(300.0f/PPM,-300.0f/PPM-n*5/PPM);
n++;
m_bodyDef.type = b2_dynamicBody;
m_bodyShape.SetAsBox(5.0f/PPM,5.0f/PPM);
m_bodyFix.shape = &m_bodyShape;
m_bodyFix.density = 0.1f;
m_bodyFix.friction = 0.1f;
}
b2Body* CBox::GetBody() {
return m_body;
}
sf::Shape & CBox::GetShape() {
return m_shape;
}
void CBox::update() {
m_shape.SetRotation( m_body->GetAngle() );
m_shape.SetPosition( m_body->GetPosition().x*PPM, m_body->GetPosition().y*PPM);
}
void CBox::ResetPosition(b2World & world) {
//destroy stuff (memory management, otherwise they build up)
m_body->DestroyFixture(m_body->GetFixtureList());
world.DestroyBody(m_body);
n++;
//m_shape.SetOrigin(5,5);
m_bodyDef.position.Set(300.0f/PPM,-300.0f/PPM-n*5/PPM);
m_bodyDef.angularVelocity = 0;
//m_bodyDef.angle = 270;
m_bodyDef.linearVelocity.Set(0, 60);
//reset fixture and body
SetWorld(world);
//reset shape
update();
}
void CBox::jump(float angle) {
m_body->SetAngularVelocity(angle);
}
CBox::~CBox()
{
}
sf::Color randColor() {
int color = rand() % 10;
switch (color) {
case 1:
return sf::Color::Blue;
break;
case 2:
return sf::Color::Red;
break;
case 3:
return sf::Color::Yellow;
break;
case 4:
return sf::Color::Cyan;
break;
case 5:
return sf::Color::Green;
break;
case 6:
return sf::Color::Magenta;
break;
case 7:
return sf::Color(120, 59, 25); //brownish
break;
case 8:
return sf::Color(25, 59, 25);
break;
case 9:
return sf::Color(25, 150, 125);
break;
default:
return sf::Color(220, 159, 125);
break;
}
}