| OLD | NEW | 
|---|
| 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 } | 
| OLD | NEW | 
|---|