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

Side by Side Diff: samples/pop_pop_win/lib/pop_pop_win.dart

Issue 242443008: samples/pop_pop_win: now based on StageXL (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: tiny nit Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « samples/pop_pop_win/lib/platform_target.dart ('k') | samples/pop_pop_win/lib/src/audio.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 library pop_pop_win; 1 library pop_pop_win;
2 2
3 import 'dart:async';
3 import 'dart:html'; 4 import 'dart:html';
4 import 'dart:web_audio';
5 import 'package:bot/bot.dart';
6 import 'package:bot_web/bot_html.dart';
7 import 'package:bot_web/bot_texture.dart';
8 5
9 import 'package:pop_pop_win/src/canvas.dart'; 6 import 'package:stagexl/stagexl.dart';
10 import 'package:pop_pop_win/platform_target.dart';
11 import 'package:pop_pop_win/src/html.dart';
12 7
13 import 'src/textures.dart'; 8 import 'platform_target.dart';
14 9 import 'src/audio.dart';
15 part 'src/pop_pop_win/audio.dart'; 10 import 'src/platform.dart';
11 import 'src/stage.dart';
16 12
17 const String _ASSET_DIR = 'resources/'; 13 const String _ASSET_DIR = 'resources/';
18 14
19 const String _TRANSPARENT_TEXTURE = 15 const String _TRANSPARENT_TEXTURE = '${_ASSET_DIR}images/transparent.json';
20 '${_ASSET_DIR}images/transparent_animated.png'; 16 const String _OPAQUE_TEXTURE = '${_ASSET_DIR}images/opaque.json';
21 const String _OPAQUE_TEXTURE = '${_ASSET_DIR}images/dart_opaque_01.jpg'; 17 const String _TRANSPARENT_STATIC_TEXTURE = '${_ASSET_DIR}images/static.json';
22 const String _TRANSPARENT_STATIC_TEXTURE =
23 '${_ASSET_DIR}images/transparent_static.png';
24 18
25 const int _LOADING_BAR_PX_WIDTH = 398; 19 Future startGame(PlatformTarget platform) {
26
27 DivElement _loadingBar;
28 ImageLoader _imageLoader;
29
30 final _Audio _audio = new _Audio();
31
32 void startGame(PlatformTarget platform) {
33 initPlatform(platform); 20 initPlatform(platform);
34 21
35 _loadingBar = querySelector('.sprite.loading_bar'); 22 var stage = new Stage(querySelector('#gameCanvas'), webGL: true,
36 _loadingBar.style.display = 'block'; 23 color: 0xb4ad7f, frameRate: 60);
37 _loadingBar.style.width = '0';
38 24
39 _imageLoader = new ImageLoader([_TRANSPARENT_TEXTURE, 25 var renderLoop = new RenderLoop()
40 _OPAQUE_TEXTURE]); 26 ..addStage(stage);
41 _imageLoader.loaded.listen(_onLoaded); 27
42 _imageLoader.progress.listen(_onProgress); 28 BitmapData.defaultLoadOptions.webp = true;
43 _imageLoader.load(); 29
30 //have to load the loading bar first...
31 var resourceManager = new ResourceManager()
32 ..addTextureAtlas("static", "resources/images/static.json",
33 TextureAtlasFormat.JSON);
34
35 return resourceManager.load()
36 .then((resMan) => _initialLoad(resMan, stage));
44 } 37 }
45 38
46 void _onProgress(_) { 39 void _initialLoad(ResourceManager resourceManager, Stage stage) {
47 int completedBytes = _imageLoader.completedBytes; 40 var atlas = resourceManager.getTextureAtlas('static');
48 int totalBytes = _imageLoader.totalBytes;
49 41
50 completedBytes += _audio.completedBytes; 42 var bar = new Gauge(atlas.getBitmapData('loading_bar'), Gauge.DIRECTION_RIGHT)
51 totalBytes += _audio.totalBytes; 43 ..x = 51
44 ..y = 8
45 ..ratio = 0;
52 46
53 var percent = completedBytes / totalBytes; 47 var loadingText = new Bitmap(atlas.getBitmapData('loading_text'))
54 if (percent == double.INFINITY) percent = 0; 48 ..x = 141
55 var percentClean = (percent * 1000).floor() / 10; 49 ..y = 10;
56 50
57 var barWidth = percent * _LOADING_BAR_PX_WIDTH; 51 var loadingSprite = new Sprite()
58 _loadingBar.style.width = '${barWidth.toInt()}px'; 52 ..addChild(new Bitmap(atlas.getBitmapData('loading_background')))
53 ..addChild(bar)
54 ..addChild(loadingText)
55 ..x = stage.sourceWidth ~/ 2 - 1008 ~/ 2
56 ..y = 400
57 ..scaleX = 2
58 ..scaleY = 2
59 ..addTo(stage);
60
61 resourceManager
62 ..addTextureAtlas('opaque', 'resources/images/opaque.json',
63 TextureAtlasFormat.JSON)
64 ..addTextureAtlas('animated', 'resources/images/animated.json',
65 TextureAtlasFormat.JSON);
66
67 resourceManager.addSoundSprite('audio', 'resources/audio/audio.json');
68
69 resourceManager.onProgress.listen((e) {
70 bar.ratio = resourceManager.finishedResources.length /
71 resourceManager.resources.length;
72 });
73
74 resourceManager.load().then((resMan) =>
75 _secondaryLoad(resMan, stage, loadingSprite));
59 } 76 }
60 77
61 void _onLoaded(_) { 78 void _secondaryLoad(ResourceManager resourceManager, Stage stage,
62 if (_imageLoader.state == ResourceLoader.StateLoaded && _audio.done) { 79 Sprite loadingSprite) {
80 var tween = stage.juggler.tween(loadingSprite, .5)
81 ..animate.alpha.to(0)
82 ..onComplete = () => stage.removeChild(loadingSprite);
63 83
64 //
65 // load textures
66 //
67 var opaqueImage = _imageLoader.getResource(_OPAQUE_TEXTURE);
68 var transparentImage = _imageLoader.getResource(_TRANSPARENT_TEXTURE);
69
70 // already loaded. Used in CSS.
71 var staticTransparentImage =
72 new ImageElement(src: _TRANSPARENT_STATIC_TEXTURE);
73
74 var textures = getTextures(transparentImage, opaqueImage,
75 staticTransparentImage);
76
77 var textureData = new TextureData(textures);
78
79 // run the app
80 querySelector('#loading').style.display = 'none';
81 _runGame(textureData);
82 }
83 }
84
85 void _runGame(TextureData textureData) {
86 _updateAbout(); 84 _updateAbout();
87 85
88 targetPlatform.aboutChanged.listen((_) => _updateAbout()); 86 targetPlatform.aboutChanged.listen((_) => _updateAbout());
89 87
90 final size = targetPlatform.renderBig ? 16 : 7; 88 var size = targetPlatform.size;
91 final int m = (size * size * 0.15625).toInt(); 89 var m = (size * size * 0.15625).toInt();
92 90
93 final CanvasElement gameCanvas = querySelector('#gameCanvas'); 91 GameAudio.initialize(resourceManager);
94 gameCanvas.style.userSelect = 'none'; 92 var gameRoot = new GameRoot(size, size, m, stage, resourceManager);
95
96 final gameRoot = new GameRoot(size, size, m, gameCanvas, textureData);
97 93
98 // disable touch events 94 // disable touch events
99 window.onTouchMove.listen((args) => args.preventDefault()); 95 window.onTouchMove.listen((args) => args.preventDefault());
100 96
101 window.onKeyDown.listen(_onKeyDown); 97 window.onKeyDown.listen(_onKeyDown);
102 98
103 querySelector('#popup').onClick.listen(_onPopupClick); 99 querySelector('#popup').onClick.listen(_onPopupClick);
104 100
105 titleClickedEvent.listen((args) => targetPlatform.toggleAbout(true)); 101 titleClickedEvent.listen((args) => targetPlatform.toggleAbout(true));
106 } 102 }
107 103
108 void _onPopupClick(MouseEvent args) { 104 void _onPopupClick(args) {
109 if (args.toElement is! AnchorElement) { 105 if (args.toElement is! AnchorElement) {
110 targetPlatform.toggleAbout(false); 106 targetPlatform.toggleAbout(false);
111 } 107 }
112 } 108 }
113 109
114 void _onKeyDown(KeyboardEvent args) { 110 void _onKeyDown(args) {
115 var keyEvent = new KeyEvent.wrap(args); 111 var keyEvent = new KeyEvent.wrap(args);
116 switch (keyEvent.keyCode) { 112 switch (keyEvent.keyCode) {
117 case KeyCode.ESC: // esc 113 case KeyCode.ESC: // esc
118 targetPlatform.toggleAbout(false); 114 targetPlatform.toggleAbout(false);
119 break; 115 break;
120 case KeyCode.H: // h 116 case KeyCode.H: // h
121 targetPlatform.toggleAbout(); 117 targetPlatform.toggleAbout();
122 break; 118 break;
123 } 119 }
124 } 120 }
125 121
126 void _updateAbout() { 122 void _updateAbout() {
127 var popDisplay = targetPlatform.showAbout ? 'inline-block' : 'none'; 123 var popDisplay = targetPlatform.showAbout ? 'inline-block' : 'none';
128 querySelector('#popup').style.display = popDisplay; 124 querySelector('#popup').style.display = popDisplay;
129 } 125 }
OLDNEW
« no previous file with comments | « samples/pop_pop_win/lib/platform_target.dart ('k') | samples/pop_pop_win/lib/src/audio.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698