Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(759)

Side by Side Diff: sky/examples/game/lib/game_world.dart

Issue 1179333002: Playable demo game and bug fixes in sprites (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 part of game;
2
3 class GameWorld extends Node {
4
5 World world;
6 List<Body> bodies = [];
7 Body _bodyShip;
8
9 Image _imgBg;
10 Image _imgAsteroid;
11 Image _imgShip;
12
13 double _steeringInput;
14 double _thrustInput;
15 double _lastSteeringSpeed = 0.0;
16
17 GameWorld(ImageMap images) {
18 this.width = 1024.0;
19 this.height = 1024.0;
20
21 // Fetch images
22 _imgBg = images["https://raw.githubusercontent.com/slembcke/GalacticGuardian .spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/resources-auto/Burn Texture.png"];
23 _imgAsteroid = images["https://raw.githubusercontent.com/slembcke/GalacticGu ardian.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resou rces-auto/asteroid_big_002.png"];
24 _imgShip = images["https://raw.githubusercontent.com/slembcke/GalacticGuardi an.spritebuilder/GDC/Packages/SpriteBuilder%20Resources.sbpack/Sprites/resources -auto/GG_blueship_Lv3.png"];
25
26 // Create the physics world
27 world = new World.withGravity(new Vector2(0.0, 0.0));
28
29 // Add a background
30 addBackground();
31
32 // Add some asteroids to the game world
33 for (int i = 0; i < 50; i++) {
34 addAsteroid(10.0);
35 }
36 for (int i = 0; i < 50; i++) {
37 addAsteroid(20.0);
38 }
39
40 // Add ship
41 addShip();
42 }
43
44 void addBackground() {
45 Sprite sprtBg = new Sprite.withImage(_imgBg);
46 sprtBg.width = width;
47 sprtBg.height = height;
48 sprtBg.pivot = new Vector2(0.0, 0.0);
49 this.addChild(sprtBg);
50 }
51
52 void addAsteroid([double radius=20.0]) {
53
54 // Create shape
55 final CircleShape shape = new CircleShape();
56 shape.radius = radius;
57
58 // Define fixture (links body and shape)
59 final FixtureDef activeFixtureDef = new FixtureDef();
60 activeFixtureDef.restitution = 1.0;
61 activeFixtureDef.density = 0.05;
62 activeFixtureDef.shape = shape;
63
64 // Define body
65 final BodyDef bodyDef = new BodyDef();
66 bodyDef.type = BodyType.DYNAMIC;
67 bodyDef.position = new Vector2(0.0, 30.0);
68 bodyDef.linearDamping = 0.0;
69 bodyDef.angularDamping = 0.0;
70
71 // Create body and fixture from definitions
72 final Body body = world.createBody(bodyDef);
73 body.createFixtureFromFixtureDef(activeFixtureDef);
74
75 // Set position of object
76 Math.Random rand = new Math.Random();
77 body.setTransform(new Vector2(rand.nextDouble() * this.width, rand.nextDoubl e() * this.height), 0.0);
78 body.applyLinearImpulse(new Vector2(rand.nextDouble()*10000.0-5000.0, rand.n extDouble()*10000.0-5000.0), new Vector2(0.0, 0.0), true);
79
80 // Add to list
81 bodies.add(body);
82
83 // Create sprite
84 Sprite sprt = new Sprite.withImage(_imgAsteroid);
85 sprt.width = radius*2;
86 sprt.height = radius*2;
87 // sprt.colorOverlay = new Color(0x33ff0000);
88 // sprt.transferMode = TransferMode.plusMode;
89 body.userData = sprt;
90 this.addChild(sprt);
91 }
92
93 void addShip() {
94 double radius = 30.0;
95
96 // Create shape
97 final CircleShape shape = new CircleShape();
98 shape.radius = radius;
99
100 // Define fixture (links body and shape)
101 final FixtureDef activeFixtureDef = new FixtureDef();
102 activeFixtureDef.restitution = 1.0;
103 activeFixtureDef.density = 0.05;
104 activeFixtureDef.shape = shape;
105
106 // Define body
107 final BodyDef bodyDef = new BodyDef();
108 bodyDef.type = BodyType.DYNAMIC;
109 bodyDef.position = new Vector2(0.0, 30.0);
110 bodyDef.linearDamping = 0.0;
111 bodyDef.angularDamping = 0.95;
112
113 // Create body and fixture from definitions
114 final Body body = world.createBody(bodyDef);
115 body.createFixtureFromFixtureDef(activeFixtureDef);
116
117 // Center on screen
118 body.setTransform(new Vector2(width/2.0, height/2.0), 90.0);
119
120 // Add to list
121 bodies.add(body);
122 _bodyShip = body;
123
124 // Create sprite
125 Sprite sprt = new Sprite.withImage(_imgShip);
126 sprt.width = radius*2;
127 sprt.height = radius*2;
128 sprt.position = new Vector2(width/2.0, height/2.0);
129 body.userData = sprt;
130 this.addChild(sprt);
131 }
132
133 void update(double dt) {
134 // Apply thrust
135 if (_thrustInput != null) {
136 double force = _thrustInput*10000.0;
137 double rad = degrees2radians(_bodyShip.getAngle());
138 _bodyShip.applyLinearImpulse(new Vector2(Math.cos(rad)*force, Math.sin(rad )*force), new Vector2(0.0, 0.0), true);
139 }
140
141 // Simulate world
142 world.stepDt(1.0/60.0, 10, 10); // Pass in dt
143
144 // Apply stearing
145 if (_steeringInput != null) {
146 _lastSteeringSpeed = _steeringInput * 4.0;
147 }
148 else {
149 _lastSteeringSpeed *= 0.75;
150 }
151 _bodyShip.setTransform(_bodyShip.position, _bodyShip.getAngle() + _lastSteer ingSpeed);
152
153 // Update all sprites
154 bodies.forEach(updateBody);
155 }
156
157 void updateBody(Body body) {
158 Sprite sprt = body.userData;
159 double rot = 0.0; //body.getRotation();
160
161 // Check bounds and warp objects
162 if (body.position[0] < -sprt.width/2) {
163 body.setTransform(new Vector2(body.position[0] + this.width + sprt.width, body.position[1]), rot);
164 }
165 if (body.position[0] > this.width + sprt.width/2) {
166 body.setTransform(new Vector2(body.position[0] - (this.width + sprt.width) , body.position[1]), rot);
167 }
168 if (body.position[1] < -sprt.height/2) {
169 body.setTransform(new Vector2(body.position[0], body.position[1] + this.he ight + sprt.height), rot);
170 }
171 if (body.position[1] > this.height + sprt.height/2) {
172 body.setTransform(new Vector2(body.position[0], body.position[1] - (this.h eight + sprt.height)), rot);
173 }
174
175 // Update sprite
176 sprt.position = body.position;
177 sprt.rotation = body.getAngle();
178 }
179
180 void controlSteering(double input) {
181 _steeringInput = input;
182 }
183
184 void controlThrust(double input) {
185 _thrustInput = input;
186 }
187
188 void controlFire() {
189
190 }
191 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698