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

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

Issue 1179413009: Adds basic touch handling to sprites and optimizes transformations (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
1 part of game; 1 part of game;
2 2
3 // Random generator 3 // Random generator
4 Math.Random _rand = new Math.Random(); 4 Math.Random _rand = new Math.Random();
5 5
6 const double _gameSizeWidth = 1024.0; 6 const double _gameSizeWidth = 1024.0;
7 const double _gameSizeHeight = 1024.0; 7 const double _gameSizeHeight = 1024.0;
8 8
9 const double _shipRadius = 30.0; 9 const double _shipRadius = 30.0;
10 const double _lrgAsteroidRadius = 40.0; 10 const double _lrgAsteroidRadius = 40.0;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 // Add ship 63 // Add ship
64 addShip(); 64 addShip();
65 65
66 // Add starfield 66 // Add starfield
67 _starField = new StarField.withImage(_imgStar, _numStarsInStarField); 67 _starField = new StarField.withImage(_imgStar, _numStarsInStarField);
68 _starField.zPosition = -2.0; 68 _starField.zPosition = -2.0;
69 addChild(_starField); 69 addChild(_starField);
70 70
71 // Add nebula 71 // Add nebula
72 addNebula(); 72 addNebula();
73
74 userInteractionEnabled = true;
75 handleMultiplePointers = true;
73 } 76 }
74 77
75 // Methods for adding game objects 78 // Methods for adding game objects
76 79
77 void addBackground() { 80 void addBackground() {
78 Sprite sprtBg = new Sprite.withImage(_imgBg); 81 Sprite sprtBg = new Sprite.withImage(_imgBg);
79 sprtBg.size = new Size(_gameSizeWidth, _gameSizeHeight); 82 sprtBg.size = new Size(_gameSizeWidth, _gameSizeHeight);
80 sprtBg.pivot = Point.origin; 83 sprtBg.pivot = Point.origin;
81 _gameLayer.addChild(sprtBg); 84 _gameLayer.addChild(sprtBg);
82 } 85 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 // Handling controls 196 // Handling controls
194 197
195 void controlSteering(double x, double y) { 198 void controlSteering(double x, double y) {
196 _joystickX = x; 199 _joystickX = x;
197 _joystickY = y; 200 _joystickY = y;
198 } 201 }
199 202
200 void controlFire() { 203 void controlFire() {
201 addLaser(); 204 addLaser();
202 } 205 }
206
207 // Handle pointer events
208
209 int _firstPointer = -1;
210 int _secondPointer = -1;
211 Point _firstPointerDownPos;
212
213 bool handleEvent(SpriteBoxEvent event) {
214 Point pointerPos = convertPointToNodeSpace(event.boxPosition);
215 int pointer = event.pointer;
216
217 switch (event.type) {
218 case 'pointerdown':
219 if (_firstPointer == -1) {
220 // Assign the first pointer
221 _firstPointer = pointer;
222 _firstPointerDownPos = pointerPos;
223 }
224 else if (_secondPointer == -1) {
225 // Assign second pointer
226 _secondPointer = pointer;
227 controlFire();
228 }
229 else {
230 // There is a pointer used for steering, let's fire instead
231 controlFire();
232 }
233 break;
234 case 'pointermove':
235 if (pointer == _firstPointer) {
236 // Handle turning control
237 double joystickX = 0.0;
238 double deltaX = pointerPos.x - _firstPointerDownPos.x;
239 if (deltaX > _steeringThreshold || deltaX < -_steeringThreshold) {
240 joystickX = (deltaX - _steeringThreshold)/(_steeringMax - _steeringT hreshold);
241 if (joystickX > 1.0) joystickX = 1.0;
242 if (joystickX < -1.0) joystickX = -1.0;
243 }
244
245 double joystickY = 0.0;
246 double deltaY = pointerPos.y - _firstPointerDownPos.y;
247 if (deltaY > _steeringThreshold || deltaY < -_steeringThreshold) {
248 joystickY = (deltaY - _steeringThreshold)/(_steeringMax - _steeringT hreshold);
249 if (joystickY > 1.0) joystickY = 1.0;
250 if (joystickY < -1.0) joystickY = -1.0;
251 }
252
253 controlSteering(joystickX, joystickY);
254 }
255 break;
256 case 'pointerup':
257 case 'pointercancel':
258 if (pointer == _firstPointer) {
259 // Un-assign the first pointer
260 _firstPointer = -1;
261 _firstPointerDownPos = null;
262 controlSteering(0.0, 0.0);
263 }
264 else if (pointer == _secondPointer) {
265 _secondPointer = -1;
266 }
267 break;
268 default:
269 break;
270 }
271 return true;
272 }
203 } 273 }
204 274
205 // Game objects 275 // Game objects
206 276
207 enum AsteroidSize { 277 enum AsteroidSize {
208 small, 278 small,
209 medium, 279 medium,
210 large, 280 large,
211 } 281 }
212 282
(...skipping 10 matching lines...) Expand all
223 return _radius; 293 return _radius;
224 } 294 }
225 295
226 Asteroid.withImage(Image img, AsteroidSize this._asteroidSize) : super.withIma ge(img) { 296 Asteroid.withImage(Image img, AsteroidSize this._asteroidSize) : super.withIma ge(img) {
227 size = new Size(radius * 2.0, radius * 2.0); 297 size = new Size(radius * 2.0, radius * 2.0);
228 position = new Point(_gameSizeWidth * _rand.nextDouble(), _gameSizeHeight * _rand.nextDouble()); 298 position = new Point(_gameSizeWidth * _rand.nextDouble(), _gameSizeHeight * _rand.nextDouble());
229 rotation = 360.0 * _rand.nextDouble(); 299 rotation = 360.0 * _rand.nextDouble();
230 300
231 _movementVector = new Point(_rand.nextDouble() * _maxAsteroidSpeed * 2 - _ma xAsteroidSpeed, 301 _movementVector = new Point(_rand.nextDouble() * _maxAsteroidSpeed * 2 - _ma xAsteroidSpeed,
232 _rand.nextDouble() * _maxAsteroidSpeed * 2 - _ma xAsteroidSpeed); 302 _rand.nextDouble() * _maxAsteroidSpeed * 2 - _ma xAsteroidSpeed);
303
304 userInteractionEnabled = true;
305 }
306
307 bool handleEvent(SpriteBoxEvent event) {
308 if (event.type == "pointerdown") {
309 colorOverlay = new Color(0x99ff0000);
310 }
311 else if (event.type == "pointerup") {
312 colorOverlay = null;
313 }
314 return false;
233 } 315 }
234 } 316 }
235 317
236 class Ship extends Sprite { 318 class Ship extends Sprite {
237 Vector2 _movementVector; 319 Vector2 _movementVector;
238 double _rotationTarget; 320 double _rotationTarget;
239 321
240 Ship.withImage(Image img) : super.withImage(img) { 322 Ship.withImage(Image img) : super.withImage(img) {
241 _movementVector = new Vector2.zero(); 323 _movementVector = new Vector2.zero();
242 rotation = _rotationTarget = 270.0; 324 rotation = _rotationTarget = 270.0;
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 double dy = a.y - b.y; 466 double dy = a.y - b.y;
385 if (dx < 0.0) dx = -dx; 467 if (dx < 0.0) dx = -dx;
386 if (dy < 0.0) dy = -dy; 468 if (dy < 0.0) dy = -dy;
387 if (dx > dy) { 469 if (dx > dy) {
388 return dx + dy/2.0; 470 return dx + dy/2.0;
389 } 471 }
390 else { 472 else {
391 return dy + dx/2.0; 473 return dy + dx/2.0;
392 } 474 }
393 } 475 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698