~ubuntu-branches/ubuntu/vivid/emscripten/vivid

« back to all changes in this revision

Viewing changes to tests/box2d/Testbed/Tests/BulletTest.h

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2013-05-02 13:11:51 UTC
  • Revision ID: package-import@ubuntu.com-20130502131151-q8dvteqr1ef2x7xz
Tags: upstream-1.4.1~20130504~adb56cb
ImportĀ upstreamĀ versionĀ 1.4.1~20130504~adb56cb

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
* Copyright (c) 2006-2009 Erin Catto http://www.box2d.org
 
3
*
 
4
* This software is provided 'as-is', without any express or implied
 
5
* warranty.  In no event will the authors be held liable for any damages
 
6
* arising from the use of this software.
 
7
* Permission is granted to anyone to use this software for any purpose,
 
8
* including commercial applications, and to alter it and redistribute it
 
9
* freely, subject to the following restrictions:
 
10
* 1. The origin of this software must not be misrepresented; you must not
 
11
* claim that you wrote the original software. If you use this software
 
12
* in a product, an acknowledgment in the product documentation would be
 
13
* appreciated but is not required.
 
14
* 2. Altered source versions must be plainly marked as such, and must not be
 
15
* misrepresented as being the original software.
 
16
* 3. This notice may not be removed or altered from any source distribution.
 
17
*/
 
18
 
 
19
#ifndef BULLET_TEST_H
 
20
#define BULLET_TEST_H
 
21
 
 
22
class BulletTest : public Test
 
23
{
 
24
public:
 
25
 
 
26
        BulletTest()
 
27
        {
 
28
                {
 
29
                        b2BodyDef bd;
 
30
                        bd.position.Set(0.0f, 0.0f);
 
31
                        b2Body* body = m_world->CreateBody(&bd);
 
32
 
 
33
                        b2EdgeShape edge;
 
34
 
 
35
                        edge.Set(b2Vec2(-10.0f, 0.0f), b2Vec2(10.0f, 0.0f));
 
36
                        body->CreateFixture(&edge, 0.0f);
 
37
 
 
38
                        b2PolygonShape shape;
 
39
                        shape.SetAsBox(0.2f, 1.0f, b2Vec2(0.5f, 1.0f), 0.0f);
 
40
                        body->CreateFixture(&shape, 0.0f);
 
41
                }
 
42
 
 
43
                {
 
44
                        b2BodyDef bd;
 
45
                        bd.type = b2_dynamicBody;
 
46
                        bd.position.Set(0.0f, 4.0f);
 
47
 
 
48
                        b2PolygonShape box;
 
49
                        box.SetAsBox(2.0f, 0.1f);
 
50
 
 
51
                        m_body = m_world->CreateBody(&bd);
 
52
                        m_body->CreateFixture(&box, 1.0f);
 
53
 
 
54
                        box.SetAsBox(0.25f, 0.25f);
 
55
 
 
56
                        //m_x = RandomFloat(-1.0f, 1.0f);
 
57
                        m_x = 0.20352793f;
 
58
                        bd.position.Set(m_x, 10.0f);
 
59
                        bd.bullet = true;
 
60
 
 
61
                        m_bullet = m_world->CreateBody(&bd);
 
62
                        m_bullet->CreateFixture(&box, 100.0f);
 
63
 
 
64
                        m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
 
65
                }
 
66
        }
 
67
 
 
68
        void Launch()
 
69
        {
 
70
                m_body->SetTransform(b2Vec2(0.0f, 4.0f), 0.0f);
 
71
                m_body->SetLinearVelocity(b2Vec2_zero);
 
72
                m_body->SetAngularVelocity(0.0f);
 
73
 
 
74
                m_x = RandomFloat(-1.0f, 1.0f);
 
75
                m_bullet->SetTransform(b2Vec2(m_x, 10.0f), 0.0f);
 
76
                m_bullet->SetLinearVelocity(b2Vec2(0.0f, -50.0f));
 
77
                m_bullet->SetAngularVelocity(0.0f);
 
78
 
 
79
                extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
 
80
                extern int32 b2_toiCalls, b2_toiIters, b2_toiMaxIters;
 
81
                extern int32 b2_toiRootIters, b2_toiMaxRootIters;
 
82
 
 
83
                b2_gjkCalls = 0;
 
84
                b2_gjkIters = 0;
 
85
                b2_gjkMaxIters = 0;
 
86
 
 
87
                b2_toiCalls = 0;
 
88
                b2_toiIters = 0;
 
89
                b2_toiMaxIters = 0;
 
90
                b2_toiRootIters = 0;
 
91
                b2_toiMaxRootIters = 0;
 
92
        }
 
93
 
 
94
        void Step(Settings* settings)
 
95
        {
 
96
                Test::Step(settings);
 
97
 
 
98
                extern int32 b2_gjkCalls, b2_gjkIters, b2_gjkMaxIters;
 
99
                extern int32 b2_toiCalls, b2_toiIters;
 
100
                extern int32 b2_toiRootIters, b2_toiMaxRootIters;
 
101
 
 
102
                if (b2_gjkCalls > 0)
 
103
                {
 
104
                        m_debugDraw.DrawString(5, m_textLine, "gjk calls = %d, ave gjk iters = %3.1f, max gjk iters = %d",
 
105
                                b2_gjkCalls, b2_gjkIters / float32(b2_gjkCalls), b2_gjkMaxIters);
 
106
                        m_textLine += 15;
 
107
                }
 
108
 
 
109
                if (b2_toiCalls > 0)
 
110
                {
 
111
                        m_debugDraw.DrawString(5, m_textLine, "toi calls = %d, ave toi iters = %3.1f, max toi iters = %d",
 
112
                                b2_toiCalls, b2_toiIters / float32(b2_toiCalls), b2_toiMaxRootIters);
 
113
                        m_textLine += 15;
 
114
 
 
115
                        m_debugDraw.DrawString(5, m_textLine, "ave toi root iters = %3.1f, max toi root iters = %d",
 
116
                                b2_toiRootIters / float32(b2_toiCalls), b2_toiMaxRootIters);
 
117
                        m_textLine += 15;
 
118
                }
 
119
 
 
120
                if (m_stepCount % 60 == 0)
 
121
                {
 
122
                        Launch();
 
123
                }
 
124
        }
 
125
 
 
126
        static Test* Create()
 
127
        {
 
128
                return new BulletTest;
 
129
        }
 
130
 
 
131
        b2Body* m_body;
 
132
        b2Body* m_bullet;
 
133
        float32 m_x;
 
134
};
 
135
 
 
136
#endif