Index: sky/examples/game/lib/game_box.dart |
diff --git a/sky/examples/game/lib/game_box.dart b/sky/examples/game/lib/game_box.dart |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ee34eb91b43d767e2e3bf81cd48e59ebd293c3fc |
--- /dev/null |
+++ b/sky/examples/game/lib/game_box.dart |
@@ -0,0 +1,71 @@ |
+part of game; |
+ |
+const double _steeringThreshold = 20.0; |
+const double _steeringMax = 50.0; |
+ |
+class GameBox extends SpriteBox { |
+ |
+ GameBox(GameWorld game) : super(game, SpriteBoxTransformMode.letterbox); |
+ |
+ GameWorld get _gameWorld => this.rootNode; |
+ |
+ // Handle pointers |
+ int _firstPointer = -1; |
+ int _secondPointer = -1; |
+ Vector2 _firstPointerDownPos; |
+ |
+ void handleEvent(Event event) { |
+ if (event is PointerEvent) { |
+ Vector2 pointerPos = new Vector2(event.x, event.y); |
+ 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; |
+ _gameWorld.controlThrust(1.0); |
+ } |
+ else { |
+ // There is a pointer used for steering, let's fire instead |
+ _gameWorld.controlFire(); |
+ } |
+ break; |
+ case 'pointermove': |
+ if (pointer == _firstPointer) { |
+ // Handle turning control |
+ double deltaX = pointerPos[0] - _firstPointerDownPos[0]; |
+ if (deltaX > _steeringThreshold || deltaX < -_steeringThreshold) { |
+ double turnForce = (deltaX - _steeringThreshold)/(_steeringMax - _steeringThreshold); |
+ if (turnForce > 1.0) turnForce = 1.0; |
+ if (turnForce < -1.0) turnForce = -1.0; |
+ _gameWorld.controlSteering(turnForce); |
+ print("steering: $turnForce"); |
+ } |
+ } |
+ break; |
+ case 'pointerup': |
+ case 'pointercancel': |
+ if (pointer == _firstPointer) { |
+ // Un-assign the first pointer |
+ _firstPointer = -1; |
+ _firstPointerDownPos = null; |
+ _gameWorld.controlSteering(null); |
+ } |
+ else if (pointer == _secondPointer) { |
+ _secondPointer = -1; |
+ _gameWorld.controlThrust(null); |
+ } |
+ break; |
+ default: |
+ break; |
+ } |
+ } |
+ } |
+ |
+} |