Updated examples to work with 1.1
[qml-box2d:qml-box2d-folibis.git] / examples / rope / main.qml
1 import QtQuick 2.2
2 import Box2D 1.1
3 import QtQuick.Controls 1.1
4
5 Rectangle {
6     width: 800
7     height: 600
8
9     Slider {
10         id: lengthSlider
11         x: 180
12         y: 50
13         width: 100
14         height: 50
15         maximumValue: 50
16         minimumValue: 20
17         value: 30
18     }
19
20     Component {
21         id: linkComponent
22         Body {
23             width: 20
24             height:20
25             sleepingAllowed: true
26                         bodyType: Body.Dynamic;
27             property color color: "#EFEFEF"
28             fixtures: Circle {
29                 radius: parent.width / 2
30                 anchors.centerIn: parent
31                 density: 0.5
32             }
33             Rectangle {
34                 radius: parent.width / 2
35                 border.color: "blue"
36                 color: parent.color
37                 width: parent.width
38                 height: parent.height
39                 smooth: true
40             }
41         }
42     }
43
44     Component {
45         id: jointComponent
46         RopeJoint {
47             localAnchorA: Qt.point(10,10)
48             localAnchorB: Qt.point(10,10)
49             maxLength: lengthSlider.value
50             collideConnected: true
51         }
52     }
53
54     World {
55         id: world
56         anchors.fill: parent
57         onInitialized: {
58             var prev = leftWall;
59             for(var i = 60;i < 740;i += 20) {
60                 var newLink = linkComponent.createObject(world);
61                 newLink.color = "orange";
62                 newLink.x = i;
63                 newLink.y = 100;
64                 var newJoint = jointComponent.createObject(world);
65                 if(i === 60) newJoint.localAnchorA = Qt.point(40,100);
66                 newJoint.world = world;
67                 newJoint.bodyA = prev;
68                 newJoint.bodyB = newLink;
69                 prev = newLink;
70             }
71             newJoint = jointComponent.createObject(world);
72             newJoint.localAnchorB = Qt.point(0,100);
73             newJoint.world = world;
74             newJoint.bodyA = prev;
75             newJoint.bodyB = rightWall;
76         }
77
78         Body {
79             id: ground
80             height: 40
81             bodyType: Body.Static
82             anchors {
83                 left: parent.left
84                 right: parent.right
85                 bottom: parent.bottom
86             }
87             fixtures: Box {
88                 anchors.fill: parent
89                 friction: 1
90                 density: 1
91             }
92             Rectangle {
93                 anchors.fill: parent
94                 color: "#DEDEDE"
95             }
96         }
97
98         Wall {
99             id: topWall
100             height: 40
101             anchors {
102                 left: parent.left
103                 right: parent.right
104                 top: parent.top
105             }
106         }
107
108         Wall {
109             id: leftWall
110             width: 40
111             anchors {
112                 left: parent.left
113                 top: parent.top
114                 bottom: parent.bottom
115                 bottomMargin: 40
116             }
117         }
118
119         Wall {
120             id: rightWall
121             width: 40
122             anchors {
123                 right: parent.right
124                 top: parent.top
125                 bottom: parent.bottom
126                 bottomMargin: 40
127             }
128         }
129
130         Rectangle {
131             id: debugButton
132             x: 50
133             y: 50
134             width: 120
135             height: 30
136             Text {
137                 id: debugButtonText
138                 text: "Debug view: " + (debugDraw.visible ? "on" : "off")
139                 anchors.centerIn: parent
140             }
141             color: "#DEDEDE"
142             border.color: "#999"
143             radius: 5
144             MouseArea {
145                 anchors.fill: parent
146                 onClicked: {
147                     debugDraw.visible = !debugDraw.visible;
148                     debugButtonText.text = debugDraw.visible ? "Debug view: on" : "Debug view: off";
149                 }
150             }
151         }
152
153         DebugDraw {
154             id: debugDraw
155             anchors.fill: parent
156             world: world
157             opacity: 1
158             visible: false
159         }
160
161         Timer {
162             id: ballsTimer
163             interval: 500
164             running: true
165             repeat: true
166             onTriggered: {
167                 var newBox = linkComponent.createObject(world);
168                 newBox.x = 40 + (Math.random() * world.width - 80);
169                 newBox.y = 50;
170             }
171         }
172     }
173 }