Adds scoring and level up in game demo
diff --git a/packages/flutter/example/game/lib/game_demo_world.dart b/packages/flutter/example/game/lib/game_demo_world.dart
index 9154079..b34f2ff 100644
--- a/packages/flutter/example/game/lib/game_demo_world.dart
+++ b/packages/flutter/example/game/lib/game_demo_world.dart
@@ -46,6 +46,7 @@
   // Game state
   int _numFrames = 0;
   bool _isGameOver = false;
+  int _currentLevel = 0;
 
   // Heads up display
   Hud _hud;
@@ -56,15 +57,6 @@
 
     _gameLayer = new Node();
     this.addChild(_gameLayer);
-
-    // Add some asteroids to the game world
-    for (int i = 0; i < 5; i++) {
-      addAsteroid(AsteroidSize.large);
-    }
-    for (int i = 0; i < 5; i++) {
-      addAsteroid(AsteroidSize.medium);
-    }
-
     // Add ship
     addShip();
 
@@ -88,6 +80,25 @@
     _hud = new Hud(_spriteSheetUI);
     _hud.zPosition = 1000.0;
     addChild(_hud);
+
+    // Setup level
+    setupLevel(0);
+  }
+
+  void setupLevel(int level) {
+    int numLargeAsteroids = 5 + level * 2;
+    int numMediumAsteroids = 5 + level * 2;
+
+    // Add some asteroids to the game world
+    for (int i = 0; i < numLargeAsteroids; i++) {
+      addAsteroid(AsteroidSize.large);
+    }
+    for (int i = 0; i < numMediumAsteroids; i++) {
+      addAsteroid(AsteroidSize.medium);
+    }
+
+    _numFrames = 0;
+    _shield.visible = true;
   }
 
   // Methods for adding game objects
@@ -98,6 +109,10 @@
     if (pos != null) asteroid.position = pos;
     _gameLayer.addChild(asteroid);
     _asteroids.add(asteroid);
+
+    // Animate asteroid into the scene
+    Action action = new ActionTween((a) => asteroid.scale = a, 0.0, 1.0, 1.0, bounceOut);
+    _gameLayer.actions.run(action);
   }
 
   void addShip() {
@@ -262,6 +277,14 @@
           // Remove asteroid
           asteroid.removeFromParent();
           _asteroids.removeAt(j);
+
+          // Scoring
+          if (asteroid._asteroidSize == AsteroidSize.large)
+            addScore(100);
+          else if (asteroid._asteroidSize == AsteroidSize.medium)
+            addScore(50);
+          else
+            addScore(10);
           break;
         }
       }
@@ -285,6 +308,12 @@
     centerCamera();
     warpObjects();
 
+    // Check for level up
+    if (_asteroids.length == 0) {
+      _currentLevel++;
+      setupLevel(_currentLevel);
+    }
+
     // Update shield
     if (_numFrames > _numFramesShieldActive) _shield.visible = false;
     else if (_numFrames > _numFramesShieldActive - _numFramesShieldFlickers) _shield.visible = !_shield.visible;
@@ -415,6 +444,11 @@
     }
     return true;
   }
+
+  // Scoring and HUD
+  void addScore(int score) {
+    _hud.score += score;
+  }
 }
 
 // Game objects
@@ -596,6 +630,7 @@
   SpriteSheet spriteSheetUI;
   Sprite sprtBgScore;
   Sprite sprtBgShield;
+  bool _dirtyScore = true;
 
   int _score = 0;
 
@@ -603,21 +638,22 @@
 
   set score(int score) {
     _score = score;
-    _updateHud();
+    _dirtyScore = true;
   }
 
   Hud(this.spriteSheetUI) {
     pivot = Point.origin;
 
     sprtBgScore = new Sprite(spriteSheetUI["scoreboard.png"]);
-    sprtBgScore.pivot = Point.origin;
+    sprtBgScore.pivot = new Point(1.0, 0.0);
     sprtBgScore.scale = 0.6;
     addChild(sprtBgScore);
 
     sprtBgShield = new Sprite(spriteSheetUI["bar_shield.png"]);
-    sprtBgShield.pivot = new Point(1.0, 0.0);
+    sprtBgShield.pivot = Point.origin;
     sprtBgShield.scale = 0.6;
-    addChild(sprtBgShield);
+    // TODO: Add shield
+    //addChild(sprtBgShield);
   }
 
   void spriteBoxPerformedLayout() {
@@ -626,15 +662,28 @@
     size = spriteBox.visibleArea.size;
 
     // Position hud objects
-    sprtBgScore.position = new Point(20.0, 20.0);
-    sprtBgShield.position = new Point(size.width - 20.0, 20.0);
+    sprtBgShield.position = new Point(20.0, 20.0);
+    sprtBgScore.position = new Point(size.width - 20.0, 20.0);
   }
 
-  void _updateHud() {
-    sprtBgScore.removeAllChildren();
+  void update(double dt) {
+    // Update score
+    if (_dirtyScore) {
 
-    String scoreStr = _score.toString();
-    
+      sprtBgScore.removeAllChildren();
+
+      String scoreStr = _score.toString();
+      double xPos = -50.0;
+      for (int i = scoreStr.length - 1; i >= 0; i--) {
+        String numStr = scoreStr.substring(i, i + 1);
+        Sprite numSprt = new Sprite(spriteSheetUI["number_$numStr.png"]);
+        numSprt.position = new Point(xPos, 49.0);
+        sprtBgScore.addChild(numSprt);
+        xPos -= 37.0;
+      }
+      _dirtyScore = false;
+    }
+    // Update power bar
   }
 }