Merge pull request #668 from eseidelGoogle/music_asset
Make Asteroids.apk use background music from its bundle
diff --git a/examples/game/README.md b/examples/game/README.md
index 029c193..3492069 100644
--- a/examples/game/README.md
+++ b/examples/game/README.md
@@ -1,2 +1,4 @@
-Assets for this game are taken from Galactic Guardian:
-https://github.com/slembcke/GalacticGuardian.spritebuilder
\ No newline at end of file
+Assets for this game are from Galactic Guardian:
+https://github.com/slembcke/GalacticGuardian.spritebuilder
+And are used under MIT license:
+https://github.com/slembcke/GalacticGuardian.spritebuilder/pull/2
diff --git a/examples/game/assets/temp_music.aac b/examples/game/assets/temp_music.aac
new file mode 100644
index 0000000..934fb54
--- /dev/null
+++ b/examples/game/assets/temp_music.aac
Binary files differ
diff --git a/examples/game/lib/main.dart b/examples/game/lib/main.dart
index d18fe06..6a28fab 100644
--- a/examples/game/lib/main.dart
+++ b/examples/game/lib/main.dart
@@ -2,6 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+import 'dart:async';
+
import 'package:sky/mojo/asset_bundle.dart';
import 'package:sky/theme/colors.dart' as colors;
import 'package:sky/rendering/object.dart';
@@ -24,40 +26,48 @@
final AssetBundle _bundle = _initBundle();
-ImageMap _loader;
+ImageMap _imageMap;
SpriteSheet _spriteSheet;
SpriteSheet _spriteSheetUI;
GameDemoApp _app;
Map<String,SoundEffect> _sounds = {};
main() async {
- _loader = new ImageMap(_bundle);
+ _imageMap = new ImageMap(_bundle);
- await _loader.load([
+ // Use a list to wait on all loads in parallel just before starting the app.
+ List loads = [];
+
+ loads.add(_imageMap.load([
'assets/nebula.png',
'assets/sprites.png',
'assets/starfield.png',
'assets/game_ui.png',
- ]);
+ ]));
+ // TODO(eseidel): These load in serial which is bad for startup!
String json = await _bundle.loadString('assets/sprites.json');
- _spriteSheet = new SpriteSheet(_loader['assets/sprites.png'], json);
+ _spriteSheet = new SpriteSheet(_imageMap['assets/sprites.png'], json);
json = await _bundle.loadString('assets/game_ui.json');
- _spriteSheetUI = new SpriteSheet(_loader["assets/game_ui.png"], json);
+ _spriteSheetUI = new SpriteSheet(_imageMap['assets/game_ui.png'], json);
_app = new GameDemoApp();
- _sounds["explosion"] = new SoundEffect(_bundle.load('assets/explosion.wav'));
- _sounds["laser"] = new SoundEffect(_bundle.load('assets/laser.wav'));
+ // TODO(eseidel): SoundEffect doesn't really do anything except hold a future.
+ _sounds['explosion'] = new SoundEffect(_bundle.load('assets/explosion.wav'));
+ _sounds['laser'] = new SoundEffect(_bundle.load('assets/laser.wav'));
- await _sounds["explosion"].load();
- await _sounds["laser"].load();
+ loads.addAll([
+ _sounds['explosion'].load(),
+ _sounds['laser'].load(),
+ ]);
SoundTrackPlayer stPlayer = SoundTrackPlayer.sharedInstance();
- SoundTrack music = await stPlayer.load('https://github.com/slembcke/GalacticGuardian.spritebuilder/raw/GDC/Source/Resources/TempMusic.aac');
+ SoundTrack music = await stPlayer.load(_bundle.load('assets/temp_music.aac'));
stPlayer.play(music);
+ await Future.wait(loads);
runApp(_app);
}
@@ -111,7 +121,7 @@
_game = new GameDemoWorld(
_app,
navigator,
- _loader,
+ _imageMap,
_spriteSheet,
_spriteSheetUI,
_sounds,
@@ -121,8 +131,8 @@
);
navigator.pushNamed('/game');
},
- texture: _spriteSheetUI["btn_play_up.png"],
- textureDown: _spriteSheetUI["btn_play_down.png"],
+ texture: _spriteSheetUI['btn_play_up.png'],
+ textureDown: _spriteSheetUI['btn_play_down.png'],
width: 128.0,
height: 128.0
),
@@ -231,7 +241,7 @@
class MainScreenBackground extends NodeWithSize {
MainScreenBackground() : super(new Size(1024.0, 1024.0)) {
- Sprite sprtBackground = new Sprite.fromImage(_loader["assets/starfield.png"]);
+ Sprite sprtBackground = new Sprite.fromImage(_imageMap['assets/starfield.png']);
sprtBackground.position = new Point(512.0, 512.0);
addChild(sprtBackground);
diff --git a/examples/game/lib/sound.dart b/examples/game/lib/sound.dart
index b217090..b5ff1d9 100644
--- a/examples/game/lib/sound.dart
+++ b/examples/game/lib/sound.dart
@@ -170,16 +170,13 @@
MediaServiceProxy _mediaService;
- Future<SoundTrack> load(String url) async {
+ Future<SoundTrack> load(Future<MojoDataPipeConsumer> pipe) async {
// Create media player
SoundTrack soundTrack = new SoundTrack();
soundTrack._player = new MediaPlayerProxy.unbound();
_mediaService.ptr.createPlayer(soundTrack._player);
- // Load and prepare
- UrlResponse response = await fetchUrl(url);
- await soundTrack._player.ptr.prepare(response.body);
-
+ await soundTrack._player.ptr.prepare(await pipe);
return soundTrack;
}
diff --git a/examples/game/lib/sprites.dart b/examples/game/lib/sprites.dart
index 8735554..e26bb45 100644
--- a/examples/game/lib/sprites.dart
+++ b/examples/game/lib/sprites.dart
@@ -11,11 +11,9 @@
import 'dart:sky';
import 'package:mojo/core.dart';
-import 'package:mojo/mojo/url_response.mojom.dart';
import 'package:sky/animation/curves.dart';
import 'package:sky/base/scheduler.dart' as scheduler;
import 'package:sky/mojo/asset_bundle.dart';
-import 'package:sky/mojo/net/fetch.dart';
import 'package:sky/mojo/shell.dart' as shell;
import 'package:sky/rendering/box.dart';
import 'package:sky/rendering/object.dart';
diff --git a/examples/game/sky.yaml b/examples/game/sky.yaml
index d88daaa..df02f36 100644
--- a/examples/game/sky.yaml
+++ b/examples/game/sky.yaml
@@ -9,3 +9,4 @@
- assets/laser.wav
- assets/levelup.wav
- assets/pickup.wav
+ - assets/temp_music.aac