| Index: sky/examples/game/lib/game_demo_world.dart
|
| diff --git a/sky/examples/game/lib/game_demo_world.dart b/sky/examples/game/lib/game_demo_world.dart
|
| index 3b5ae35526895aa8b98cfd7e5b8708e9901876c1..82094d5b2b4fdb441863c84d8adfce5a91c33616 100644
|
| --- a/sky/examples/game/lib/game_demo_world.dart
|
| +++ b/sky/examples/game/lib/game_demo_world.dart
|
| @@ -70,6 +70,9 @@ class GameDemoWorld extends NodeWithSize {
|
|
|
| // Add nebula
|
| addNebula();
|
| +
|
| + userInteractionEnabled = true;
|
| + handleMultiplePointers = true;
|
| }
|
|
|
| // Methods for adding game objects
|
| @@ -200,6 +203,73 @@ class GameDemoWorld extends NodeWithSize {
|
| void controlFire() {
|
| addLaser();
|
| }
|
| +
|
| + // Handle pointer events
|
| +
|
| + int _firstPointer = -1;
|
| + int _secondPointer = -1;
|
| + Point _firstPointerDownPos;
|
| +
|
| + bool handleEvent(SpriteBoxEvent event) {
|
| + Point pointerPos = convertPointToNodeSpace(event.boxPosition);
|
| + int pointer = event.pointer;
|
| +
|
| + switch (event.type) {
|
| + case 'pointerdown':
|
| + if (_firstPointer == -1) {
|
| + // Assign the first pointer
|
| + _firstPointer = pointer;
|
| + _firstPointerDownPos = pointerPos;
|
| + }
|
| + else if (_secondPointer == -1) {
|
| + // Assign second pointer
|
| + _secondPointer = pointer;
|
| + controlFire();
|
| + }
|
| + else {
|
| + // There is a pointer used for steering, let's fire instead
|
| + controlFire();
|
| + }
|
| + break;
|
| + case 'pointermove':
|
| + if (pointer == _firstPointer) {
|
| + // Handle turning control
|
| + double joystickX = 0.0;
|
| + double deltaX = pointerPos.x - _firstPointerDownPos.x;
|
| + if (deltaX > _steeringThreshold || deltaX < -_steeringThreshold) {
|
| + joystickX = (deltaX - _steeringThreshold)/(_steeringMax - _steeringThreshold);
|
| + if (joystickX > 1.0) joystickX = 1.0;
|
| + if (joystickX < -1.0) joystickX = -1.0;
|
| + }
|
| +
|
| + double joystickY = 0.0;
|
| + double deltaY = pointerPos.y - _firstPointerDownPos.y;
|
| + if (deltaY > _steeringThreshold || deltaY < -_steeringThreshold) {
|
| + joystickY = (deltaY - _steeringThreshold)/(_steeringMax - _steeringThreshold);
|
| + if (joystickY > 1.0) joystickY = 1.0;
|
| + if (joystickY < -1.0) joystickY = -1.0;
|
| + }
|
| +
|
| + controlSteering(joystickX, joystickY);
|
| + }
|
| + break;
|
| + case 'pointerup':
|
| + case 'pointercancel':
|
| + if (pointer == _firstPointer) {
|
| + // Un-assign the first pointer
|
| + _firstPointer = -1;
|
| + _firstPointerDownPos = null;
|
| + controlSteering(0.0, 0.0);
|
| + }
|
| + else if (pointer == _secondPointer) {
|
| + _secondPointer = -1;
|
| + }
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + return true;
|
| + }
|
| }
|
|
|
| // Game objects
|
| @@ -230,6 +300,18 @@ class Asteroid extends Sprite {
|
|
|
| _movementVector = new Point(_rand.nextDouble() * _maxAsteroidSpeed * 2 - _maxAsteroidSpeed,
|
| _rand.nextDouble() * _maxAsteroidSpeed * 2 - _maxAsteroidSpeed);
|
| +
|
| + userInteractionEnabled = true;
|
| + }
|
| +
|
| + bool handleEvent(SpriteBoxEvent event) {
|
| + if (event.type == "pointerdown") {
|
| + colorOverlay = new Color(0x99ff0000);
|
| + }
|
| + else if (event.type == "pointerup") {
|
| + colorOverlay = null;
|
| + }
|
| + return false;
|
| }
|
| }
|
|
|
|
|