Fixed RevoluteJoint (adjusted linear units to pixels), added OnInitialized event...
[qml-box2d:qml-box2d-folibis.git] / box2drevolutejoint.h
1 /*
2  * box2drevolutejoint.h
3  * Copyright (c) 2011 Joonas Erkinheimo <joonas.erkinheimo@nokia.com>
4  * Copyright (c) 2011 Markus Kivioja <markus.kivioja@digia.com>
5  *
6  * This file is part of the Box2D QML plugin.
7  *
8  * This software is provided 'as-is', without any express or implied warranty.
9  * In no event will the authors be held liable for any damages arising from
10  * the use of this software.
11  *
12  * Permission is granted to anyone to use this software for any purpose,
13  * including commercial applications, and to alter it and redistribute it
14  * freely, subject to the following restrictions:
15  *
16  * 1. The origin of this software must not be misrepresented; you must not
17  *    claim that you wrote the original software. If you use this software in
18  *    a product, an acknowledgment in the product documentation would be
19  *    appreciated but is not required.
20  *
21  * 2. Altered source versions must be plainly marked as such, and must not be
22  *    misrepresented as being the original software.
23  *
24  * 3. This notice may not be removed or altered from any source distribution.
25  */
26
27 #ifndef BOX2DREVOLUTEJOINT_H
28 #define BOX2DREVOLUTEJOINT_H
29
30 #include "box2djoint.h"
31 #include <Box2D.h>
32
33 class b2World;
34 class b2RevoluteJoint;
35 class b2RevoluteJointDef;
36
37 class Box2DRevoluteJoint : public Box2DJoint
38 {
39     Q_OBJECT
40     Q_PROPERTY(float lowerAngle READ lowerAngle WRITE setLowerAngle NOTIFY lowerAngleChanged)
41     Q_PROPERTY(float upperAngle READ upperAngle WRITE setUpperAngle NOTIFY upperAngleChanged)
42     Q_PROPERTY(float maxMotorTorque READ maxMotorTorque WRITE setMaxMotorTorque NOTIFY maxMotorTorqueChanged)
43     Q_PROPERTY(float motorSpeed READ motorSpeed WRITE setMotorSpeed NOTIFY motorSpeedChanged)
44     Q_PROPERTY(bool enableLimit READ enableLimit WRITE setEnableLimit NOTIFY enableLimitChanged)
45     Q_PROPERTY(bool enableMotor READ enableMotor WRITE setEnableMotor NOTIFY enableMotorChanged)
46     Q_PROPERTY(QPointF localAnchorA READ localAnchorA WRITE setLocalAnchorA NOTIFY localAnchorAChanged)
47     Q_PROPERTY(QPointF localAnchorB READ localAnchorB WRITE setLocalAnchorB NOTIFY localAnchorBChanged)
48
49 public:
50     explicit Box2DRevoluteJoint(QObject *parent = 0);
51     ~Box2DRevoluteJoint();
52
53     float lowerAngle() const;
54     void setLowerAngle(float lowerAngle);
55
56     float upperAngle() const;
57     void setUpperAngle(float upperAngle);
58
59     float maxMotorTorque() const;
60     void setMaxMotorTorque(float maxMotorTorque);
61
62     float motorSpeed() const;
63     void setMotorSpeed(float motorSpeed);
64
65     bool enableLimit() const;
66     void setEnableLimit(bool enableLimit);
67
68     bool enableMotor() const;
69     void setEnableMotor(bool enableMotor);
70
71     QPointF localAnchorA() const;
72     void setLocalAnchorA(const QPointF &localAnchorA);
73
74     QPointF localAnchorB() const;
75     void setLocalAnchorB(const QPointF &localAnchorB);
76
77     void nullifyJoint();
78     void createJoint();
79     void cleanup(b2World *world);
80
81     Q_INVOKABLE float getJointAngle();
82     Q_INVOKABLE float getJointSpeed();
83
84 signals:
85     void lowerAngleChanged();
86     void upperAngleChanged();
87     void maxMotorTorqueChanged();
88     void motorSpeedChanged();
89     void enableLimitChanged();
90     void enableMotorChanged();
91     void localAnchorAChanged();
92     void localAnchorBChanged();
93
94 private:
95     b2RevoluteJointDef mRevoluteJointDef;
96     b2RevoluteJoint *mRevoluteJoint;
97     bool anchorsAuto;
98 };
99
100 #endif // BOX2DREVOLUTEJOINT_H