From 2ed989c1802a43c3dde7d19e30c0cd26e667822b Mon Sep 17 00:00:00 2001
From: 06wj <06wj@163.com>
Date: Wed, 18 May 2016 15:16:17 +0800
Subject: [PATCH] v1.0.1
---
CHANGELOG.md | 30 +
Changelog.md | 2 -
build/amd/hilo-amd.js | 2294 +++++++++--------
build/amd/hilo-amd.min.js | 8 +-
build/amd/hilo-amd.zip | Bin 180077 -> 176152 bytes
build/amd/hilo/core/Class.js | 41 +-
build/amd/hilo/core/Class.min.js | 2 +-
build/amd/hilo/core/Hilo.js | 128 +-
build/amd/hilo/core/Hilo.min.js | 4 +-
build/amd/hilo/event/EventMixin.js | 56 +-
build/amd/hilo/event/EventMixin.min.js | 4 +-
build/amd/hilo/game/Camera.js | 35 +-
build/amd/hilo/game/Camera.min.js | 2 +-
build/amd/hilo/game/Camera3d.js | 109 +-
build/amd/hilo/game/Camera3d.min.js | 4 +-
build/amd/hilo/game/ParticleSystem.js | 113 +-
build/amd/hilo/game/ParticleSystem.min.js | 2 +-
build/amd/hilo/geom/Matrix.js | 75 +-
build/amd/hilo/geom/Matrix.min.js | 2 +-
build/amd/hilo/loader/ImageLoader.js | 11 +-
build/amd/hilo/loader/ImageLoader.min.js | 2 +-
build/amd/hilo/loader/LoadQueue.js | 73 +-
build/amd/hilo/loader/LoadQueue.min.js | 2 +-
build/amd/hilo/loader/ScriptLoader.js | 11 +-
build/amd/hilo/loader/ScriptLoader.min.js | 2 +-
build/amd/hilo/media/HTMLAudio.js | 59 +-
build/amd/hilo/media/HTMLAudio.min.js | 2 +-
build/amd/hilo/media/WebAudio.js | 81 +-
build/amd/hilo/media/WebAudio.min.js | 2 +-
build/amd/hilo/media/WebSound.js | 29 +-
build/amd/hilo/media/WebSound.min.js | 2 +-
build/amd/hilo/renderer/CanvasRenderer.js | 17 +-
build/amd/hilo/renderer/CanvasRenderer.min.js | 4 +-
build/amd/hilo/renderer/DOMRenderer.js | 22 +-
build/amd/hilo/renderer/DOMRenderer.min.js | 2 +-
build/amd/hilo/renderer/Renderer.js | 63 +-
build/amd/hilo/renderer/Renderer.min.js | 2 +-
build/amd/hilo/renderer/WebGLRenderer.js | 46 +-
build/amd/hilo/renderer/WebGLRenderer.min.js | 4 +-
build/amd/hilo/tween/Ease.js | 44 +-
build/amd/hilo/tween/Ease.min.js | 2 +-
build/amd/hilo/tween/Tween.js | 153 +-
build/amd/hilo/tween/Tween.min.js | 2 +-
build/amd/hilo/util/TextureAtlas.js | 36 +-
build/amd/hilo/util/TextureAtlas.min.js | 2 +-
build/amd/hilo/util/Ticker.js | 40 +-
build/amd/hilo/util/Ticker.min.js | 2 +-
build/amd/hilo/util/drag.js | 21 +-
build/amd/hilo/util/drag.min.js | 2 +-
build/amd/hilo/util/polyfill.js | 8 +-
build/amd/hilo/util/polyfill.min.js | 4 +-
build/amd/hilo/view/Bitmap.js | 36 +-
build/amd/hilo/view/Bitmap.min.js | 4 +-
build/amd/hilo/view/BitmapText.js | 54 +-
build/amd/hilo/view/BitmapText.min.js | 2 +-
build/amd/hilo/view/Button.js | 58 +-
build/amd/hilo/view/Button.min.js | 2 +-
build/amd/hilo/view/CacheMixin.js | 22 +-
build/amd/hilo/view/CacheMixin.min.js | 2 +-
build/amd/hilo/view/Container.js | 130 +-
build/amd/hilo/view/Container.min.js | 2 +-
build/amd/hilo/view/DOMElement.js | 31 +-
build/amd/hilo/view/DOMElement.min.js | 4 +-
build/amd/hilo/view/Drawable.js | 29 +-
build/amd/hilo/view/Drawable.min.js | 2 +-
build/amd/hilo/view/Graphics.js | 262 +-
build/amd/hilo/view/Graphics.min.js | 2 +-
build/amd/hilo/view/Sprite.js | 108 +-
build/amd/hilo/view/Sprite.min.js | 4 +-
build/amd/hilo/view/Stage.js | 78 +-
build/amd/hilo/view/Stage.min.js | 4 +-
build/amd/hilo/view/Text.js | 61 +-
build/amd/hilo/view/Text.min.js | 4 +-
build/amd/hilo/view/View.js | 154 +-
build/amd/hilo/view/View.min.js | 2 +-
build/cmd/hilo-cmd.js | 2294 +++++++++--------
build/cmd/hilo-cmd.min.js | 8 +-
build/cmd/hilo-cmd.zip | Bin 180014 -> 176080 bytes
build/cmd/hilo/core/Class.js | 41 +-
build/cmd/hilo/core/Class.min.js | 4 +-
build/cmd/hilo/core/Hilo.js | 128 +-
build/cmd/hilo/core/Hilo.min.js | 4 +-
build/cmd/hilo/event/EventMixin.js | 56 +-
build/cmd/hilo/event/EventMixin.min.js | 4 +-
build/cmd/hilo/game/Camera.js | 35 +-
build/cmd/hilo/game/Camera.min.js | 2 +-
build/cmd/hilo/game/Camera3d.js | 109 +-
build/cmd/hilo/game/Camera3d.min.js | 4 +-
build/cmd/hilo/game/ParticleSystem.js | 113 +-
build/cmd/hilo/game/ParticleSystem.min.js | 2 +-
build/cmd/hilo/geom/Matrix.js | 75 +-
build/cmd/hilo/geom/Matrix.min.js | 4 +-
build/cmd/hilo/loader/ImageLoader.js | 11 +-
build/cmd/hilo/loader/ImageLoader.min.js | 2 +-
build/cmd/hilo/loader/LoadQueue.js | 73 +-
build/cmd/hilo/loader/LoadQueue.min.js | 2 +-
build/cmd/hilo/loader/ScriptLoader.js | 11 +-
build/cmd/hilo/loader/ScriptLoader.min.js | 2 +-
build/cmd/hilo/media/HTMLAudio.js | 59 +-
build/cmd/hilo/media/HTMLAudio.min.js | 2 +-
build/cmd/hilo/media/WebAudio.js | 81 +-
build/cmd/hilo/media/WebAudio.min.js | 2 +-
build/cmd/hilo/media/WebSound.js | 29 +-
build/cmd/hilo/media/WebSound.min.js | 2 +-
build/cmd/hilo/renderer/CanvasRenderer.js | 17 +-
build/cmd/hilo/renderer/CanvasRenderer.min.js | 4 +-
build/cmd/hilo/renderer/DOMRenderer.js | 22 +-
build/cmd/hilo/renderer/DOMRenderer.min.js | 2 +-
build/cmd/hilo/renderer/Renderer.js | 63 +-
build/cmd/hilo/renderer/Renderer.min.js | 2 +-
build/cmd/hilo/renderer/WebGLRenderer.js | 46 +-
build/cmd/hilo/renderer/WebGLRenderer.min.js | 4 +-
build/cmd/hilo/tween/Ease.js | 44 +-
build/cmd/hilo/tween/Ease.min.js | 2 +-
build/cmd/hilo/tween/Tween.js | 153 +-
build/cmd/hilo/tween/Tween.min.js | 2 +-
build/cmd/hilo/util/TextureAtlas.js | 36 +-
build/cmd/hilo/util/TextureAtlas.min.js | 2 +-
build/cmd/hilo/util/Ticker.js | 40 +-
build/cmd/hilo/util/Ticker.min.js | 2 +-
build/cmd/hilo/util/drag.js | 21 +-
build/cmd/hilo/util/drag.min.js | 2 +-
build/cmd/hilo/util/polyfill.js | 8 +-
build/cmd/hilo/util/polyfill.min.js | 4 +-
build/cmd/hilo/view/Bitmap.js | 36 +-
build/cmd/hilo/view/Bitmap.min.js | 4 +-
build/cmd/hilo/view/BitmapText.js | 54 +-
build/cmd/hilo/view/BitmapText.min.js | 2 +-
build/cmd/hilo/view/Button.js | 58 +-
build/cmd/hilo/view/Button.min.js | 2 +-
build/cmd/hilo/view/CacheMixin.js | 22 +-
build/cmd/hilo/view/CacheMixin.min.js | 2 +-
build/cmd/hilo/view/Container.js | 130 +-
build/cmd/hilo/view/Container.min.js | 2 +-
build/cmd/hilo/view/DOMElement.js | 31 +-
build/cmd/hilo/view/DOMElement.min.js | 4 +-
build/cmd/hilo/view/Drawable.js | 29 +-
build/cmd/hilo/view/Drawable.min.js | 2 +-
build/cmd/hilo/view/Graphics.js | 262 +-
build/cmd/hilo/view/Graphics.min.js | 2 +-
build/cmd/hilo/view/Sprite.js | 108 +-
build/cmd/hilo/view/Sprite.min.js | 4 +-
build/cmd/hilo/view/Stage.js | 78 +-
build/cmd/hilo/view/Stage.min.js | 4 +-
build/cmd/hilo/view/Text.js | 61 +-
build/cmd/hilo/view/Text.min.js | 4 +-
build/cmd/hilo/view/View.js | 154 +-
build/cmd/hilo/view/View.min.js | 2 +-
build/commonjs/core/Class.js | 41 +-
build/commonjs/core/Class.min.js | 4 +-
build/commonjs/core/Hilo.js | 128 +-
build/commonjs/core/Hilo.min.js | 4 +-
build/commonjs/event/EventMixin.js | 56 +-
build/commonjs/event/EventMixin.min.js | 4 +-
build/commonjs/game/Camera.js | 35 +-
build/commonjs/game/Camera.min.js | 2 +-
build/commonjs/game/Camera3d.js | 109 +-
build/commonjs/game/Camera3d.min.js | 4 +-
build/commonjs/game/ParticleSystem.js | 113 +-
build/commonjs/game/ParticleSystem.min.js | 2 +-
build/commonjs/geom/Matrix.js | 75 +-
build/commonjs/geom/Matrix.min.js | 4 +-
build/commonjs/hilo-commonjs.zip | Bin 108285 -> 104748 bytes
build/commonjs/loader/ImageLoader.js | 11 +-
build/commonjs/loader/ImageLoader.min.js | 2 +-
build/commonjs/loader/LoadQueue.js | 73 +-
build/commonjs/loader/LoadQueue.min.js | 2 +-
build/commonjs/loader/ScriptLoader.js | 11 +-
build/commonjs/loader/ScriptLoader.min.js | 2 +-
build/commonjs/media/HTMLAudio.js | 59 +-
build/commonjs/media/HTMLAudio.min.js | 2 +-
build/commonjs/media/WebAudio.js | 81 +-
build/commonjs/media/WebAudio.min.js | 2 +-
build/commonjs/media/WebSound.js | 29 +-
build/commonjs/media/WebSound.min.js | 2 +-
build/commonjs/renderer/CanvasRenderer.js | 17 +-
build/commonjs/renderer/CanvasRenderer.min.js | 4 +-
build/commonjs/renderer/DOMRenderer.js | 22 +-
build/commonjs/renderer/DOMRenderer.min.js | 2 +-
build/commonjs/renderer/Renderer.js | 63 +-
build/commonjs/renderer/Renderer.min.js | 2 +-
build/commonjs/renderer/WebGLRenderer.js | 46 +-
build/commonjs/renderer/WebGLRenderer.min.js | 4 +-
build/commonjs/tween/Ease.js | 44 +-
build/commonjs/tween/Ease.min.js | 2 +-
build/commonjs/tween/Tween.js | 153 +-
build/commonjs/tween/Tween.min.js | 4 +-
build/commonjs/util/TextureAtlas.js | 36 +-
build/commonjs/util/TextureAtlas.min.js | 2 +-
build/commonjs/util/Ticker.js | 40 +-
build/commonjs/util/Ticker.min.js | 2 +-
build/commonjs/util/drag.js | 21 +-
build/commonjs/util/drag.min.js | 2 +-
build/commonjs/util/polyfill.js | 8 +-
build/commonjs/util/polyfill.min.js | 4 +-
build/commonjs/view/Bitmap.js | 36 +-
build/commonjs/view/Bitmap.min.js | 4 +-
build/commonjs/view/BitmapText.js | 54 +-
build/commonjs/view/BitmapText.min.js | 2 +-
build/commonjs/view/Button.js | 58 +-
build/commonjs/view/Button.min.js | 2 +-
build/commonjs/view/CacheMixin.js | 22 +-
build/commonjs/view/CacheMixin.min.js | 2 +-
build/commonjs/view/Container.js | 130 +-
build/commonjs/view/Container.min.js | 2 +-
build/commonjs/view/DOMElement.js | 31 +-
build/commonjs/view/DOMElement.min.js | 4 +-
build/commonjs/view/Drawable.js | 29 +-
build/commonjs/view/Drawable.min.js | 2 +-
build/commonjs/view/Graphics.js | 262 +-
build/commonjs/view/Graphics.min.js | 2 +-
build/commonjs/view/Sprite.js | 108 +-
build/commonjs/view/Sprite.min.js | 4 +-
build/commonjs/view/Stage.js | 78 +-
build/commonjs/view/Stage.min.js | 4 +-
build/commonjs/view/Text.js | 61 +-
build/commonjs/view/Text.min.js | 4 +-
build/commonjs/view/View.js | 154 +-
build/commonjs/view/View.min.js | 2 +-
build/dragonbones/dragonbones.js | 4 +-
build/dragonbones/dragonbones.min.js | 6 +-
build/flash/hilo-flash.js | 2 +-
build/flash/hilo-flash.min.js | 2 +-
build/kissy/hilo-kissy.js | 2294 +++++++++--------
build/kissy/hilo-kissy.min.js | 8 +-
build/kissy/hilo-kissy.zip | Bin 181457 -> 177537 bytes
build/kissy/hilo/core/Class.js | 41 +-
build/kissy/hilo/core/Class.min.js | 2 +-
build/kissy/hilo/core/Hilo.js | 128 +-
build/kissy/hilo/core/Hilo.min.js | 4 +-
build/kissy/hilo/event/EventMixin.js | 56 +-
build/kissy/hilo/event/EventMixin.min.js | 4 +-
build/kissy/hilo/game/Camera.js | 35 +-
build/kissy/hilo/game/Camera.min.js | 2 +-
build/kissy/hilo/game/Camera3d.js | 109 +-
build/kissy/hilo/game/Camera3d.min.js | 4 +-
build/kissy/hilo/game/ParticleSystem.js | 113 +-
build/kissy/hilo/game/ParticleSystem.min.js | 2 +-
build/kissy/hilo/geom/Matrix.js | 75 +-
build/kissy/hilo/geom/Matrix.min.js | 2 +-
build/kissy/hilo/loader/ImageLoader.js | 11 +-
build/kissy/hilo/loader/ImageLoader.min.js | 2 +-
build/kissy/hilo/loader/LoadQueue.js | 73 +-
build/kissy/hilo/loader/LoadQueue.min.js | 2 +-
build/kissy/hilo/loader/ScriptLoader.js | 11 +-
build/kissy/hilo/loader/ScriptLoader.min.js | 2 +-
build/kissy/hilo/media/HTMLAudio.js | 59 +-
build/kissy/hilo/media/HTMLAudio.min.js | 2 +-
build/kissy/hilo/media/WebAudio.js | 81 +-
build/kissy/hilo/media/WebAudio.min.js | 2 +-
build/kissy/hilo/media/WebSound.js | 29 +-
build/kissy/hilo/media/WebSound.min.js | 2 +-
build/kissy/hilo/renderer/CanvasRenderer.js | 17 +-
.../kissy/hilo/renderer/CanvasRenderer.min.js | 4 +-
build/kissy/hilo/renderer/DOMRenderer.js | 22 +-
build/kissy/hilo/renderer/DOMRenderer.min.js | 2 +-
build/kissy/hilo/renderer/Renderer.js | 63 +-
build/kissy/hilo/renderer/Renderer.min.js | 2 +-
build/kissy/hilo/renderer/WebGLRenderer.js | 46 +-
.../kissy/hilo/renderer/WebGLRenderer.min.js | 4 +-
build/kissy/hilo/tween/Ease.js | 44 +-
build/kissy/hilo/tween/Ease.min.js | 2 +-
build/kissy/hilo/tween/Tween.js | 153 +-
build/kissy/hilo/tween/Tween.min.js | 2 +-
build/kissy/hilo/util/TextureAtlas.js | 36 +-
build/kissy/hilo/util/TextureAtlas.min.js | 2 +-
build/kissy/hilo/util/Ticker.js | 40 +-
build/kissy/hilo/util/Ticker.min.js | 2 +-
build/kissy/hilo/util/drag.js | 21 +-
build/kissy/hilo/util/drag.min.js | 2 +-
build/kissy/hilo/util/polyfill.js | 8 +-
build/kissy/hilo/util/polyfill.min.js | 2 +-
build/kissy/hilo/view/Bitmap.js | 36 +-
build/kissy/hilo/view/Bitmap.min.js | 4 +-
build/kissy/hilo/view/BitmapText.js | 54 +-
build/kissy/hilo/view/BitmapText.min.js | 2 +-
build/kissy/hilo/view/Button.js | 58 +-
build/kissy/hilo/view/Button.min.js | 2 +-
build/kissy/hilo/view/CacheMixin.js | 22 +-
build/kissy/hilo/view/CacheMixin.min.js | 2 +-
build/kissy/hilo/view/Container.js | 130 +-
build/kissy/hilo/view/Container.min.js | 2 +-
build/kissy/hilo/view/DOMElement.js | 31 +-
build/kissy/hilo/view/DOMElement.min.js | 4 +-
build/kissy/hilo/view/Drawable.js | 29 +-
build/kissy/hilo/view/Drawable.min.js | 2 +-
build/kissy/hilo/view/Graphics.js | 262 +-
build/kissy/hilo/view/Graphics.min.js | 2 +-
build/kissy/hilo/view/Sprite.js | 108 +-
build/kissy/hilo/view/Sprite.min.js | 4 +-
build/kissy/hilo/view/Stage.js | 78 +-
build/kissy/hilo/view/Stage.min.js | 4 +-
build/kissy/hilo/view/Text.js | 61 +-
build/kissy/hilo/view/Text.min.js | 4 +-
build/kissy/hilo/view/View.js | 154 +-
build/kissy/hilo/view/View.min.js | 2 +-
build/physics/physics.js | 7 +-
build/physics/physics.min.js | 8 +-
build/standalone/hilo-standalone.js | 2294 +++++++++--------
build/standalone/hilo-standalone.min.js | 8 +-
build/standalone/hilo-standalone.zip | Bin 179766 -> 175875 bytes
build/standalone/hilo/core/Class.js | 41 +-
build/standalone/hilo/core/Class.min.js | 2 +-
build/standalone/hilo/core/Hilo.js | 128 +-
build/standalone/hilo/core/Hilo.min.js | 4 +-
build/standalone/hilo/event/EventMixin.js | 56 +-
build/standalone/hilo/event/EventMixin.min.js | 4 +-
build/standalone/hilo/game/Camera.js | 35 +-
build/standalone/hilo/game/Camera.min.js | 2 +-
build/standalone/hilo/game/Camera3d.js | 109 +-
build/standalone/hilo/game/Camera3d.min.js | 4 +-
build/standalone/hilo/game/ParticleSystem.js | 113 +-
.../hilo/game/ParticleSystem.min.js | 2 +-
build/standalone/hilo/geom/Matrix.js | 75 +-
build/standalone/hilo/geom/Matrix.min.js | 4 +-
build/standalone/hilo/loader/ImageLoader.js | 11 +-
.../standalone/hilo/loader/ImageLoader.min.js | 2 +-
build/standalone/hilo/loader/LoadQueue.js | 73 +-
build/standalone/hilo/loader/LoadQueue.min.js | 2 +-
build/standalone/hilo/loader/ScriptLoader.js | 11 +-
.../hilo/loader/ScriptLoader.min.js | 2 +-
build/standalone/hilo/media/HTMLAudio.js | 59 +-
build/standalone/hilo/media/HTMLAudio.min.js | 2 +-
build/standalone/hilo/media/WebAudio.js | 81 +-
build/standalone/hilo/media/WebAudio.min.js | 2 +-
build/standalone/hilo/media/WebSound.js | 29 +-
build/standalone/hilo/media/WebSound.min.js | 2 +-
.../hilo/renderer/CanvasRenderer.js | 17 +-
.../hilo/renderer/CanvasRenderer.min.js | 4 +-
build/standalone/hilo/renderer/DOMRenderer.js | 22 +-
.../hilo/renderer/DOMRenderer.min.js | 2 +-
build/standalone/hilo/renderer/Renderer.js | 63 +-
.../standalone/hilo/renderer/Renderer.min.js | 2 +-
.../standalone/hilo/renderer/WebGLRenderer.js | 46 +-
.../hilo/renderer/WebGLRenderer.min.js | 4 +-
build/standalone/hilo/tween/Ease.js | 44 +-
build/standalone/hilo/tween/Ease.min.js | 2 +-
build/standalone/hilo/tween/Tween.js | 153 +-
build/standalone/hilo/tween/Tween.min.js | 2 +-
build/standalone/hilo/util/TextureAtlas.js | 36 +-
.../standalone/hilo/util/TextureAtlas.min.js | 2 +-
build/standalone/hilo/util/Ticker.js | 40 +-
build/standalone/hilo/util/Ticker.min.js | 2 +-
build/standalone/hilo/util/drag.js | 21 +-
build/standalone/hilo/util/drag.min.js | 2 +-
build/standalone/hilo/util/polyfill.js | 8 +-
build/standalone/hilo/util/polyfill.min.js | 4 +-
build/standalone/hilo/view/Bitmap.js | 36 +-
build/standalone/hilo/view/Bitmap.min.js | 4 +-
build/standalone/hilo/view/BitmapText.js | 54 +-
build/standalone/hilo/view/BitmapText.min.js | 2 +-
build/standalone/hilo/view/Button.js | 58 +-
build/standalone/hilo/view/Button.min.js | 2 +-
build/standalone/hilo/view/CacheMixin.js | 22 +-
build/standalone/hilo/view/CacheMixin.min.js | 2 +-
build/standalone/hilo/view/Container.js | 130 +-
build/standalone/hilo/view/Container.min.js | 2 +-
build/standalone/hilo/view/DOMElement.js | 31 +-
build/standalone/hilo/view/DOMElement.min.js | 4 +-
build/standalone/hilo/view/Drawable.js | 29 +-
build/standalone/hilo/view/Drawable.min.js | 2 +-
build/standalone/hilo/view/Graphics.js | 262 +-
build/standalone/hilo/view/Graphics.min.js | 2 +-
build/standalone/hilo/view/Sprite.js | 108 +-
build/standalone/hilo/view/Sprite.min.js | 4 +-
build/standalone/hilo/view/Stage.js | 78 +-
build/standalone/hilo/view/Stage.min.js | 4 +-
build/standalone/hilo/view/Text.js | 61 +-
build/standalone/hilo/view/Text.min.js | 4 +-
build/standalone/hilo/view/View.js | 154 +-
build/standalone/hilo/view/View.min.js | 2 +-
docs/api-en/code/core/Class.js | 22 +-
docs/api-en/code/core/Hilo.js | 25 +-
docs/api-en/code/event/EventMixin.js | 10 +-
docs/api-en/code/game/Camera.js | 6 +-
docs/api-en/code/game/Camera3d.js | 16 +-
docs/api-en/code/game/ParticleSystem.js | 24 +-
docs/api-en/code/geom/Matrix.js | 16 +-
docs/api-en/code/loader/ImageLoader.js | 2 +-
docs/api-en/code/loader/LoadQueue.js | 26 +-
docs/api-en/code/loader/ScriptLoader.js | 2 +-
docs/api-en/code/media/HTMLAudio.js | 22 +-
docs/api-en/code/media/WebAudio.js | 34 +-
docs/api-en/code/media/WebSound.js | 10 +-
docs/api-en/code/renderer/CanvasRenderer.js | 2 +-
docs/api-en/code/renderer/DOMRenderer.js | 4 +-
docs/api-en/code/renderer/Renderer.js | 18 +-
docs/api-en/code/renderer/WebGLRenderer.js | 10 +-
docs/api-en/code/tween/Ease.js | 24 +-
docs/api-en/code/tween/Tween.js | 36 +-
docs/api-en/code/util/TextureAtlas.js | 12 +-
docs/api-en/code/util/Ticker.js | 16 +-
docs/api-en/code/util/drag.js | 6 +-
docs/api-en/code/view/Bitmap.js | 4 +-
docs/api-en/code/view/BitmapText.js | 10 +-
docs/api-en/code/view/Button.js | 16 +-
docs/api-en/code/view/CacheMixin.js | 8 +-
docs/api-en/code/view/Container.js | 38 +-
docs/api-en/code/view/DOMElement.js | 6 +-
docs/api-en/code/view/Drawable.js | 6 +-
docs/api-en/code/view/Graphics.js | 46 +-
docs/api-en/code/view/Sprite.js | 26 +-
docs/api-en/code/view/Stage.js | 16 +-
docs/api-en/code/view/Text.js | 12 +-
docs/api-en/code/view/View.js | 36 +-
docs/api-en/index.html | 4 +-
docs/api-en/symbols/Bitmap.html | 34 +-
docs/api-en/symbols/BitmapText.html | 73 +-
docs/api-en/symbols/Button.html | 59 +-
docs/api-en/symbols/CacheMixin.html | 12 +-
docs/api-en/symbols/Camera.html | 8 +-
docs/api-en/symbols/Camera3d.html | 28 +-
docs/api-en/symbols/CanvasRenderer.html | 16 +-
docs/api-en/symbols/Class.html | 41 +-
docs/api-en/symbols/Container.html | 86 +-
docs/api-en/symbols/DOMElement.html | 40 +-
docs/api-en/symbols/DOMRenderer.html | 16 +-
docs/api-en/symbols/Drawable.html | 8 +-
docs/api-en/symbols/Ease.html | 44 +-
docs/api-en/symbols/EventMixin.html | 12 +-
docs/api-en/symbols/Graphics.html | 105 +-
docs/api-en/symbols/HTMLAudio.html | 33 +-
docs/api-en/symbols/Hilo.html | 71 +-
docs/api-en/symbols/LoadQueue.html | 28 +-
docs/api-en/symbols/Matrix.html | 28 +-
docs/api-en/symbols/ParticleSystem.html | 19 +-
docs/api-en/symbols/Renderer.html | 32 +-
docs/api-en/symbols/Sprite.html | 65 +-
docs/api-en/symbols/Stage.html | 82 +-
docs/api-en/symbols/Text.html | 33 +-
docs/api-en/symbols/TextureAtlas.html | 12 +-
docs/api-en/symbols/Ticker.html | 28 +-
docs/api-en/symbols/Tween.html | 77 +-
docs/api-en/symbols/View.html | 45 +-
docs/api-en/symbols/WebAudio.html | 40 +-
docs/api-en/symbols/WebGLRenderer.html | 28 +-
docs/api-en/symbols/WebSound.html | 27 +-
docs/api-en/symbols/drag.html | 17 +-
.../src/docs_api-en_code_core_Class.js.html | 250 +-
.../src/docs_api-en_code_core_Hilo.js.html | 713 ++---
.../docs_api-en_code_event_EventMixin.js.html | 10 +-
.../src/docs_api-en_code_game_Camera.js.html | 6 +-
.../docs_api-en_code_game_Camera3d.js.html | 16 +-
...cs_api-en_code_game_ParticleSystem.js.html | 24 +-
.../src/docs_api-en_code_geom_Matrix.js.html | 16 +-
...ocs_api-en_code_loader_ImageLoader.js.html | 2 +-
.../docs_api-en_code_loader_LoadQueue.js.html | 26 +-
...cs_api-en_code_loader_ScriptLoader.js.html | 2 +-
.../docs_api-en_code_media_HTMLAudio.js.html | 22 +-
.../docs_api-en_code_media_WebAudio.js.html | 34 +-
.../docs_api-en_code_media_WebSound.js.html | 10 +-
...pi-en_code_renderer_CanvasRenderer.js.html | 2 +-
...s_api-en_code_renderer_DOMRenderer.js.html | 4 +-
...docs_api-en_code_renderer_Renderer.js.html | 18 +-
...api-en_code_renderer_WebGLRenderer.js.html | 10 +-
.../src/docs_api-en_code_tween_Ease.js.html | 24 +-
.../src/docs_api-en_code_tween_Tween.js.html | 36 +-
...docs_api-en_code_util_TextureAtlas.js.html | 12 +-
.../src/docs_api-en_code_util_Ticker.js.html | 16 +-
.../src/docs_api-en_code_util_drag.js.html | 6 +-
.../src/docs_api-en_code_view_Bitmap.js.html | 4 +-
.../docs_api-en_code_view_BitmapText.js.html | 10 +-
.../src/docs_api-en_code_view_Button.js.html | 16 +-
.../docs_api-en_code_view_CacheMixin.js.html | 8 +-
.../docs_api-en_code_view_Container.js.html | 38 +-
.../docs_api-en_code_view_DOMElement.js.html | 6 +-
.../docs_api-en_code_view_Drawable.js.html | 6 +-
.../docs_api-en_code_view_Graphics.js.html | 46 +-
.../src/docs_api-en_code_view_Sprite.js.html | 26 +-
.../src/docs_api-en_code_view_Stage.js.html | 16 +-
.../src/docs_api-en_code_view_Text.js.html | 12 +-
.../src/docs_api-en_code_view_View.js.html | 36 +-
docs/api-zh/code/core/Class.js | 8 +-
docs/api-zh/code/core/Hilo.js | 25 +-
docs/api-zh/code/event/EventMixin.js | 10 +-
docs/api-zh/code/game/Camera.js | 6 +-
docs/api-zh/code/game/Camera3d.js | 16 +-
docs/api-zh/code/game/ParticleSystem.js | 24 +-
docs/api-zh/code/geom/Matrix.js | 16 +-
docs/api-zh/code/loader/ImageLoader.js | 2 +-
docs/api-zh/code/loader/LoadQueue.js | 26 +-
docs/api-zh/code/loader/ScriptLoader.js | 2 +-
docs/api-zh/code/media/HTMLAudio.js | 22 +-
docs/api-zh/code/media/WebAudio.js | 34 +-
docs/api-zh/code/media/WebSound.js | 10 +-
docs/api-zh/code/renderer/CanvasRenderer.js | 2 +-
docs/api-zh/code/renderer/DOMRenderer.js | 4 +-
docs/api-zh/code/renderer/Renderer.js | 18 +-
docs/api-zh/code/renderer/WebGLRenderer.js | 10 +-
docs/api-zh/code/tween/Ease.js | 24 +-
docs/api-zh/code/tween/Tween.js | 36 +-
docs/api-zh/code/util/TextureAtlas.js | 12 +-
docs/api-zh/code/util/Ticker.js | 16 +-
docs/api-zh/code/util/drag.js | 6 +-
docs/api-zh/code/view/Bitmap.js | 4 +-
docs/api-zh/code/view/BitmapText.js | 10 +-
docs/api-zh/code/view/Button.js | 16 +-
docs/api-zh/code/view/CacheMixin.js | 8 +-
docs/api-zh/code/view/Container.js | 38 +-
docs/api-zh/code/view/DOMElement.js | 6 +-
docs/api-zh/code/view/Drawable.js | 6 +-
docs/api-zh/code/view/Graphics.js | 46 +-
docs/api-zh/code/view/Sprite.js | 26 +-
docs/api-zh/code/view/Stage.js | 16 +-
docs/api-zh/code/view/Text.js | 12 +-
docs/api-zh/code/view/View.js | 36 +-
docs/api-zh/index.html | 2 +-
docs/api-zh/symbols/Bitmap.html | 35 +-
docs/api-zh/symbols/BitmapText.html | 74 +-
docs/api-zh/symbols/Button.html | 60 +-
docs/api-zh/symbols/CacheMixin.html | 12 +-
docs/api-zh/symbols/Camera.html | 8 +-
docs/api-zh/symbols/Camera3d.html | 28 +-
docs/api-zh/symbols/CanvasRenderer.html | 16 +-
docs/api-zh/symbols/Class.html | 31 +-
docs/api-zh/symbols/Container.html | 87 +-
docs/api-zh/symbols/DOMElement.html | 41 +-
docs/api-zh/symbols/DOMRenderer.html | 16 +-
docs/api-zh/symbols/Drawable.html | 8 +-
docs/api-zh/symbols/Ease.html | 44 +-
docs/api-zh/symbols/EventMixin.html | 12 +-
docs/api-zh/symbols/Graphics.html | 110 +-
docs/api-zh/symbols/HTMLAudio.html | 34 +-
docs/api-zh/symbols/Hilo.html | 90 +-
docs/api-zh/symbols/LoadQueue.html | 28 +-
docs/api-zh/symbols/Matrix.html | 28 +-
docs/api-zh/symbols/ParticleSystem.html | 19 +-
docs/api-zh/symbols/Renderer.html | 32 +-
docs/api-zh/symbols/Sprite.html | 66 +-
docs/api-zh/symbols/Stage.html | 83 +-
docs/api-zh/symbols/Text.html | 34 +-
docs/api-zh/symbols/TextureAtlas.html | 12 +-
docs/api-zh/symbols/Ticker.html | 28 +-
docs/api-zh/symbols/Tween.html | 77 +-
docs/api-zh/symbols/View.html | 46 +-
docs/api-zh/symbols/WebAudio.html | 40 +-
docs/api-zh/symbols/WebGLRenderer.html | 28 +-
docs/api-zh/symbols/WebSound.html | 27 +-
docs/api-zh/symbols/drag.html | 17 +-
.../src/docs_api-zh_code_core_Class.js.html | 236 +-
.../src/docs_api-zh_code_core_Hilo.js.html | 713 ++---
.../docs_api-zh_code_event_EventMixin.js.html | 10 +-
.../src/docs_api-zh_code_game_Camera.js.html | 6 +-
.../docs_api-zh_code_game_Camera3d.js.html | 16 +-
...cs_api-zh_code_game_ParticleSystem.js.html | 24 +-
.../src/docs_api-zh_code_geom_Matrix.js.html | 16 +-
...ocs_api-zh_code_loader_ImageLoader.js.html | 2 +-
.../docs_api-zh_code_loader_LoadQueue.js.html | 26 +-
...cs_api-zh_code_loader_ScriptLoader.js.html | 2 +-
.../docs_api-zh_code_media_HTMLAudio.js.html | 22 +-
.../docs_api-zh_code_media_WebAudio.js.html | 34 +-
.../docs_api-zh_code_media_WebSound.js.html | 10 +-
...pi-zh_code_renderer_CanvasRenderer.js.html | 2 +-
...s_api-zh_code_renderer_DOMRenderer.js.html | 4 +-
...docs_api-zh_code_renderer_Renderer.js.html | 18 +-
...api-zh_code_renderer_WebGLRenderer.js.html | 10 +-
.../src/docs_api-zh_code_tween_Ease.js.html | 24 +-
.../src/docs_api-zh_code_tween_Tween.js.html | 36 +-
...docs_api-zh_code_util_TextureAtlas.js.html | 12 +-
.../src/docs_api-zh_code_util_Ticker.js.html | 16 +-
.../src/docs_api-zh_code_util_drag.js.html | 6 +-
.../src/docs_api-zh_code_view_Bitmap.js.html | 4 +-
.../docs_api-zh_code_view_BitmapText.js.html | 10 +-
.../src/docs_api-zh_code_view_Button.js.html | 16 +-
.../docs_api-zh_code_view_CacheMixin.js.html | 8 +-
.../docs_api-zh_code_view_Container.js.html | 38 +-
.../docs_api-zh_code_view_DOMElement.js.html | 6 +-
.../docs_api-zh_code_view_Drawable.js.html | 6 +-
.../docs_api-zh_code_view_Graphics.js.html | 46 +-
.../src/docs_api-zh_code_view_Sprite.js.html | 26 +-
.../src/docs_api-zh_code_view_Stage.js.html | 16 +-
.../src/docs_api-zh_code_view_Text.js.html | 12 +-
.../src/docs_api-zh_code_view_View.js.html | 36 +-
package.json | 2 +-
574 files changed, 14511 insertions(+), 13296 deletions(-)
create mode 100644 CHANGELOG.md
delete mode 100644 Changelog.md
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..5b0c8961
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,30 @@
+
+## [1.0.1](https://github.com/hiloteam/hilo/compare/v1.0.0...v1.0.1) (2016-05-18)
+
+
+### Bug Fixes
+
+* Bitmap.setImage need set width&height ([7806046](https://github.com/hiloteam/hilo/commit/7806046))
+* eventMixin.on once bug ([fcaebfd](https://github.com/hiloteam/hilo/commit/fcaebfd))
+* Hilo.getElementRect bug ([d1dda4a](https://github.com/hiloteam/hilo/commit/d1dda4a))
+* Hilo.getElementRect bug ([ead92ae](https://github.com/hiloteam/hilo/commit/ead92ae))
+* set DOMElement pointer-event style to visible when it's pointerEnabled is true ([fa28684](https://github.com/hiloteam/hilo/commit/fa28684))
+* Text.js len & wlen are used before there were defined ([7268ea4](https://github.com/hiloteam/hilo/commit/7268ea4))
+
+
+### Features
+
+* change WebGLRenderer.isSupport() to WebGLRenderer.isSupported ([f9f9bc4](https://github.com/hiloteam/hilo/commit/f9f9bc4))
+
+
+
+
+# [1.0.0](https://github.com/hiloteam/hilo/compare/4efc6e6...v1.0.0) (2016-03-01)
+
+
+### Bug Fixes
+
+* WebGLRenderer worldMatrix bug ([4efc6e6](https://github.com/hiloteam/hilo/commit/4efc6e6))
+
+
+
diff --git a/Changelog.md b/Changelog.md
deleted file mode 100644
index 0fb365db..00000000
--- a/Changelog.md
+++ /dev/null
@@ -1,2 +0,0 @@
-Changelog
-=========
\ No newline at end of file
diff --git a/build/amd/hilo-amd.js b/build/amd/hilo-amd.js
index 208aa8a4..07b7aa85 100644
--- a/build/amd/hilo-amd.js
+++ b/build/amd/hilo-amd.js
@@ -1,18 +1,16 @@
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/core/Hilo', function(){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
+
/**
- * @namespace Hilo的基础核心方法集合。
+ * @language=en
+ * @namespace Hilo The underlying core set of methods.
* @static
* @module hilo/core/Hilo
*/
@@ -23,9 +21,10 @@ var win = window, doc = document, docElem = doc.documentElement,
return {
/**
- * 获取一个全局唯一的id。如Stage1,Bitmap2等。
- * @param {String} prefix 生成id的前缀。
- * @returns {String} 全局唯一id。
+ * @language=en
+ * Gets a globally unique id. Such as Stage1, Bitmap2 etc.
+ * @param {String} prefix Generated id's prefix.
+ * @returns {String} Globally unique id.
*/
getUid: function(prefix){
var id = ++uid;
@@ -38,9 +37,10 @@ return {
},
/**
- * 为指定的可视对象生成一个包含路径的字符串表示形式。如Stage1.Container2.Bitmap3。
- * @param {View} view 指定的可视对象。
- * @returns {String} 可视对象的字符串表示形式。
+ * @language=en
+ * Generates a string representation that contains a path to the specified visual object. Such as Stage1.Container2.Bitmap3.
+ * @param {View} view Specified visual object.
+ * @returns {String} String representation of the visual object.
*/
viewToString: function(view){
var result, obj = view;
@@ -52,11 +52,12 @@ return {
},
/**
- * 简单的浅复制对象。
- * @param {Object} target 要复制的目标对象。
- * @param {Object} source 要复制的源对象。
- * @param {Boolean} strict 指示是否复制未定义的属性,默认为false,即不复制未定义的属性。
- * @returns {Object} 复制后的对象。
+ * @language=en
+ * Simple shallow copy objects.
+ * @param {Object} target Target object to copy to.
+ * @param {Object} source Source object to copy.
+ * @param {Boolean} strict Indicates whether replication is undefined property, default is false, i.e., undefined attributes are not copied.
+ * @returns {Object} Object after copying.
*/
copy: function(target, source, strict){
for(var key in source){
@@ -68,15 +69,16 @@ return {
},
/**
- * 浏览器特性集合。包括:
+ * @language=en
+ * Browser feature set includes:
*
- * - jsVendor - 浏览器厂商CSS前缀的js值。比如:webkit。
- * - cssVendor - 浏览器厂商CSS前缀的css值。比如:-webkit-。
- * - supportTransform - 是否支持CSS Transform变换。
- * - supportTransform3D - 是否支持CSS Transform 3D变换。
- * - supportStorage - 是否支持本地存储localStorage。
- * - supportTouch - 是否支持触碰事件。
- * - supportCanvas - 是否支持canvas元素。
+ * - jsVendor - Browser vendors js value CSS prefix. For example: webkit.
+ * - cssVendor - Browser vendors css value CSS prefix.
+ * - supportTransform - Whether to support CSS Transform transformation.
+ * - supportTransform3D - Whether to support CSS Transform 3D transformation.
+ * - supportStorage - Whether to support local stores like localStorage.
+ * - supportTouch - Whether to support the touch event.
+ * - supportCanvas - Whether to support the canvas element.
*
*/
browser: (function(){
@@ -134,11 +136,12 @@ return {
})(),
/**
- * 事件类型枚举对象。包括:
+ * @language=en
+ * Event enumeration objects include:
*
- * - POINTER_START - 鼠标或触碰开始事件。对应touchstart或mousedown。
- * - POINTER_MOVE - 鼠标或触碰移动事件。对应touchmove或mousemove。
- * - POINTER_END - 鼠标或触碰结束事件。对应touchend或mouseup。
+ * - POINTER_START - Mouse or touch start event. Corresponds to touchstart or mousedown.
+ * - POINTER_MOVE - Mouse or touch move event. Corresponds to touchmove or mousemove.
+ * - POINTER_END - Mouse or touch end event. Corresponds to touchend or mouseup.
*
*/
event: (function(){
@@ -151,17 +154,18 @@ return {
})(),
/**
- * 可视对象对齐方式枚举对象。包括:
+ * @language=en
+ * Visual object alinment enumeration objects include:
*
- * - TOP_LEFT - 左上角对齐。
- * - TOP - 顶部居中对齐。
- * - TOP_RIGHT - 右上角对齐。
- * - LEFT - 左边居中对齐。
- * - CENTER - 居中对齐。
- * - RIGHT - 右边居中对齐。
- * - BOTTOM_LEFT - 左下角对齐。
- * - BOTTOM - 底部居中对齐。
- * - BOTTOM_RIGHT - 右下角对齐。
+ * - TOP_LEFT - Align the top left corner.
+ * - TOP - Top center alignment.
+ * - TOP_RIGHT - Align the top right corner.
+ * - LEFT - Left center alignment.
+ * - CENTER - Align center.
+ * - RIGHT - Right center alignment.
+ * - BOTTOM_LEFT - Align the bottom left corner.
+ * - BOTTOM - Bottom center alignment.
+ * - BOTTOM_RIGHT - Align the bottom right corner.
*
*/
align: {
@@ -177,16 +181,17 @@ return {
},
/**
- * 获取DOM元素在页面中的内容显示区域。
- * @param {HTMLElement} elem DOM元素。
- * @returns {Object} DOM元素的可视区域。格式为:{left:0, top:0, width:100, height:100}。
+ * @language=en
+ * Get DOM element content in the page display area.
+ * @param {HTMLElement} elem DOM elements.
+ * @returns {Object} Viewable area DOM elements. Format is: {left:0, top:0, width:100, height:100}.
*/
getElementRect: function(elem){
try{
//this fails if it's a disconnected DOM node
var bounds = elem.getBoundingClientRect();
}catch(e){
- bounds = {top:elem.offsetTop, left:elem.offsetLeft, width:elem.offsetWidth, height:elem.offsetHeight};
+ bounds = {top:elem.offsetTop, left:elem.offsetLeft, right:elem.offsetLeft + elem.offsetWidth, bottom:elem.offsetTop + elem.offsetHeight};
}
var offsetX = ((win.pageXOffset || docElem.scrollLeft) - (docElem.clientLeft || 0)) || 0;
@@ -198,22 +203,26 @@ return {
var padTop = (parseIntFn(styles.paddingTop) + parseIntFn(styles.borderTopWidth)) || 0;
var padRight = (parseIntFn(styles.paddingRight) + parseIntFn(styles.borderRightWidth)) || 0;
var padBottom = (parseIntFn(styles.paddingBottom) + parseIntFn(styles.borderBottomWidth)) || 0;
+
var top = bounds.top || 0;
var left = bounds.left || 0;
+ var right = bounds.right || 0;
+ var bottom = bounds.bottom || 0;
return {
left: left + offsetX + padLeft,
top: top + offsetY + padTop,
- width: bounds.right - padRight - left - padLeft,
- height: bounds.bottom - padBottom - top - padTop
+ width: right - padRight - left - padLeft,
+ height: bottom - padBottom - top - padTop
};
},
/**
- * 创建一个DOM元素。可指定属性和样式。
- * @param {String} type 要创建的DOM元素的类型。比如:'div'。
- * @param {Object} properties 指定DOM元素的属性和样式。
- * @returns {HTMLElement} 一个DOM元素。
+ * @language=en
+ * Create a DOM element. You can specify properties and styles.
+ * @param {String} type DOM element type to be created. Such as: 'div'.
+ * @param {Object} properties Properties and styles for DOM element.
+ * @returns {HTMLElement} A DOM element.
*/
createElement: function(type, properties){
var elem = doc.createElement(type), p, val, s;
@@ -229,17 +238,19 @@ return {
},
/**
- * 根据参数id获取一个DOM元素。此方法等价于document.getElementById(id)。
- * @param {String} id 要获取的DOM元素的id。
- * @returns {HTMLElement} 一个DOM元素。
+ * @language=en
+ * Gets a DOM element according to the parameter id. This method is equivalent to document.getElementById(id).
+ * @param {String} id id of the DOM element you want to get.
+ * @returns {HTMLElement} A DOM element.
*/
getElement: function(id){
return doc.getElementById(id);
},
/**
- * 设置可视对象DOM元素的CSS样式。
- * @param {View} obj 指定要设置CSS样式的可视对象。
+ * @language=en
+ * Set visual object DOM element CSS style.
+ * @param {View} obj Specifies the CSS style to set the visual object.
* @private
*/
setElementStyleByView: function(obj){
@@ -337,9 +348,10 @@ return {
},
/**
- * 生成可视对象的CSS变换样式。
- * @param {View} obj 指定生成CSS变换样式的可视对象。
- * @returns {String} 生成的CSS样式字符串。
+ * @language=en
+ * Generated visual object CSS style transformation.
+ * @param {View} obj Specifies visual object whose CSS style must be got.
+ * @returns {String} String representation of the CSS style.
*/
getTransformCSS: function(obj){
var use3d = this.browser.supportTransform3D,
@@ -357,20 +369,17 @@ return Hilo;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/core/Class', function(){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * 创建类示例:
+ * @language=en
+ * Create Example Class:
*
* var Bird = Hilo.Class.create({
* Extends: Animal,
@@ -392,23 +401,24 @@ define('hilo/core/Class', function(){
* swallow.fly();
* Bird.isBird(swallow);
*
- * @namespace Class是提供类的创建的辅助工具。
+ * @namespace Class Class is created to aid the developer.
* @static
* @module hilo/core/Class
*/
var Class = (function(){
/**
- * 根据参数指定的属性和方法创建类。
- * @param {Object} properties 要创建的类的相关属性和方法。主要有:
+ * @language=en
+ * Create a class based on the parameters, properties and methods specified.
+ * @param {Object} properties Properties and methods to create the class.
*
- * - Extends - 指定要继承的父类。
- * - Mixes - 指定要混入的成员集合对象。
- * - Statics - 指定类的静态属性或方法。
- * - constructor - 指定类的构造函数。
- * - 其他创建类的成员属性或方法。
+ * - Extends - Designed to inherit the parent class.
+ * - Mixes - Specifies mixed member collection object.
+ * - Statics - Static property or method specified class.
+ * - constructor - The constructor of specified class.
+ * - Other members of the property or method to create the class.
*
- * @returns {Object} 创建的类。
+ * @returns {Object} Create classes.
*/
var create = function(properties){
properties = properties || {};
@@ -418,6 +428,7 @@ var create = function(properties){
}
/**
+ * @language=en
* @private
*/
var implement = function(properties){
@@ -464,6 +475,7 @@ var classMutators = /** @ignore */{
};
/**
+ * @language=en
* @private
*/
var createProto = (function(){
@@ -481,10 +493,11 @@ var createProto = (function(){
})();
/**
- * 混入属性或方法。
- * @param {Object} target 混入目标对象。
- * @param {Object} source 要混入的属性和方法来源。可支持多个来源参数。
- * @returns {Object} 混入目标对象。
+ * @language=en
+ * Mixed property or method.
+ * @param {Object} target Mixed audiences.
+ * @param {Object} source The source whose methods and properties are to be mixed. It can support multiple source parameters.
+ * @returns {Object} Mixed audiences.
*/
var mix = function(target){
for(var i = 1, len = arguments.length; i < len; i++){
@@ -538,26 +551,23 @@ return Class;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/geom/Matrix', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Matrix类表示一个转换矩阵,它确定如何将点从一个坐标空间映射到另一个坐标空间。
- * @param {Number} a 缩放或旋转图像时影响像素沿 x 轴定位的值。
- * @param {Number} b 旋转或倾斜图像时影响像素沿 y 轴定位的值。
- * @param {Number} c 旋转或倾斜图像时影响像素沿 x 轴定位的值。
- * @param {Number} d 缩放或旋转图像时影响像素沿 y 轴定位的值。
- * @param {Number} tx 沿 x 轴平移每个点的距离。
- * @param {Number} ty 沿 y 轴平移每个点的距离。
+ * @language=en
+ * @class Matrix class is a transforming matrix, which declare how points in one coordinate maped to another coordinate.
+ * @param {Number} a The value affects pixel positioning alongside the x axis when Scale or rotate images.
+ * @param {Number} b The value affects pixel positioning alongside the y axis when rotate or skew images.
+ * @param {Number} c The value affects pixel positioning alongside the x axis when rotate or skew images.
+ * @param {Number} d The value affects pixel positioning alongside the y axis when Scale or rotate images.
+ * @param {Number} tx The distance to move every point alongside the x axis.
+ * @param {Number} ty The distance to move every point alongside the y axis.
* @module hilo/geom/Matrix
* @requires hilo/core/Class
*/
@@ -572,9 +582,10 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 将某个矩阵与当前矩阵连接,从而将这两个矩阵的几何效果有效地结合在一起。
- * @param {Matrix} mtx 要连接到源矩阵的矩阵。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Link a Matrix to current Matrix, in order to make geometry effects on these two composed more effective.
+ * @param {Matrix} mtx Matrix that link to the source matrix.
+ * @returns {Matrix} A Matrix Object.
*/
concat: function(mtx){
var args = arguments,
@@ -603,9 +614,10 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 对 Matrix 对象应用旋转转换。
- * @param {Number} angle 旋转的角度。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Rotate the Matrix Object.
+ * @param {Number} angle The angle to rotate.
+ * @returns {Matrix} A Matrix object.
*/
rotate: function(angle){
var sin = Math.sin(angle), cos = Math.cos(angle),
@@ -622,10 +634,11 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 对矩阵应用缩放转换。
- * @param {Number} sx 用于沿 x 轴缩放对象的乘数。
- * @param {Number} sy 用于沿 y 轴缩放对象的乘数。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Scale the Matrix.
+ * @param {Number} sx The value to multiply those object scale alongside the x axis.
+ * @param {Number} sy The value to multiply those object scale alongside the y axis.
+ * @returns {Matrix} A Matrix object.
*/
scale: function(sx, sy){
this.a *= sx;
@@ -638,10 +651,11 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 沿 x 和 y 轴平移矩阵,由 dx 和 dy 参数指定。
- * @param {Number} dx 沿 x 轴向右移动的量(以像素为单位)。
- * @param {Number} dy 沿 y 轴向右移动的量(以像素为单位)。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Translate the Matrix alongside x axis and y axis by dx and dy.
+ * @param {Number} dx Translate Matrix alongside the x axis to the right (measured in px).
+ * @param {Number} dy Translate Matrix alongside the y axis to the right (measured in px).
+ * @returns {Matrix} A Matrix object.
*/
translate: function(dx, dy){
this.tx += dx;
@@ -650,8 +664,9 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 为每个矩阵属性设置一个值,该值将导致 null 转换。通过应用恒等矩阵转换的对象将与原始对象完全相同。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Set each Matrix property a value to trigger null transform. The Matrix after applying identity matrix transformation will be exactly the same as original.
+ * @returns {Matrix} A Matrix object.
*/
identity: function(){
this.a = this.d = 1;
@@ -660,8 +675,9 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 执行原始矩阵的逆转换。您可以将一个逆矩阵应用于对象来撤消在应用原始矩阵时执行的转换。
- * @returns {Matrix} 一个Matrix对象。
+ * @language=en
+ * Apply an invert transformation of original Matrix. Using this invert transformation, you can reset a Matrix to a state before it had been apply some Matrix.
+ * @returns {Matrix} A Matrix object.
*/
invert: function(){
var a = this.a;
@@ -681,10 +697,11 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
},
/**
- * 返回将 Matrix 对象表示的几何转换应用于指定点所产生的结果。
- * @param {Object} point 想要获得其矩阵转换结果的点。
- * @param {Boolean} round 是否对点的坐标进行向上取整。
- * @param {Boolean} returnNew 是否返回一个新的点。
+ * @language=en
+ * Return the result after apply a Matrix displaying transform on the point.
+ * @param {Object} point Point need to transform.
+ * @param {Boolean} round Whether ceil the coordinate values of the point.
+ * @param {Boolean} returnNew Whether return a new point.
* @returns {Object} 由应用矩阵转换所产生的点。
*/
transformPoint: function(point, round, returnNew){
@@ -703,24 +720,22 @@ var Matrix = Class.create(/** @lends Matrix.prototype */{
});
+
return Matrix;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/event/EventMixin', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class EventMixin是一个包含事件相关功能的mixin。可以通过 Class.mix(target, EventMixin) 来为target增加事件功能。
+ * @language=en
+ * @class EventMixin is a mixin on event related functions. Use Class.mix(target, EventMixin) to add event function onto target.
* @mixin
* @static
* @module hilo/event/EventMixin
@@ -730,11 +745,12 @@ var EventMixin = {
_listeners: null,
/**
- * 增加一个事件监听。
- * @param {String} type 要监听的事件类型。
- * @param {Function} listener 事件监听回调函数。
- * @param {Boolean} once 是否是一次性监听,即回调函数响应一次后即删除,不再响应。
- * @returns {Object} 对象本身。链式调用支持。
+ * @language=en
+ * Add an event listenser.
+ * @param {String} type Event type to listen.
+ * @param {Function} listener Callback function of event listening.
+ * @param {Boolean} once Listen on event only once and no more response after the first response?
+ * @returns {Object} The Event itself. Functions chain call supported.
*/
on: function(type, listener, once){
var listeners = (this._listeners = this._listeners || {});
@@ -748,10 +764,11 @@ var EventMixin = {
},
/**
- * 删除一个事件监听。如果不传入任何参数,则删除所有的事件监听;如果不传入第二个参数,则删除指定类型的所有事件监听。
- * @param {String} type 要删除监听的事件类型。
- * @param {Function} listener 要删除监听的回调函数。
- * @returns {Object} 对象本身。链式调用支持。
+ * @language=en
+ * Remove one event listener. Remove all event listeners if no parameter provided, and remove all event listeners on one type which is provided as the only parameter.
+ * @param {String} type The type of event listener that want to remove.
+ * @param {Function} listener Event listener callback function to be removed.
+ * @returns {Object} The Event itself. Functions chain call supported.
*/
off: function(type, listener){
//remove all event listeners
@@ -781,10 +798,11 @@ var EventMixin = {
},
/**
- * 发送事件。当第一个参数类型为Object时,则把它作为一个整体事件对象。
- * @param {String} type 要发送的事件类型。
- * @param {Object} detail 要发送的事件的具体信息,即事件随带参数。
- * @returns {Boolean} 是否成功调度事件。
+ * @language=en
+ * Send events. If the first parameter is an Object, take it as an Event Object.
+ * @param {String} type Event type to send.
+ * @param {Object} detail The detail (parameters go with the event) of Event to send.
+ * @returns {Boolean} Whether Event call successfully.
*/
fire: function(type, detail){
var event, eventType;
@@ -800,14 +818,19 @@ var EventMixin = {
var eventListeners = listeners[eventType];
if(eventListeners){
- eventListeners = eventListeners.slice(0);
+ var eventListenersCopy = eventListeners.slice(0);
event = event || new EventObject(eventType, this, detail);
if(event._stopped) return false;
- for(var i = 0; i < eventListeners.length; i++){
- var el = eventListeners[i];
+ for(var i = 0; i < eventListenersCopy.length; i++){
+ var el = eventListenersCopy[i];
el.listener.call(this, event);
- if(el.once) eventListeners.splice(i--, 1);
+ if(el.once) {
+ var index = eventListeners.indexOf(el);
+ if(index > -1){
+ eventListeners.splice(index, 1);
+ }
+ }
}
if(eventListeners.length == 0) delete listeners[eventType];
@@ -818,7 +841,8 @@ var EventMixin = {
};
/**
- * 事件对象类。当前仅为内部类,以后有需求的话可能会考虑独立为公开类。
+ * @language=en
+ * Event Object class. It's an private class now, but maybe will become a public class if needed.
*/
var EventObject = Class.create({
constructor: function EventObject(type, target, detail){
@@ -854,26 +878,23 @@ return EventMixin;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Drawable', ['hilo/core/Hilo', 'hilo/core/Class'], function(Hilo, Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Drawable是可绘制图像的包装。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class Drawable is a wrapper of drawable images.
+ * @param {Object} properties create Objects properties, contains all writable properties.
* @module hilo/view/Drawable
* @requires hilo/core/Hilo
* @requires hilo/core/Class
- * @property {Object} image 要绘制的图像。即可被CanvasRenderingContext2D.drawImage使用的对象类型,可以是HTMLImageElement、HTMLCanvasElement、HTMLVideoElement等对象。
- * @property {array} rect 要绘制的图像的矩形区域。
+ * @property {Object} image Image to be drawed, can used by CanvasRenderingContext2D.drawImage,like HTMLImageElement、HTMLCanvasElement、HTMLVideoElement。
+ * @property {array} rect The retangle area that image will be drawed.
*/
var Drawable = Class.create(/** @lends Drawable.prototype */{
constructor: function(properties){
@@ -884,8 +905,9 @@ var Drawable = Class.create(/** @lends Drawable.prototype */{
rect: null,
/**
- * 初始化可绘制对象。
- * @param {Object} properties 要初始化的属性。
+ * @language=en
+ * Initialize drawable elements.
+ * @param {Object} properties Properties need to be initialized.
*/
init: function(properties){
var me = this, oldImage = me.image;
@@ -917,9 +939,10 @@ var Drawable = Class.create(/** @lends Drawable.prototype */{
Statics: /** @lends Drawable */{
/**
- * 判断参数elem指定的元素是否可包装成Drawable对象。
- * @param {Object} elem 要测试的对象。
- * @return {Boolean} 如果是可包装成Drawable对象则返回true,否则为false。
+ * @language=en
+ * Check whether the given 'elem' and be wrapped into Drawable object.
+ * @param {Object} elem Element to be tested.
+ * @return {Boolean} Return true if element can be wrapped into Drawable element, otherwises return false.
*/
isDrawable: function(elem){
if(!elem || !elem.tagName) return false;
@@ -933,27 +956,24 @@ return Drawable;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/renderer/Renderer', ['hilo/core/Hilo', 'hilo/core/Class'], function(Hilo, Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class 渲染器抽象基类。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class Renderer Renderer is the base class of renderer.
+ * @param {Object} properties The properties to create a renderer, contains all writeable props of this class.
* @module hilo/renderer/Renderer
* @requires hilo/core/Hilo
* @requires hilo/core/Class
- * @property {Object} canvas 渲染器对应的画布。它可能是一个普通的DOM元素,比如div,也可以是一个canvas画布元素。只读属性。
- * @property {Object} stage 渲染器对应的舞台。只读属性。
- * @property {String} renderType 渲染方式。只读属性。
+ * @property {Object} canvas The canvas of renderer. It can be a dom element, such as a div element, or a canvas element. readonly.
+ * @property {Object} stage The stage of renderer, readonly.
+ * @property {String} renderType The render type of renderer, readonly.
*/
var Renderer = Class.create(/** @lends Renderer.prototype */{
constructor: function(properties){
@@ -966,52 +986,60 @@ var Renderer = Class.create(/** @lends Renderer.prototype */{
stage: null,
/**
- * 为开始绘制可视对象做准备。需要子类来实现。
- * @param {View} target 要绘制的可视对象。
+ * @language=en
+ * Prepare for draw visual object. The subclass need to implement it.
+ * @param {View} target The visual target to draw.
*/
startDraw: function(target){ },
/**
- * 绘制可视对象。需要子类来实现。
- * @param {View} target 要绘制的可视对象。
+ * @language=en
+ * Draw the visual object. The subclass need to implement it.
+ * @param {View} target The visual target to draw.
*/
draw: function(target){ },
/**
- * 结束绘制可视对象后的后续处理方法。需要子类来实现。
- * @param {View} target 要绘制的可视对象。
+ * @language=en
+ * The handling method after draw the visual object. The subclass need to implement it.
+ * @param {View} target The visual target to draw.
*/
endDraw: function(target){ },
/**
- * 对可视对象进行变换。需要子类来实现。
+ * @language=en
+ * Transfrom the visual object. The subclass need to implement it.
*/
transform: function(){ },
/**
- * 隐藏可视对象。需要子类来实现。
+ * @language=en
+ * Hide the visual object. The subclass need to implement it.
*/
hide: function(){ },
/**
- * 从画布中删除可视对象。注意:不是从stage中删除对象。需要子类来实现。
- * @param {View} target 要删除的可视对象。
+ * @language=en
+ * Remove the visual object from canvas. Notice that it dosen't remove the object from stage. The subclass need to implement it.
+ * @param {View} target The visual target to remove.
*/
remove: function(target){ },
/**
- * 清除画布指定区域。需要子类来实现。
- * @param {Number} x 指定区域的x轴坐标。
- * @param {Number} y 指定区域的y轴坐标。
- * @param {Number} width 指定区域的宽度。
- * @param {Number} height 指定区域的高度。
+ * @language=en
+ * Clear the given region of canvas. The subclass need to implement it.
+ * @param {Number} x The position on the x axis of the given region.
+ * @param {Number} y The position on the y axis of the given region.
+ * @param {Number} width The width of the given region.
+ * @param {Number} height The height of the given region.
*/
clear: function(x, y, width, height){ },
/**
- * 改变渲染器的画布大小。
- * @param {Number} width 指定渲染画布新的宽度。
- * @param {Number} height 指定渲染画布新的高度。
+ * @language=en
+ * Resize the renderer's canvas.
+ * @param {Number} width The width of renderer's canvas.
+ * @param {Number} height The height of the renderer's canvas.
*/
resize: function(width, height){ }
@@ -1021,27 +1049,24 @@ return Renderer;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/renderer/CanvasRenderer', ['hilo/core/Class', 'hilo/core/Hilo', 'hilo/renderer/Renderer'], function(Class, Hilo, Renderer){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class canvas画布渲染器。所有可视对象将渲染在canvas画布上。舞台Stage会根据参数canvas选择不同的渲染器,开发者无需直接使用此类。
+ * @language=en
+ * @class CanvasRenderer CanvasRenderer, all the visual object is drawing on the canvas element.The stage will create different renderer depend on the canvas and renderType properties, developer need not use this class directly.
* @augments Renderer
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties The properties to create a renderer, contains all writeable props of this class.
* @module hilo/renderer/CanvasRenderer
* @requires hilo/core/Class
* @requires hilo/core/Hilo
* @requires hilo/renderer/Renderer
- * @property {CanvasRenderingContext2D} context canvas画布的上下文。只读属性。
+ * @property {CanvasRenderingContext2D} context The context of the canvas element, readonly.
*/
var CanvasRenderer = Class.create(/** @lends CanvasRenderer.prototype */{
Extends: Renderer,
@@ -1086,7 +1111,7 @@ var CanvasRenderer = Class.create(/** @lends CanvasRenderer.prototype */{
var drawable = target.drawable, image = drawable && drawable.image;
if(image){
var rect = drawable.rect, sw = rect[2], sh = rect[3], offsetX = rect[4], offsetY = rect[5];
- //ie9+浏览器宽高为0时会报错
+ //ie9+浏览器宽高为0时会报错 fixed ie9 bug.
if(!sw || !sh){
return;
}
@@ -1250,22 +1275,19 @@ return CanvasRenderer;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/renderer/DOMRenderer', ['hilo/core/Class', 'hilo/core/Hilo', 'hilo/renderer/Renderer', 'hilo/view/Drawable'], function(Class, Hilo, Renderer, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class DOM+CSS3渲染器。将可视对象以DOM元素方式渲染出来。舞台Stage会根据参数canvas选择不同的渲染器,开发者无需直接使用此类。
+ * @language=en
+ * @class DomRenderer The DomRenderer, all the visual object is drawing using dom element.The stage will create different renderer depend on the canvas and renderType properties, developer need not use this class directly.
* @augments Renderer
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties The properties to create a renderer, contains all writeable props of this class.
* @module hilo/renderer/DOMRenderer
* @requires hilo/core/Class
* @requires hilo/core/Hilo
@@ -1384,10 +1406,11 @@ return Class.create({
});
/**
- * 创建一个可渲染的DOM,可指定tagName,如canvas或div。
- * @param {Object} view 一个可视对象或类似的对象。
- * @param {Object} imageObj 指定渲染的image及相关设置,如绘制区域rect。
- * @return {HTMLElement} 新创建的DOM对象。
+ * @language=en
+ * Create a dom element, you can set the tagName property,such as canvas and div.
+ * @param {Object} view A visual object.
+ * @param {Object} imageObj The image object to render, include the image propertiy and other associated properties, such as rect.
+ * @return {HTMLElement} The created dom element.
* @private
*/
function createDOMDrawable(view, imageObj){
@@ -1434,17 +1457,13 @@ return DOMRenderer;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/renderer/WebGLRenderer', ['hilo/core/Class', 'hilo/renderer/Renderer', 'hilo/geom/Matrix'], function(Class, Renderer, Matrix){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
* Heavily inspired by PIXI's SpriteRenderer:
@@ -1453,33 +1472,37 @@ define('hilo/renderer/WebGLRenderer', ['hilo/core/Class', 'hilo/renderer/Rendere
var DEG2RAD = Math.PI / 180;
/**
- * @class webgl画布渲染器。所有可视对象将渲染在canvas画布上。
+ * @language=en
+ * @class WebGLRenderer The WebGLRenderer, all the visual object is drawing on the canvas using WebGL.The stage will create different renderer depend on the canvas and renderType properties, developer need not use this class directly.
* @augments Renderer
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties The properties to create a renderer, contains all writeable props of this class.
* @module hilo/renderer/WebGLRenderer
* @requires hilo/core/Class
* @requires hilo/renderer/Renderer
* @requires hilo/geom/Matrix
- * @property {WebGLRenderingContext} gl webgl上下文。只读属性。
+ * @property {WebGLRenderingContext} gl The WebGL context of the renderer, readonly.
*/
var WebGLRenderer = Class.create(/** @lends WebGLRenderer.prototype */{
Extends: Renderer,
Statics:/** @lends WebGLRenderer */{
/**
- * 最大批渲染数量。
+ * @language=en
+ * The max num of batch draw, default is 2000.
* @type {Number}
*/
MAX_BATCH_NUM:2000,
/**
- * 顶点属性数。只读属性。
+ * @language=en
+ * The num of vertex attributes, readonly.
* @type {Number}
*/
ATTRIBUTE_NUM:5,
/**
- * 是否支持WebGL。只读属性。
+ * @language=en
+ * is WebGL supported, readonly.
* @type {Boolean}
*/
- isSupport:null
+ isSupported:null
},
renderType:'webgl',
gl:null,
@@ -1544,7 +1567,6 @@ var WebGLRenderer = Class.create(/** @lends WebGLRenderer.prototype */{
}
return false;
},
-
/**
* @private
* @see Renderer#draw
@@ -1835,6 +1857,7 @@ var WebGLRenderer = Class.create(/** @lends WebGLRenderer.prototype */{
});
/**
+ * @language=en
* shader
* @param {WebGLRenderer} renderer [description]
* @param {Object} source
@@ -1954,66 +1977,57 @@ Shader.prototype = {
}
};
-WebGLRenderer.isSupport = function(){
- if(this._isSupport !== undefined){
- return this._isSupport;
+WebGLRenderer.isSupported = (function(){
+ var canvas = document.createElement('canvas');
+ if(canvas.getContext && (canvas.getContext('webgl')||canvas.getContext('experimental-webgl'))){
+ return true;
}
else{
- var canvas = document.createElement('canvas');
- if(canvas.getContext && (canvas.getContext('webgl')||canvas.getContext('experimental-webgl'))){
- this._isSupport = true;
- }
- else{
- this._isSupport = false;
- }
- return this._isSupport;
+ return false;
}
-};
+})();
return WebGLRenderer;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/View', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/event/EventMixin', 'hilo/geom/Matrix'], function(Hilo, Class, EventMixin, Matrix){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class View类是所有可视对象或组件的基类。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class View View is the base class of all display objects
+ * @param {Object} properties The properties to create a view object, contains all writeable props of this class
* @module hilo/view/View
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/event/EventMixin
* @requires hilo/geom/Matrix
- * @property {String} id 可视对象的唯一标识符。
- * @property {Number} x 可视对象的x轴坐标。默认值为0。
- * @property {Number} y 可视对象的y轴坐标。默认值为0。
- * @property {Number} width 可视对象的宽度。默认值为0。
- * @property {Number} height 可视对象的高度。默认值为0。
- * @property {Number} alpha 可视对象的透明度。默认值为1。
- * @property {Number} rotation 可视对象的旋转角度。默认值为0。
- * @property {Boolean} visible 可视对象是否可见。默认为可见,即true。
- * @property {Number} pivotX 可视对象的中心点的x轴坐标。默认值为0。
- * @property {Number} pivotY 可视对象的中心点的y轴坐标。默认值为0。
- * @property {Number} scaleX 可视对象在x轴上的缩放比例。默认为不缩放,即1。
- * @property {Number} scaleY 可视对象在y轴上的缩放比例。默认为不缩放,即1。
- * @property {Boolean} pointerEnabled 可视对象是否接受交互事件。默认为接受交互事件,即true。
- * @property {Object} background 可视对象的背景样式。可以是CSS颜色值、canvas的gradient或pattern填充。
- * @property {Graphics} mask 可视对象的遮罩图形。
- * @property {String|Function} align 可视对象相对于父容器的对齐方式。取值可查看Hilo.align枚举对象。
- * @property {Container} parent 可视对象的父容器。只读属性。
- * @property {Number} depth 可视对象的深度,也即z轴的序号。只读属性。
- * @property {Drawable} drawable 可视对象的可绘制对象。供高级开发使用。
- * @property {Array} boundsArea 可视对象的区域顶点数组。格式为:[{x:10, y:10}, {x:20, y:20}]。
+ * @property {String} id The identifier for the view.
+ * @property {Number} x The position of the view on the x axis relative to the local coordinates of the parent, default value is 0.
+ * @property {Number} y The position of the view on the y axis relative to the local coordinates of the parent, default value is 0.
+ * @property {Number} width The width of the view, default value is 0.
+ * @property {Number} height The height of the view, default value is 0.
+ * @property {Number} alpha The opacity of the view, default value is 1.
+ * @property {Number} rotation The rotation of the view in angles, default value is 0.
+ * @property {Boolean} visible The visibility of the view. If false the vew will not be drawn, default value is true.
+ * @property {Number} pivotX Position of the center point on the x axis of the view, default value is 0.
+ * @property {Number} pivotY Position of the center point on the y axis of the view, default value is 0.
+ * @property {Number} scaleX The x axis scale factor of the view, default value is 1.
+ * @property {Number} scaleY The y axis scale factor of the view, default value is 1.
+ * @property {Boolean} pointerEnabled Is the view can receive DOM events, default value is true.
+ * @property {Object} background The background style to fill the view, can be css color, gradient or pattern of canvas
+ * @property {Graphics} mask Sets a mask for the view. A mask is an object that limits the visibility of an object to the shape of the mask applied to it. A regular mask must be a Hilo.Graphics object. This allows for much faster masking in canvas as it utilises shape clipping. To remove a mask, set this property to null.
+ * @property {String|Function} align The alignment of the view, the value must be one of Hilo.align enum.
+ * @property {Container} parent The parent view of this view, readonly!
+ * @property {Number} depth The z index of the view, readonly!
+ * @property {Drawable} drawable The drawable object of the view. Only for advanced develop.
+ * @property {Array} boundsArea The vertex points of the view, the points are relative to the center point. This is a example: [{x:10, y:10}, {x:20, y:20}].
*/
var View = (function(){
@@ -2047,8 +2061,9 @@ return Class.create(/** @lends View.prototype */{
depth: -1,
/**
- * 返回可视对象的舞台引用。若对象没有被添加到舞台,则返回null。
- * @returns {Stage} 可视对象的舞台引用。
+ * @language=en
+ * Get the stage object of the view. If the view doesn't add to any stage, null will be returned.
+ * @returns {Stage} The stage object of the view.
*/
getStage: function(){
var obj = this, parent;
@@ -2060,26 +2075,29 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 返回可视对象缩放后的宽度。
- * @returns {Number} 可视对象缩放后的宽度。
+ * @language=en
+ * Get the scaled width of the view.
+ * @returns {Number} scaled width of the view.
*/
getScaledWidth: function(){
return this.width * this.scaleX;
},
/**
- * 返回可视对象缩放后的高度。
- * @returns {Number} 可视对象缩放后的高度。
+ * @language=en
+ * Get the scaled height of the view.
+ * @returns {Number} scaled height of the view.
*/
getScaledHeight: function(){
return this.height * this.scaleY;
},
/**
- * 添加此对象到父容器。
- * @param {Container} container 一个容器。
- * @param {Uint} index 要添加到索引位置。
- * @returns {View} 可视对象本身。
+ * @language=en
+ * Add current view to a Contaner.
+ * @param {Container} container Container object.
+ * @param {Uint} index The index of the view in container.
+ * @returns {View} Current view.
*/
addTo: function(container, index){
if(typeof index === 'number') container.addChildAt(this, index);
@@ -2088,8 +2106,9 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 从父容器里删除此对象。
- * @returns {View} 可视对象本身。
+ * @language=en
+ * Remove current view from it's parent container
+ * @returns {View} Current view.
*/
removeFromParent: function(){
var parent = this.parent;
@@ -2098,13 +2117,14 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 获取可视对象在舞台全局坐标系内的外接矩形以及所有顶点坐标。
- * @returns {Array} 可视对象的顶点坐标数组vertexs。另vertexs还包含属性:
+ * @language=en
+ * Get the bounds of the view as a circumscribed rectangle and all vertex points relative to the coordinates of the stage.
+ * @returns {Array} The vertex points array, and the array contains the following properties:
*
- * - x - 可视对象的外接矩形x轴坐标。
- * - y - 可视对象的外接矩形y轴坐标。
- * - width - 可视对象的外接矩形的宽度。
- * - height - 可视对象的外接矩形的高度。
+ * - x - The position of the view on the x axis relative to the coordinates of the stage.
+ * - y - The position of the view on the y axis relative to the coordinates of the stage.
+ * - width - The width of circumscribed rectangle of the view.
+ * - height - The height of circumscribed rectangle of the view
*
*/
getBounds: function(){
@@ -2138,8 +2158,9 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 获取可视对象相对于其某个祖先(默认为最上层容器)的连接矩阵。
- * @param {View} ancestor 可视对象的相对的祖先容器。
+ * @language=en
+ * Get the matrix that can transform points from current view coordinates to the ancestor container coordinates.
+ * @param {View} ancestor The ancestor of current view, default value is the top container.
* @private
*/
getConcatenatedMatrix: function(ancestor){
@@ -2165,11 +2186,12 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 检测由x和y参数指定的点是否在其外接矩形之内。
- * @param {Number} x 要检测的点的x轴坐标。
- * @param {Number} y 要检测的点的y轴坐标。
- * @param {Boolean} usePolyCollision 是否使用多边形碰撞检测。默认为false。
- * @returns {Boolean} 点是否在可视对象之内。
+ * @language=en
+ * Determining whether a point is in the circumscribed rectangle of current view.
+ * @param {Number} x The x axis relative to the stage coordinates.
+ * @param {Number} y The y axis relative to the stage coordinates.
+ * @param {Boolean} usePolyCollision Is use polygon collision, default value is false.
+ * @returns {Boolean} the point is in the circumscribed rectangle of current view.
*/
hitTestPoint: function(x, y, usePolyCollision){
var bound = this.getBounds(),
@@ -2183,9 +2205,10 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 检测object参数指定的对象是否与其相交。
- * @param {View} object 要检测的可视对象。
- * @param {Boolean} usePolyCollision 是否使用多边形碰撞检测。默认为false。
+ * @language=en
+ * Determining whether an object is in the circumscribed rectangle of current view.
+ * @param {View} object The object need to determining.
+ * @param {Boolean} usePolyCollision Is use polygon collision, default value is false.
*/
hitTestObject: function(object, usePolyCollision){
var b1 = this.getBounds(),
@@ -2200,9 +2223,10 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 可视对象的基本渲染实现,用于框架内部或高级开发使用。通常应该重写render方法。
- * @param {Renderer} renderer 渲染器。
- * @param {Number} delta 渲染时时间偏移量。
+ * @language=en
+ * The method to render current display object. Only for advanced develop.
+ * @param {Renderer} renderer Renderer object.
+ * @param {Number} delta The delta time of render.
* @protected
*/
_render: function(renderer, delta){
@@ -2213,13 +2237,15 @@ return Class.create(/** @lends View.prototype */{
}
},
/**
- * 冒泡鼠标事件
+ * @language=en
+ * Mouse event
*/
_fireMouseEvent:function(e){
e.eventCurrentTarget = this;
this.fire(e);
- //处理mouseover事件 mouseover不需要阻止冒泡
+ // 处理mouseover事件 mouseover不需要阻止冒泡
+ // handle mouseover event, mouseover needn't stop propagation.
if(e.type == "mousemove"){
if(!this.__mouseOver){
this.__mouseOver = true;
@@ -2232,7 +2258,8 @@ return Class.create(/** @lends View.prototype */{
this.__mouseOver = false;
}
- //向上冒泡
+ // 向上冒泡
+ // handle event propagation
var parent = this.parent;
if(!e._stopped && !e._stopPropagationed && parent){
if(e.type == "mouseout" || e.type == "touchout"){
@@ -2247,25 +2274,28 @@ return Class.create(/** @lends View.prototype */{
},
/**
- * 更新可视对象,此方法会在可视对象渲染之前调用。此函数可以返回一个Boolean值。若返回false,则此对象不会渲染。默认值为null。
- * 限制:如果在此函数中改变了可视对象在其父容器中的层级,当前渲染帧并不会正确渲染,而是在下一渲染帧。可在其父容器的onUpdate方法中来实现。
+ * @language=en
+ * This method will call while the view need update(usually caused by ticker update). This method can return a Boolean value, if return false, the view will not be drawn.
+ * Limit: If you change the index in it's parent, it will not be drawn correct in current frame but next frame is correct.
* @type Function
* @default null
*/
onUpdate: null,
/**
- * 可视对象的具体渲染逻辑。子类可通过覆盖此方法实现自己的渲染。
- * @param {Renderer} renderer 渲染器。
- * @param {Number} delta 渲染时时间偏移量。
+ * @language=en
+ * The render method of current view. The subclass can implement it's own render logic by rewrite this function.
+ * @param {Renderer} renderer Renderer object.
+ * @param {Number} delta The delta time of render.
*/
render: function(renderer, delta){
renderer.draw(this);
},
/**
- * 返回可视对象的字符串表示。
- * @returns {String} 可视对象的字符串表示。
+ * @language=en
+ * Get a string representing current view.
+ * @returns {String} string representing current view.
*/
toString: function(){
return Hilo.viewToString(this);
@@ -2273,6 +2303,7 @@ return Class.create(/** @lends View.prototype */{
});
/**
+ * @language=en
* @private
*/
function pointInPolygon(x, y, poly){
@@ -2310,6 +2341,7 @@ function pointInPolygon(x, y, poly){
}
/**
+ * @language=en
* @private
*/
function polygonCollision(poly1, poly2){
@@ -2319,6 +2351,7 @@ function polygonCollision(poly1, poly2){
}
/**
+ * @language=en
* @private
*/
function doSATCheck(poly1, poly2, result){
@@ -2377,22 +2410,19 @@ return View;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/CacheMixin', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/Drawable'], function(Hilo, Class, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
var _cacheCanvas = Hilo.createElement('canvas');
var _cacheContext = _cacheCanvas.getContext('2d');
/**
- * @class CacheMixin是一个包含cache功能的mixin。可以通过 Class.mix(target, CacheMixin) 来为target增加cache功能。
+ * @language=en
+ * @class CacheMixin A mixin that contains cache method.You can mix cache method to the target by use Class.mix(target, CacheMixin).
* @mixin
* @static
* @module hilo/view/CacheMixin
@@ -2403,8 +2433,9 @@ var _cacheContext = _cacheCanvas.getContext('2d');
var CacheMixin = {
_cacheDirty:true,
/**
- * 缓存到图片里。可用来提高渲染效率。
- * @param {Boolean} forceUpdate 是否强制更新缓存
+ * @language=en
+ * Cache the view.
+ * @param {Boolean} forceUpdate is force update cache.
*/
cache: function(forceUpdate){
if(forceUpdate || this._cacheDirty || !this._cacheImage){
@@ -2412,7 +2443,8 @@ var CacheMixin = {
}
},
/**
- * 更新缓存
+ * @language=en
+ * Update the cache.
*/
updateCache:function(){
//TODO:width, height自动判断
@@ -2426,7 +2458,8 @@ var CacheMixin = {
this._cacheDirty = false;
},
/**
- * 设置缓存是否dirty
+ * @language=en
+ * set the cache state diry.
*/
setCacheDirty:function(dirty){
this._cacheDirty = dirty;
@@ -2437,29 +2470,26 @@ return CacheMixin;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Container', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View'], function(Hilo, Class, View){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Container是所有容器类的基类。每个Container都可以添加其他可视对象为子级。
+ * @language=en
+ * @class Container is the base class to all container classes. Each Container can add other view object as children.
* @augments View
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties Properties parameters of the object to create. Contains all writable properties of this class.
* @module hilo/view/Container
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/view/View
- * @property {Array} children 容器的子元素列表。只读。
- * @property {Boolean} pointerChildren 指示容器的子元素是否能响应用户交互事件。默认为true。
- * @property {Boolean} clipChildren 指示是否裁剪超出容器范围的子元素。默认为false。
+ * @property {Array} children List of children elements of the container, readonly!
+ * @property {Boolean} pointerChildren Whether children elements of the container can response to user interactive events, default value is true.
+ * @property {Boolean} clipChildren Whether clip children elements which are out of the container, default value is false.
*/
var Container = Class.create(/** @lends Container.prototype */{
Extends: View,
@@ -2477,17 +2507,19 @@ var Container = Class.create(/** @lends Container.prototype */{
clipChildren: false,
/**
- * 返回容器的子元素的数量。
- * @returns {Uint} 容器的子元素的数量。
+ * @language=en
+ * Return the amount of the children elements of the container.
+ * @returns {Uint} The amount of the children elements of the container.
*/
getNumChildren: function(){
return this.children.length;
},
/**
- * 在指定索引位置添加子元素。
- * @param {View} child 要添加的子元素。
- * @param {Number} index 指定的索引位置,从0开始。
+ * @language=en
+ * Add child element at given index.
+ * @param {View} child Element to add.
+ * @param {Number} index The given index position, range from 0.
*/
addChildAt: function(child, index){
var children = this.children,
@@ -2508,10 +2540,12 @@ var Container = Class.create(/** @lends Container.prototype */{
children.splice(index, 0, child);
//直接插入,影响插入位置之后的深度
+ //Insert directly, this will affect depth of elements after the index.
if(childIndex < 0){
this._updateChildren(index);
}
//只是移动时影响中间段的深度
+ //Will affect depth of elements in the middle during moving
else{
var startIndex = childIndex < index ? childIndex : index;
var endIndex = childIndex < index ? index : childIndex;;
@@ -2522,8 +2556,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 在最上面添加子元素。
- * @param {View} child 要添加的子元素。
+ * @language=en
+ * Add child element at the top.
+ * @param {View} child Elements to add.
*/
addChild: function(child){
var total = this.children.length,
@@ -2536,9 +2571,10 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 在指定索引位置删除子元素。
- * @param {Int} index 指定删除元素的索引位置,从0开始。
- * @returns {View} 被删除的对象。
+ * @language=en
+ * Remove element at the index.
+ * @param {Int} index Index of the element to remove, range from 0.
+ * @returns {View} Element had been removed.
*/
removeChildAt: function(index){
var children = this.children;
@@ -2578,18 +2614,20 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 删除指定的子元素。
- * @param {View} child 指定要删除的子元素。
- * @returns {View} 被删除的对象。
+ * @language=en
+ * Remove the given child element.
+ * @param {View} child The child element to remove.
+ * @returns {View} Element had been removed.
*/
removeChild: function(child){
return this.removeChildAt(this.getChildIndex(child));
},
/**
- * 删除指定id的子元素。
- * @param {String} id 指定要删除的子元素的id。
- * @returns {View} 被删除的对象。
+ * @language=en
+ * Remove child element by its id.
+ * @param {String} id The id of element to remove.
+ * @returns {View} Element had been removed.
*/
removeChildById: function(id){
var children = this.children, child;
@@ -2604,8 +2642,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 删除所有的子元素。
- * @returns {Container} 容器本身。
+ * @language=en
+ * Remove all children elements.
+ * @returns {Container} Container itself.
*/
removeAllChildren: function(){
while(this.children.length) this.removeChildAt(0);
@@ -2613,8 +2652,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 返回指定索引位置的子元素。
- * @param {Number} index 指定要返回的子元素的索引值,从0开始。
+ * @language=en
+ * Return child element at the given index.
+ * @param {Number} index The index of the element, range from 0.
*/
getChildAt: function(index){
var children = this.children;
@@ -2623,8 +2663,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 返回指定id的子元素。
- * @param {String} id 指定要返回的子元素的id。
+ * @language=en
+ * Return child element at the given id.
+ * @param {String} id The id of child element to return.
*/
getChildById: function(id){
var children = this.children, child;
@@ -2636,17 +2677,19 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 返回指定子元素的索引值。
- * @param {View} child 指定要返回索引值的子元素。
+ * @language=en
+ * Return index value of the given child element.
+ * @param {View} child The child element need to get its index.
*/
getChildIndex: function(child){
return this.children.indexOf(child);
},
/**
- * 设置子元素的索引位置。
- * @param {View} child 指定要设置的子元素。
- * @param {Number} index 指定要设置的索引值。
+ * @language=en
+ * Set the index of child element.
+ * @param {View} child The child element need to set index.
+ * @param {Number} index The index to set to the element.
*/
setChildIndex: function(child, index){
var children = this.children,
@@ -2663,9 +2706,10 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 交换两个子元素的索引位置。
- * @param {View} child1 指定要交换的子元素A。
- * @param {View} child2 指定要交换的子元素B。
+ * @language=en
+ * Swap index between two child elements.
+ * @param {View} child1 Child element A.
+ * @param {View} child2 Child element B.
*/
swapChildren: function(child1, child2){
var children = this.children,
@@ -2679,9 +2723,10 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 交换两个指定索引位置的子元素。
- * @param {Number} index1 指定要交换的索引位置A。
- * @param {Number} index2 指定要交换的索引位置B。
+ * @language=en
+ * Swap two children elements at given indexes.
+ * @param {Number} index1 Given index A.
+ * @param {Number} index2 Given index B.
*/
swapChildrenAt: function(index1, index2){
var children = this.children,
@@ -2695,8 +2740,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 根据指定键值或函数对子元素进行排序。
- * @param {Object} keyOrFunction 如果此参数为String时,则根据子元素的某个属性值进行排序;如果此参数为Function时,则根据此函数进行排序。
+ * @language=en
+ * Sort children elements by the given key or function.
+ * @param {Object} keyOrFunction If is String, sort children elements by the given property string; If is Function, sort by the function.
*/
sortChildren: function(keyOrFunction){
var fn = keyOrFunction,
@@ -2712,7 +2758,8 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 更新子元素。
+ * @language=en
+ * Update children elements.
* @private
*/
_updateChildren: function(start, end){
@@ -2727,8 +2774,9 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 返回是否包含参数指定的子元素。
- * @param {View} child 指定要测试的子元素。
+ * @language=en
+ * Return whether this container contains the parameter described child element.
+ * @param {View} child The child element to test.
*/
contains: function(child){
while(child = child.parent){
@@ -2740,12 +2788,13 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 返回由x和y指定的点下的对象。
- * @param {Number} x 指定点的x轴坐标。
- * @param {Number} y 指定点的y轴坐标。
- * @param {Boolean} usePolyCollision 指定是否使用多边形碰撞检测。默认为false。
- * @param {Boolean} global 使用此标志表明将查找所有符合的对象,而不仅仅是第一个,即全局匹配。默认为false。
- * @param {Boolean} eventMode 使用此标志表明将在事件模式下查找对象。默认为false。
+ * @language=en
+ * Return object at the point positioned by given values on x axis and y axis.
+ * @param {Number} x The point's value on the coordinate's x axis.
+ * @param {Number} y The point's value on the coordinate's y asix.
+ * @param {Boolean} usePolyCollision Whether use polygon collision detection, default value is false.
+ * @param {Boolean} global Whether return all elements that match the condition, default value is false.
+ * @param {Boolean} eventMode Whether find elements under event mode, default value is false.
*/
getViewAtPoint: function(x, y, usePolyCollision, global, eventMode){
var result = global ? [] : null,
@@ -2773,7 +2822,8 @@ var Container = Class.create(/** @lends Container.prototype */{
},
/**
- * 覆盖渲染方法。
+ * @language=en
+ * Rewrite render method.
* @private
*/
render: function(renderer, delta){
@@ -2789,24 +2839,22 @@ var Container = Class.create(/** @lends Container.prototype */{
});
+
return Container;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Stage', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/Container', 'hilo/renderer/CanvasRenderer', 'hilo/renderer/DOMRenderer', 'hilo/renderer/WebGLRenderer'], function(Hilo, Class, Container, CanvasRenderer, DOMRenderer, WebGLRenderer){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * 示例:
+ * @language=en
+ * Demo:
*
* var stage = new Hilo.Stage({
* renderType:'canvas',
@@ -2815,16 +2863,16 @@ define('hilo/view/Stage', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/Conta
* height: 480
* });
*
- * @class 舞台是可视对象树的根,可视对象只有添加到舞台或其子对象后才会被渲染出来。创建一个hilo应用一般都是从创建一个stage开始的。
+ * @class Stage is the root of all visual object tree, any visual object will be render only after being added to Stage or any children elements of Stage. Normally, every hilo application start with an stage instance.
* @augments Container
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。主要有:
+ * @param {Object} properties Properties parameters for the object. Includes all writable properties of this class. Some important like:
*
- * - container:String|HTMLElement - 指定舞台在页面中的父容器元素。它是一个dom容器或id。若不传入此参数且canvas未被加入到dom树,则需要在舞台创建后手动把舞台画布加入到dom树中,否则舞台不会被渲染。可选。
- * - renderType:String - 指定渲染方式,canvas|dom|webgl,默认canvas。可选。
+ * - container:String|HTMLElement - Assign the parent container element of the Stage in the page. It should be a dom container or an id. If this parameter is not given and canvas isn't in the dom tree, you should add the stage vanvas into the dom tree yourself, otherwise Stage will not render. optional.
+ * - renderType:String - Renering way: canvas|dom|webgl,default value is canvas, optional.
* - canvas:String|HTMLCanvasElement|HTMLElement - 指定舞台所对应的画布元素。它是一个canvas或普通的div,也可以传入元素的id。若为canvas,则使用canvas来渲染所有对象,否则使用dom+css来渲染。可选。
- * - width:Number
- 指定舞台的宽度。默认为canvas的宽度。可选。
- * - height:Number
- 指定舞台的高度。默认为canvas的高度。可选。
- * - paused:Boolean
- 指定舞台是否停止渲染。默认为false。可选。
+ * - width:Number
- The width of the Stage, default value is the width of canvas, optional.
+ * - height:Number
- The height of the Stage, default value is the height of canvas, optional.
+ * - paused:Boolean
- Whether stop rendering the Stage, default value is false, optional.
*
* @module hilo/view/Stage
* @requires hilo/core/Hilo
@@ -2833,10 +2881,10 @@ define('hilo/view/Stage', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/Conta
* @requires hilo/renderer/CanvasRenderer
* @requires hilo/renderer/DOMRenderer
* @requires hilo/renderer/WebGLRenderer
- * @property {HTMLCanvasElement|HTMLElement} canvas 舞台所对应的画布。它可以是一个canvas或一个普通的div。只读属性。
- * @property {Renderer} renderer 舞台渲染器。只读属性。
- * @property {Boolean} paused 指示舞台是否暂停刷新渲染。
- * @property {Object} viewport 舞台内容在页面中的渲染区域。包含的属性有:left、top、width、height。只读属性。
+ * @property {HTMLCanvasElement|HTMLElement} canvas The canvas the Stage is related to. It can be a canvas or a div element, readonly!
+ * @property {Renderer} renderer Stage renderer, readonly!
+ * @property {Boolean} paused Paused Stage rendering.
+ * @property {Object} viewport Rendering area of the Stage. Including properties like: left, top, width, height. readonly!
*/
var Stage = Class.create(/** @lends Stage.prototype */{
Extends: Container,
@@ -2861,6 +2909,7 @@ var Stage = Class.create(/** @lends Stage.prototype */{
viewport: null,
/**
+ * @language=en
* @private
*/
_initRenderer: function(properties){
@@ -2892,7 +2941,7 @@ var Stage = Class.create(/** @lends Stage.prototype */{
this.renderer = new DOMRenderer(props);
break;
case 'webgl':
- if(WebGLRenderer.isSupport()){
+ if(WebGLRenderer.isSupported){
this.renderer = new WebGLRenderer(props);
}
else{
@@ -2907,9 +2956,10 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * 添加舞台画布到DOM容器中。注意:此方法覆盖了View.addTo方法。
- * @param {HTMLElement} domElement 一个dom元素。
- * @returns {Stage} 舞台本身,可用于链式调用。
+ * @language=en
+ * Add Stage canvas to DOM container. Note: this function overwrite View.addTo function.
+ * @param {HTMLElement} domElement An dom element.
+ * @returns {Stage} The Stage Object, chained call supported.
*/
addTo: function(domElement){
var canvas = this.canvas;
@@ -2920,8 +2970,9 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * 调用tick会触发舞台的更新和渲染。开发者一般无需使用此方法。
- * @param {Number} delta 调度器当前调度与上次调度tick之间的时间差。
+ * @language=en
+ * Invoke tick function and Stage will update and render. Developer may not need to use this funciton.
+ * @param {Number} delta The time had pass between this tick invoke and last tick invoke.
*/
tick: function(delta){
if(!this.paused){
@@ -2930,10 +2981,11 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * 开启/关闭舞台的DOM事件响应。要让舞台上的可视对象响应用户交互,必须先使用此方法开启舞台的相应事件的响应。
- * @param {String|Array} type 要开启/关闭的事件名称或数组。
- * @param {Boolean} enabled 指定开启还是关闭。如果不传此参数,则默认为开启。
- * @returns {Stage} 舞台本身。链式调用支持。
+ * @language=en
+ * Turn on/off Stage response to DOM event. To make visual objects on the Stage interactive, use this function to turn on Stage's responses to events.
+ * @param {String|Array} type The event name or array that need to turn on/off.
+ * @param {Boolean} enabled Whether turn on or off the response method of stage DOM event. If not provided, default value is true.
+ * @returns {Stage} The Stage Object, chained call supported.
*/
enableDOMEvent: function(type, enabled){
var me = this,
@@ -2956,7 +3008,8 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * DOM事件处理函数。此方法会把事件调度到事件的坐标点所对应的可视对象。
+ * @language=en
+ * DOM events handler function. This funciton will invoke events onto the visual object, which is on the position of the coordinate where the events is invoked.
* @private
*/
_onDOMEvent: function(e){
@@ -2976,7 +3029,7 @@ var Stage = Class.create(/** @lends Stage.prototype */{
event.stageX = x = (x - viewport.left) / this.scaleX;
event.stageY = y = (y - viewport.top) / this.scaleY;
- //鼠标事件需要阻止冒泡方法
+ //鼠标事件需要阻止冒泡方法 Prevent bubbling on mouse events.
event.stopPropagation = function(){
this._stopPropagationed = true;
};
@@ -2986,7 +3039,7 @@ var Stage = Class.create(/** @lends Stage.prototype */{
//fire mouseout/touchout event for last event target
var leave = type === 'mouseout';
- //当obj和target不同 且obj不是target的子元素时才触发out事件
+ //当obj和target不同 且obj不是target的子元素时才触发out事件 fire out event when obj and target isn't the same as well as obj is not a child element to target.
if(target && (target != obj && (!target.contains || !target.contains(obj))|| leave)){
var out = (type === 'touchmove') ? 'touchout' :
(type === 'mousemove' || leave || !obj) ? 'mouseout' : null;
@@ -3019,8 +3072,9 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * 更新舞台在页面中的可视区域,即渲染区域。当舞台canvas的样式border、margin、padding等属性更改后,需要调用此方法更新舞台渲染区域。
- * @returns {Object} 舞台的可视区域。即viewport属性。
+ * @language=en
+ * Update the viewport (rendering area) which Stage show on the page. Invoke this function to update viewport when Stage canvas changes border, margin or padding properties.
+ * @returns {Object} The visible area of the Stage (the viewport property).
*/
updateViewport: function(){
var canvas = this.canvas, viewport = null;
@@ -3031,10 +3085,11 @@ var Stage = Class.create(/** @lends Stage.prototype */{
},
/**
- * 改变舞台的大小。
- * @param {Number} width 指定舞台新的宽度。
- * @param {Number} height 指定舞台新的高度。
- * @param {Boolean} forceResize 指定是否强制改变舞台大小,即不管舞台大小是否相同,仍然强制执行改变动作,可确保舞台、画布以及视窗之间的尺寸同步。
+ * @language=en
+ * Resize the Stage.
+ * @param {Number} width The width of the new Stage.
+ * @param {Number} height The height of the new Stage.
+ * @param {Boolean} forceResize Whether forced to resize the Stage, means no matter the size of the Stage, force to change the size to keep Stage, canvas and window act at the same time.
*/
resize: function(width, height, forceResize){
if(forceResize || this.width !== width || this.height !== height){
@@ -3052,32 +3107,29 @@ return Stage;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Bitmap', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/Drawable'], function(Hilo, Class, View, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 使用示例:
+ * Example:
*
* var bmp = new Hilo.Bitmap({image:imgElem, rect:[0, 0, 100, 100]});
* stage.addChild(bmp);
*
- * @class Bitmap类表示位图图像类。
+ * @class Bitmap
* @augments View
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。此外还包括:
+ * @param {Object} properties the options of create Instance.It can contains all writable property and Moreover:
*
- * - image - 位图所在的图像image。必需。
- * - rect - 位图在图像image中矩形区域。
+ * - image - the image of bitmap which contained。required。
+ * - rect - the range of bitmap in the image。option
*
* @module hilo/view/Bitmap
* @requires hilo/core/Hilo
@@ -3105,10 +3157,11 @@ define('hilo/view/Bitmap', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
},
/**
- * 设置位图的图片。
- * @param {Image|String} image 图片对象或地址。
- * @param {Array} rect 指定位图在图片image的矩形区域。
- * @returns {Bitmap} 位图本身。
+ * @language=en
+ * set the image。
+ * @param {Image|String} Image Object or URL。
+ * @param {Array} rect the range of bitmap in the image。
+ * @returns {Bitmap} self。
*/
setImage: function(image, rect){
this.drawable.init({image:image, rect:rect});
@@ -3116,45 +3169,50 @@ define('hilo/view/Bitmap', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
this.width = rect[2];
this.height = rect[3];
}
+ else if(!this.width && !this.height){
+ var rect = this.drawable.rect;
+ if(rect){
+ this.width = rect[2];
+ this.height = rect[3];
+ }
+ }
return this;
}
});
+
return Bitmap;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Sprite', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/Drawable'], function(Hilo, Class, View, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * @class 动画精灵类。
+ * @class Sprite animation class.
* @augments View
* @module hilo/view/Sprite
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/view/View
* @requires hilo/view/Drawable
- * @param properties 创建对象的属性参数。可包含此类所有可写属性。此外还包括:
+ * @param properties Properties parameters for creating object, include all writable properties of this class, also include:
*
- * - frames - 精灵动画的帧数据对象。
+ * - frames - Sprite animation frames data object.
*
- * @property {number} currentFrame 当前播放帧的索引。从0开始。只读属性。
- * @property {boolean} paused 判断精灵是否暂停。默认为false。
- * @property {boolean} loop 判断精灵是否可以循环播放。默认为true。
- * @property {boolean} timeBased 指定精灵动画是否是以时间为基准。默认为false,即以帧为基准。
- * @property {number} interval 精灵动画的帧间隔。如果timeBased为true,则单位为毫秒,否则为帧数。
+ * @property {number} currentFrame Current showing frame index, range from 0, readoly!
+ * @property {boolean} paused Is sprite paused, default value is false.
+ * @property {boolean} loop Is sprite play in loop, default value is false.
+ * @property {boolean} timeBased Is sprite animate base on time, default value is false (base on frame).
+ * @property {number} interval Interval between sprite animation frames. If timeBased is true, measured in ms, otherwise, measured in frames.
*/
var Sprite = Class.create(/** @lends Sprite.prototype */{
Extends: View,
@@ -3169,30 +3227,32 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
if(properties.frames) this.addFrame(properties.frames);
},
- _frames: null, //所有帧的集合
- _frameNames: null, //带名字name的帧的集合
- _frameElapsed: 0, //当前帧持续的时间或帧数
- _firstRender: true, //标记是否是第一次渲染
+ _frames: null, //所有帧的集合 Collection of all frames
+ _frameNames: null, //带名字name的帧的集合 Collection of frames that with name
+ _frameElapsed: 0, //当前帧持续的时间或帧数 Elapsed time of current frame.
+ _firstRender: true, //标记是否是第一次渲染 Is the first render.
paused: false,
loop: true,
timeBased: false,
interval: 1,
- currentFrame: 0, //当前帧的索引
+ currentFrame: 0, //当前帧的索引 Index of current frame
/**
- * 返回精灵动画的总帧数。
- * @returns {Uint} 精灵动画的总帧数。
+ * @language=en
+ * Return the total amount of sprite animation frames.
+ * @returns {Uint} The total amount of frames.
*/
getNumFrames: function(){
return this._frames ? this._frames.length : 0;
},
/**
- * 往精灵动画序列中增加帧。
- * @param {Object} frame 要增加的精灵动画帧数据。
- * @param {Int} startIndex 开始增加帧的索引位置。若不设置,默认为在末尾添加。
- * @returns {Sprite} Sprite对象本身。
+ * @language=en
+ * Add frame into sprite.
+ * @param {Object} frame Frames to add into.
+ * @param {Int} startIndex The index to start adding frame, if is not given, add at the end of sprite.
+ * @returns {Sprite} Sprite itself.
*/
addFrame: function(frame, startIndex){
var start = startIndex != null ? startIndex : this._frames.length;
@@ -3207,10 +3267,11 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 设置精灵动画序列指定索引位置的帧。
- * @param {Object} frame 要设置的精灵动画帧数据。
- * @param {Int} index 要设置的索引位置。
- * @returns {Sprite} Sprite对象本身。
+ * @language=en
+ * Set the frame on the given index.
+ * @param {Object} frame The frame data to set on that index.
+ * @param {Int} index Index of the frame to set.
+ * @returns {Sprite} Sprite itself.
*/
setFrame: function(frame, index){
var frames = this._frames,
@@ -3226,9 +3287,10 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 获取精灵动画序列中指定的帧。
- * @param {Object} indexOrName 要获取的帧的索引位置或别名。
- * @returns {Object} 精灵帧对象。
+ * @language=en
+ * Get the frame of given parameter from sprite.
+ * @param {Object} indexOrName The index or name of the frame.
+ * @returns {Object} The sprite object.
*/
getFrame: function(indexOrName){
if(typeof indexOrName === 'number'){
@@ -3240,9 +3302,10 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 获取精灵动画序列中指定帧的索引位置。
- * @param {Object} frameValue 要获取的帧的索引位置或别名。
- * @returns {Object} 精灵帧对象。
+ * @language=en
+ * Get frame index from sprite.
+ * @param {Object} frameValue Index or name of the frame.
+ * @returns {Object} Sprite frame object.
*/
getFrameIndex: function(frameValue){
var frames = this._frames,
@@ -3265,8 +3328,9 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 播放精灵动画。
- * @returns {Sprite} Sprite对象本身。
+ * @language=en
+ * Play sprite.
+ * @returns {Sprite} The Sprite object.
*/
play: function(){
this.paused = false;
@@ -3274,8 +3338,9 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 暂停播放精灵动画。
- * @returns {Sprite} Sprite对象本身。
+ * @language=en
+ * Pause playing sprite.
+ * @returns {Sprite} The Sprite object.
*/
stop: function(){
this.paused = true;
@@ -3283,10 +3348,11 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 跳转精灵动画到指定的帧。
- * @param {Object} indexOrName 要跳转的帧的索引位置或别名。
- * @param {Boolean} pause 指示跳转后是否暂停播放。
- * @returns {Sprite} Sprite对象本身。
+ * @language=en
+ * Jump to an assigned frame.
+ * @param {Object} indexOrName Index or name of an frame to jump to.
+ * @param {Boolean} pause Does pause after jumping to the new index.
+ * @returns {Sprite} The Sprite object.
*/
goto: function(indexOrName, pause){
var total = this._frames.length,
@@ -3299,7 +3365,8 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 渲染方法。
+ * @language=en
+ * Render function.
* @private
*/
_render: function(renderer, delta){
@@ -3326,6 +3393,7 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
+ * @language=en
* @private
*/
_nextFrame: function(delta){
@@ -3361,10 +3429,11 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 设置指定帧的回调函数。即每当播放头进入指定帧时调用callback函数。若callback为空,则会删除回调函数。
- * @param {Int|String} frame 要指定的帧的索引位置或别名。
- * @param {Function} callback 指定回调函数。
- * @returns {Sprite} 精灵本身。
+ * @language=en
+ * Set a callback on an assigned frame. Every time assigned frame is played, invoke the callback function. If callback is empty, callback function will be removed.
+ * @param {Int|String} frame Index or name of the assigned frame.
+ * @param {Function} callback Callback function.
+ * @returns {Sprite} The Sprite object.
*/
setFrameCallback: function(frame, callback){
frame = this.getFrame(frame);
@@ -3373,7 +3442,8 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
},
/**
- * 精灵动画的播放头进入新帧时的回调方法。默认值为null。此方法已废弃,请使用addFrameCallback方法。
+ * @language=en
+ * Callback function on when sprite enter a new frame. default value is null. Note: this function is obsolete, use addFrameCallback funciton instead.
* @type Function
* @deprecated
*/
@@ -3381,26 +3451,24 @@ var Sprite = Class.create(/** @lends Sprite.prototype */{
});
+
return Sprite;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/DOMElement', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/Drawable'], function(Hilo, Class, View, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 使用示例:
+ * demo:
*
* var domView = new Hilo.DOMElement({
* element: Hilo.createElement('div', {
@@ -3416,11 +3484,11 @@ define('hilo/view/DOMElement', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/
* }).addTo(stage);
*
* @name DOMElement
- * @class DOMElement是dom元素的包装。
+ * @class DOMElement is a wrapper of dom element.
* @augments View
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。特殊属性有:
+ * @param {Object} properties create Objects properties. Contains all writable properties in this class. Special properties include:
*
- * - element - 要包装的dom元素。必需。
+ * - element - dom element to wrap, required!
*
* @module hilo/view/DOMElement
* @requires hilo/core/Hilo
@@ -3438,10 +3506,15 @@ var DOMElement = Class.create(/** @lends DOMElement.prototype */{
this.drawable = new Drawable();
var elem = this.drawable.domElement = properties.element || Hilo.createElement('div');
elem.id = this.id;
+
+ if(this.pointerEnabled){
+ elem.style.pointerEvents = 'visible';
+ }
},
/**
- * 覆盖渲染方法。
+ * @language=en
+ * Overwrite render method.
* @private
*/
_render: function(renderer, delta){
@@ -3454,12 +3527,13 @@ var DOMElement = Class.create(/** @lends DOMElement.prototype */{
},
/**
- * 覆盖渲染方法。
+ * @language=en
+ * Overwrite render method.
* @private
*/
render: function(renderer, delta){
- var canvas = renderer.canvas;
- if(canvas.getContext){
+ if(renderer.renderType !== 'dom'){
+ var canvas = renderer.canvas;
var elem = this.drawable.domElement, depth = this.depth,
nextElement = canvas.nextSibling, nextDepth;
if(elem.parentNode) return;
@@ -3483,38 +3557,35 @@ return DOMElement;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Graphics', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/CacheMixin'], function(Hilo, Class, View, CacheMixin){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * @class Graphics类包含一组创建矢量图形的方法。
+ * @class Graphics class contains a group of functions for creating vector graphics.
* @augments View
* @mixes CacheMixin
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties Properties parameters of the object to create. Contains all writable properties of this class.
* @module hilo/view/Graphics
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/view/View
* @requires hilo/view/CacheMixin
- * @property {Number} lineWidth 笔画的线条宽度。默认为1。只读属性。
- * @property {Number} lineAlpha 笔画的线条透明度。默认为1。只读属性。
- * @property {String} lineCap 笔画的线条端部样式。可选值有:butt、round、square等,默认为null。只读属性。
- * @property {String} lineJoin 笔画的线条连接样式。可选值有:miter、round、bevel等,默认为null。只读属性。
- * @property {Number} miterLimit 斜连线长度和线条宽度的最大比率。此属性仅当lineJoin为miter时有效。默认值为10。只读属性。
- * @property {String} strokeStyle 笔画边框的样式。默认值为'0',即黑色。只读属性。
- * @property {String} fillStyle 内容填充的样式。默认值为'0',即黑色。只读属性。
- * @property {Number} fillAlpha 内容填充的透明度。默认值为0。只读属性。
+ * @property {Number} lineWidth The thickness of lines in space units, default value is 1, readonly!
+ * @property {Number} lineAlpha The alpha value (transparency) of line, default value is 1, readonly!
+ * @property {String} lineCap The style of how every end point of line are drawn, value options: butt, round, square. default value is null, readonly!
+ * @property {String} lineJoin The joint style of two lines. value options: miter, round, bevel. default value is null, readonly!
+ * @property {Number} miterLimit The miter limit ratio in space units, works only when lineJoin value is miter. default value is 10, readonly!
+ * @property {String} strokeStyle The color or style to use for lines around shapes, default value is 0 (the black color), readonly!
+ * @property {String} fillStyle The color or style to use inside shapes, default value is 0 (the black color), readonly!
+ * @property {Number} fillAlpha The transparency of color or style inside shapes, default value is 0, readonly!
*/
var Graphics = (function(){
@@ -3544,14 +3615,15 @@ return Class.create(/** @lends Graphics.prototype */{
fillAlpha: 0,
/**
- * 指定绘制图形的线条样式。
- * @param {Number} thickness 线条的粗细值。默认为1。
- * @param {String} lineColor 线条的CSS颜色值。默认为黑色,即'0'。
- * @param {Number} lineAlpha 线条的透明度值。默认为不透明,即1。
- * @param {String} lineCap 线条的端部样式。可选值有:butt、round、square等,默认值为null。
- * @param {String} lineJoin 线条的连接样式。可选值有:miter、round、bevel等,默认值为null。
- * @param {Number} miterLimit 斜连线长度和线条宽度的最大比率。此属性仅当lineJoin为miter时有效。默认值为10。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Set the lines style for drawing shapes.
+ * @param {Number} thickness The thickness of lines, default value is 1.
+ * @param {String} lineColor The CSS color value of lines, default value is 0 (the black color).
+ * @param {Number} lineAlpha The transparency of lines, default value is 1 (fully opaque).
+ * @param {String} lineCap The style of how every end point of line are drawn, value options: butt, round, square. default value is null.
+ * @param {String} lineJoin The joint style of two lines. value options: miter, round, bevel. default value is null.
+ * @param {Number} miterLimit The miter limit ratio in space units, works only when lineJoin value is miter. default value is 10.
+ * @returns {Graphics} The Graphics Object.
*/
lineStyle: function(thickness, lineColor, lineAlpha, lineCap, lineJoin, miterLimit){
var me = this, addAction = me._addAction;
@@ -3567,10 +3639,11 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 指定绘制图形的填充样式和透明度。
- * @param {String} fill 填充样式。可以是color、gradient或pattern。
- * @param {Number} alpha 透明度。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Set how to fill shapes and the transparency.
+ * @param {String} fill Filling style. this can be color, gradient or pattern.
+ * @param {Number} alpha Transparency.
+ * @returns {Graphics} The Graphics Object.
*/
beginFill: function(fill, alpha){
var me = this, addAction = me._addAction;
@@ -3582,8 +3655,9 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 应用并结束笔画的绘制和图形样式的填充。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Apply and end lines-drawing and shapes-filling.
+ * @returns {Graphics} The Graphics Object.
*/
endFill: function(){
var me = this, addAction = me._addAction;
@@ -3595,14 +3669,15 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 指定绘制图形的线性渐变填充样式。
- * @param {Number} x0 渐变的起始点的x轴坐标。
- * @param {Number} y0 渐变的起始点的y轴坐标。
- * @param {Number} x1 渐变的结束点的x轴坐标。
- * @param {Number} y1 渐变的结束点的y轴坐标。
- * @param {Array} colors 渐变中使用的CSS颜色值数组。
- * @param {Array} ratois 渐变中开始与结束之间的位置数组。需与colors数组里的颜色值一一对应,介于0.0与1.0之间的值。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Set linear gradient filling style to draw shapes.
+ * @param {Number} x0 The x-coordinate value of the linear gradient start point.
+ * @param {Number} y0 The y-coordinate value of the linear gradient start point.
+ * @param {Number} x1 The x-coordinate value of the linear gradient end point.
+ * @param {Number} y1 The y-coordinate value of the linear gradient end point.
+ * @param {Array} colors An array of CSS colors used in the linear gradient.
+ * @param {Array} ratios An array of position between start point and end point, should be one-to-one to colors in the colors array. each value range between 0.0 to 1.0.
+ * @returns {Graphics} The Graphics Object.
*/
beginLinearGradientFill: function(x0, y0, x1, y1, colors, ratios){
var me = this, gradient = helpContext.createLinearGradient(x0, y0, x1, y1);
@@ -3615,16 +3690,17 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 指定绘制图形的放射性渐变填充样式。
- * @param {Number} x0 渐变的起始圆的x轴坐标。
- * @param {Number} y0 渐变的起始圆的y轴坐标。
- * @param {Number} r0 渐变的起始圆的半径。
- * @param {Number} x1 渐变的结束圆的x轴坐标。
- * @param {Number} y1 渐变的结束圆的y轴坐标。
- * @param {Number} r1 渐变的结束圆的半径。
- * @param {Array} colors 渐变中使用的CSS颜色值数组。
- * @param {Array} ratois 渐变中开始与结束之间的位置数组。需与colors数组里的颜色值一一对应,介于0.0与1.0之间的值。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Set radial gradient filling style to draw shapes.
+ * @param {Number} x0 The x-coordinate value of the radial gradient start circle.
+ * @param {Number} y0 The y-coordinate value of the radial gradient start circle.
+ * @param {Number} r0 The diameter of the radial gradient start circle.
+ * @param {Number} x1 The x-coordinate value of the radial gradient end circle.
+ * @param {Number} y1 The y-coordinate value of the radial gradient end circle.
+ * @param {Number} r1 The radius of the radial gradient end circle.
+ * @param {Array} colors An array of CSS colors used in the radial gradient.
+ * @param {Array} ratios An array of position between start circle and end circle, should be one-to-one to colors in the colors array. each value range between 0.0 to 1.0.
+ * @returns {Graphics} The Graphics Object.
*/
beginRadialGradientFill: function(x0, y0, r0, x1, y1, r1, colors, ratios){
var me = this, gradient = helpContext.createRadialGradient(x0, y0, r0, x1, y1, r1);
@@ -3637,10 +3713,11 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 开始一个位图填充样式。
- * @param {HTMLImageElement} image 指定填充的Image对象。
- * @param {String} repetition 指定填充的重复设置参数。它可以是以下任意一个值:repeat, repeat-x, repeat-y, no-repeat。默认为''。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Begin an image filling pattern.
+ * @param {HTMLImageElement} image The Image to fill.
+ * @param {String} repetition The fill repetition style, can be one of valus:repeat, repeat-x, repeat-y, no-repeat. default valus is ''.
+ * @returns {Graphics} The Graphics Object.
*/
beginBitmapFill: function(image, repetition){
var me = this, pattern = helpContext.createPattern(image, repetition || '');
@@ -3649,90 +3726,98 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 开始一个新的路径。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Begin a new path.
+ * @returns {Graphics} The Graphics Object.
*/
beginPath: function(){
return this._addAction(['beginPath']);
},
/**
- * 关闭当前的路径。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Close current path.
+ * @returns {Graphics} The Graphics Object.
*/
closePath: function(){
return this._addAction(['closePath']);
},
/**
- * 将当前绘制位置移动到点(x, y)。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Move current drawing point to a new point on coordinate values (x, y).
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @returns {Graphics} The Graphics Object.
*/
moveTo: function(x, y){
return this._addAction(['moveTo', x, y]);
},
/**
- * 绘制从当前位置开始到点(x, y)结束的直线。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a line from current point to the point on the coordinate value (x, y).
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @returns {Graphics} The Graphics Object.
*/
lineTo: function(x, y){
return this._addAction(['lineTo', x, y]);
},
/**
- * 绘制从当前位置开始到点(x, y)结束的二次曲线。
- * @param {Number} cpx 控制点cp的x轴坐标。
- * @param {Number} cpy 控制点cp的y轴坐标。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a quadratic Bézier curve from current point to the point on coordinate (x, y).
+ * @param {Number} cpx The x-coordinate value of the Bézier curve control point cp.
+ * @param {Number} cpy The y-coordinate value of the Bézier curve control point cp.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @returns {Graphics} The Graphics Object.
*/
quadraticCurveTo: function(cpx, cpy, x, y){
return this._addAction(['quadraticCurveTo', cpx, cpy, x, y]);
},
/**
- * 绘制从当前位置开始到点(x, y)结束的贝塞尔曲线。
- * @param {Number} cp1x 控制点cp1的x轴坐标。
- * @param {Number} cp1y 控制点cp1的y轴坐标。
- * @param {Number} cp2x 控制点cp2的x轴坐标。
- * @param {Number} cp2y 控制点cp2的y轴坐标。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a Bézier curve from current point to the point on coordinate (x, y).
+ * @param {Number} cp1x The x-coordinate value of the Bézier curve control point cp1.
+ * @param {Number} cp1y The y-coordinate value of the Bézier curve control point cp1.
+ * @param {Number} cp2x The x-coordinate value of the Bézier curve control point cp2.
+ * @param {Number} cp2y The y-coordinate value of the Bézier curve control point cp2.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @returns {Graphics} The Graphics Object.
*/
bezierCurveTo: function(cp1x, cp1y, cp2x, cp2y, x, y){
return this._addAction(['bezierCurveTo', cp1x, cp1y, cp2x, cp2y, x, y]);
},
/**
- * 绘制一个矩形。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @param {Number} width 矩形的宽度。
- * @param {Number} height 矩形的高度。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a rectangle.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @param {Number} width The width of the rectangle.
+ * @param {Number} height The height of the rectangle.
+ * @returns {Graphics} The Graphics Object.
*/
drawRect: function(x, y, width, height){
return this._addAction(['rect', x, y, width, height]);
},
/**
- * 绘制一个复杂的圆角矩形。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @param {Number} width 圆角矩形的宽度。
- * @param {Number} height 圆角矩形的高度。
- * @param {Number} cornerTL 圆角矩形的左上圆角大小。
- * @param {Number} cornerTR 圆角矩形的右上圆角大小。
- * @param {Number} cornerBR 圆角矩形的右下圆角大小。
- * @param {Number} cornerBL 圆角矩形的左下圆角大小。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a complex rounded rectangle.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @param {Number} width The width of rounded rectangle.
+ * @param {Number} height The height of rounded rectangle.
+ * @param {Number} cornerTL The size of the rounded corner on the top-left of the rounded rectangle.
+ * @param {Number} cornerTR The size of the rounded corner on the top-right of the rounded rectangle.
+ * @param {Number} cornerBR The size of the rounded corner on the bottom-left of the rounded rectangle.
+ * @param {Number} cornerBL The size of the rounded corner on the bottom-right of the rounded rectangle.
+ * @returns {Graphics} The Graphics Object.
*/
drawRoundRectComplex: function(x, y, width, height, cornerTL, cornerTR, cornerBR, cornerBL){
var me = this, addAction = me._addAction;
@@ -3749,36 +3834,39 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 绘制一个圆角矩形。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @param {Number} width 圆角矩形的宽度。
- * @param {Number} height 圆角矩形的高度。
- * @param {Number} cornerSize 圆角矩形的圆角大小。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a rounded rectangle.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @param {Number} width The width of rounded rectangle.
+ * @param {Number} height The height of rounded rectangle.
+ * @param {Number} cornerSize The size of all rounded corners.
+ * @returns {Graphics} The Graphics Object.
*/
drawRoundRect: function(x, y, width, height, cornerSize){
return this.drawRoundRectComplex(x, y, width, height, cornerSize, cornerSize, cornerSize, cornerSize);
},
/**
- * 绘制一个圆。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @param {Number} radius 圆的半径。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw a circle.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @param {Number} radius The radius of the circle.
+ * @returns {Graphics} The Graphics Object.
*/
drawCircle: function(x, y, radius){
return this._addAction(['arc', x + radius, y + radius, radius, 0, Math.PI * 2, 0]);
},
/**
- * 绘制一个椭圆。
- * @param {Number} x x轴坐标。
- * @param {Number} y y轴坐标。
- * @param {Number} width 椭圆的宽度。
- * @param {Number} height 椭圆的高度。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Draw an ellipse.
+ * @param {Number} x The x-coordinate value.
+ * @param {Number} y The y-coordinate value.
+ * @param {Number} width The width of the ellipse.
+ * @param {Number} height The height of the ellipse.
+ * @returns {Graphics} The Graphics Object.
*/
drawEllipse: function(x, y, width, height){
var me = this;
@@ -3798,13 +3886,14 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 根据参数指定的SVG数据绘制一条路径。
- * 代码示例:
+ * @language=en
+ * Draw a path from the SVG data given by parameters.
+ * Demo:
* var path = 'M250 150 L150 350 L350 350 Z';
* var shape = new Hilo.Graphics({width:500, height:500});
* shape.drawSVGPath(path).beginFill('#0ff').endFill();
- * @param {String} pathData 要绘制的SVG路径数据。
- * @returns {Graphics} Graphics对象本身。
+ * @param {String} pathData The SVG path data to draw.
+ * @returns {Graphics} The Graphics Object.
*/
drawSVGPath: function(pathData){
var me = this, addAction = me._addAction,
@@ -3834,7 +3923,8 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 执行全部绘制动作。内部私有方法。
+ * @language=en
+ * Apply all draw actions. private function.
* @private
*/
_draw: function(context){
@@ -3852,7 +3942,8 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 重写渲染实现。
+ * @language=en
+ * Overwrite render function.
* @private
*/
render: function(renderer, delta){
@@ -3866,8 +3957,9 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 清除所有绘制动作并复原所有初始状态。
- * @returns {Graphics} Graphics对象本身。
+ * @language=en
+ * Clear all draw actions and reset to the initial state.
+ * @returns {Graphics} The Graphics Object.
*/
clear: function(){
var me = this;
@@ -3889,7 +3981,8 @@ return Class.create(/** @lends Graphics.prototype */{
},
/**
- * 添加一个绘制动作。内部私有方法。
+ * @language=en
+ * Add a draw action, this is a private function.
* @private
*/
_addAction: function(action){
@@ -3902,43 +3995,41 @@ return Class.create(/** @lends Graphics.prototype */{
})();
+
return Graphics;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Text', ['hilo/core/Class', 'hilo/core/Hilo', 'hilo/view/View', 'hilo/view/CacheMixin'], function(Class, Hilo, View, CacheMixin){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * @class Text类提供简单的文字显示功能。复杂的文本功能可以使用DOMElement。
+ * @class Text class provide basic text-display function, use DOMElement for complex text-display.
* @augments View
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties Properties parameters for the object. Includes all writable properties.
* @module hilo/view/Text
* @requires hilo/core/Class
* @requires hilo/core/Hilo
* @requires hilo/view/View
* @requires hilo/view/CacheMixin
- * @property {String} text 指定要显示的文本内容。
- * @property {String} color 指定使用的字体颜色。
- * @property {String} textAlign 指定文本的对齐方式。可以是以下任意一个值:'start', 'end', 'left', 'right', and 'center'。
- * @property {String} textVAlign 指定文本的垂直对齐方式。可以是以下任意一个值:'top', 'middle', 'bottom'。
- * @property {Boolean} outline 指定文本是绘制边框还是填充。
- * @property {Number} lineSpacing 指定文本的行距。单位为像素。默认值为0。
- * @property {Number} maxWidth 指定文本的最大宽度。默认值为200。
- * @property {String} font 文本的字体CSS样式。只读属性。设置字体样式请用setFont方法。
- * @property {Number} textWidth 指示文本内容的宽度,只读属性。仅在canvas模式下有效。
- * @property {Number} textHeight 指示文本内容的高度,只读属性。仅在canvas模式下有效。
+ * @property {String} text Text to display.
+ * @property {String} color Color of the text.
+ * @property {String} textAlign Horizontal alignment way of the text. May be one of the following value:'start', 'end', 'left', 'right', and 'center'。
+ * @property {String} textVAlign Vertical alignment way of the text. May be one of the following value:'top', 'middle', 'bottom'。
+ * @property {Boolean} outline Draw the outline of the text or fill the text.
+ * @property {Number} lineSpacing The spacing between lines. Measured in px, default value is 0.
+ * @property {Number} maxWidth The max length of the text, default value is 200.
+ * @property {String} font Text's CSS font style, readonly! Use setFont function to set text font.
+ * @property {Number} textWidth Width of the text, readonly! Works only on canvas mode.
+ * @property {Number} textHeight Height of the text, readonly! Works only on canvas mode.
*/
var Text = Class.create(/** @lends Text.prototype */{
Extends: View,
@@ -3965,9 +4056,10 @@ var Text = Class.create(/** @lends Text.prototype */{
textHeight: 0, //read-only
/**
- * 设置文本的字体CSS样式。
- * @param {String} font 要设置的字体CSS样式。
- * @returns {Text} Text对象本身。链式调用支持。
+ * @language=en
+ * Set text CSS font style.
+ * @param {String} font Text CSS font style to set.
+ * @returns {Text} the Text object, chained call supported.
*/
setFont: function(font){
var me = this;
@@ -3980,7 +4072,8 @@ var Text = Class.create(/** @lends Text.prototype */{
},
/**
- * 覆盖渲染方法。
+ * @language=en
+ * Overwrite render function.
* @private
*/
render: function(renderer, delta){
@@ -4005,14 +4098,15 @@ var Text = Class.create(/** @lends Text.prototype */{
renderer.draw(this);
}
else{
- //TODO:自动更新cache
+ //TODO:自动更新cache TODO:auto update cache
me.cache();
renderer.draw(me);
}
},
/**
- * 在指定的渲染上下文上绘制文本。
+ * @language=en
+ * Draw text under the assigned render context.
* @private
*/
_draw: function(context){
@@ -4028,7 +4122,7 @@ var Text = Class.create(/** @lends Text.prototype */{
var lines = text.split(/\r\n|\r|\n|
/);
var width = 0, height = 0;
var lineHeight = me._fontHeight + me.lineSpacing;
- var i, line, w;
+ var i, line, w, len, wlen;
var drawLines = [];
for(i = 0, len = lines.length; i < len; i++){
@@ -4104,7 +4198,8 @@ var Text = Class.create(/** @lends Text.prototype */{
},
/**
- * 在指定的渲染上下文上绘制一行文本。
+ * @language=en
+ * Draw a line of text under the assigned render context.
* @private
*/
_drawTextLine: function(context, text, y){
@@ -4126,9 +4221,10 @@ var Text = Class.create(/** @lends Text.prototype */{
Statics: /** @lends Text */{
/**
- * 测算指定字体样式的行高。
- * @param {String} font 指定要测算的字体样式。
- * @return {Number} 返回指定字体的行高。
+ * @language=en
+ * Measure the line height of the assigned text font style.
+ * @param {String} font Font style to measure.
+ * @return {Number} Return line height of the assigned font style.
*/
measureFontHeight: function(font){
var docElement = document.documentElement, fontHeight;
@@ -4143,37 +4239,35 @@ var Text = Class.create(/** @lends Text.prototype */{
});
+
return Text;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/BitmapText', ['hilo/core/Class', 'hilo/core/Hilo', 'hilo/view/Container', 'hilo/view/Bitmap'], function(Class, Hilo, Container, Bitmap){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * @class BitmapText类提供使用位图文本的功能。当前仅支持单行文本。
+ * @class BitmapText support bitmap text function ,but only support single-line text
* @augments Container
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @param {Object} properties the options of create Instance.It can contains all writable property
* @module hilo/view/BitmapText
* @requires hilo/core/Class
* @requires hilo/core/Hilo
* @requires hilo/view/Container
* @requires hilo/view/Bitmap
- * @property {Object} glyphs 位图字体的字形集合。格式为:{letter:{image:img, rect:[0,0,100,100]}}。
- * @property {Number} letterSpacing 字距,即字符间的间隔。默认值为0。
- * @property {String} text 位图文本的文本内容。只读属性。设置文本请使用setFont方法。
- * @property {String} textAlign 文本对齐方式,值为left、center、right, 默认left。只读属性。设置文本请使用setTextAlign方法。
+ * @property {Object} glyphs font glyph set of bitmap. format:{letter:{image:img, rect:[0,0,100,100]}}
+ * @property {Number} letterSpacing spacing of letter. default:0
+ * @property {String} text content of bitmap text. Not writable,set this value by 'setFont'
+ * @property {String} textAlign property values:left、center、right, default:left,Not writable,set this property by 'setTextAlign'
*/
var BitmapText = Class.create(/** @lends BitmapText.prototype */{
Extends: Container,
@@ -4197,9 +4291,10 @@ var BitmapText = Class.create(/** @lends BitmapText.prototype */{
textAlign:'left',
/**
- * 设置位图文本的文本内容。
- * @param {String} text 要设置的文本内容。
- * @returns {BitmapText} BitmapText对象本身。链式调用支持。
+ * @language=en
+ * set the content of bitmap text
+ * @param {String} text content
+ * @returns {BitmapText} BitmapText Instance,support chained calls
*/
setText: function(text){
var me = this, str = text.toString(), len = str.length;
@@ -4255,9 +4350,10 @@ var BitmapText = Class.create(/** @lends BitmapText.prototype */{
},
/**
- * 设置位图文本的对齐方式。
- * @param textAlign 文本对齐方式,值为left、center、right
- * @returns {BitmapText} BitmapText对象本身。链式调用支持。
+ * @language=en
+ * set the textAlign of text。
+ * @param textAlign value of textAlign:left、center、right
+ * @returns {BitmapText} itmapText Instance,support chained calls
*/
setTextAlign:function(textAlign){
this.textAlign = textAlign||this.textAlign;
@@ -4277,9 +4373,10 @@ var BitmapText = Class.create(/** @lends BitmapText.prototype */{
},
/**
- * 返回能否使用当前指定的字体显示提供的字符串。
- * @param {String} str 要检测的字符串。
- * @returns {Boolean} 是否能使用指定字体。
+ * @language=en
+ * detect whether can display the string by the currently assigned font provided
+ * @param {String} str to detect string
+ * @returns {Boolean} whether can display the string
*/
hasGlyphs: function(str){
var glyphs = this.glyphs;
@@ -4295,12 +4392,13 @@ var BitmapText = Class.create(/** @lends BitmapText.prototype */{
Statics:/** @lends BitmapText */{
_pool:[],
/**
- * 简易方式生成字形集合。
+ * @language=en
+ * easy way to generate a collection of glyphs
* @static
- * @param {String} text 字符文本。
- * @param {Image} image 字符图片。
- * @param {Number} col 列数 默认和文本字数一样
- * @param {Number} row 行数 默认1行
+ * @param {String} text character text.
+ * @param {Image} image character image.
+ * @param {Number} col default:the length of string
+ * @param {Number} row default:1
* @returns {BitmapText} BitmapText对象本身。链式调用支持。
*/
createGlyphs:function(text, image, col, row){
@@ -4323,26 +4421,24 @@ var BitmapText = Class.create(/** @lends BitmapText.prototype */{
});
+
return BitmapText;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/Drawable'], function(Hilo, Class, View, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 示例:
+ * demo:
*
* var btn = new Hilo.Button({
* image: buttonImage,
@@ -4352,24 +4448,24 @@ define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
* disabledState: {rect:[192, 0, 64, 64]}
* });
*
- * @class Button类表示简单按钮类。它有弹起、经过、按下和不可用等四种状态。
+ * @class Button class is a simple button class, contains four kinds of state: 'up', 'over', 'down', 'disabled'
* @augments View
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。此外还包括:
+ * @param {Object} properties create object properties. Contains all writable properties. Also contains:
*
- * - image - 按钮图片所在的image对象。
+ * - image - the image element that button image is in
*
* @module hilo/view/Button
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/view/View
* @requires hilo/view/Drawable
- * @property {Object} upState 按钮弹起状态的属性或其drawable的属性的集合。
- * @property {Object} overState 按钮经过状态的属性或其drawable的属性的集合。
- * @property {Object} downState 按钮按下状态的属性或其drawable的属性的集合。
- * @property {Object} disabledState 按钮不可用状态的属性或其drawable的属性的集合。
- * @property {String} state 按钮的状态名称。它是 Button.UP|OVER|DOWN|DISABLED 之一。 只读属性。
- * @property {Boolean} enabled 指示按钮是否可用。默认为true。只读属性。
- * @property {Boolean} useHandCursor 当设置为true时,表示指针滑过按钮上方时是否显示手形光标。默认为true。
+ * @property {Object} upState The property of button 'up' state or collections of its drawable properties.
+ * @property {Object} overState The property of button 'over' state or collections of its drawable properties.
+ * @property {Object} downState The property of button 'down' state or collections of its drawable properties.
+ * @property {Object} disabledState The property of button 'disabled' state or collections of its drawable properties.
+ * @property {String} state the state name of button, could be one of Button.UP|OVER|DOWN|DISABLED, readonly!
+ * @property {Boolean} enabled Is button enabled. default value is true, readonly!
+ * @property {Boolean} useHandCursor If true, cursor over the button will become a pointer cursor, default value is true.
*/
var Button = Class.create(/** @lends Button.prototype */{
Extends: View,
@@ -4392,9 +4488,10 @@ define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
useHandCursor: true,
/**
- * 设置按钮是否可用。
- * @param {Boolean} enabled 指示按钮是否可用。
- * @returns {Button} 按钮本身。
+ * @language=en
+ * Set whether the button is enabled.
+ * @param {Boolean} enabled Show whether the button is enabled.
+ * @returns {Button} Return the button itself.
*/
setEnabled: function(enabled){
if(this.enabled != enabled){
@@ -4408,9 +4505,10 @@ define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
},
/**
- * 设置按钮的状态。此方法由Button内部调用,一般无需使用此方法。
- * @param {String} state 按钮的新的状态。
- * @returns {Button} 按钮本身。
+ * @language=en
+ * Set the state of the button. Invoke inside the Button and may not be used.
+ * @param {String} state New state of the button.
+ * @returns {Button} Return the button itself.
*/
setState: function(state){
if(this.state !== state){
@@ -4443,6 +4541,7 @@ define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
},
/**
+ * @language=en
* overwrite
* @private
*/
@@ -4475,22 +4574,26 @@ define('hilo/view/Button', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View
Statics: /** @lends Button */ {
/**
- * 按钮弹起状态的常量值,即:'up'。
+ * @language=en
+ * Statics value of Button's 'up' state.
* @type String
*/
UP: 'up',
/**
- * 按钮经过状态的常量值,即:'over'。
+ * @language=en
+ * Statics value of Button's 'over' state.
* @type String
*/
OVER: 'over',
/**
- * 按钮按下状态的常量值,即:'down'。
+ * @language=en
+ * Statics value of Button's 'down' state.
* @type String
*/
DOWN: 'down',
/**
- * 按钮不可用状态的常量值,即:'disabled'。
+ * @language=en
+ * Statics value of Button's 'disabled' state.
* @type String
*/
DISABLED: 'disabled'
@@ -4501,19 +4604,16 @@ return Button;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/util/TextureAtlas', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
* @class TextureAtlas纹理集是将许多小的纹理图片整合到一起的一张大图。这个类可根据一个纹理集数据读取纹理小图、精灵动画等。
* @param {Object} atlasData 纹理集数据。它可包含如下数据:
*
@@ -4549,6 +4649,7 @@ return Class.create(/** @lends TextureAtlas.prototype */{
_sprites: null,
/**
+ * @language=en
* 获取指定索引位置index的帧数据。
* @param {Int} index 要获取帧的索引位置。
* @returns {Object} 帧数据。
@@ -4559,6 +4660,7 @@ return Class.create(/** @lends TextureAtlas.prototype */{
},
/**
+ * @language=en
* 获取指定id的精灵数据。
* @param {String} id 要获取精灵的id。
* @returns {Object} 精灵数据。
@@ -4570,17 +4672,18 @@ return Class.create(/** @lends TextureAtlas.prototype */{
Statics: /** @lends TextureAtlas */ {
/**
- * 创建精灵帧数据的快捷方法。
- * @param {String|Array} name 动画名称|一组动画数据
- * @param {String} frames 帧数据 eg:"0-5"代表第0到第5帧
- * @param {Number} w 每帧的宽
- * @param {Number} h 每帧的高
- * @param {Bollean} loop 是否循环
- * @param {Number} duration 每帧间隔 默认单位帧, 如果sprite的timeBased为true则单位是毫秒,默认一帧
+ * @language=en
+ * Shorthand method to create spirte frames
+ * @param {String|Array} name Name of one animation|a group of animation
+ * @param {String} frames Frames message, eg:"0-5" means frame 0 to frame 5.
+ * @param {Number} w The width of each frame.
+ * @param {Number} h The height of each frame.
+ * @param {Bollean} loop Is play in loop.
+ * @param {Number} duration The time between each frame. default value is 1 (Frame), but if timeBased is true, default value will be duration(milli-second).
* @example
- * //方式一 单个动画
+ * //demo1 make one animation
* createSpriteFrames("walk", "0-5,8,9", meImg, 55, 88, true, 1);
- * //方式二 多组动画
+ * //demo2 make a group of animation
* createSpriteFrames([
* ["walk", "0-5,8,9", meImg, 55, 88, true, 1],
* ["jump", "0-5", meImg, 55, 88, false, 1]
@@ -4634,7 +4737,8 @@ return Class.create(/** @lends TextureAtlas.prototype */{
});
/**
- * 解析纹理集帧数据。
+ * @language=en
+ * Parse texture frames
* @private
*/
function parseTextureFrames(atlasData){
@@ -4669,7 +4773,8 @@ function parseTextureFrames(atlasData){
}
/**
- * 解析精灵数据。
+ * @language=en
+ * Parse texture sprites
* @private
*/
function parseTextureSprites(atlasData, frames){
@@ -4733,21 +4838,18 @@ return TextureAtlas;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/util/Ticker', ['hilo/core/Class', 'hilo/core/Hilo'], function(Class, Hilo){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Ticker是一个定时器类。它可以按指定帧率重复运行,从而按计划执行代码。
- * @param {Number} fps 指定定时器的运行帧率。
+ * @language=en
+ * @class Ticker is a Timer. It can run the code at specified framerate.
+ * @param {Number} fps The fps of ticker.
* @module hilo/util/Ticker
* @requires hilo/core/Class
* @requires hilo/core/Hilo
@@ -4770,8 +4872,9 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
_measuredFPS: 0,
/**
- * 启动定时器。
- * @param {Boolean} userRAF 是否使用requestAnimationFrame,默认为false。
+ * @language=en
+ * Start the ticker.
+ * @param {Boolean} userRAF Whether or not use requestAnimationFrame, default is not.
*/
start: function(useRAF){
if(this._intervalId) return;
@@ -4800,7 +4903,8 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
},
/**
- * 停止定时器。
+ * @language=en
+ * Stop the ticker.
*/
stop: function(){
clearTimeout(this._intervalId);
@@ -4809,14 +4913,16 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
},
/**
- * 暂停定时器。
+ * @language=en
+ * Pause the ticker.
*/
pause: function(){
this._paused = true;
},
/**
- * 恢复定时器。
+ * @language=en
+ * Resume the ticker.
*/
resume: function(){
this._paused = false;
@@ -4847,15 +4953,17 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
},
/**
- * 获得测定的运行时帧率。
+ * @language=en
+ * Get the fps.
*/
getMeasuredFPS: function(){
return this._measuredFPS;
},
/**
- * 添加定时器对象。定时器对象必须实现 tick 方法。
- * @param {Object} tickObject 要添加的定时器对象。此对象必须包含 tick 方法。
+ * @language=en
+ * Add tickObject. The tickObject must implement the tick method.
+ * @param {Object} tickObject The tickObject to add.It must implement the tick method.
*/
addTick: function(tickObject){
if(!tickObject || typeof(tickObject.tick) != 'function'){
@@ -4865,8 +4973,9 @@ var Ticker = Class.create(/** @lends Ticker.prototype */{
},
/**
- * 删除定时器对象。
- * @param {Object} tickObject 要删除的定时器对象。
+ * @language=en
+ * Remove the tickObject
+ * @param {Object} tickObject The tickObject to remove.
*/
removeTick: function(tickObject){
var tickers = this._tickers,
@@ -4882,17 +4991,13 @@ return Ticker;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define(function(){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
var arrayProto = Array.prototype,
slice = arrayProto.slice;
@@ -4930,28 +5035,25 @@ fnProto.bind = fnProto.bind || function(thisArg){
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/util/drag', ['hilo/core/Class', 'hilo/core/Hilo'], function(Class, Hilo){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 使用示例:
+ * example:
*
* var bmp = new Bitmap({image:img});
* Hilo.copy(bmp, Hilo.drag);
* bmp.startDrag([0, 0, 550, 400]);
*
- * @class drag是一个包含拖拽功能的mixin。可以通过 Class.mix(view, drag)或Hilo.copy(view, drag)来为view增加拖拽功能。
+ * @class drag A mixin that contains drag method.You can mix drag method to the visual target by use Class.mix(target, drag) or Hilo.copy(target, drag).
* @mixin
* @static
* @module hilo/util/drag
@@ -4960,8 +5062,9 @@ define('hilo/util/drag', ['hilo/core/Class', 'hilo/core/Hilo'], function(Class,
*/
var drag = {
/**
- * 开始拖拽
- * @param {Array} bounds 拖拽范围,基于父容器坐标系,[x, y, width, height], 默认无限制
+ * @language=en
+ * start drag.
+ * @param {Array} bounds The bounds area that the view can move, relative to the coordinates of the view's parent, [x, y, width, height], default is no limit.
*/
startDrag:function(bounds){
var that = this;
@@ -5032,7 +5135,8 @@ var drag = {
that.stopDrag = stopDrag;
},
/**
- * 停止拖拽
+ * @language=en
+ * stop drag.
*/
stopDrag:function(){
@@ -5043,24 +5147,21 @@ return drag;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/tween/Tween', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 使用示例:
+ * Demo:
*
- * ticker.addTick(Hilo.Tween);//需要把Tween加到ticker里才能使用
+ * ticker.addTick(Hilo.Tween);//Tween works after being added to ticker
*
* var view = new View({x:5, y:10});
* Hilo.Tween.to(view, {
@@ -5076,26 +5177,26 @@ define('hilo/tween/Tween', ['hilo/core/Class'], function(Class){
* }
* });
*
- * @class Tween类提供缓动功能。
- * @param {Object} target 缓动对象。
- * @param {Object} fromProps 对象缓动的起始属性集合。
- * @param {Object} toProps 对象缓动的目标属性集合。
- * @param {Object} params 缓动参数。可包含Tween类所有可写属性。
+ * @class Tween class makes tweening (easing, slow motion).
+ * @param {Object} target Tween target object.
+ * @param {Object} fromProps Beginning properties of target tweening object.
+ * @param {Object} toProps Ending properties of target tweening object.
+ * @param {Object} params Tweening parameters, include all writable Tween class properties.
* @module hilo/tween/Tween
* @requires hilo/core/Class
- * @property {Object} target 缓动目标。只读属性。
- * @property {Int} duration 缓动总时长。单位毫秒。
- * @property {Int} delay 缓动延迟时间。单位毫秒。
- * @property {Boolean} paused 缓动是否暂停。默认为false。
- * @property {Boolean} loop 缓动是否循环。默认为false。
- * @property {Boolean} reverse 缓动是否反转播放。默认为false。
- * @property {Int} repeat 缓动重复的次数。默认为0。
- * @property {Int} repeatDelay 缓动重复的延迟时长。单位为毫秒。
- * @property {Function} ease 缓动变化函数。默认为null。
- * @property {Int} time 缓动已进行的时长。单位毫秒。只读属性。
- * @property {Function} onStart 缓动开始回调函数。它接受1个参数:tween。默认值为null。
- * @property {Function} onUpdate 缓动更新回调函数。它接受2个参数:ratio和tween。默认值为null。
- * @property {Function} onComplete 缓动结束回调函数。它接受1个参数:tween。默认值为null。
+ * @property {Object} target Tween target object, readonly!
+ * @property {Int} duration Tweening duration, measure in ms.
+ * @property {Int} delay Tweenning delay time, measure in ms.
+ * @property {Boolean} paused Is tweening paused, default value is false.
+ * @property {Boolean} loop Does tweening loop, default value is false.
+ * @property {Boolean} reverse Does tweening reverse, default value is false.
+ * @property {Int} repeat Repeat times of tweening, default value is 0.
+ * @property {Int} repeatDelay Delay time of repeating tweening, measure in ms.
+ * @property {Function} ease Tweening transform function, default value is null.
+ * @property {Int} time Time that tweening taken, measure in ms, readonly!
+ * @property {Function} onStart Function invoked on the beginning of tweening. Require 1 parameter: tween. default value is null.
+ * @property {Function} onUpdate Function invoked on tweening update. Require 2 parameters: ratio, tween. default value is null.
+ * @property {Function} onComplete Function invoked on the end of tweening. Require 1 parameter: tween. default value is null.
*/
var Tween = (function(){
@@ -5148,10 +5249,11 @@ return Class.create(/** @lends Tween.prototype */{
onComplete: null,
/**
- * 设置缓动对象的初始和目标属性。
- * @param {Object} fromProps 缓动对象的初始属性。
- * @param {Object} toProps 缓动对象的目标属性。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Set beginning properties and ending properties of tweening object.
+ * @param {Object} fromProps Beginning properties of target tweening object.
+ * @param {Object} toProps Ending properties of target tweening object.
+ * @returns {Tween} Current Tween, for chain calls.
*/
setProps: function(fromProps, toProps){
var me = this, target = me.target,
@@ -5169,8 +5271,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 启动缓动动画的播放。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Starting the tweening.
+ * @returns {Tween} Current Tween, for chain calls.
*/
start: function(){
var me = this;
@@ -5183,8 +5286,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 停止缓动动画的播放。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Stop the tweening.
+ * @returns {Tween} Current Tween, for chain calls.
*/
stop: function(){
Tween.remove(this);
@@ -5192,8 +5296,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 暂停缓动动画的播放。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Pause the tweening.
+ * @returns {Tween} Current Tween, for chain calls.
*/
pause: function(){
var me = this;
@@ -5203,8 +5308,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 恢复缓动动画的播放。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Continue to play the tweening.
+ * @returns {Tween} Current Tween, for chain calls.
*/
resume: function(){
var me = this;
@@ -5215,10 +5321,11 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 跳转Tween到指定的时间。
- * @param {Number} time 指定要跳转的时间。取值范围为:0 - duraion。
- * @param {Boolean} pause 是否暂停。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Tween jumps to some point.
+ * @param {Number} time The time to jump to, range from 0 to duration.
+ * @param {Boolean} pause Is paused.
+ * @returns {Tween} Current Tween, for chain calls.
*/
seek: function(time, pause){
var me = this, current = now();
@@ -5232,9 +5339,10 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 连接下一个Tween变换。其开始时间根据delay值不同而不同。当delay值为字符串且以'+'或'-'开始时,Tween的开始时间从当前变换结束点计算,否则以当前变换起始点计算。
- * @param {Tween} tween 要连接的Tween变换。
- * @returns {Tween} Tween变换本身。可用于链式调用。
+ * @language=en
+ * Link next Tween. The beginning time of next Tween depends on the delay value. If delay is a string that begins with '+' or '-', next Tween will begin at (delay) ms after or before the current tween is ended. If delay is out of previous situation, next Tween will begin at (delay) ms after the beginning point of current Tween.
+ * @param {Tween} tween Tween to link.
+ * @returns {Tween} Current Tween, for chain calls.
*/
link: function(tween){
var me = this, delay = tween.delay, startTime = me._startTime;
@@ -5252,7 +5360,8 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * Tween类的内部渲染方法。
+ * @language=en
+ * Private render method inside Tween class.
* @private
*/
_render: function(ratio){
@@ -5261,7 +5370,8 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * Tween类的内部更新方法。
+ * @language=en
+ * Private update method inside Tween class.
* @private
*/
_update: function(time, forceUpdate){
@@ -5338,12 +5448,14 @@ return Class.create(/** @lends Tween.prototype */{
Statics: /** @lends Tween */ {
/**
+ * @language=en
* @private
*/
_tweens: [],
/**
- * 更新所有Tween实例。
+ * @language=en
+ * Update all Tween instances.
* @returns {Object} Tween。
*/
tick: function(){
@@ -5360,8 +5472,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 添加Tween实例。
- * @param {Tween} tween 要添加的Tween对象。
+ * @language=en
+ * Add a Tween instance.
+ * @param {Tween} tween Tween object to add.
* @returns {Object} Tween。
*/
add: function(tween){
@@ -5371,8 +5484,9 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 删除Tween实例。
- * @param {Tween|Object|Array} tweenOrTarget 要删除的Tween对象或target对象或要删除的一组对象。
+ * @language=en
+ * Remove one Tween target.
+ * @param {Tween|Object|Array} tweenOrTarget Tween object, target object or an array of object to remove
* @returns {Object} Tween。
*/
remove: function(tweenOrTarget){
@@ -5400,7 +5514,8 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 删除所有Tween实例。
+ * @language=en
+ * Remove all Tween instances.
* @returns {Object} Tween。
*/
removeAll: function(){
@@ -5409,12 +5524,13 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 创建一个缓动动画,让目标对象从开始属性变换到目标属性。
- * @param {Object|Array} target 缓动目标对象或缓动目标数组。
- * @param fromProps 缓动目标对象的开始属性。
- * @param toProps 缓动目标对象的目标属性。
- * @param params 缓动动画的参数。
- * @returns {Tween|Array} 一个Tween实例对象或Tween实例数组。
+ * @language=en
+ * Create a tween, make target object easing from beginning properties to ending properties.
+ * @param {Object|Array} target Tweening target or tweening target array.
+ * @param fromProps Beginning properties of target tweening object.
+ * @param toProps Ending properties of target tweening object.
+ * @param params Tweening parameters.
+ * @returns {Tween|Array} An tween instance or an array of tween instance.
*/
fromTo: function(target, fromProps, toProps, params){
var isArray = target instanceof Array;
@@ -5432,22 +5548,24 @@ return Class.create(/** @lends Tween.prototype */{
},
/**
- * 创建一个缓动动画,让目标对象从当前属性变换到目标属性。
- * @param {Object|Array} target 缓动目标对象或缓动目标数组。
- * @param toProps 缓动目标对象的目标属性。
- * @param params 缓动动画的参数。
- * @returns {Tween|Array} 一个Tween实例对象或Tween实例数组。
+ * @language=en
+ * Create a tween, make target object easing from current properties to ending properties.
+ * @param {Object|Array} target Tweening target or tweening target array.
+ * @param toProps Ending properties of target tweening object.
+ * @param params Tweening parameters.
+ * @returns {Tween|Array} An tween instance or an array of tween instance.
*/
to: function(target, toProps, params){
return Tween.fromTo(target, null, toProps, params);
},
/**
- * 创建一个缓动动画,让目标对象从指定的起始属性变换到当前属性。
- * @param {Object|Array} target 缓动目标对象或缓动目标数组。
- * @param fromProps 缓动目标对象的目标属性。
- * @param params 缓动动画的参数。
- * @returns {Tween|Array} 一个Tween实例对象或Tween实例数组。
+ * @language=en
+ * Create a tween, make target object easing from beginning properties to current properties.
+ * @param {Object|Array} target Tweening target or tweening target array.
+ * @param fromProps Beginning properties of target tweening object.
+ * @param params Tweening parameters.
+ * @returns {Tween|Array} An tween instance or an array of tween instance.
*/
from: function(target, fromProps, params){
return Tween.fromTo(target, fromProps, null, params);
@@ -5458,24 +5576,22 @@ return Class.create(/** @lends Tween.prototype */{
})();
+
return Tween;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/tween/Ease', function(){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Ease类包含为Tween类提供各种缓动功能的函数。
+ * @language=en
+ * @class Ease class provides multiple easing functions for Tween.
* @module hilo/tween/Ease
* @static
*/
@@ -5491,14 +5607,16 @@ function createEase(obj, easeInFn, easeOutFn, easeInOutFn, easeNoneFn){
}
/**
- * 线性匀速缓动函数。包含EaseNone函数。
+ * @language=en
+ * Linear easing function.Include EaseNone.
*/
var Linear = createEase(null, null, null, null, function(k){
return k;
});
/**
- * 二次缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Quad easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Quad = createEase(null,
function(k){
@@ -5515,7 +5633,8 @@ var Quad = createEase(null,
);
/**
- * 三次缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Cubic easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Cubic = createEase(null,
function(k){
@@ -5532,7 +5651,8 @@ var Cubic = createEase(null,
);
/**
- * 四次缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Quart easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Quart = createEase(null,
function(k){
@@ -5549,7 +5669,8 @@ var Quart = createEase(null,
);
/**
- * 五次缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Quint easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Quint = createEase(null,
function(k){
@@ -5571,7 +5692,8 @@ var math = Math,
pow = math.pow, sqrt = math.sqrt;
/**
- * 正弦缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Sine easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Sine = createEase(null,
function(k){
@@ -5588,7 +5710,8 @@ var Sine = createEase(null,
);
/**
- * 指数缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Expo easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Expo = createEase(null,
function(k){
@@ -5607,7 +5730,8 @@ var Expo = createEase(null,
);
/**
- * 圆形缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Circ easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Circ = createEase(null,
function(k){
@@ -5625,7 +5749,8 @@ var Circ = createEase(null,
);
/**
- * 弹性缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Elastic easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Elastic = createEase(
{
@@ -5655,7 +5780,8 @@ var Elastic = createEase(
);
/**
- * 向后缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Back easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Back = createEase(
{
@@ -5682,7 +5808,8 @@ var Back = createEase(
);
/**
- * 弹跳缓动函数。包含EaseIn、EaseOut、EaseInOut三个函数。
+ * @language=en
+ * Bounce easing function.Include EaseIn, EaseOut, EaseInOut.
*/
var Bounce = createEase(null,
function(k){
@@ -5726,21 +5853,18 @@ return Ease;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/loader/ImageLoader', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
* @private
- * @class 图片资源加载器。
+ * @class image resources loader.
* @module hilo/loader/ImageLoader
* @requires hilo/core/Class
*/
@@ -5780,21 +5904,18 @@ return ImageLoader;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/loader/ScriptLoader', ['hilo/core/Class'], function(Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
* @private
- * @class javascript或JSONP加载器。
+ * @class javascript or JSONP loader
* @module hilo/loader/ScriptLoader
* @requires hilo/core/Class
*/
@@ -5849,29 +5970,26 @@ return ScriptLoader;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/loader/LoadQueue', ['hilo/core/Class', 'hilo/event/EventMixin', 'hilo/loader/ImageLoader', 'hilo/loader/ScriptLoader'], function(Class, EventMixin, ImageLoader, ScriptLoader){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
//TODO: 超时timeout,失败重连次数maxTries,更多的下载器Loader,队列暂停恢复等。
/**
- * @class LoadQueue是一个队列下载工具。
- * @param {Object} source 要下载的资源。可以是单个资源对象或多个资源的数组。
+ * @language=en
+ * @class LoadQueue is a queue-like loader.
+ * @param {Object} source ,resource that need to be loaded,could be a single object or array resource.
* @module hilo/loader/LoadQueue
* @requires hilo/core/Class
* @requires hilo/event/EventMixin
* @requires hilo/loader/ImageLoader
* @requires hilo/loader/ScriptLoader
- * @property {Int} maxConnections 同时下载的最大连接数。默认为2。
+ * @property {Int} maxConnections ,the limited concurrent connections. default value 2.
*/
var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
Mixes: EventMixin,
@@ -5888,15 +6006,16 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
_currentIndex: -1,
/**
- * 增加要下载的资源。可以是单个资源对象或多个资源的数组。
- * @param {Object|Array} source 资源对象或资源对象数组。每个资源对象包含以下属性:
+ * @language=en
+ * Add desired resource,could be a single object or array resource.
+ * @param {Object|Array} source ,a single object or array resource. Each resource contains properties like below:
*
- * - id - 资源的唯一标识符。可用于从下载队列获取目标资源。
- * - src - 资源的地址url。
- * - type - 指定资源的类型。默认会根据资源文件的后缀来自动判断类型,不同的资源类型会使用不同的加载器来加载资源。
- * - loader - 指定资源的加载器。默认会根据资源类型来自动选择加载器,若指定loader,则会使用指定的loader来加载资源。
- * - noCache - 指示加载资源时是否增加时间标签以防止缓存。
- * - size - 资源对象的预计大小。可用于预估下载进度。
+ * - id - resource identifier
+ * - src - resource url
+ * - type - resource type. By default, we automatically identify resource by file suffix and choose the relevant loader for you
+ * - loader - specified resource loader. If you specify this,we abandon choosing loader inside
+ * - noCache - a tag that set on or off to prevent cache,implemented by adding timestamp inside
+ * - size - predicted resource size, help calculating loading progress
*
* @returns {LoadQueue} 下载队列实例本身。
*/
@@ -5910,9 +6029,10 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
- * 根据id或src地址获取资源对象。
- * @param {String} id 指定资源的id或src。
- * @returns {Object} 资源对象。
+ * @language=en
+ * get resource object by id or src
+ * @param {String} specified id or src
+ * @returns {Object} resource object
*/
get: function(id){
if(id){
@@ -5928,9 +6048,10 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
- * 根据id或src地址获取资源内容。
- * @param {String} id 指定资源的id或src。
- * @returns {Object} 资源内容。
+ * @language=en
+ * get resource object content by id or src
+ * @param {String} specified id or src
+ * @returns {Object} resource object content
*/
getContent: function(id){
var item = this.get(id);
@@ -5938,8 +6059,9 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
- * 开始下载队列。
- * @returns {LoadQueue} 下载队列实例本身。
+ * @language=en
+ * start loading
+ * @returns {LoadQueue} the loading instance
*/
start: function(){
var me = this;
@@ -5948,6 +6070,7 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
+ * @language=en
* @private
*/
_loadNext: function(){
@@ -5988,6 +6111,7 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
+ * @language=en
* @private
*/
_getLoader: function(item){
@@ -6013,6 +6137,7 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
+ * @language=en
* @private
*/
_onItemLoad: function(index, content){
@@ -6026,6 +6151,7 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
+ * @language=en
* @private
*/
_onItemError: function(index, e){
@@ -6038,9 +6164,10 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
- * 获取全部或已下载的资源的字节大小。
- * @param {Boolean} loaded 指示是已下载的资源还是全部资源。默认为全部。
- * @returns {Number} 指定资源的字节大小。
+ * @language=en
+ * get resource size, loaded or all.
+ * @param {Boolean} identify loaded or all resource. default is false, return all resource size. when set true, return loaded resource size.
+ * @returns {Number} resource size.
*/
getSize: function(loaded){
var size = 0, source = this._source;
@@ -6052,16 +6179,18 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
},
/**
- * 获取已下载的资源数量。
- * @returns {Uint} 已下载的资源数量。
+ * @language=en
+ * get loaded resource count
+ * @returns {Uint} loaded resource count
*/
getLoaded: function(){
return this._loaded;
},
/**
- * 获取所有资源的数量。
- * @returns {Uint} 所有资源的数量。
+ * @language=en
+ * get all resource count
+ * @returns {Uint} all resource count
*/
getTotal: function(){
return this._source.length;
@@ -6070,6 +6199,7 @@ var LoadQueue = Class.create(/** @lends LoadQueue.prototype */{
});
/**
+ * @language=en
* @private
*/
function getExtension(src){
@@ -6084,34 +6214,31 @@ return LoadQueue;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/media/HTMLAudio', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/event/EventMixin'], function(Hilo, Class, EventMixin){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class HTMLAudio声音播放模块。此模块使用HTMLAudioElement播放音频。
- * 使用限制:iOS平台需用户事件触发才能播放,很多Android浏览器仅能同时播放一个音频。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class HTMLAudio is an audio playing module, which uses HTMLAudioElement to play audio.
+ * Limits: iOS platform requires user action events to start playing, and many Android browser can only play one audio at a time.
+ * @param {Object} properties create object properties, include all writable properties of this class.
* @module hilo/media/HTMLAudio
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/event/EventMixin
- * @property {String} src 播放的音频的资源地址。
- * @property {Boolean} loop 是否循环播放。默认为false。
- * @property {Boolean} autoPlay 是否自动播放。默认为false。
- * @property {Boolean} loaded 音频资源是否已加载完成。只读属性。
- * @property {Boolean} playing 是否正在播放音频。只读属性。
- * @property {Number} duration 音频的时长。只读属性。
- * @property {Number} volume 音量的大小。取值范围:0-1。
- * @property {Boolean} muted 是否静音。默认为false。
+ * @property {String} src The source of the playing audio.
+ * @property {Boolean} loop Is loop playback, default value is false.
+ * @property {Boolean} autoPlay Is the audio autoplay, default value is false.
+ * @property {Boolean} loaded Is the audio resource loaded, readonly!
+ * @property {Boolean} playing Is the audio playing, readonly!
+ * @property {Number} duration The duration of the audio, readonly!
+ * @property {Number} volume The volume of the audio, value between 0 to 1.
+ * @property {Boolean} muted Is the audio muted, default value is false.
*/
var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
Mixes: EventMixin,
@@ -6133,7 +6260,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
_element: null, //HTMLAudioElement对象
/**
- * 加载音频文件。
+ * @language=en
+ * Load audio file.
*/
load: function(){
if(!this._element){
@@ -6158,6 +6286,7 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_onAudioEvent: function(e){
@@ -6184,6 +6313,7 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_doPlay: function(){
@@ -6195,8 +6325,9 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 播放音频。如果正在播放,则会重新开始。
- * 注意:为了避免第一次播放不成功,建议在load音频后再播放。
+ * @language=en
+ * Start playing the audio. And play the audio from the beginning if the audio is already playing.
+ * Note: To prevent failing to play at the first time, play when the audio is loaded.
*/
play: function(){
if(this.playing) this.stop();
@@ -6212,7 +6343,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 暂停音频。
+ * @language=en
+ * Pause (halt) the currently playing audio.
*/
pause: function(){
if(this.playing){
@@ -6223,7 +6355,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 恢复音频播放。
+ * @language=en
+ * Continue to play the audio.
*/
resume: function(){
if(!this.playing){
@@ -6233,7 +6366,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 停止音频播放。
+ * @language=en
+ * Stop playing the audio.
*/
stop: function(){
if(this.playing){
@@ -6245,7 +6379,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 设置音量。注意: iOS设备无法设置音量。
+ * @language=en
+ * Set the volume. Note: iOS devices cannot set volume.
*/
setVolume: function(volume){
if(this.volume != volume){
@@ -6256,7 +6391,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
},
/**
- * 设置静音模式。注意: iOS设备无法设置静音模式。
+ * @language=en
+ * Set mute mode. Note: iOS devices cannot set mute mode.
*/
setMute: function(muted){
if(this.muted != muted){
@@ -6268,7 +6404,8 @@ var HTMLAudio = Class.create(/** @lends HTMLAudio.prototype */{
Statics: /** @lends HTMLAudio */ {
/**
- * 浏览器是否支持HTMLAudio。
+ * @language=en
+ * Does the browser supports HTMLAudio.
*/
isSupported: window.Audio !== null
}
@@ -6279,34 +6416,31 @@ return HTMLAudio;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/media/WebAudio', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/event/EventMixin'], function(Hilo, Class, EventMixin){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class WebAudio声音播放模块。它具有更好的声音播放和控制能力,适合在iOS6+平台使用。
- * 兼容情况:iOS6+、Chrome33+、Firefox28+支持,但Android浏览器均不支持。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class WebAudio audio playing module. It provides a better way to play and control audio, use on iOS6+ platform.
+ * Compatibility:iOS6+、Chrome33+、Firefox28+ supported,but all Android browsers do not support.
+ * @param {Object} properties create object properties, include all writable properties of this class.
* @module hilo/media/WebAudio
* @requires hilo/core/Hilo
* @requires hilo/core/Class
* @requires hilo/event/EventMixin
- * @property {String} src 播放的音频的资源地址。
- * @property {Boolean} loop 是否循环播放。默认为false。
- * @property {Boolean} autoPlay 是否自动播放。默认为false。
- * @property {Boolean} loaded 音频资源是否已加载完成。只读属性。
- * @property {Boolean} playing 是否正在播放音频。只读属性。
- * @property {Number} duration 音频的时长。只读属性。
- * @property {Number} volume 音量的大小。取值范围:0-1。
- * @property {Boolean} muted 是否静音。默认为false。
+ * @property {String} src The source of the playing audio.
+ * @property {Boolean} loop Is loop playback, default value is false.
+ * @property {Boolean} autoPlay Is the audio autoplay, default value is false.
+ * @property {Boolean} loaded Is the audio resource loaded, readonly!
+ * @property {Boolean} playing Is the audio playing, readonly!
+ * @property {Number} duration The duration of the audio, readonly!
+ * @property {Number} volume The volume of the audio, value between 0 to 1.
+ * @property {Boolean} muted Is the audio muted, default value is false.
*/
var WebAudio = (function(){
@@ -6330,15 +6464,16 @@ return Class.create(/** @lends WebAudio.prototype */{
volume: 1,
muted: false,
- _context: null, //WebAudio上下文
- _gainNode: null, //音量控制器
- _buffer: null, //音频缓冲文件
- _audioNode: null, //音频播放器
- _startTime: 0, //开始播放时间戳
- _offset: 0, //播放偏移量
+ _context: null, //WebAudio上下文 the WebAudio Context
+ _gainNode: null, //音量控制器 the volume controller
+ _buffer: null, //音频缓冲文件 the audio file buffer
+ _audioNode: null, //音频播放器 the audio playing node
+ _startTime: 0, //开始播放时间戳 the start time to play the audio
+ _offset: 0, //播放偏移量 the offset of current playing audio
/**
- * @private 初始化
+ * @language=en
+ * @private Initialize.
*/
_init:function(){
this._context = context;
@@ -6350,7 +6485,8 @@ return Class.create(/** @lends WebAudio.prototype */{
this._onDecodeError = this._onDecodeError.bind(this);
},
/**
- * 加载音频文件。注意:我们使用XMLHttpRequest进行加载,因此需要注意跨域问题。
+ * @language=en
+ * Load audio file. Note: use XMLHttpRequest to load the audio, should pay attention to cross-origin problem.
*/
load: function(){
if(!this._buffer){
@@ -6368,6 +6504,7 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_onAudioEvent: function(e){
@@ -6396,6 +6533,7 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_onDecodeComplete: function(audioBuffer){
@@ -6408,6 +6546,7 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_onDecodeError: function(){
@@ -6415,6 +6554,7 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_doPlay: function(){
@@ -6440,6 +6580,7 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
+ * @language=en
* @private
*/
_clearAudioNode: function(){
@@ -6453,7 +6594,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 播放音频。如果正在播放,则会重新开始。
+ * @language=en
+ * Play the audio. Restart playing the audio from the beginning if already playing.
*/
play: function(){
if(this.playing) this.stop();
@@ -6469,7 +6611,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 暂停音频。
+ * @language=en
+ * Pause (halt) playing the audio.
*/
pause: function(){
if(this.playing){
@@ -6481,7 +6624,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 恢复音频播放。
+ * @language=en
+ * Continue to play the audio.
*/
resume: function(){
if(!this.playing){
@@ -6491,7 +6635,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 停止音频播放。
+ * @language=en
+ * Stop playing the audio.
*/
stop: function(){
if(this.playing){
@@ -6504,7 +6649,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 设置音量。
+ * @language=en
+ * Set the volume.
*/
setVolume: function(volume){
if(this.volume != volume){
@@ -6515,7 +6661,8 @@ return Class.create(/** @lends WebAudio.prototype */{
},
/**
- * 设置是否静音。
+ * @language=en
+ * Set mute mode.
*/
setMute: function(muted){
if(this.muted != muted){
@@ -6527,17 +6674,20 @@ return Class.create(/** @lends WebAudio.prototype */{
Statics: /** @lends WebAudio */ {
/**
- * 浏览器是否支持WebAudio。
+ * @language=en
+ * Does the browser support WebAudio.
*/
isSupported: AudioContext != null,
/**
- * 浏览器是否已激活WebAudio。
+ * @language=en
+ * Does browser activate WebAudio already.
*/
enabled: false,
/**
- * 激活WebAudio。注意:需用户事件触发此方法才有效。激活后,无需用户事件也可播放音频。
+ * @language=en
+ * Activate WebAudio. Note: Require user action events to activate. Once activated, can play audio without user action events.
*/
enable: function(){
if(!this.enabled && context){
@@ -6559,22 +6709,19 @@ return WebAudio;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/media/WebSound', ['hilo/core/Hilo', 'hilo/media/HTMLAudio', 'hilo/media/WebAudio'], function(Hilo, HTMLAudio, WebAudio){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * 使用示例:
+ * demo:
*
* var audio = WebSound.getAudio({
* src: 'test.mp3',
@@ -6586,7 +6733,7 @@ define('hilo/media/WebSound', ['hilo/core/Hilo', 'hilo/media/HTMLAudio', 'hilo/m
* console.log('end');
* }).play();
*
- * @class 声音播放管理器。
+ * @class Audio playing manager.
* @static
* @module hilo/media/WebSound
* @requires hilo/core/Hilo
@@ -6597,7 +6744,8 @@ var WebSound = {
_audios: {},
/**
- * 激活音频功能。注意:需用户事件触发此方法才有效。目前仅对WebAudio有效。
+ * @language=en
+ * Activate audio function. Note: Require user action events to activate. Currently support WebAudio.
*/
enableAudio: function(){
if(WebAudio.isSupported){
@@ -6606,9 +6754,10 @@ var WebSound = {
},
/**
- * 获取音频对象。优先使用WebAudio。
- * @param {String|Object} source 若source为String,则为音频src地址;若为Object,则需包含src属性。
- * @returns {WebAudio|HTMLAudio} 音频播放对象实例。
+ * @language=en
+ * Get audio element. Use WebAudio if supported.
+ * @param {String|Object} source If String, it's the source of the audio; If Object, it should contains a src property.
+ * @returns {WebAudio|HTMLAudio} Audio playing instance.
*/
getAudio: function(source){
source = this._normalizeSource(source);
@@ -6626,8 +6775,9 @@ var WebSound = {
},
/**
- * 删除音频对象。
- * @param {String|Object} source 若source为String,则为音频src地址;若为Object,则需包含src属性。
+ * @language=en
+ * Remove audio element.
+ * @param {String|Object} source If String, it's the source of the audio; If Object, it should contains a src property.
*/
removeAudio: function(source){
var src = typeof source === 'string' ? source : source.src;
@@ -6641,6 +6791,7 @@ var WebSound = {
},
/**
+ * @language=en
* @private
*/
_normalizeSource: function(source){
@@ -6656,30 +6807,27 @@ return WebSound;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/game/Camera', ['hilo/core/Hilo', 'hilo/core/Class'], function(Hilo, Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Camera类表示摄像机。
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
+ * @language=en
+ * @class Camera.
+ * @param {Object} properties The properties to create a view object, contains all writeable props of this class
* @module hilo/game/Camera
* @requires hilo/core/Hilo
* @requires hilo/core/Class
- * @property {Number} width 镜头宽
- * @property {Number} height 镜头高
- * @property {Object} scroll 滚动值 {x:0, y:0}
- * @property {View} target 摄像机跟随的目标
- * @property {Array} bounds 摄像机移动边界的矩形区域 [x, y, width, height]
- * @property {Array} deadzone 摄像机不移动的矩形区域 [ x, y, width, height]
+ * @property {Number} width The width of the camera.
+ * @property {Number} height The height of the camera.
+ * @property {Object} scroll The scrolling value of the camera {x:0, y:0}.
+ * @property {View} target The target that the camera follow.
+ * @property {Array} bounds The rect area where camera is allowed to move [x, y, width, height].
+ * @property {Array} deadzone The rect area where camera isn't allowed to move[ x, y, width, height].
*/
var Camera = Class.create(/** @lends Camera.prototype */{
constructor:function(properties){
@@ -6698,7 +6846,8 @@ var Camera = Class.create(/** @lends Camera.prototype */{
Hilo.copy(this, properties);
},
/**
- * 更新
+ * @language=en
+ * update.
* @param {Number} deltaTime
*/
tick:function(deltaTime){
@@ -6732,9 +6881,10 @@ var Camera = Class.create(/** @lends Camera.prototype */{
}
},
/**
- * 跟随目标
- * @param {Object} target 跟随的目标,必须是有x,y属性的对象
- * @param {Array} deadzone 摄像机不移动的矩形区域 [ x, y, width, height]
+ * @language=en
+ * Follow the target.
+ * @param {Object} target The target that the camera follow. It must has x and y properties.
+ * @param {Array} deadzone The rect area where camera isn't allowed to move[ x, y, width, height].
*/
follow:function(target, deadzone){
this.target = target;
@@ -6750,54 +6900,51 @@ return Camera;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/game/Camera3d', ['hilo/core/Hilo', 'hilo/core/Class'], function(Hilo, Class){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
- * @class Camera3d 伪3D虚拟摄像机。
+ * @language=en
+ * @class Camera3d is a pseudo-3d camera.
* @module hilo/game/Camera3d
* @requires hilo/core/Hilo
* @requires hilo/core/Class
- * @property {Number} fv 镜头视点距离(屏幕视点相对眼睛距离,绝对了坐标缩放比例)
- * @property {Number} fx 镜头视点X(屏幕视点相对屏幕左上角X距离)
- * @property {Number} fy 镜头视点Y(屏幕视点相对屏幕左上角Y距离)
- * @property {Object} stage 3D对象所在容器,可以是stage或container,结合ticker时是必须参数,用来Z深度排序
- * @property {Number} x 镜头三维坐标x
- * @property {Number} y 镜头三维坐标y
- * @property {Number} z 镜头三维坐标z
- * @property {Number} rotationX X轴旋转角度
- * @property {Number} rotationY Y轴旋转角度
- * @property {Number} rotationZ Z轴旋转角度
+ * @property {Number} fv The distance of the fov(The distance between eyes and the Z plane,it determines the scale ratio of the 3d object).
+ * @property {Number} fx The x position of the screen viewpoint(The distance between the screen viewpoint and the screen left top corner on the x axis).
+ * @property {Number} fy The y position of the screen viewpoint(The distance between the screen viewpoint and the screen left top corner on the y axis).
+ * @property {Object} stage The 3d object's container, it can be stage or container.It is required if you need to sort the 3d object by z axis.
+ * @property {Number} x The x position.
+ * @property {Number} y The y position.
+ * @property {Number} z The z position.
+ * @property {Number} rotationX The x rotation.
+ * @property {Number} rotationY The y rotation.
+ * @property {Number} rotationZ The z rotation.
*/
var Camera3d = (function(){
var degtorad = Math.PI / 180;
- //向量旋转
- function rotateX(x, y, z, ca, sa) {//绕X轴旋转
+ //Rotate the axis.
+ function rotateX(x, y, z, ca, sa) {//rotate x
return {
x: x,
y: y * ca - z * sa,
z: y * sa + z * ca
};
}
- function rotateY(x, y, z, ca, sa) {//绕Y轴旋转
+ function rotateY(x, y, z, ca, sa) {//rotate y
return {
x: x * ca - z * sa,
y: y,
z: x * sa + z * ca
};
}
- function rotateZ(x, y, z, ca, sa) {//绕Z轴旋转
+ function rotateZ(x, y, z, ca, sa) {//rotate z
return {
x: x * ca - y * sa,
y: x * sa + y * ca,
@@ -6819,10 +6966,11 @@ var Camera3d = (function(){
},
/**
- * 仿射矩阵位移变换,不同于直接修改Camera3d.x/y/z. 是在Camera3d依次做坐标位移 - 旋转变换 后,再加上一个位移变换。主要功能可以做Zoomin/out 功能
- * @param {Number} x坐标
- * @param {Number} y坐标
- * @param {Number} z坐标
+ * @language=en
+ * Translate the camera,used for Zoomin/out feature.
+ * @param {Number} x The x position.
+ * @param {Number} y The y position.
+ * @param {Number} z The z position.
*/
translate : function(x,y,z){
this.tx = x;
@@ -6831,33 +6979,38 @@ var Camera3d = (function(){
},
/**
- * 旋转X轴方向角度,相当于欧拉角系统的 beta
- * @param {Number} X旋转角度
+ * @language=en
+ * Rotate by the x axis.
+ * @param {Number} angle The rotate degree.
*/
rotateX : function(angle){
this.rotationX = angle;
},
/**
- * 旋转Y轴方向角度,相当于欧拉角系统的 gamma
- * @param {Number} Y旋转角度
+ * @language=en
+ * Rotate by the y axis.
+ * @param {Number} angle The rotate degree.
*/
rotateY : function(angle){
this.rotationY = angle;
},
/**
- * 旋转Z轴方向角度,相当于欧拉角系统的 alpha
- * @param {Number} Z旋转角度
+ * @language=en
+ * Rotate by the z axis.
+ * @param {Number} angle The rotate degree.
*/
rotateZ : function(angle){
this.rotationZ = angle;
},
/**
- * 将三维坐标转换投影为二维坐标,同时返回Z轴深度,和投影显示的缩放比例
- * @param {object} 三维坐标对象
- * @param {object} Hilo.View对象,用于自动转换坐标
+ * @language=en
+ * Project the 3d point to 2d point.
+ * @param {object} vector3D The 3d position, it must have x, y and z properties.
+ * @param {View} view The view related to the 3d position.It'll be auto translated by the 3d position.
+ * @returns {Object} The 2d object include z and scale properties, e.g.:{x:x, y:y, z:z, scale}
*/
project : function(vector3D, view){
@@ -6872,10 +7025,10 @@ var Camera3d = (function(){
// 旋转变换前的 仿射矩阵位移,
dx = vector3D.x - this.x,
dy = vector3D.y - this.y,
- dz = vector3D.z - this.z,
+ dz = vector3D.z - this.z;
// 旋转矩阵变换
- vector = rotateZ(dx, dy, dz, cosZ, sinZ);
+ var vector = rotateZ(dx, dy, dz, cosZ, sinZ);
vector = rotateY(vector.x, vector.y, vector.z, cosY, sinY);
vector = rotateX(vector.x, vector.y, vector.z, cosX, sinX);
@@ -6888,24 +7041,27 @@ var Camera3d = (function(){
_x = vector.x * perspective,
_y = -vector.y * perspective;
- if(view) {
- view.x = _x + this.fx;
- view.y = _y + this.fy;
- view.z = -vector.z;
- view.scaleX = perspective;
- view.scaleY = perspective;
- } else {
- return {
- x : _x + this.fx,
- y : _y + this.fy,
- z : -vector.z,
- scale : perspective
- };
+ var result = {
+ x : _x + this.fx,
+ y : _y + this.fy,
+ z : -vector.z,
+ scale : perspective
+ };
+
+ if(view){
+ view.x = result.x;
+ view.y = result.y;
+ view.z = result.z;
+ view.scaleX = result.scale;
+ view.scaleY = result.scale;
}
+
+ return result;
},
/**
- * Z深度排序
+ * @language=en
+ * Sort by z axis.
*/
sortZ : function(){
this.stage.children.sort(function(view_a, view_b){
@@ -6914,7 +7070,8 @@ var Camera3d = (function(){
},
/**
- * Ticker 轮询使用
+ * @language=en
+ * Used for the ticker.
*/
tick : function(){
this.sortZ();
@@ -6930,22 +7087,19 @@ return Camera3d;
});
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
define('hilo/game/ParticleSystem', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/view/View', 'hilo/view/Container', 'hilo/view/Bitmap', 'hilo/view/Drawable'], function(Hilo, Class, View, Container, Bitmap, Drawable){
-/**
- * Hilo
- * Copyright 2015 alibaba.com
- * Licensed under the MIT License
- */
+
/**
+ * @language=en
*
*
- * @class 粒子系统
+ * @class ParticleSystem A particle system.
* @module hilo/game/ParticleSystem
* @requires hilo/core/Hilo
* @requires hilo/core/Class
@@ -6953,28 +7107,28 @@ define('hilo/game/ParticleSystem', ['hilo/core/Hilo', 'hilo/core/Class', 'hilo/v
* @requires hilo/view/Container
* @requires hilo/view/Bitmap
* @requires hilo/view/Drawable
- * @property {Number} emitTime 发射间隔
- * @property {Number} emitTimeVar 发射间隔变化量
- * @property {Number} emitNum 每次发射数量变化量
- * @property {Number} emitNumVar 每次发射数量
- * @property {Number} emitterX 发射器位置x
- * @property {Number} emitterY 发射器位置y
- * @property {Number} totalTime 总时间
- * @property {Number} gx 重力加速度x
- * @property {Number} gy 重力加速度y
- * @param {Object} properties 创建对象的属性参数。可包含此类所有可写属性。
- * @param {Object} properties.particle 粒子属性配置
- * @param {Number} properties.particle.x x位置
- * @param {Number} properties.particle.y y位置
- * @param {Number} properties.particle.vx x速度
- * @param {Number} properties.particle.vy y速度
- * @param {Number} properties.particle.ax x加速度
- * @param {Number} properties.particle.ay y加速度
- * @param {Number} properties.particle.life 粒子存活时间 单位s
- * @param {Number} properties.particle.alpha 透明度
- * @param {Number} properties.particle.alphaV 透明度变化
- * @param {Number} properties.particle.scale 缩放
- * @param {Number} properties.particle.scaleV 缩放变化速度
+ * @property {Number} emitTime Emit time interval.
+ * @property {Number} emitTimeVar Emit time interval variances.
+ * @property {Number} emitNum Emit number.
+ * @property {Number} emitNumVar Emit number variances.
+ * @property {Number} emitterX The emitter x position.
+ * @property {Number} emitterY The emitter y position.
+ * @property {Number} totalTime Total time.
+ * @property {Number} gx The gravity x value.
+ * @property {Number} gy The gravity y value.
+ * @param {Object} properties properties The properties to create a view object, contains all writeable props of this class
+ * @param {Object} properties.particle The config of particle.
+ * @param {Number} properties.particle.x The x position.
+ * @param {Number} properties.particle.y The y position
+ * @param {Number} properties.particle.vx The x velocity.
+ * @param {Number} properties.particle.vy The y velocity.
+ * @param {Number} properties.particle.ax The x acceleration.
+ * @param {Number} properties.particle.ay The y acceleration.
+ * @param {Number} properties.particle.life The time particle lives(in second).
+ * @param {Number} properties.particle.alpha The alpha.
+ * @param {Number} properties.particle.alphaV The alpha decline rate.
+ * @param {Number} properties.particle.scale The scale.
+ * @param {Number} properties.particle.scaleV The scale decline rate.
*/
var ParticleSystem = (function(){
//粒子属性
@@ -7035,7 +7189,8 @@ var ParticleSystem = (function(){
diedParticles:diedParticles
},
/**
- * 重置属性
+ * @language=en
+ * Reset the properties.
* @param {Object} cfg
*/
reset: function(cfg) {
@@ -7046,8 +7201,9 @@ var ParticleSystem = (function(){
}
},
/**
+ * @language=en
* 更新
- * @param {Number} dt 间隔时间 单位ms
+ * @param {Number} dt delta time(in milliseconds)
*/
onUpdate: function(dt) {
dt *= .001;
@@ -7066,7 +7222,8 @@ var ParticleSystem = (function(){
}
},
/**
- * 发射粒子
+ * @language=en
+ * Emit particles.
*/
_emit: function() {
var num = getRandomValue(this.emitNum, this.emitNumVar)>>0;
@@ -7075,7 +7232,8 @@ var ParticleSystem = (function(){
}
},
/**
- * 开始
+ * @language=en
+ * Start emit particles.
*/
start: function() {
this.stop(true);
@@ -7085,8 +7243,9 @@ var ParticleSystem = (function(){
this._emitTime = getRandomValue(this.emitTime, this.emitTimeVar);
},
/**
- * 停止
- * @param {Boolean} clear 是否清除所有粒子
+ * @language=en
+ * Stop emit particles.
+ * @param {Boolean} clear Whether or not clear all the particles.
*/
stop: function(clear) {
this.isRun = false;
@@ -7099,16 +7258,17 @@ var ParticleSystem = (function(){
});
/**
+ * @language=en
* @class 粒子
* @inner
- * @param {Number} vx x速度
- * @param {Number} vy y速度
- * @param {Number} ax x加速度
- * @param {Number} ay y加速度
- * @param {Number} scaleV 缩放变化速度
- * @param {Number} alphaV 透明度变换速度
- * @param {Number} rotationV 旋转速度
- * @param {Number} life 存活时间
+ * @param {Number} vx The x velocity.
+ * @param {Number} vy The y velocity.
+ * @param {Number} ax The x acceleration.
+ * @param {Number} ay The y acceleration.
+ * @param {Number} scaleV The scale decline rate.
+ * @param {Number} alphaV The alpha decline rate.
+ * @param {Number} rotationV The rotate speed.
+ * @param {Number} life The time particle lives(in seconds)
*/
var Particle = Class.create({
Extends:View,
@@ -7118,7 +7278,8 @@ var ParticleSystem = (function(){
this.init(properties);
},
/**
- * 更新
+ * @language=en
+ * Update the particle.
*/
onUpdate: function(dt) {
dt *= .001;
@@ -7148,7 +7309,8 @@ var ParticleSystem = (function(){
}
},
/**
- * 设置图像
+ * @language=en
+ * Set the image of particle.
*/
setImage: function(img, frame) {
this.drawable = this.drawable||new Drawable();
@@ -7160,7 +7322,8 @@ var ParticleSystem = (function(){
this.drawable.image = img;
},
/**
- * 销毁
+ * @language=en
+ * Destroy the particle.
*/
destroy: function() {
this.died = true;
@@ -7168,7 +7331,8 @@ var ParticleSystem = (function(){
diedParticles.push(this);
},
/**
- * 初始化
+ * @language=en
+ * Init the particle.
*/
init: function(cfg) {
this.system = cfg.system;
@@ -7200,8 +7364,9 @@ var ParticleSystem = (function(){
},
Statics:{
/**
- * 生成粒子
- * @param {Object} cfg
+ * @language=en
+ * Create the particle.
+ * @param {Object} cfg The config of particle.
*/
create:function(cfg) {
if (diedParticles.length > 0) {
@@ -7216,6 +7381,13 @@ var ParticleSystem = (function(){
});
+ /**
+ * Get the random value.
+ * @private
+ * @param {Number} value The value.
+ * @param {Number} variances The variances.
+ * @return {Number}
+ */
function getRandomValue(value, variances){
return variances ? value + (Math.random() - .5) * 2 * variances : value;
}
diff --git a/build/amd/hilo-amd.min.js b/build/amd/hilo-amd.min.js
index 1d1d997a..a7bc3951 100644
--- a/build/amd/hilo-amd.min.js
+++ b/build/amd/hilo-amd.min.js
@@ -1,8 +1,8 @@
/**
- * Hilo 1.0.0 for amd
+ * Hilo 1.0.1 for amd
* Copyright 2016 alibaba.com
* Licensed under the MIT License
*/
-define("hilo/core/Hilo",function(){var t=function(){var e=window,i=document,r=i.documentElement,n=0;return{getUid:function(t){var e=++n;if(t){var i=t.charCodeAt(t.length-1);return i>=48&&57>=i&&(t+="_"),t+e}return e},viewToString:function(t){for(var e,i=t;i;)e=e?i.id+"."+e:i.id,i=i.parent;return e},copy:function(t,e,i){for(var r in e)(!i||t.hasOwnProperty(r)||void 0!==t[r])&&(t[r]=e[r]);return t},browser:function(){var t=navigator.userAgent,n={iphone:/iphone/i.test(t),ipad:/ipad/i.test(t),ipod:/ipod/i.test(t),ios:/iphone|ipad|ipod/i.test(t),android:/android/i.test(t),webkit:/webkit/i.test(t),chrome:/chrome/i.test(t),safari:/safari/i.test(t),firefox:/firefox/i.test(t),ie:/msie/i.test(t),opera:/opera/i.test(t),supportTouch:"ontouchstart"in e,supportCanvas:null!=i.createElement("canvas").getContext,supportStorage:!1,supportOrientation:"orientation"in e,supportDeviceMotion:"ondevicemotion"in e};try{var a="hilo";localStorage.setItem(a,a),localStorage.removeItem(a),n.supportStorage=!0}catch(o){}var s=n.jsVendor=n.webkit?"webkit":n.firefox?"Moz":n.opera?"O":n.ie?"ms":"",h=n.cssVendor="-"+s+"-",l=i.createElement("div"),c=l.style,u=void 0!=c[s+"Transform"],d=void 0!=c[s+"Perspective"];return d&&(l.id="test3d",c=i.createElement("style"),c.textContent="@media ("+h+"transform-3d){#test3d{height:3px}}",i.head.appendChild(c),r.appendChild(l),d=3==l.offsetHeight,i.head.removeChild(c),r.removeChild(l)),n.supportTransform=u,n.supportTransform3D=d,n}(),event:function(){var t="ontouchstart"in e;return{POINTER_START:t?"touchstart":"mousedown",POINTER_MOVE:t?"touchmove":"mousemove",POINTER_END:t?"touchend":"mouseup"}}(),align:{TOP_LEFT:"TL",TOP:"T",TOP_RIGHT:"TR",LEFT:"L",CENTER:"C",RIGHT:"R",BOTTOM_LEFT:"BL",BOTTOM:"B",BOTTOM_RIGHT:"BR"},getElementRect:function(t){try{var i=t.getBoundingClientRect()}catch(n){i={top:t.offsetTop,left:t.offsetLeft,width:t.offsetWidth,height:t.offsetHeight}}var a=(e.pageXOffset||r.scrollLeft)-(r.clientLeft||0)||0,o=(e.pageYOffset||r.scrollTop)-(r.clientTop||0)||0,s=e.getComputedStyle?getComputedStyle(t):t.currentStyle,h=parseInt,l=h(s.paddingLeft)+h(s.borderLeftWidth)||0,c=h(s.paddingTop)+h(s.borderTopWidth)||0,u=h(s.paddingRight)+h(s.borderRightWidth)||0,d=h(s.paddingBottom)+h(s.borderBottomWidth)||0,f=i.top||0,p=i.left||0;return{left:p+a+l,top:f+o+c,width:i.right-u-p-l,height:i.bottom-d-f-c}},createElement:function(t,e){var r,n,a,o=i.createElement(t);for(r in e)if(n=e[r],"style"===r)for(a in n)o.style[a]=n[a];else o[r]=n;return o},getElement:function(t){return i.getElementById(t)},setElementStyleByView:function(e){var i=e.drawable,r=i.domElement.style,n=e._stateCache||(e._stateCache={}),a=t.browser.jsVendor,o="px",s=!1;if(this.cacheStateIfChanged(e,["visible"],n)&&(r.display=e.visible?"":"none"),this.cacheStateIfChanged(e,["alpha"],n)&&(r.opacity=e.alpha),e.visible&&!(e.alpha<=0)){this.cacheStateIfChanged(e,["width"],n)&&(r.width=e.width+o),this.cacheStateIfChanged(e,["height"],n)&&(r.height=e.height+o),this.cacheStateIfChanged(e,["depth"],n)&&(r.zIndex=e.depth+1),(s=this.cacheStateIfChanged(e,["pivotX","pivotY"],n))&&(r[a+"TransformOrigin"]=e.pivotX+o+" "+e.pivotY+o),(this.cacheStateIfChanged(e,["x","y","rotation","scaleX","scaleY"],n)||s)&&(r[a+"Transform"]=this.getTransformCSS(e)),this.cacheStateIfChanged(e,["background"],n)&&(r.backgroundColor=e.background),r.pointerEvents||(r.pointerEvents="none");var h=i.image;if(h){var l=h.src;l!==n.image&&(n.image=l,r.backgroundImage="url("+l+")");var c=i.rect;if(c){var u=c[0],d=c[1];u!==n.sx&&(n.sx=u,r.backgroundPositionX=-u+o),d!==n.sy&&(n.sy=d,r.backgroundPositionY=-d+o)}}var f=e.mask;if(f){var p=f.drawable.domElement.style.backgroundImage;p!==n.maskImage&&(n.maskImage=p,r[a+"MaskImage"]=p,r[a+"MaskRepeat"]="no-repeat");var v=f.x,m=f.y;(v!==n.maskX||m!==n.maskY)&&(n.maskX=v,n.maskY=m,r[a+"MaskPosition"]=v+o+" "+m+o)}}},cacheStateIfChanged:function(t,e,i){var r,n,a,o,s=!1;for(r=0,n=e.length;n>r;r++)a=e[r],o=t[a],o!=i[a]&&(i[a]=o,s=!0);return s},getTransformCSS:function(t){var e=this.browser.supportTransform3D,i=e?"3d":"";return"translate"+i+"("+(t.x-t.pivotX)+"px, "+(t.y-t.pivotY)+(e?"px, 0px)":"px)")+"rotate"+i+(e?"(0, 0, 1, ":"(")+t.rotation+"deg)scale"+i+"("+t.scaleX+", "+t.scaleY+(e?", 1)":")")}}}();return t}),define("hilo/core/Class",function(){var t=function(){var t=function(t){t=t||{};var i=t.hasOwnProperty("constructor")?t.constructor:function(){};return e.call(i,t),i},e=function(t){var e,r,a={};for(e in t)r=t[e],i.hasOwnProperty(e)?i[e].call(this,r):a[e]=r;n(this.prototype,a)},i={Extends:function(t){var e=this.prototype,i=r(t.prototype);n(this,t),n(i,e),i.constructor=this,this.prototype=i,this.superclass=t.prototype},Mixes:function(t){t instanceof Array||(t=[t]);for(var e,i=this.prototype;e=t.shift();)n(i,e.prototype||e)},Statics:function(t){n(this,t)}},r=function(){if(Object.__proto__)return function(t){return{__proto__:t}};var t=function(){};return function(e){return t.prototype=e,new t}}(),n=function(t){for(var e=1,i=arguments.length;i>e;e++){var r,n=arguments[e];for(var a in n){var s=n[a];!s||"object"!=typeof s||void 0===s.value&&"function"!=typeof s.get&&"function"!=typeof s.set?t[a]=s:(r=r||{},r[a]=s)}r&&o(t,r)}return t};try{var a=Object.defineProperty,o=Object.defineProperties;a({},"$",{value:0})}catch(s){"__defineGetter__"in Object&&(a=function(t,e,i){return"value"in i&&(t[e]=i.value),"get"in i&&t.__defineGetter__(e,i.get),"set"in i&&t.__defineSetter__(e,i.set),t},o=function(t,e){for(var i in e)e.hasOwnProperty(i)&&a(t,i,e[i]);return t})}return{create:t,mix:n}}();return t}),define("hilo/geom/Matrix",["hilo/core/Class"],function(t){var e=t.create({constructor:function(t,e,i,r,n,a){this.a=t,this.b=e,this.c=i,this.d=r,this.tx=n,this.ty=a},concat:function(t){var e=arguments,i=this.a,r=this.b,n=this.c,a=this.d,o=this.tx,s=this.ty;if(e.length>=6)var h=e[0],l=e[1],c=e[2],u=e[3],d=e[4],f=e[5];else h=t.a,l=t.b,c=t.c,u=t.d,d=t.tx,f=t.ty;return this.a=i*h+r*c,this.b=i*l+r*u,this.c=n*h+a*c,this.d=n*l+a*u,this.tx=o*h+s*c+d,this.ty=o*l+s*u+f,this},rotate:function(t){var e=Math.sin(t),i=Math.cos(t),r=this.a,n=this.b,a=this.c,o=this.d,s=this.tx,h=this.ty;return this.a=r*i-n*e,this.b=r*e+n*i,this.c=a*i-o*e,this.d=a*e+o*i,this.tx=s*i-h*e,this.ty=s*e+h*i,this},scale:function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},translate:function(t,e){return this.tx+=t,this.ty+=e,this},identity:function(){return this.a=this.d=1,this.b=this.c=this.tx=this.ty=0,this},invert:function(){var t=this.a,e=this.b,i=this.c,r=this.d,n=this.tx,a=t*r-e*i;return this.a=r/a,this.b=-e/a,this.c=-i/a,this.d=t/a,this.tx=(i*this.ty-r*n)/a,this.ty=-(t*this.ty-e*n)/a,this},transformPoint:function(t,e,i){var r=t.x*this.a+t.y*this.c+this.tx,n=t.x*this.b+t.y*this.d+this.ty;return e&&(r=r+.5>>0,n=n+.5>>0),i?{x:r,y:n}:(t.x=r,t.y=n,t)}});return e}),define("hilo/event/EventMixin",["hilo/core/Class"],function(t){var e={_listeners:null,on:function(t,e,i){for(var r=this._listeners=this._listeners||{},n=r[t]=r[t]||[],a=0,o=n.length;o>a;a++){var s=n[a];if(s.listener===e)return}return n.push({listener:e,once:i}),this},off:function(t,e){if(0==arguments.length)return this._listeners=null,this;var i=this._listeners&&this._listeners[t];if(i){if(1==arguments.length)return delete this._listeners[t],this;for(var r=0,n=i.length;n>r;r++){var a=i[r];if(a.listener===e){i.splice(r,1),0===i.length&&delete this._listeners[t];break}}}return this},fire:function(t,e){var r,n;"string"==typeof t?n=t:(r=t,n=t.type);var a=this._listeners;if(!a)return!1;var o=a[n];if(o){if(o=o.slice(0),r=r||new i(n,this,e),r._stopped)return!1;for(var s=0;s0?(t===this.stage&&this.context.clearRect(0,0,t.width,t.height),this.context.save(),!0):!1},draw:function(t){var e=this.context,i=t.width,r=t.height,n=t.background;n&&(e.fillStyle=n,e.fillRect(0,0,i,r));var a=t.drawable,o=a&&a.image;if(o){var s=a.rect,h=s[2],l=s[3],c=s[4],u=s[5];if(!h||!l)return;i||r||(i=t.width=h,r=t.height=l),(c||u)&&e.translate(c-.5*h,u-.5*l),e.drawImage(o,s[0],s[1],h,l,0,0,i,r)}},endDraw:function(t){this.context.restore()},transform:function(t){var i=t.drawable;if(i&&i.domElement)return void e.setElementStyleByView(t);var r=this.context,n=t.scaleX,a=t.scaleY;if(t===this.stage){var o=this.canvas.style,s=t._scaleX,h=t._scaleY;(!s&&1!=n||s&&s!=n)&&(t._scaleX=n,o.width=n*t.width+"px"),(!h&&1!=a||h&&h!=a)&&(t._scaleY=a,o.height=a*t.height+"px")}else{var l=t.x,c=t.y,u=t.pivotX,d=t.pivotY,f=t.rotation%360,p=t.mask;p&&(p._render(this),r.clip());var v=t.align;if(v)if("function"==typeof v)t.align();else{var m=t.parent;if(m){var g=t.width,_=t.height,x=m.width,y=m.height;switch(v){case"TL":l=0,c=0;break;case"T":l=x-g>>1,c=0;break;case"TR":l=x-g,c=0;break;case"L":l=0,c=y-_>>1;break;case"C":l=x-g>>1,c=y-_>>1;break;case"R":l=x-g,c=y-_>>1;break;case"BL":l=0,c=y-_;break;case"B":l=x-g>>1,c=y-_;break;case"BR":l=x-g,c=y-_}}}(0!=l||0!=c)&&r.translate(l,c),0!=f&&r.rotate(f*Math.PI/180),(1!=n||1!=a)&&r.scale(n,a),(0!=u||0!=d)&&r.translate(-u,-d)}t.alpha>0&&(r.globalAlpha*=t.alpha)},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},clear:function(t,e,i,r){this.context.clearRect(t,e,i,r)},resize:function(t,e){this.canvas.width=t,this.canvas.height=e}});return r}),define("hilo/renderer/DOMRenderer",["hilo/core/Class","hilo/core/Hilo","hilo/renderer/Renderer","hilo/view/Drawable"],function(t,e,i,r){var n=function(){function a(t,i){var r=t.tagName||"div",n=i.image,a=t.width||n&&n.width,o=t.height||n&&n.height,s=e.createElement(r),h=s.style;if(t.id&&(s.id=t.id),h.position="absolute",h.left=(t.left||0)+"px",h.top=(t.top||0)+"px",h.width=a+"px",h.height=o+"px","canvas"==r){if(s.width=a,s.height=o,n){var l=s.getContext("2d"),c=i.rect||[0,0,a,o];l.drawImage(n,c[0],c[1],c[2],c[3],t.x||0,t.y||0,t.width||c[2],t.height||c[3])}}else if(h.opacity=void 0!=t.alpha?t.alpha:1,(t===this.stage||t.clipChildren)&&(h.overflow="hidden"),n&&n.src){h.backgroundImage="url("+n.src+")";var u=t.rectX||0,d=t.rectY||0;h.backgroundPosition=-u+"px "+-d+"px"}return s}return t.create({Extends:i,constructor:function(t){n.superclass.constructor.call(this,t)},renderType:"dom",startDraw:function(t){var e=t.drawable=t.drawable||new r;return e.domElement=e.domElement||a(t,e),!0},draw:function(t){var e=t.parent,i=t.drawable.domElement,r=i.parentNode;if(e){var n=e.drawable.domElement;if(n!=r&&n.appendChild(i),!t.width&&!t.height){var a=t.drawable.rect;a&&(a[2]||a[3])&&(t.width=a[2],t.height=a[3])}}else t!==this.stage||r||(i.style.overflow="hidden",this.canvas.appendChild(i))},transform:function(t){if(e.setElementStyleByView(t),t===this.stage){var i=this.canvas.style,r=t._scaleX,n=t._scaleY,a=t.scaleX,o=t.scaleY;(!r&&1!=a||r&&r!=a)&&(t._scaleX=a,i.width=a*t.width+"px"),(!n&&1!=o||n&&n!=o)&&(t._scaleY=o,i.height=o*t.height+"px")}},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},hide:function(t){var e=t.drawable&&t.drawable.domElement;e&&(e.style.display="none")},resize:function(t,e){var i=this.canvas.style;i.width=t+"px",i.height=e+"px","absolute"!=i.position&&(i.position="relative")}})}();return n}),define("hilo/renderer/WebGLRenderer",["hilo/core/Class","hilo/renderer/Renderer","hilo/geom/Matrix"],function(t,e,i){var r=Math.PI/180,n=t.create({Extends:e,Statics:{MAX_BATCH_NUM:2e3,ATTRIBUTE_NUM:5,isSupport:null},renderType:"webgl",gl:null,constructor:function(t){window.__render=this,n.superclass.constructor.call(this,t);var e=this.gl=this.canvas.getContext("webgl")||this.canvas.getContext("experimental-webgl");this.maxBatchNum=n.MAX_BATCH_NUM,this.positionStride=4*n.ATTRIBUTE_NUM;var i=this.maxBatchNum*n.ATTRIBUTE_NUM*4,r=6*this.maxBatchNum;this.positions=new Float32Array(i),this.indexs=new Uint16Array(r);for(var a=0,o=0;r>a;a+=6,o+=4)this.indexs[a+0]=o+0,this.indexs[a+1]=o+1,this.indexs[a+2]=o+2,this.indexs[a+3]=o+1,this.indexs[a+4]=o+2,this.indexs[a+5]=o+3;this.batchIndex=0,this.sprites=[],e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA),e.clearColor(0,0,0,0),e.disable(e.DEPTH_TEST),e.disable(e.CULL_FACE),e.enable(e.BLEND),this._initShaders(),this.defaultShader.active(),this.positionBuffer=e.createBuffer(),this.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,this.indexs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,this.positionBuffer),e.bufferData(e.ARRAY_BUFFER,this.positions,e.DYNAMIC_DRAW),e.vertexAttribPointer(this.a_position,2,e.FLOAT,!1,this.positionStride,0),e.vertexAttribPointer(this.a_TexCoord,2,e.FLOAT,!1,this.positionStride,8),e.vertexAttribPointer(this.a_alpha,1,e.FLOAT,!1,this.positionStride,16)},context:null,startDraw:function(t){return t.visible&&t.alpha>0?(t===this.stage&&this.clear(),!0):!1},draw:function(t){var e=(this.context,t.width),i=t.height,r=(t.background,t.drawable),n=r&&r.image;if(n){this.gl;n.texture||this.activeShader.uploadTexture(n);var a=r.rect,o=a[2],s=a[3];a[4],a[5];e||i||(e=t.width=o,i=t.height=s),this.batchIndex>=this.maxBatchNum&&this._renderBatches();var h=this._createVertexs(n,a[0],a[1],o,s,0,0,e,i),l=this.batchIndex*this.positionStride,c=this.positions,u=t.__webglRenderAlpha;c[l+0]=h[0],c[l+1]=h[1],c[l+2]=h[2],c[l+3]=h[3],c[l+4]=u,c[l+5]=h[4],c[l+6]=h[5],c[l+7]=h[6],c[l+8]=h[7],c[l+9]=u,c[l+10]=h[8],c[l+11]=h[9],c[l+12]=h[10],c[l+13]=h[11],c[l+14]=u,c[l+15]=h[12],c[l+16]=h[13],c[l+17]=h[14],c[l+18]=h[15],c[l+19]=u;for(var d=t.__webglWorldMatrix,f=0;4>f;f++){var p=c[l+5*f],v=c[l+5*f+1];c[l+5*f]=d.a*p+d.c*v+d.tx,c[l+5*f+1]=d.b*p+d.d*v+d.ty}t.texture=n.texture,this.sprites[this.batchIndex++]=t}},endDraw:function(t){t===this.stage&&this._renderBatches()},transform:function(t){var e=t.drawable;if(e&&e.domElement)return void Hilo.setElementStyleByView(t);var r=(this.context,t.scaleX),n=t.scaleY;if(t===this.stage){var a=this.canvas.style,o=t._scaleX,s=t._scaleY;(!o&&1!=r||o&&o!=r)&&(t._scaleX=r,a.width=r*t.width+"px"),(!s&&1!=n||s&&s!=n)&&(t._scaleY=n,a.height=n*t.height+"px"),t.__webglWorldMatrix=t.__webglWorldMatrix||new i(1,0,0,1,0,0)}else t.__webglWorldMatrix=t.__webglWorldMatrix||new i(1,0,0,1,0,0),this._setConcatenatedMatrix(t,t.parent);t.alpha>0&&(t.parent&&t.parent.__webglRenderAlpha?t.__webglRenderAlpha=t.alpha*t.parent.__webglRenderAlpha:t.__webglRenderAlpha=t.alpha)},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},clear:function(t,e,i,r){this.gl.clear(this.gl.COLOR_BUFFER_BIT)},resize:function(t,e){(this.width!==t||this.height!==e)&&(this.width=this.canvas.width=t,this.height=this.canvas.height=e,this.gl.viewport(0,0,t,e),this.canvasHalfWidth=.5*t,this.canvasHalfHeight=.5*e,this._uploadProjectionTransform(!0))},_renderBatches:function(){var t=this.gl;t.bufferSubData(t.ARRAY_BUFFER,0,this.positions.subarray(0,this.batchIndex*this.positionStride));for(var e=0,i=0,r=null,n=0;n0&&(i.bindTexture(i.TEXTURE_2D,this.sprites[t].texture),i.drawElements(i.TRIANGLES,6*r,i.UNSIGNED_SHORT,6*t*2))},_uploadProjectionTransform:function(t){(!this._projectionTransformElements||t)&&(this._projectionTransformElements=new Float32Array([1/this.canvasHalfWidth,0,0,0,-1/this.canvasHalfHeight,0,-1,1,1])),this.gl.uniformMatrix3fv(this.u_projectionTransform,!1,this._projectionTransformElements)},_initShaders:function(){var t=" attribute vec2 a_position;\n attribute vec2 a_TexCoord;\n attribute float a_alpha;\n uniform mat3 u_projectionTransform;\n varying vec2 v_TexCoord;\n varying float v_alpha;\n void main(){\n gl_Position = vec4((u_projectionTransform * vec3(a_position, 1.0)).xy, 1.0, 1.0);\n v_TexCoord = a_TexCoord;\n v_alpha = a_alpha;\n }\n ",e="\n precision mediump float;\n uniform sampler2D u_Sampler;\n varying vec2 v_TexCoord;\n varying float v_alpha;\n void main(){\n gl_FragColor = texture2D(u_Sampler, v_TexCoord) * v_alpha;\n }\n ";this.defaultShader=new o(this,{v:t,f:e},{attributes:["a_position","a_TexCoord","a_alpha"],uniforms:["u_projectionTransform","u_Alpha","u_Sampler"]})},_createVertexs:function(t,e,i,r,n,a,o,s,h){var l=this.__tempVertexs||[],c=t.width,u=t.height;r/=c,n/=u,e/=c,i/=u,s=s,h=h,a=a,o=o,r+e>1&&(r=1-e),n+i>1&&(n=1-i);var d=0;return l[d++]=a,l[d++]=o,l[d++]=e,l[d++]=i,l[d++]=a+s,l[d++]=o,l[d++]=e+r,l[d++]=i,l[d++]=a,l[d++]=o+h,l[d++]=e,l[d++]=i+n,l[d++]=a+s,l[d++]=o+h,l[d++]=e+r,l[d++]=i+n,l},_setConcatenatedMatrix:function(t,e){var i=t.__webglWorldMatrix,n=1,a=0,o=t.rotation%360,s=t.pivotX,h=t.pivotY,l=t.scaleX,c=t.scaleY;if(o){var u=o*r;n=Math.cos(u),a=Math.sin(u)}i.a=n*l,i.b=a*l,i.c=-a*c,i.d=n*c,i.tx=t.x-i.a*s-i.c*h,i.ty=t.y-i.b*s-i.d*h,i.concat(e.__webglWorldMatrix)}}),a={},o=function(t,e,i){this.renderer=t,this.gl=t.gl,this.program=this._createProgram(this.gl,e.v,e.f),i=i||{},this.attributes=i.attributes||[],this.uniforms=i.uniforms||[]};return o.prototype={active:function(){var t=this,e=t.renderer,i=t.gl,r=t.program;r&&i&&(e.activeShader=t,i.useProgram(r),t.attributes.forEach(function(t){e[t]=i.getAttribLocation(r,t),i.enableVertexAttribArray(e[t])}),t.uniforms.forEach(function(t){e[t]=i.getUniformLocation(r,t)}),(t.width!==e.width||t.height!==e.height)&&(t.width=e.width,t.height=e.height,e._uploadProjectionTransform()))},uploadTexture:function(t){var e=this.gl,i=this.renderer;if(a[t.src])t.texture=a[t.src];else{var r=e.createTexture(),n=i.u_Sampler;e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,r),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.uniform1i(n,0),e.bindTexture(e.TEXTURE_2D,null),t.texture=r,a[t.src]=r}},_createProgram:function(t,e,i){var r=this._createShader(t,t.VERTEX_SHADER,e),n=this._createShader(t,t.FRAGMENT_SHADER,i);if(!r||!n)return null;var a=t.createProgram();if(a){t.attachShader(a,r),t.attachShader(a,n),t.linkProgram(a),t.deleteShader(n),t.deleteShader(r);var o=t.getProgramParameter(a,t.LINK_STATUS);if(!o){var s=t.getProgramInfoLog(a);return console.log("Failed to link program: "+s),t.deleteProgram(a),null}}return a},_createShader:function(t,e,i){var r=t.createShader(e);if(r){t.shaderSource(r,i),t.compileShader(r);var n=t.getShaderParameter(r,t.COMPILE_STATUS);if(!n){var a=t.getShaderInfoLog(r);return console.log("Failed to compile shader: "+a),t.deleteShader(r),null}}return r}},n.isSupport=function(){if(void 0!==this._isSupport)return this._isSupport;var t=document.createElement("canvas");return t.getContext&&(t.getContext("webgl")||t.getContext("experimental-webgl"))?this._isSupport=!0:this._isSupport=!1,this._isSupport},n}),define("hilo/view/View",["hilo/core/Hilo","hilo/core/Class","hilo/event/EventMixin","hilo/geom/Matrix"],function(t,e,i,r){var n=function(){function n(t,e,i){for(var r,n,a,o,s=0,h=!1,l=0,c=i.length;c>l;l++){var u=i[l],d=i[(l+1)%c];if(u.y==d.y&&e==u.y&&(u.x>d.x?(r=d.x,n=u.x):(r=u.x,n=d.x),t>=r&&n>=t))h=!0;else if(u.y>d.y?(a=d.y,o=u.y):(a=u.y,o=d.y),!(a>e||e>o)){var f=(e-u.y)*(d.x-u.x)/(d.y-u.y)+u.x;if(f>t?s++:f==t&&(h=!0),u.x>t&&u.y==e){var p=i[(c+l-1)%c];(p.ye||p.y>e&&d.yv;v++){r=t[v],n=t[d-1>v?v+1:0],p.x=r.y-n.y,p.y=n.x-r.x,a=Math.sqrt(p.x*p.x+p.y*p.y),p.x/=a,p.y/=a,o=s=t[0].x*p.x+t[0].y*p.y;for(var m=1;d>m;m++)c=t[m].x*p.x+t[m].y*p.y,c>s?s=c:o>c&&(o=c);for(h=l=e[0].x*p.x+e[0].y*p.y,m=1;f>m;m++)c=e[m].x*p.x+e[m].y*p.y,c>l?l=c:h>c&&(h=c);if(h>o?(u=h-s,p.x=-p.x,p.y=-p.y):u=o-l,u>=0)return!1;u>i.overlap&&(i.overlap=u,i.normal.x=p.x,i.normal.y=p.y)}return i}return e.create({Mixes:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("View"),t.copy(this,e,!0)},id:null,x:0,y:0,width:0,height:0,alpha:1,rotation:0,visible:!0,pivotX:0,pivotY:0,scaleX:1,scaleY:1,pointerEnabled:!0,background:null,mask:null,align:null,drawable:null,boundsArea:null,parent:null,depth:-1,getStage:function(){for(var t,e=this;t=e.parent;)e=t;return e.canvas?e:null},getScaledWidth:function(){return this.width*this.scaleX},getScaledHeight:function(){return this.height*this.scaleY},addTo:function(t,e){return"number"==typeof e?t.addChildAt(this,e):t.addChild(this),this},removeFromParent:function(){var t=this.parent;return t&&t.removeChild(this),this},getBounds:function(){for(var t,e,i,r,n,a,o,s=this.width,h=this.height,l=this.getConcatenatedMatrix(),c=this.boundsArea||[{x:0,y:0},{x:s,y:0},{x:s,y:h},{x:0,y:h}],u=[],d=0,f=c.length;f>d;d++)t=l.transformPoint(c[d],!0,!0),e=t.x,i=t.y,0==d?(r=n=e,a=o=i):(r>e?r=e:e>n&&(n=e),a>i?a=i:i>o&&(o=i)),u[d]=t;return u.x=r,u.y=a,u.width=n-r,u.height=o-a,u},getConcatenatedMatrix:function(t){for(var e=new r(1,0,0,1,0,0),i=this;i!=t&&i.parent;i=i.parent){var n=1,a=0,o=i.rotation%360,s=i.pivotX,h=i.pivotY,l=i.scaleX,c=i.scaleY;if(o){var u=o*Math.PI/180;n=Math.cos(u),a=Math.sin(u)}0!=s&&(e.tx-=s),0!=h&&(e.ty-=h),e.concat(n*l,a*l,-a*c,n*c,i.x,i.y)}return e},hitTestPoint:function(t,e,i){var r=this.getBounds(),a=t>=r.x&&t<=r.x+r.width&&e>=r.y&&e<=r.y+r.height;return a&&i&&(a=n(t,e,r)),a},hitTestObject:function(t,e){var i=this.getBounds(),r=t.getBounds(),n=i.x<=r.x+r.width&&r.x<=i.x+i.width&&i.y<=r.y+r.height&&r.y<=i.y+i.height;return n&&e&&(n=a(i,r)),!!n},_render:function(t,e){this.onUpdate&&this.onUpdate(e)===!1||!t.startDraw(this)||(t.transform(this),this.render(t,e),t.endDraw(this))},_fireMouseEvent:function(e){if(e.eventCurrentTarget=this,this.fire(e),"mousemove"==e.type){if(!this.__mouseOver){this.__mouseOver=!0;var i=t.copy({},e);i.type="mouseover",this.fire(i)}}else"mouseout"==e.type&&(this.__mouseOver=!1);var r=this.parent;e._stopped||e._stopPropagationed||!r||("mouseout"==e.type||"touchout"==e.type?r.hitTestPoint(e.stageX,e.stageY,!0)||r._fireMouseEvent(e):r._fireMouseEvent(e))},onUpdate:null,render:function(t,e){t.draw(this)},toString:function(){return t.viewToString(this)}})}();return n}),define("hilo/view/CacheMixin",["hilo/core/Hilo","hilo/core/Class","hilo/view/Drawable"],function(t,e,i){var r=t.createElement("canvas"),n=r.getContext("2d"),a={_cacheDirty:!0,cache:function(t){(t||this._cacheDirty||!this._cacheImage)&&this.updateCache()},updateCache:function(){r.width=this.width,r.height=this.height,this._draw(n),this._cacheImage=new Image,this._cacheImage.src=r.toDataURL(),this.drawable=this.drawable||new i,this.drawable.init(this._cacheImage),this._cacheDirty=!1},setCacheDirty:function(t){this._cacheDirty=t}};return a}),define("hilo/view/Container",["hilo/core/Hilo","hilo/core/Class","hilo/view/View"],function(t,e,i){var r=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Container"),r.superclass.constructor.call(this,e),this.children?this._updateChildren():this.children=[]},children:null,pointerChildren:!0,clipChildren:!1,getNumChildren:function(){return this.children.length},addChildAt:function(t,e){var i=this.children,r=i.length,n=t.parent;e=0>e?0:e>r?r:e;var a=this.getChildIndex(t);if(a==e)return this;if(a>=0?(i.splice(a,1),e=e==r?r-1:e):n&&n.removeChild(t),i.splice(e,0,t),0>a)this._updateChildren(e);else{var o=e>a?a:e,s=e>a?e:a;this._updateChildren(o,s+1)}return this},addChild:function(t){for(var e=this.children.length,i=arguments,r=0,n=i.length;n>r;r++)this.addChildAt(i[r],e+r);return this},removeChildAt:function(t){var e=this.children;if(0>t||t>=e.length)return null;var i=e[t];if(i){if(!i.__renderer)for(var r=i;r=r.parent;){if(r.renderer){i.__renderer=r.renderer;break}if(r.__renderer){i.__renderer=r.__renderer;break}}i.__renderer&&i.__renderer.remove(i),i.parent=null,i.depth=-1}return e.splice(t,1),this._updateChildren(t),i},removeChild:function(t){return this.removeChildAt(this.getChildIndex(t))},removeChildById:function(t){for(var e,i=this.children,r=0,n=i.length;n>r;r++)if(e=i[r],e.id===t)return this.removeChildAt(r),e;return null},removeAllChildren:function(){for(;this.children.length;)this.removeChildAt(0);return this},getChildAt:function(t){var e=this.children;return 0>t||t>=e.length?null:e[t]},getChildById:function(t){for(var e,i=this.children,r=0,n=i.length;n>r;r++)if(e=i[r],e.id===t)return e;return null},getChildIndex:function(t){return this.children.indexOf(t)},setChildIndex:function(t,e){var i=this.children,r=i.indexOf(t);if(r>=0&&r!=e){var n=i.length;e=0>e?0:e>=n?n-1:e,i.splice(r,1),i.splice(e,0,t),this._updateChildren()}return this},swapChildren:function(t,e){var i=this.children,r=this.getChildIndex(t),n=this.getChildIndex(e);t.depth=n,i[n]=t,e.depth=r,i[r]=e},swapChildrenAt:function(t,e){var i=this.children,r=this.getChildAt(t),n=this.getChildAt(e);r.depth=e,i[e]=r,n.depth=t,i[t]=n},sortChildren:function(t){var e=t,i=this.children;if("string"==typeof e){var r=e;e=function(t,e){return e[r]-t[r]}}i.sort(e),this._updateChildren()},_updateChildren:function(t,e){for(var i,r=this.children,t=t||0,e=e||r.length,n=t;e>n;n++)i=r[n],i.depth=n+1,i.parent=this},contains:function(t){for(;t=t.parent;)if(t===this)return!0;return!1},getViewAtPoint:function(t,e,i,r,n){for(var a,o,s=r?[]:null,h=this.children,l=h.length-1;l>=0;l--)if(a=h[l],!(!a||!a.visible||a.alpha<=0||n&&!a.pointerEnabled))if(a.children&&a.children.length&&(!n||a.pointerChildren)&&(o=a.getViewAtPoint(t,e,i,r,n)),o){if(!r)return o;o.length&&(s=s.concat(o))}else if(a.hitTestPoint(t,e,i)){if(!r)return a;s.push(a)}return r&&s.length?s:null},render:function(t,e){r.superclass.render.call(this,t,e);var i,n,a,o=this.children.slice(0);for(i=0,n=o.length;n>i;i++)a=o[i],a.parent===this&&a._render(t,e)}});return r}),define("hilo/view/Stage",["hilo/core/Hilo","hilo/core/Class","hilo/view/Container","hilo/renderer/CanvasRenderer","hilo/renderer/DOMRenderer","hilo/renderer/WebGLRenderer"],function(t,e,i,r,n,a){var o=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Stage"),o.superclass.constructor.call(this,e),this._initRenderer(e);var i=this.width,r=this.height,n=this.updateViewport();e.width||(i=n&&n.width||320),e.height||(r=n&&n.height||480),this.resize(i,r,!0)},canvas:null,renderer:null,paused:!1,viewport:null,_initRenderer:function(e){var i=e.canvas,o=e.container,s=e.renderType||"canvas";if("string"==typeof i&&(i=t.getElement(i)),"string"==typeof o&&(o=t.getElement(o)),i)i.getContext||(s="dom");else{var h="dom"===s?"div":"canvas";i=t.createElement(h,{style:{position:"absolute"}})}this.canvas=i,o&&o.appendChild(i);var l={canvas:i,stage:this};switch(s){case"dom":this.renderer=new n(l);break;case"webgl":a.isSupport()?this.renderer=new a(l):this.renderer=new r(l);break;case"canvas":default:this.renderer=new r(l)}},addTo:function(t){var e=this.canvas;return e.parentNode!==t&&t.appendChild(e),this},tick:function(t){this.paused||this._render(this.renderer,t)},enableDOMEvent:function(t,e){for(var i=this,r=i.canvas,n="string"==typeof t?[t]:t,e=e!==!1,a=i._domListener||(i._domListener=function(t){i._onDOMEvent(t)}),o=0;or;r++)this.setFrame(t[r],i+r);else this.setFrame(t,i);return this},setFrame:function(t,e){var i=this._frames,r=i.length;return e=0>e?0:e>r?r:e,i[e]=t,t.name&&(this._frameNames[t.name]=t),(0==e&&!this.width||!this.height)&&(this.width=t.rect[2],this.height=t.rect[3]),this},getFrame:function(t){if("number"==typeof t){var e=this._frames;return 0>t||t>=e.length?null:e[t];
-}return this._frameNames[t]},getFrameIndex:function(t){var e=this._frames,i=e.length,r=-1;if("number"==typeof t)r=t;else{var n="string"==typeof t?this._frameNames[t]:t;if(n)for(var a=0;i>a;a++)if(n===e[a]){r=a;break}}return r},play:function(){return this.paused=!1,this},stop:function(){return this.paused=!0,this},"goto":function(t,e){var i=this._frames.length,r=this.getFrameIndex(t);return this.currentFrame=0>r?0:r>=i?i-1:r,this.paused=e,this._firstRender=!0,this},_render:function(t,e){var i,r=this.currentFrame;if(this._firstRender?(i=r,this._firstRender=!1):i=this._nextFrame(e),i!=r){this.currentFrame=i;var a=this._frames[i].callback;a&&a.call(this)}this.onEnterFrame&&this.onEnterFrame(i),this.drawable.init(this._frames[i]),n.superclass._render.call(this,t,e)},_nextFrame:function(t){var e=this._frames,i=e.length,r=this.currentFrame,n=e[r],a=n.duration||this.interval,o=this._frameElapsed,s=0!=r||this.drawable?o+(this.timeBased?t:1):0;return o=this._frameElapsed=a>s?s:0,(n.stop||!this.loop&&r>=i-1)&&this.stop(),this.paused||0!=o||(null!=n.next?r=this.getFrameIndex(n.next):r>=i-1?r=0:this.drawable&&r++),r},setFrameCallback:function(t,e){return t=this.getFrame(t),t&&(t.callback=e),this},onEnterFrame:null});return n}),define("hilo/view/DOMElement",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Drawable"],function(t,e,i,r){var n=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("DOMElement"),n.superclass.constructor.call(this,e),this.drawable=new r;var i=this.drawable.domElement=e.element||t.createElement("div");i.id=this.id},_render:function(t,e){this.onUpdate&&this.onUpdate(e)===!1||(t.transform(this),this.visible&&this.alpha>0&&this.render(t,e))},render:function(t,e){var i=t.canvas;if(i.getContext){var r,n=this.drawable.domElement,a=this.depth,o=i.nextSibling;if(n.parentNode)return;for(;o&&3!=o.nodeType&&(r=parseInt(o.style.zIndex)||0,!(0>=r||r>a));)o=o.nextSibling;i.parentNode.insertBefore(this.drawable.domElement,o)}else t.draw(this)}});return n}),define("hilo/view/Graphics",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/CacheMixin"],function(t,e,i,r){var n=function(){var a=document.createElement("canvas"),o=a.getContext&&a.getContext("2d");return e.create({Extends:i,Mixes:r,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Graphics"),n.superclass.constructor.call(this,e),this._actions=[]},lineWidth:1,lineAlpha:1,lineCap:null,lineJoin:null,miterLimit:10,hasStroke:!1,strokeStyle:"0",hasFill:!1,fillStyle:"0",fillAlpha:0,lineStyle:function(t,e,i,r,n,a){var o=this,s=o._addAction;return s.call(o,["lineWidth",o.lineWidth=t||1]),s.call(o,["strokeStyle",o.strokeStyle=e||"0"]),s.call(o,["lineAlpha",o.lineAlpha=i||1]),void 0!=r&&s.call(o,["lineCap",o.lineCap=r]),void 0!=n&&s.call(o,["lineJoin",o.lineJoin=n]),void 0!=a&&s.call(o,["miterLimit",o.miterLimit=a]),o.hasStroke=!0,o},beginFill:function(t,e){var i=this,r=i._addAction;return r.call(i,["fillStyle",i.fillStyle=t]),r.call(i,["fillAlpha",i.fillAlpha=e||1]),i.hasFill=!0,i},endFill:function(){var t=this,e=t._addAction;return t.hasStroke&&e.call(t,["stroke"]),t.hasFill&&e.call(t,["fill"]),t.setCacheDirty(!0),t},beginLinearGradientFill:function(t,e,i,r,n,a){for(var s=this,h=o.createLinearGradient(t,e,i,r),l=0,c=n.length;c>l;l++)h.addColorStop(a[l],n[l]);return s.hasFill=!0,s._addAction(["fillStyle",s.fillStyle=h])},beginRadialGradientFill:function(t,e,i,r,n,a,s,h){for(var l=this,c=o.createRadialGradient(t,e,i,r,n,a),u=0,d=s.length;d>u;u++)c.addColorStop(h[u],s[u]);return l.hasFill=!0,l._addAction(["fillStyle",l.fillStyle=c])},beginBitmapFill:function(t,e){var i=this,r=o.createPattern(t,e||"");return i.hasFill=!0,i._addAction(["fillStyle",i.fillStyle=r])},beginPath:function(){return this._addAction(["beginPath"])},closePath:function(){return this._addAction(["closePath"])},moveTo:function(t,e){return this._addAction(["moveTo",t,e])},lineTo:function(t,e){return this._addAction(["lineTo",t,e])},quadraticCurveTo:function(t,e,i,r){return this._addAction(["quadraticCurveTo",t,e,i,r])},bezierCurveTo:function(t,e,i,r,n,a){return this._addAction(["bezierCurveTo",t,e,i,r,n,a])},drawRect:function(t,e,i,r){return this._addAction(["rect",t,e,i,r])},drawRoundRectComplex:function(t,e,i,r,n,a,o,s){var h=this,l=h._addAction;return l.call(h,["moveTo",t+n,e]),l.call(h,["lineTo",t+i-a,e]),l.call(h,["arc",t+i-a,e+a,a,-Math.PI/2,0,!1]),l.call(h,["lineTo",t+i,e+r-o]),l.call(h,["arc",t+i-o,e+r-o,o,0,Math.PI/2,!1]),l.call(h,["lineTo",t+s,e+r]),l.call(h,["arc",t+s,e+r-s,s,Math.PI/2,Math.PI,!1]),l.call(h,["lineTo",t,e+n]),l.call(h,["arc",t+n,e+n,n,Math.PI,3*Math.PI/2,!1]),h},drawRoundRect:function(t,e,i,r,n){return this.drawRoundRectComplex(t,e,i,r,n,n,n,n)},drawCircle:function(t,e,i){return this._addAction(["arc",t+i,e+i,i,0,2*Math.PI,0])},drawEllipse:function(t,e,i,r){var n=this;if(i==r)return n.drawCircle(t,e,i);var a=n._addAction,o=i/2,s=r/2,h=.5522847498307933,l=h*o,c=h*s;return t+=o,e+=s,a.call(n,["moveTo",t+o,e]),a.call(n,["bezierCurveTo",t+o,e-c,t+l,e-s,t,e-s]),a.call(n,["bezierCurveTo",t-l,e-s,t-o,e-c,t-o,e]),a.call(n,["bezierCurveTo",t-o,e+c,t-l,e+s,t,e+s]),a.call(n,["bezierCurveTo",t+l,e+s,t+o,e+c,t+o,e]),n},drawSVGPath:function(t){var e=this,i=e._addAction,r=t.split(/,| (?=[a-zA-Z])/);i.call(e,["beginPath"]);for(var n=0,a=r.length;a>n;n++){var o=r[n],s=o[0].toUpperCase(),h=o.substring(1).split(/,| /);switch(0==h[0].length&&h.shift(),s){case"M":i.call(e,["moveTo",h[0],h[1]]);break;case"L":i.call(e,["lineTo",h[0],h[1]]);break;case"C":i.call(e,["bezierCurveTo",h[0],h[1],h[2],h[3],h[4],h[5]]);break;case"Z":i.call(e,["closePath"])}}return e},_draw:function(t){var e,i=this,r=i._actions,n=r.length;for(t.beginPath(),e=0;n>e;e++){var a=r[e],o=a[0],s=a.length>1?a.slice(1):null;"function"==typeof t[o]?t[o].apply(t,s):t[o]=a[1]}},render:function(t,e){var i=this;t.canvas;"canvas"===t.renderType?i._draw(t.context):(i.cache(),t.draw(i))},clear:function(){var t=this;return t._actions.length=0,t.lineWidth=1,t.lineAlpha=1,t.lineCap=null,t.lineJoin=null,t.miterLimit=10,t.hasStroke=!1,t.strokeStyle="0",t.hasFill=!1,t.fillStyle="0",t.fillAlpha=1,t.setCacheDirty(!0),t},_addAction:function(t){var e=this;return e._actions.push(t),e}})}();return n}),define("hilo/view/Text",["hilo/core/Class","hilo/core/Hilo","hilo/view/View","hilo/view/CacheMixin"],function(t,e,i,r){var n=t.create({Extends:i,Mixes:r,constructor:function(t){t=t||{},this.id=this.id||t.id||e.getUid("Text"),n.superclass.constructor.call(this,t),t.font||(this.font="12px arial"),this._fontHeight=n.measureFontHeight(this.font)},text:null,color:"#000",textAlign:null,textVAlign:null,outline:!1,lineSpacing:0,maxWidth:200,font:null,textWidth:0,textHeight:0,setFont:function(t){var e=this;return e.font!==t&&(e.font=t,e._fontHeight=n.measureFontHeight(t)),e},render:function(t,e){var i=this;t.canvas;if("canvas"===t.renderType)i._draw(t.context);else if("dom"===t.renderType){var r=i.drawable,n=r.domElement,a=n.style;a.font=i.font,a.textAlign=i.textAlign,a.color=i.color,a.width=i.width+"px",a.height=i.height+"px",a.lineHeight=i._fontHeight+i.lineSpacing+"px",n.innerHTML=i.text,t.draw(this)}else i.cache(),t.draw(i)},_draw:function(t){var e=this,i=e.text.toString();if(i){t.font=e.font,t.textAlign=e.textAlign,t.textBaseline="top";var r,n,a,o=i.split(/\r\n|\r|\n|
/),s=0,h=0,l=e._fontHeight+e.lineSpacing,c=[];for(r=0,len=o.length;rs&&(s=a),h+=l;else{var u,d,f,p="",v=0;for(d=0,wlen=n.length;de.maxWidth?(c.push({text:p,y:h}),v>s&&(s=v),h+=l,p=f):(v=u,p+=f),d==wlen-1&&(c.push({text:p,y:h}),p!==f&&u>s&&(s=u),h+=l)}e.textWidth=s,e.textHeight=h,e.width||(e.width=s),e.height||(e.height=h);var m=0;switch(e.textVAlign){case"middle":m=e.height-e.textHeight>>1;break;case"bottom":m=e.height-e.textHeight}var g=e.background;g&&(t.fillStyle=g,t.fillRect(0,0,e.width,e.height)),e.outline?t.strokeStyle=e.color:t.fillStyle=e.color;for(var r=0;r>1;break;case"right":case"end":n=a}r.outline?t.strokeText(e,n,i):t.fillText(e,n,i)},Statics:{measureFontHeight:function(t){var i,r=document.documentElement,n=e.createElement("div",{style:{font:t,position:"absolute"},innerHTML:"M"});return r.appendChild(n),i=n.offsetHeight,r.removeChild(n),i}}});return n}),define("hilo/view/BitmapText",["hilo/core/Class","hilo/core/Hilo","hilo/view/Container","hilo/view/Bitmap"],function(t,e,i,r){var n=t.create({Extends:i,constructor:function(t){t=t||{},this.id=this.id||t.id||e.getUid("BitmapText"),n.superclass.constructor.call(this,t);var i=t.text+"";i&&(this.text="",this.setText(i)),this.pointerChildren=!1},glyphs:null,letterSpacing:0,text:"",textAlign:"left",setText:function(t){var e=this,i=t.toString(),r=i.length;if(e.text!=i){e.text=i;var n,a,o,s,h=0,l=0,c=0;for(n=0;r>n;n++)a=i.charAt(n),o=e.glyphs[a],o&&(c=h+(h>0?e.letterSpacing:0),e.children[n]?(s=e.children[n],s.setImage(o.image,o.rect)):(s=e._createBitmap(o),e.addChild(s)),s.x=c,h=c+o.rect[2],l=Math.max(l,o.rect[3]));for(n=e.children.length-1;n>=r;n--)e._releaseBitmap(e.children[n]),e.children[n].removeFromParent();return e.width=h,e.height=l,this.setTextAlign(),e}},_createBitmap:function(t){var e;return n._pool.length?(e=n._pool.pop(),e.setImage(t.image,t.rect)):e=new r({image:t.image,rect:t.rect}),e},_releaseBitmap:function(t){n._pool.push(t)},setTextAlign:function(t){switch(this.textAlign=t||this.textAlign,this.textAlign){case"center":this.pivotX=.5*this.width;break;case"right":this.pivotX=this.width;break;case"left":default:this.pivotX=0}return this},hasGlyphs:function(t){var e=this.glyphs;if(!e)return!1;var i,t=t.toString(),r=t.length;for(i=0;r>i;i++)if(!e[t.charAt(i)])return!1;return!0},Statics:{_pool:[],createGlyphs:function(t,e,i,r){var n=t.toString();i=i||n.length,r=r||1;for(var a=e.width/i,o=e.height/r,s={},h=0,l=t.length;l>h;h++)charStr=n.charAt(h),s[charStr]={image:e,rect:[a*(h%i),o*Math.floor(h/i),a,o]};return s}}});return n}),define("hilo/view/Button",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Drawable"],function(t,e,i,r){var n=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Button"),n.superclass.constructor.call(this,e),this.drawable=new r(e),this.setState(n.UP)},upState:null,overState:null,downState:null,disabledState:null,state:null,enabled:!0,useHandCursor:!0,setEnabled:function(t){return this.enabled!=t&&(t?this.setState(n.UP):this.setState(n.DISABLED)),this},setState:function(e){if(this.state!==e){this.state=e,this.pointerEnabled=this.enabled=e!==n.DISABLED;var i;switch(e){case n.UP:i=this.upState;break;case n.OVER:i=this.overState;break;case n.DOWN:i=this.downState;break;case n.DISABLED:i=this.disabledState}i&&(this.drawable.init(i),t.copy(this,i,!0))}return this},fire:function(t,e){if(this.enabled){var i="string"==typeof t?t:t.type;switch(i){case"mousedown":case"touchstart":case"touchmove":this.setState(n.DOWN);break;case"mouseover":this.setState(n.OVER);break;case"mouseup":this.overState?this.setState(n.OVER):this.upState&&this.setState(n.UP);break;case"touchend":case"touchout":case"mouseout":this.setState(n.UP)}return n.superclass.fire.call(this,t,e)}},Statics:{UP:"up",OVER:"over",DOWN:"down",DISABLED:"disabled"}});return n}),define("hilo/util/TextureAtlas",["hilo/core/Class"],function(t){var e=function(){function e(t){var e=t.frames;if(!e)return null;var i,r=[];if(e instanceof Array)for(var n=0,a=e.length;a>n;n++)i=e[n],r[n]={image:t.image,rect:i};else for(var o=e.frameWidth,s=e.frameHeight,h=t.width/o|0,l=t.height/s|0,c=e.numFrames||h*l,n=0;c>n;n++)r[n]={image:t.image,rect:[n%h*o,(n/h|0)*s,o,s]};return r}function i(t,e){var i=t.sprites;if(!i)return null;var a,o,s,h={};for(var l in i){if(a=i[l],n(a))o=r(e[a]);else if(a instanceof Array){o=[];for(var c=0,u=a.length;u>c;c++){var d,f=a[c];n(f)?s=r(e[f]):(d=f.rect,n(d)&&(d=e[f.rect]),s=r(d,f)),o[c]=s}}else{o=[];for(var c=a.from;c<=a.to;c++)o[c-a.from]=r(e[c],a[c])}h[l]=o}return h}function r(t,e){var i={image:t.image,rect:t.rect};return e&&(i.name=e.name||null,i.duration=e.duration||0,i.stop=!!e.stop,i.next=e.next||null),i}function n(t){return"number"==typeof t}return t.create({constructor:function(t){this._frames=e(t),this._sprites=i(t,this._frames)},_frames:null,_sprites:null,getFrame:function(t){var e=this._frames;return e&&e[t]},getSprite:function(t){var e=this._sprites;return e&&e[t]},Statics:{createSpriteFrames:function(t,e,i,r,n,a,o){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],s=0,h=t.length;h>s;s++)e=e.concat(this.createSpriteFrames.apply(this,t[s]));return e}if("string"==typeof e){var l=e.split(",");e=[];for(var c=0,u=l.length;u>c;c++){var d=l[c].split("-");if(1==d.length)e.push(parseInt(d[0]));else for(var s=parseInt(d[0]),h=parseInt(d[1]);h>=s;s++)e.push(s)}}for(var f=Math.floor(i.width/r),s=0;s=this._targetFPS?(this._measuredFPS=1e3/(this._tickTime/this._tickCount)+.5>>0,this._tickCount=0,this._tickTime=0):this._tickTime+=t-this._lastTime,this._lastTime=t;for(var r=0,n=i.length;n>r;r++)i[r].tick(e)}},getMeasuredFPS:function(){return this._measuredFPS},addTick:function(t){if(!t||"function"!=typeof t.tick)throw new Error("Ticker: The tick object must implement the tick method.");this._tickers.push(t)},removeTick:function(t){var e=this._tickers,i=e.indexOf(t);i>=0&&e.splice(i,1)}});return i}),define(function(){var t=Array.prototype,e=t.slice;t.indexOf=t.indexOf||function(t,e){e=e||0;var i,r=this.length;if(0==r||e>=r)return-1;for(0>e&&(e=r+e),i=e;r>i;i++)if(this[i]===t)return i;return-1};var i=Function.prototype;i.bind=i.bind||function(t){function i(){var a=n.concat(e.call(arguments));return r.apply(this instanceof i?this:t,a)}var r=this,n=e.call(arguments,1),a=function(){};return a.prototype=r.prototype,i.prototype=new a,i}}),define("hilo/util/drag",["hilo/core/Class","hilo/core/Hilo"],function(t,e){var i={startDrag:function(t){function i(t){t.stopPropagation(),a(t),h.off(e.event.POINTER_START,i),h.fire("dragStart",l),h.__dragX=h.x-l.x,h.__dragY=h.y-l.y,s||(s=this.getStage()),s.on(e.event.POINTER_MOVE,n),document.addEventListener(e.event.POINTER_END,r)}function r(t){document.removeEventListener(e.event.POINTER_END,r),s&&s.off(e.event.POINTER_MOVE,n),h.fire("dragEnd",l),h.on(e.event.POINTER_START,i)}function n(t){a(t),h.fire("dragMove",l);var e=l.x+h.__dragX,i=l.y+h.__dragY;h.x=Math.max(c,Math.min(d,e)),h.y=Math.max(u,Math.min(f,i))}function a(t){l.preX=l.x,l.preY=l.y,l.x=t.stageX,l.y=t.stageY}function o(){document.removeEventListener(e.event.POINTER_END,r),s&&s.off(e.event.POINTER_MOVE,n),h.off(e.event.POINTER_START,i)}var s,h=this,t=t||[-(1/0),-(1/0),1/0,1/0],l={x:0,y:0,preX:0,preY:0},c=t[0],u=t[1],d=t[2]==1/0?1/0:c+t[2],f=t[3]==1/0?1/0:u+t[3];h.on(e.event.POINTER_START,i),h.stopDrag=o},stopDrag:function(){}};return i}),define("hilo/tween/Tween",["hilo/core/Class"],function(t){var e=function(){function i(){return+new Date}return t.create({constructor:function(t,e,i,r){var n=this;n.target=t,n._startTime=0,n._seekTime=0,n._pausedTime=0,n._pausedStartTime=0,n._reverseFlag=1,n._repeatCount=0,3==arguments.length&&(r=i,i=e,e=null);for(var a in r)n[a]=r[a];n.setProps(e,i),!r.duration&&r.time&&(n.duration=r.time||0,n.time=0)},target:null,duration:0,delay:0,paused:!1,loop:!1,reverse:!1,repeat:0,repeatDelay:0,ease:null,time:0,onStart:null,onUpdate:null,onComplete:null,setProps:function(t,e){var i=this,r=i.target,n=t||e,a=i._fromProps={},o=i._toProps={};t=t||r,e=e||r;for(var s in n)o[s]=e[s]||0,r[s]=a[s]=t[s]||0;return i},start:function(){var t=this;return t._startTime=i()+t.delay,t._seekTime=0,t._pausedTime=0,t.paused=!1,e.add(t),t},stop:function(){return e.remove(this),this},pause:function(){var t=this;return t.paused=!0,t._pausedStartTime=i(),t},resume:function(){var t=this;return t.paused=!1,t._pausedStartTime&&(t._pausedTime+=i()-t._pausedStartTime),t._pausedStartTime=0,t},seek:function(t,r){var n=this,a=i();return n._startTime=a,n._seekTime=t,n._pausedTime=0,void 0!==r&&(n.paused=r),n._update(a,!0),e.add(n),n},link:function(t){var i=this,r=t.delay,n=i._startTime;if("string"==typeof r){var a=0==r.indexOf("+"),o=0==r.indexOf("-");r=a||o?Number(r.substr(1))*(a?1:-1):Number(r)}return t.delay=r,t._startTime=a||o?n+i.duration+r:n+r,i._next=t,e.remove(t),i},_render:function(t){var e,i=this,r=i.target,n=i._fromProps;for(e in n)r[e]=n[e]+(i._toProps[e]-n[e])*t},_update:function(t,r){var n=this;if(!n.paused||r){var a=t-n._startTime-n._pausedTime+n._seekTime;if(!(0>a)){var o,s=a/n.duration,h=!1;s=0>=s?0:s>=1?1:n.ease?n.ease(s):s,n.reverse&&(n._reverseFlag<0&&(s=1-s),1e-7>s&&(n.repeat>0&&n._repeatCount++>=n.repeat||0==n.repeat&&!n.loop?h=!0:(n._startTime=i(),n._pausedTime=0,n._reverseFlag*=-1))),0==n.time&&(o=n.onStart)&&o.call(n,n),n.time=a,n._render(s),(o=n.onUpdate)&&o.call(n,s,n),s>=1&&(n.reverse?(n._startTime=i(),n._pausedTime=0,n._reverseFlag*=-1):n.loop||n.repeat>0&&n._repeatCount++0&&t>=c?(l._render(s),l.time=a,e.add(l)):h&&(0>c||c>t)&&l.start()}return h?((o=n.onComplete)&&o.call(n,n),!0):void 0}}},Statics:{_tweens:[],tick:function(){var t,r,n=e._tweens,a=n.length;for(r=0;a>r;r++)t=n[r],t&&t._update(i())&&(n.splice(r,1),r--);return e},add:function(t){var i=e._tweens;return-1==i.indexOf(t)&&i.push(t),e},remove:function(t){if(t instanceof Array){for(var i=0,r=t.length;r>i;i++)e.remove(t[i]);return e}var i,n=e._tweens;if(t instanceof e)i=n.indexOf(t),i>-1&&n.splice(i,1);else for(i=0;it?7.5625*(t-=.54545)*t+.75:.90909>t?7.5625*(t-=.81818)*t+.9375:7.5625*(t-=.95455)*t+.984375},function(t){return.5>t?.5*_.EaseIn(2*t):.5*_.EaseOut(2*t-1)+.5});return{Linear:e,Quad:i,Cubic:r,Quart:n,Quint:a,Sine:f,Expo:p,Circ:v,Elastic:m,Back:g,Bounce:_}}();return t}),define("hilo/loader/ImageLoader",["hilo/core/Class"],function(t){var e=t.create({load:function(t){var e=this,i=new Image;t.crossOrigin&&(i.crossOrigin=t.crossOrigin),i.onload=function(){e.onLoad(i)},i.onerror=i.onabort=e.onError.bind(i),i.src=t.src+(t.noCache?(-1==t.src.indexOf("?")?"?":"&")+"t="+ +new Date:"")},onLoad:function(t){t=t||window.event;var e=t;return e.onload=e.onerror=e.onabort=null,e},onError:function(t){var e=t.target;return e.onload=e.onerror=e.onabort=null,t}});return e}),define("hilo/loader/ScriptLoader",["hilo/core/Class"],function(t){var e=t.create({load:function(t){var i=this,r=t.src,n="jsonp"==t.type;if(n){var a=t.callbackName||"callback",o=t.callback||"jsonp"+ ++e._count,s=window;s[o]||(s[o]=function(t){delete s[o]})}n&&(r+=(-1==r.indexOf("?")?"?":"&")+a+"="+o),t.noCache&&(r+=(-1==r.indexOf("?")?"?":"&")+"t="+ +new Date);var h=document.createElement("script");h.type="text/javascript",h.async=!0,h.onload=i.onLoad.bind(i),h.onerror=i.onError.bind(i),h.src=r,t.id&&(h.id=t.id),document.getElementsByTagName("head")[0].appendChild(h)},onLoad:function(t){var e=t.target;return e.onload=e.onerror=null,e},onError:function(t){var e=t.target;return e.onload=e.onerror=null,t},Statics:{_count:0}});return e}),define("hilo/loader/LoadQueue",["hilo/core/Class","hilo/event/EventMixin","hilo/loader/ImageLoader","hilo/loader/ScriptLoader"],function(t,e,i,r){function n(t){var e,i,r=/\/?[^\/]+\.(\w+)(\?\S+)?$/i;return(e=t.match(r))&&(i=e[1].toLowerCase()),i||null}var a=t.create({Mixes:e,constructor:function(t){this._source=[],this.add(t)},maxConnections:2,_source:null,_loaded:0,_connections:0,_currentIndex:-1,add:function(t){var e=this;return t&&(t=t instanceof Array?t:[t],e._source=e._source.concat(t)),e},get:function(t){if(t)for(var e=this._source,i=0;i=i)return void t.fire("complete");if(t._currentIndexe.z})},tick:function(){this.sortZ()}});return o}();return i}),define("hilo/game/ParticleSystem",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Container","hilo/view/Bitmap","hilo/view/Drawable"],function(t,e,i,r,n,a){var o=function(){function n(t,e){return e?t+2*(Math.random()-.5)*e:t}for(var o=["x","y","vx","vy","ax","ay","rotation","rotationV","scale","scaleV","alpha","alphaV","life"],s=[],h=0,l=o.length;l>h;h++){var c=o[h];s.push(c),s.push(c+"Var")}var u={x:0,y:0,vx:0,
-vy:0,ax:0,ay:0,scale:1,scaleV:0,alpha:1,alphaV:0,rotation:0,rotationV:0,life:1},d=[],f=e.create({Extends:r,constructor:function v(e){this.id=this.id||e.id||t.getUid("ParticleSystem"),this.emitterX=0,this.emitterY=0,this.gx=0,this.gy=0,this.totalTime=1/0,this.emitNum=10,this.emitNumVar=0,this.emitTime=.2,this.emitTimeVar=0,this.particle={},v.superclass.constructor.call(this,e),this.reset(e)},Statics:{PROPS:s,PROPS_DEFAULT:u,diedParticles:d},reset:function(e){t.copy(this,e),this.particle.system=this,this.totalTime<=0&&(this.totalTime=1/0)},onUpdate:function(t){t*=.001,this._isRun&&(this._totalRunTime+=t,this._currentRunTime+=t,this._currentRunTime>=this._emitTime&&(this._currentRunTime=0,this._emitTime=n(this.emitTime,this.emitTimeVar),this._emit()),this._totalRunTime>=this.totalTime&&this.stop())},_emit:function(){for(var t=n(this.emitNum,this.emitNumVar)>>0,e=0;t>e;e++)this.addChild(p.create(this.particle))},start:function(){this.stop(!0),this._currentRunTime=0,this._totalRunTime=0,this._isRun=!0,this._emitTime=n(this.emitTime,this.emitTimeVar)},stop:function(t){if(this.isRun=!1,t)for(var e=this.children.length-1;e>=0;e--)this.children[e].destroy()}}),p=e.create({Extends:i,constructor:function m(e){this.id=this.id||e.id||t.getUid("Particle"),m.superclass.constructor.call(this,e),this.init(e)},onUpdate:function(t){if(t*=.001,!this._died){var e=this.ax+this.system.gx,i=this.ay+this.system.gy;this.vx+=e*t,this.vy+=i*t,this.x+=this.vx*t,this.y+=this.vy*t,this.rotation+=this.rotationV,this._time>.1&&(this.alpha+=this.alphaV),this.scale+=this.scaleV,this.scaleX=this.scaleY=this.scale,this._time+=t,(this._time>=this.life||this.alpha<0)&&this.destroy()}},setImage:function(t,e){this.drawable=this.drawable||new a;var e=e||[0,0,t.width,t.height];this.width=e[2],this.height=e[3],this.drawable.rect=e,this.drawable.image=t},destroy:function(){this.died=!0,this.removeFromParent(),d.push(this)},init:function(t){this.system=t.system,this._died=!1,this._time=0,this.alpha=1;for(var e=0,i=s.length;i>e;e++){var r=s[e],a=void 0===t[r]?u[r]:t[r];this[r]=n(a,t[r+"Var"])}if(this.x+=this.system.emitterX,this.y+=this.system.emitterY,t.image){var o=t.frame;o&&o[0].length&&(o=o[Math.random()*o.length>>0]),this.setImage(t.image,o),void 0!==t.pivotX&&(this.pivotX=t.pivotX*o[2]),void 0!==t.pivotY&&(this.pivotY=t.pivotY*o[3])}},Statics:{create:function(t){if(d.length>0){var e=d.pop();return e.init(t),e}return new p(t)}}});return f}();return o});
\ No newline at end of file
+define("hilo/core/Hilo",function(){var t=function(){var e=window,i=document,r=i.documentElement,n=0;return{getUid:function(t){var e=++n;if(t){var i=t.charCodeAt(t.length-1);return i>=48&&57>=i&&(t+="_"),t+e}return e},viewToString:function(t){for(var e,i=t;i;)e=e?i.id+"."+e:i.id,i=i.parent;return e},copy:function(t,e,i){for(var r in e)i&&!t.hasOwnProperty(r)&&void 0===t[r]||(t[r]=e[r]);return t},browser:function(){var t=navigator.userAgent,n={iphone:/iphone/i.test(t),ipad:/ipad/i.test(t),ipod:/ipod/i.test(t),ios:/iphone|ipad|ipod/i.test(t),android:/android/i.test(t),webkit:/webkit/i.test(t),chrome:/chrome/i.test(t),safari:/safari/i.test(t),firefox:/firefox/i.test(t),ie:/msie/i.test(t),opera:/opera/i.test(t),supportTouch:"ontouchstart"in e,supportCanvas:null!=i.createElement("canvas").getContext,supportStorage:!1,supportOrientation:"orientation"in e,supportDeviceMotion:"ondevicemotion"in e};try{var a="hilo";localStorage.setItem(a,a),localStorage.removeItem(a),n.supportStorage=!0}catch(o){}var s=n.jsVendor=n.webkit?"webkit":n.firefox?"Moz":n.opera?"O":n.ie?"ms":"",h=n.cssVendor="-"+s+"-",l=i.createElement("div"),c=l.style,u=void 0!=c[s+"Transform"],d=void 0!=c[s+"Perspective"];return d&&(l.id="test3d",c=i.createElement("style"),c.textContent="@media ("+h+"transform-3d){#test3d{height:3px}}",i.head.appendChild(c),r.appendChild(l),d=3==l.offsetHeight,i.head.removeChild(c),r.removeChild(l)),n.supportTransform=u,n.supportTransform3D=d,n}(),event:function(){var t="ontouchstart"in e;return{POINTER_START:t?"touchstart":"mousedown",POINTER_MOVE:t?"touchmove":"mousemove",POINTER_END:t?"touchend":"mouseup"}}(),align:{TOP_LEFT:"TL",TOP:"T",TOP_RIGHT:"TR",LEFT:"L",CENTER:"C",RIGHT:"R",BOTTOM_LEFT:"BL",BOTTOM:"B",BOTTOM_RIGHT:"BR"},getElementRect:function(t){try{var i=t.getBoundingClientRect()}catch(n){i={top:t.offsetTop,left:t.offsetLeft,right:t.offsetLeft+t.offsetWidth,bottom:t.offsetTop+t.offsetHeight}}var a=(e.pageXOffset||r.scrollLeft)-(r.clientLeft||0)||0,o=(e.pageYOffset||r.scrollTop)-(r.clientTop||0)||0,s=e.getComputedStyle?getComputedStyle(t):t.currentStyle,h=parseInt,l=h(s.paddingLeft)+h(s.borderLeftWidth)||0,c=h(s.paddingTop)+h(s.borderTopWidth)||0,u=h(s.paddingRight)+h(s.borderRightWidth)||0,d=h(s.paddingBottom)+h(s.borderBottomWidth)||0,f=i.top||0,p=i.left||0,v=i.right||0,m=i.bottom||0;return{left:p+a+l,top:f+o+c,width:v-u-p-l,height:m-d-f-c}},createElement:function(t,e){var r,n,a,o=i.createElement(t);for(r in e)if(n=e[r],"style"===r)for(a in n)o.style[a]=n[a];else o[r]=n;return o},getElement:function(t){return i.getElementById(t)},setElementStyleByView:function(e){var i=e.drawable,r=i.domElement.style,n=e._stateCache||(e._stateCache={}),a=t.browser.jsVendor,o="px",s=!1;if(this.cacheStateIfChanged(e,["visible"],n)&&(r.display=e.visible?"":"none"),this.cacheStateIfChanged(e,["alpha"],n)&&(r.opacity=e.alpha),e.visible&&!(e.alpha<=0)){this.cacheStateIfChanged(e,["width"],n)&&(r.width=e.width+o),this.cacheStateIfChanged(e,["height"],n)&&(r.height=e.height+o),this.cacheStateIfChanged(e,["depth"],n)&&(r.zIndex=e.depth+1),(s=this.cacheStateIfChanged(e,["pivotX","pivotY"],n))&&(r[a+"TransformOrigin"]=e.pivotX+o+" "+e.pivotY+o),(this.cacheStateIfChanged(e,["x","y","rotation","scaleX","scaleY"],n)||s)&&(r[a+"Transform"]=this.getTransformCSS(e)),this.cacheStateIfChanged(e,["background"],n)&&(r.backgroundColor=e.background),r.pointerEvents||(r.pointerEvents="none");var h=i.image;if(h){var l=h.src;l!==n.image&&(n.image=l,r.backgroundImage="url("+l+")");var c=i.rect;if(c){var u=c[0],d=c[1];u!==n.sx&&(n.sx=u,r.backgroundPositionX=-u+o),d!==n.sy&&(n.sy=d,r.backgroundPositionY=-d+o)}}var f=e.mask;if(f){var p=f.drawable.domElement.style.backgroundImage;p!==n.maskImage&&(n.maskImage=p,r[a+"MaskImage"]=p,r[a+"MaskRepeat"]="no-repeat");var v=f.x,m=f.y;v===n.maskX&&m===n.maskY||(n.maskX=v,n.maskY=m,r[a+"MaskPosition"]=v+o+" "+m+o)}}},cacheStateIfChanged:function(t,e,i){var r,n,a,o,s=!1;for(r=0,n=e.length;n>r;r++)a=e[r],o=t[a],o!=i[a]&&(i[a]=o,s=!0);return s},getTransformCSS:function(t){var e=this.browser.supportTransform3D,i=e?"3d":"";return"translate"+i+"("+(t.x-t.pivotX)+"px, "+(t.y-t.pivotY)+(e?"px, 0px)":"px)")+"rotate"+i+(e?"(0, 0, 1, ":"(")+t.rotation+"deg)scale"+i+"("+t.scaleX+", "+t.scaleY+(e?", 1)":")")}}}();return t}),define("hilo/core/Class",function(){var t=function(){var t=function(t){t=t||{};var i=t.hasOwnProperty("constructor")?t.constructor:function(){};return e.call(i,t),i},e=function(t){var e,r,a={};for(e in t)r=t[e],i.hasOwnProperty(e)?i[e].call(this,r):a[e]=r;n(this.prototype,a)},i={Extends:function(t){var e=this.prototype,i=r(t.prototype);n(this,t),n(i,e),i.constructor=this,this.prototype=i,this.superclass=t.prototype},Mixes:function(t){t instanceof Array||(t=[t]);for(var e,i=this.prototype;e=t.shift();)n(i,e.prototype||e)},Statics:function(t){n(this,t)}},r=function(){if(Object.__proto__)return function(t){return{__proto__:t}};var t=function(){};return function(e){return t.prototype=e,new t}}(),n=function(t){for(var e=1,i=arguments.length;i>e;e++){var r,n=arguments[e];for(var a in n){var s=n[a];!s||"object"!=typeof s||void 0===s.value&&"function"!=typeof s.get&&"function"!=typeof s.set?t[a]=s:(r=r||{},r[a]=s)}r&&o(t,r)}return t};try{var a=Object.defineProperty,o=Object.defineProperties;a({},"$",{value:0})}catch(s){"__defineGetter__"in Object&&(a=function(t,e,i){return"value"in i&&(t[e]=i.value),"get"in i&&t.__defineGetter__(e,i.get),"set"in i&&t.__defineSetter__(e,i.set),t},o=function(t,e){for(var i in e)e.hasOwnProperty(i)&&a(t,i,e[i]);return t})}return{create:t,mix:n}}();return t}),define("hilo/geom/Matrix",["hilo/core/Class"],function(t){var e=t.create({constructor:function(t,e,i,r,n,a){this.a=t,this.b=e,this.c=i,this.d=r,this.tx=n,this.ty=a},concat:function(t){var e=arguments,i=this.a,r=this.b,n=this.c,a=this.d,o=this.tx,s=this.ty;if(e.length>=6)var h=e[0],l=e[1],c=e[2],u=e[3],d=e[4],f=e[5];else h=t.a,l=t.b,c=t.c,u=t.d,d=t.tx,f=t.ty;return this.a=i*h+r*c,this.b=i*l+r*u,this.c=n*h+a*c,this.d=n*l+a*u,this.tx=o*h+s*c+d,this.ty=o*l+s*u+f,this},rotate:function(t){var e=Math.sin(t),i=Math.cos(t),r=this.a,n=this.b,a=this.c,o=this.d,s=this.tx,h=this.ty;return this.a=r*i-n*e,this.b=r*e+n*i,this.c=a*i-o*e,this.d=a*e+o*i,this.tx=s*i-h*e,this.ty=s*e+h*i,this},scale:function(t,e){return this.a*=t,this.d*=e,this.c*=t,this.b*=e,this.tx*=t,this.ty*=e,this},translate:function(t,e){return this.tx+=t,this.ty+=e,this},identity:function(){return this.a=this.d=1,this.b=this.c=this.tx=this.ty=0,this},invert:function(){var t=this.a,e=this.b,i=this.c,r=this.d,n=this.tx,a=t*r-e*i;return this.a=r/a,this.b=-e/a,this.c=-i/a,this.d=t/a,this.tx=(i*this.ty-r*n)/a,this.ty=-(t*this.ty-e*n)/a,this},transformPoint:function(t,e,i){var r=t.x*this.a+t.y*this.c+this.tx,n=t.x*this.b+t.y*this.d+this.ty;return e&&(r=r+.5>>0,n=n+.5>>0),i?{x:r,y:n}:(t.x=r,t.y=n,t)}});return e}),define("hilo/event/EventMixin",["hilo/core/Class"],function(t){var e={_listeners:null,on:function(t,e,i){for(var r=this._listeners=this._listeners||{},n=r[t]=r[t]||[],a=0,o=n.length;o>a;a++){var s=n[a];if(s.listener===e)return}return n.push({listener:e,once:i}),this},off:function(t,e){if(0==arguments.length)return this._listeners=null,this;var i=this._listeners&&this._listeners[t];if(i){if(1==arguments.length)return delete this._listeners[t],this;for(var r=0,n=i.length;n>r;r++){var a=i[r];if(a.listener===e){i.splice(r,1),0===i.length&&delete this._listeners[t];break}}}return this},fire:function(t,e){var r,n;"string"==typeof t?n=t:(r=t,n=t.type);var a=this._listeners;if(!a)return!1;var o=a[n];if(o){var s=o.slice(0);if(r=r||new i(n,this,e),r._stopped)return!1;for(var h=0;h-1&&o.splice(c,1)}}return 0==o.length&&delete a[n],!0}return!1}},i=t.create({constructor:function(t,e,i){this.type=t,this.target=e,this.detail=i,this.timeStamp=+new Date},type:null,target:null,detail:null,timeStamp:0,stopImmediatePropagation:function(){this._stopped=!0}}),r=window.Event;if(r){var n=r.prototype,a=n.stopImmediatePropagation;n.stopImmediatePropagation=function(){a&&a.call(this),this._stopped=!0}}return e}),define("hilo/view/Drawable",["hilo/core/Hilo","hilo/core/Class"],function(t,e){var i=e.create({constructor:function(t){this.init(t)},image:null,rect:null,init:function(e){var r=this,n=r.image;i.isDrawable(e)?r.image=e:t.copy(r,e,!0);var a=r.image;if("string"==typeof a){if(!n||a!==n.getAttribute("src")){r.image=null;var o=new Image;return o.onload=function(){o.onload=null,r.init(o)},void(o.src=a)}a=r.image=n}a&&!r.rect&&(r.rect=[0,0,a.width,a.height])},Statics:{isDrawable:function(t){if(!t||!t.tagName)return!1;var e=t.tagName.toLowerCase();return"img"===e||"canvas"===e||"video"===e}}});return i}),define("hilo/renderer/Renderer",["hilo/core/Hilo","hilo/core/Class"],function(t,e){var i=e.create({constructor:function(e){e=e||{},t.copy(this,e,!0)},renderType:null,canvas:null,stage:null,startDraw:function(t){},draw:function(t){},endDraw:function(t){},transform:function(){},hide:function(){},remove:function(t){},clear:function(t,e,i,r){},resize:function(t,e){}});return i}),define("hilo/renderer/CanvasRenderer",["hilo/core/Class","hilo/core/Hilo","hilo/renderer/Renderer"],function(t,e,i){var r=t.create({Extends:i,constructor:function(t){r.superclass.constructor.call(this,t),this.context=this.canvas.getContext("2d")},renderType:"canvas",context:null,startDraw:function(t){return t.visible&&t.alpha>0?(t===this.stage&&this.context.clearRect(0,0,t.width,t.height),this.context.save(),!0):!1},draw:function(t){var e=this.context,i=t.width,r=t.height,n=t.background;n&&(e.fillStyle=n,e.fillRect(0,0,i,r));var a=t.drawable,o=a&&a.image;if(o){var s=a.rect,h=s[2],l=s[3],c=s[4],u=s[5];if(!h||!l)return;i||r||(i=t.width=h,r=t.height=l),(c||u)&&e.translate(c-.5*h,u-.5*l),e.drawImage(o,s[0],s[1],h,l,0,0,i,r)}},endDraw:function(t){this.context.restore()},transform:function(t){var i=t.drawable;if(i&&i.domElement)return void e.setElementStyleByView(t);var r=this.context,n=t.scaleX,a=t.scaleY;if(t===this.stage){var o=this.canvas.style,s=t._scaleX,h=t._scaleY;(!s&&1!=n||s&&s!=n)&&(t._scaleX=n,o.width=n*t.width+"px"),(!h&&1!=a||h&&h!=a)&&(t._scaleY=a,o.height=a*t.height+"px")}else{var l=t.x,c=t.y,u=t.pivotX,d=t.pivotY,f=t.rotation%360,p=t.mask;p&&(p._render(this),r.clip());var v=t.align;if(v)if("function"==typeof v)t.align();else{var m=t.parent;if(m){var g=t.width,_=t.height,x=m.width,y=m.height;switch(v){case"TL":l=0,c=0;break;case"T":l=x-g>>1,c=0;break;case"TR":l=x-g,c=0;break;case"L":l=0,c=y-_>>1;break;case"C":l=x-g>>1,c=y-_>>1;break;case"R":l=x-g,c=y-_>>1;break;case"BL":l=0,c=y-_;break;case"B":l=x-g>>1,c=y-_;break;case"BR":l=x-g,c=y-_}}}0==l&&0==c||r.translate(l,c),0!=f&&r.rotate(f*Math.PI/180),1==n&&1==a||r.scale(n,a),0==u&&0==d||r.translate(-u,-d)}t.alpha>0&&(r.globalAlpha*=t.alpha)},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},clear:function(t,e,i,r){this.context.clearRect(t,e,i,r)},resize:function(t,e){this.canvas.width=t,this.canvas.height=e}});return r}),define("hilo/renderer/DOMRenderer",["hilo/core/Class","hilo/core/Hilo","hilo/renderer/Renderer","hilo/view/Drawable"],function(t,e,i,r){var n=function(){function a(t,i){var r=t.tagName||"div",n=i.image,a=t.width||n&&n.width,o=t.height||n&&n.height,s=e.createElement(r),h=s.style;if(t.id&&(s.id=t.id),h.position="absolute",h.left=(t.left||0)+"px",h.top=(t.top||0)+"px",h.width=a+"px",h.height=o+"px","canvas"==r){if(s.width=a,s.height=o,n){var l=s.getContext("2d"),c=i.rect||[0,0,a,o];l.drawImage(n,c[0],c[1],c[2],c[3],t.x||0,t.y||0,t.width||c[2],t.height||c[3])}}else if(h.opacity=void 0!=t.alpha?t.alpha:1,(t===this.stage||t.clipChildren)&&(h.overflow="hidden"),n&&n.src){h.backgroundImage="url("+n.src+")";var u=t.rectX||0,d=t.rectY||0;h.backgroundPosition=-u+"px "+-d+"px"}return s}return t.create({Extends:i,constructor:function(t){n.superclass.constructor.call(this,t)},renderType:"dom",startDraw:function(t){var e=t.drawable=t.drawable||new r;return e.domElement=e.domElement||a(t,e),!0},draw:function(t){var e=t.parent,i=t.drawable.domElement,r=i.parentNode;if(e){var n=e.drawable.domElement;if(n!=r&&n.appendChild(i),!t.width&&!t.height){var a=t.drawable.rect;a&&(a[2]||a[3])&&(t.width=a[2],t.height=a[3])}}else t!==this.stage||r||(i.style.overflow="hidden",this.canvas.appendChild(i))},transform:function(t){if(e.setElementStyleByView(t),t===this.stage){var i=this.canvas.style,r=t._scaleX,n=t._scaleY,a=t.scaleX,o=t.scaleY;(!r&&1!=a||r&&r!=a)&&(t._scaleX=a,i.width=a*t.width+"px"),(!n&&1!=o||n&&n!=o)&&(t._scaleY=o,i.height=o*t.height+"px")}},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},hide:function(t){var e=t.drawable&&t.drawable.domElement;e&&(e.style.display="none")},resize:function(t,e){var i=this.canvas.style;i.width=t+"px",i.height=e+"px","absolute"!=i.position&&(i.position="relative")}})}();return n}),define("hilo/renderer/WebGLRenderer",["hilo/core/Class","hilo/renderer/Renderer","hilo/geom/Matrix"],function(t,e,i){var r=Math.PI/180,n=t.create({Extends:e,Statics:{MAX_BATCH_NUM:2e3,ATTRIBUTE_NUM:5,isSupported:null},renderType:"webgl",gl:null,constructor:function(t){window.__render=this,n.superclass.constructor.call(this,t);var e=this.gl=this.canvas.getContext("webgl")||this.canvas.getContext("experimental-webgl");this.maxBatchNum=n.MAX_BATCH_NUM,this.positionStride=4*n.ATTRIBUTE_NUM;var i=this.maxBatchNum*n.ATTRIBUTE_NUM*4,r=6*this.maxBatchNum;this.positions=new Float32Array(i),this.indexs=new Uint16Array(r);for(var a=0,o=0;r>a;a+=6,o+=4)this.indexs[a+0]=o+0,this.indexs[a+1]=o+1,this.indexs[a+2]=o+2,this.indexs[a+3]=o+1,this.indexs[a+4]=o+2,this.indexs[a+5]=o+3;this.batchIndex=0,this.sprites=[],e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA),e.clearColor(0,0,0,0),e.disable(e.DEPTH_TEST),e.disable(e.CULL_FACE),e.enable(e.BLEND),this._initShaders(),this.defaultShader.active(),this.positionBuffer=e.createBuffer(),this.indexBuffer=e.createBuffer(),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,this.indexBuffer),e.bufferData(e.ELEMENT_ARRAY_BUFFER,this.indexs,e.STATIC_DRAW),e.bindBuffer(e.ARRAY_BUFFER,this.positionBuffer),e.bufferData(e.ARRAY_BUFFER,this.positions,e.DYNAMIC_DRAW),e.vertexAttribPointer(this.a_position,2,e.FLOAT,!1,this.positionStride,0),e.vertexAttribPointer(this.a_TexCoord,2,e.FLOAT,!1,this.positionStride,8),e.vertexAttribPointer(this.a_alpha,1,e.FLOAT,!1,this.positionStride,16)},context:null,startDraw:function(t){return t.visible&&t.alpha>0?(t===this.stage&&this.clear(),!0):!1},draw:function(t){var e=(this.context,t.width),i=t.height,r=(t.background,t.drawable),n=r&&r.image;if(n){this.gl;n.texture||this.activeShader.uploadTexture(n);var a=r.rect,o=a[2],s=a[3];a[4],a[5];e||i||(e=t.width=o,i=t.height=s),this.batchIndex>=this.maxBatchNum&&this._renderBatches();var h=this._createVertexs(n,a[0],a[1],o,s,0,0,e,i),l=this.batchIndex*this.positionStride,c=this.positions,u=t.__webglRenderAlpha;c[l+0]=h[0],c[l+1]=h[1],c[l+2]=h[2],c[l+3]=h[3],c[l+4]=u,c[l+5]=h[4],c[l+6]=h[5],c[l+7]=h[6],c[l+8]=h[7],c[l+9]=u,c[l+10]=h[8],c[l+11]=h[9],c[l+12]=h[10],c[l+13]=h[11],c[l+14]=u,c[l+15]=h[12],c[l+16]=h[13],c[l+17]=h[14],c[l+18]=h[15],c[l+19]=u;for(var d=t.__webglWorldMatrix,f=0;4>f;f++){var p=c[l+5*f],v=c[l+5*f+1];c[l+5*f]=d.a*p+d.c*v+d.tx,c[l+5*f+1]=d.b*p+d.d*v+d.ty}t.texture=n.texture,this.sprites[this.batchIndex++]=t}},endDraw:function(t){t===this.stage&&this._renderBatches()},transform:function(t){var e=t.drawable;if(e&&e.domElement)return void Hilo.setElementStyleByView(t);var r=(this.context,t.scaleX),n=t.scaleY;if(t===this.stage){var a=this.canvas.style,o=t._scaleX,s=t._scaleY;(!o&&1!=r||o&&o!=r)&&(t._scaleX=r,a.width=r*t.width+"px"),(!s&&1!=n||s&&s!=n)&&(t._scaleY=n,a.height=n*t.height+"px"),t.__webglWorldMatrix=t.__webglWorldMatrix||new i(1,0,0,1,0,0)}else t.__webglWorldMatrix=t.__webglWorldMatrix||new i(1,0,0,1,0,0),this._setConcatenatedMatrix(t,t.parent);t.alpha>0&&(t.parent&&t.parent.__webglRenderAlpha?t.__webglRenderAlpha=t.alpha*t.parent.__webglRenderAlpha:t.__webglRenderAlpha=t.alpha)},remove:function(t){var e=t.drawable,i=e&&e.domElement;if(i){var r=i.parentNode;r&&r.removeChild(i)}},clear:function(t,e,i,r){this.gl.clear(this.gl.COLOR_BUFFER_BIT)},resize:function(t,e){this.width===t&&this.height===e||(this.width=this.canvas.width=t,this.height=this.canvas.height=e,this.gl.viewport(0,0,t,e),this.canvasHalfWidth=.5*t,this.canvasHalfHeight=.5*e,this._uploadProjectionTransform(!0))},_renderBatches:function(){var t=this.gl;t.bufferSubData(t.ARRAY_BUFFER,0,this.positions.subarray(0,this.batchIndex*this.positionStride));for(var e=0,i=0,r=null,n=0;n0&&(i.bindTexture(i.TEXTURE_2D,this.sprites[t].texture),i.drawElements(i.TRIANGLES,6*r,i.UNSIGNED_SHORT,6*t*2))},_uploadProjectionTransform:function(t){this._projectionTransformElements&&!t||(this._projectionTransformElements=new Float32Array([1/this.canvasHalfWidth,0,0,0,-1/this.canvasHalfHeight,0,-1,1,1])),this.gl.uniformMatrix3fv(this.u_projectionTransform,!1,this._projectionTransformElements)},_initShaders:function(){var t=" attribute vec2 a_position;\n attribute vec2 a_TexCoord;\n attribute float a_alpha;\n uniform mat3 u_projectionTransform;\n varying vec2 v_TexCoord;\n varying float v_alpha;\n void main(){\n gl_Position = vec4((u_projectionTransform * vec3(a_position, 1.0)).xy, 1.0, 1.0);\n v_TexCoord = a_TexCoord;\n v_alpha = a_alpha;\n }\n ",e="\n precision mediump float;\n uniform sampler2D u_Sampler;\n varying vec2 v_TexCoord;\n varying float v_alpha;\n void main(){\n gl_FragColor = texture2D(u_Sampler, v_TexCoord) * v_alpha;\n }\n ";this.defaultShader=new o(this,{v:t,f:e},{attributes:["a_position","a_TexCoord","a_alpha"],uniforms:["u_projectionTransform","u_Alpha","u_Sampler"]})},_createVertexs:function(t,e,i,r,n,a,o,s,h){var l=this.__tempVertexs||[],c=t.width,u=t.height;r/=c,n/=u,e/=c,i/=u,s=s,h=h,a=a,o=o,r+e>1&&(r=1-e),n+i>1&&(n=1-i);var d=0;return l[d++]=a,l[d++]=o,l[d++]=e,l[d++]=i,l[d++]=a+s,l[d++]=o,l[d++]=e+r,l[d++]=i,l[d++]=a,l[d++]=o+h,l[d++]=e,l[d++]=i+n,l[d++]=a+s,l[d++]=o+h,l[d++]=e+r,l[d++]=i+n,l},_setConcatenatedMatrix:function(t,e){var i=t.__webglWorldMatrix,n=1,a=0,o=t.rotation%360,s=t.pivotX,h=t.pivotY,l=t.scaleX,c=t.scaleY;if(o){var u=o*r;n=Math.cos(u),a=Math.sin(u)}i.a=n*l,i.b=a*l,i.c=-a*c,i.d=n*c,i.tx=t.x-i.a*s-i.c*h,i.ty=t.y-i.b*s-i.d*h,i.concat(e.__webglWorldMatrix)}}),a={},o=function(t,e,i){this.renderer=t,this.gl=t.gl,this.program=this._createProgram(this.gl,e.v,e.f),i=i||{},this.attributes=i.attributes||[],this.uniforms=i.uniforms||[]};return o.prototype={active:function(){var t=this,e=t.renderer,i=t.gl,r=t.program;r&&i&&(e.activeShader=t,i.useProgram(r),t.attributes.forEach(function(t){e[t]=i.getAttribLocation(r,t),i.enableVertexAttribArray(e[t])}),t.uniforms.forEach(function(t){e[t]=i.getUniformLocation(r,t)}),t.width===e.width&&t.height===e.height||(t.width=e.width,t.height=e.height,e._uploadProjectionTransform()))},uploadTexture:function(t){var e=this.gl,i=this.renderer;if(a[t.src])t.texture=a[t.src];else{var r=e.createTexture(),n=i.u_Sampler;e.activeTexture(e.TEXTURE0),e.bindTexture(e.TEXTURE_2D,r),e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,1),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.uniform1i(n,0),e.bindTexture(e.TEXTURE_2D,null),t.texture=r,a[t.src]=r}},_createProgram:function(t,e,i){var r=this._createShader(t,t.VERTEX_SHADER,e),n=this._createShader(t,t.FRAGMENT_SHADER,i);if(!r||!n)return null;var a=t.createProgram();if(a){t.attachShader(a,r),t.attachShader(a,n),t.linkProgram(a),t.deleteShader(n),t.deleteShader(r);var o=t.getProgramParameter(a,t.LINK_STATUS);if(!o){var s=t.getProgramInfoLog(a);return console.log("Failed to link program: "+s),t.deleteProgram(a),null}}return a},_createShader:function(t,e,i){var r=t.createShader(e);if(r){t.shaderSource(r,i),t.compileShader(r);var n=t.getShaderParameter(r,t.COMPILE_STATUS);if(!n){var a=t.getShaderInfoLog(r);return console.log("Failed to compile shader: "+a),t.deleteShader(r),null}}return r}},n.isSupported=function(){var t=document.createElement("canvas");return!(!t.getContext||!t.getContext("webgl")&&!t.getContext("experimental-webgl"))}(),n}),define("hilo/view/View",["hilo/core/Hilo","hilo/core/Class","hilo/event/EventMixin","hilo/geom/Matrix"],function(t,e,i,r){var n=function(){function n(t,e,i){for(var r,n,a,o,s=0,h=!1,l=0,c=i.length;c>l;l++){var u=i[l],d=i[(l+1)%c];if(u.y==d.y&&e==u.y&&(u.x>d.x?(r=d.x,n=u.x):(r=u.x,n=d.x),t>=r&&n>=t))h=!0;else if(u.y>d.y?(a=d.y,o=u.y):(a=u.y,o=d.y),!(a>e||e>o)){var f=(e-u.y)*(d.x-u.x)/(d.y-u.y)+u.x;if(f>t?s++:f==t&&(h=!0),u.x>t&&u.y==e){var p=i[(c+l-1)%c];(p.ye||p.y>e&&d.yv;v++){r=t[v],n=t[d-1>v?v+1:0],p.x=r.y-n.y,p.y=n.x-r.x,a=Math.sqrt(p.x*p.x+p.y*p.y),p.x/=a,p.y/=a,o=s=t[0].x*p.x+t[0].y*p.y;for(var m=1;d>m;m++)c=t[m].x*p.x+t[m].y*p.y,c>s?s=c:o>c&&(o=c);for(h=l=e[0].x*p.x+e[0].y*p.y,m=1;f>m;m++)c=e[m].x*p.x+e[m].y*p.y,c>l?l=c:h>c&&(h=c);if(h>o?(u=h-s,p.x=-p.x,p.y=-p.y):u=o-l,u>=0)return!1;u>i.overlap&&(i.overlap=u,i.normal.x=p.x,i.normal.y=p.y)}return i}return e.create({Mixes:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("View"),t.copy(this,e,!0)},id:null,x:0,y:0,width:0,height:0,alpha:1,rotation:0,visible:!0,pivotX:0,pivotY:0,scaleX:1,scaleY:1,pointerEnabled:!0,background:null,mask:null,align:null,drawable:null,boundsArea:null,parent:null,depth:-1,getStage:function(){for(var t,e=this;t=e.parent;)e=t;return e.canvas?e:null},getScaledWidth:function(){return this.width*this.scaleX},getScaledHeight:function(){return this.height*this.scaleY},addTo:function(t,e){return"number"==typeof e?t.addChildAt(this,e):t.addChild(this),this},removeFromParent:function(){var t=this.parent;return t&&t.removeChild(this),this},getBounds:function(){for(var t,e,i,r,n,a,o,s=this.width,h=this.height,l=this.getConcatenatedMatrix(),c=this.boundsArea||[{x:0,y:0},{x:s,y:0},{x:s,y:h},{x:0,y:h}],u=[],d=0,f=c.length;f>d;d++)t=l.transformPoint(c[d],!0,!0),e=t.x,i=t.y,0==d?(r=n=e,a=o=i):(r>e?r=e:e>n&&(n=e),a>i?a=i:i>o&&(o=i)),u[d]=t;return u.x=r,u.y=a,u.width=n-r,u.height=o-a,u},getConcatenatedMatrix:function(t){for(var e=new r(1,0,0,1,0,0),i=this;i!=t&&i.parent;i=i.parent){var n=1,a=0,o=i.rotation%360,s=i.pivotX,h=i.pivotY,l=i.scaleX,c=i.scaleY;if(o){var u=o*Math.PI/180;n=Math.cos(u),a=Math.sin(u)}0!=s&&(e.tx-=s),0!=h&&(e.ty-=h),e.concat(n*l,a*l,-a*c,n*c,i.x,i.y)}return e},hitTestPoint:function(t,e,i){var r=this.getBounds(),a=t>=r.x&&t<=r.x+r.width&&e>=r.y&&e<=r.y+r.height;return a&&i&&(a=n(t,e,r)),a},hitTestObject:function(t,e){var i=this.getBounds(),r=t.getBounds(),n=i.x<=r.x+r.width&&r.x<=i.x+i.width&&i.y<=r.y+r.height&&r.y<=i.y+i.height;return n&&e&&(n=a(i,r)),!!n},_render:function(t,e){this.onUpdate&&this.onUpdate(e)===!1||!t.startDraw(this)||(t.transform(this),this.render(t,e),t.endDraw(this))},_fireMouseEvent:function(e){if(e.eventCurrentTarget=this,this.fire(e),"mousemove"==e.type){if(!this.__mouseOver){this.__mouseOver=!0;var i=t.copy({},e);i.type="mouseover",this.fire(i)}}else"mouseout"==e.type&&(this.__mouseOver=!1);var r=this.parent;e._stopped||e._stopPropagationed||!r||("mouseout"==e.type||"touchout"==e.type?r.hitTestPoint(e.stageX,e.stageY,!0)||r._fireMouseEvent(e):r._fireMouseEvent(e))},onUpdate:null,render:function(t,e){t.draw(this)},toString:function(){return t.viewToString(this)}})}();return n}),define("hilo/view/CacheMixin",["hilo/core/Hilo","hilo/core/Class","hilo/view/Drawable"],function(t,e,i){var r=t.createElement("canvas"),n=r.getContext("2d"),a={_cacheDirty:!0,cache:function(t){(t||this._cacheDirty||!this._cacheImage)&&this.updateCache()},updateCache:function(){r.width=this.width,r.height=this.height,this._draw(n),this._cacheImage=new Image,this._cacheImage.src=r.toDataURL(),this.drawable=this.drawable||new i,this.drawable.init(this._cacheImage),this._cacheDirty=!1},setCacheDirty:function(t){this._cacheDirty=t}};return a}),define("hilo/view/Container",["hilo/core/Hilo","hilo/core/Class","hilo/view/View"],function(t,e,i){var r=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Container"),r.superclass.constructor.call(this,e),this.children?this._updateChildren():this.children=[]},children:null,pointerChildren:!0,clipChildren:!1,getNumChildren:function(){return this.children.length},addChildAt:function(t,e){var i=this.children,r=i.length,n=t.parent;e=0>e?0:e>r?r:e;var a=this.getChildIndex(t);if(a==e)return this;if(a>=0?(i.splice(a,1),e=e==r?r-1:e):n&&n.removeChild(t),i.splice(e,0,t),0>a)this._updateChildren(e);else{var o=e>a?a:e,s=e>a?e:a;this._updateChildren(o,s+1)}return this},addChild:function(t){for(var e=this.children.length,i=arguments,r=0,n=i.length;n>r;r++)this.addChildAt(i[r],e+r);return this},removeChildAt:function(t){var e=this.children;if(0>t||t>=e.length)return null;var i=e[t];if(i){if(!i.__renderer)for(var r=i;r=r.parent;){if(r.renderer){i.__renderer=r.renderer;break}if(r.__renderer){i.__renderer=r.__renderer;break}}i.__renderer&&i.__renderer.remove(i),i.parent=null,i.depth=-1}return e.splice(t,1),this._updateChildren(t),i},removeChild:function(t){return this.removeChildAt(this.getChildIndex(t))},removeChildById:function(t){for(var e,i=this.children,r=0,n=i.length;n>r;r++)if(e=i[r],e.id===t)return this.removeChildAt(r),e;return null},removeAllChildren:function(){for(;this.children.length;)this.removeChildAt(0);return this},getChildAt:function(t){var e=this.children;return 0>t||t>=e.length?null:e[t]},getChildById:function(t){for(var e,i=this.children,r=0,n=i.length;n>r;r++)if(e=i[r],e.id===t)return e;return null},getChildIndex:function(t){return this.children.indexOf(t)},setChildIndex:function(t,e){var i=this.children,r=i.indexOf(t);if(r>=0&&r!=e){var n=i.length;e=0>e?0:e>=n?n-1:e,i.splice(r,1),i.splice(e,0,t),this._updateChildren()}return this},swapChildren:function(t,e){var i=this.children,r=this.getChildIndex(t),n=this.getChildIndex(e);t.depth=n,i[n]=t,e.depth=r,i[r]=e},swapChildrenAt:function(t,e){var i=this.children,r=this.getChildAt(t),n=this.getChildAt(e);r.depth=e,i[e]=r,n.depth=t,i[t]=n},sortChildren:function(t){var e=t,i=this.children;if("string"==typeof e){var r=e;e=function(t,e){return e[r]-t[r]}}i.sort(e),this._updateChildren()},_updateChildren:function(t,e){for(var i,r=this.children,t=t||0,e=e||r.length,n=t;e>n;n++)i=r[n],i.depth=n+1,i.parent=this},contains:function(t){for(;t=t.parent;)if(t===this)return!0;return!1},getViewAtPoint:function(t,e,i,r,n){for(var a,o,s=r?[]:null,h=this.children,l=h.length-1;l>=0;l--)if(a=h[l],!(!a||!a.visible||a.alpha<=0||n&&!a.pointerEnabled))if(a.children&&a.children.length&&(!n||a.pointerChildren)&&(o=a.getViewAtPoint(t,e,i,r,n)),o){if(!r)return o;o.length&&(s=s.concat(o))}else if(a.hitTestPoint(t,e,i)){if(!r)return a;s.push(a)}return r&&s.length?s:null},render:function(t,e){r.superclass.render.call(this,t,e);var i,n,a,o=this.children.slice(0);for(i=0,n=o.length;n>i;i++)a=o[i],a.parent===this&&a._render(t,e)}});return r}),define("hilo/view/Stage",["hilo/core/Hilo","hilo/core/Class","hilo/view/Container","hilo/renderer/CanvasRenderer","hilo/renderer/DOMRenderer","hilo/renderer/WebGLRenderer"],function(t,e,i,r,n,a){var o=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Stage"),o.superclass.constructor.call(this,e),this._initRenderer(e);var i=this.width,r=this.height,n=this.updateViewport();e.width||(i=n&&n.width||320),e.height||(r=n&&n.height||480),this.resize(i,r,!0)},canvas:null,renderer:null,paused:!1,viewport:null,_initRenderer:function(e){var i=e.canvas,o=e.container,s=e.renderType||"canvas";if("string"==typeof i&&(i=t.getElement(i)),"string"==typeof o&&(o=t.getElement(o)),i)i.getContext||(s="dom");else{var h="dom"===s?"div":"canvas";i=t.createElement(h,{style:{position:"absolute"}})}this.canvas=i,o&&o.appendChild(i);var l={canvas:i,stage:this};switch(s){case"dom":this.renderer=new n(l);break;case"webgl":a.isSupported?this.renderer=new a(l):this.renderer=new r(l);break;case"canvas":default:this.renderer=new r(l)}},addTo:function(t){var e=this.canvas;return e.parentNode!==t&&t.appendChild(e),this},tick:function(t){this.paused||this._render(this.renderer,t)},enableDOMEvent:function(t,e){for(var i=this,r=i.canvas,n="string"==typeof t?[t]:t,e=e!==!1,a=i._domListener||(i._domListener=function(t){i._onDOMEvent(t)}),o=0;or;r++)this.setFrame(t[r],i+r);else this.setFrame(t,i);return this},setFrame:function(t,e){var i=this._frames,r=i.length;return e=0>e?0:e>r?r:e,i[e]=t,t.name&&(this._frameNames[t.name]=t),(0!=e||this.width)&&this.height||(this.width=t.rect[2],this.height=t.rect[3]),this},getFrame:function(t){
+if("number"==typeof t){var e=this._frames;return 0>t||t>=e.length?null:e[t]}return this._frameNames[t]},getFrameIndex:function(t){var e=this._frames,i=e.length,r=-1;if("number"==typeof t)r=t;else{var n="string"==typeof t?this._frameNames[t]:t;if(n)for(var a=0;i>a;a++)if(n===e[a]){r=a;break}}return r},play:function(){return this.paused=!1,this},stop:function(){return this.paused=!0,this},"goto":function(t,e){var i=this._frames.length,r=this.getFrameIndex(t);return this.currentFrame=0>r?0:r>=i?i-1:r,this.paused=e,this._firstRender=!0,this},_render:function(t,e){var i,r=this.currentFrame;if(this._firstRender?(i=r,this._firstRender=!1):i=this._nextFrame(e),i!=r){this.currentFrame=i;var a=this._frames[i].callback;a&&a.call(this)}this.onEnterFrame&&this.onEnterFrame(i),this.drawable.init(this._frames[i]),n.superclass._render.call(this,t,e)},_nextFrame:function(t){var e=this._frames,i=e.length,r=this.currentFrame,n=e[r],a=n.duration||this.interval,o=this._frameElapsed,s=0!=r||this.drawable?o+(this.timeBased?t:1):0;return o=this._frameElapsed=a>s?s:0,(n.stop||!this.loop&&r>=i-1)&&this.stop(),this.paused||0!=o||(null!=n.next?r=this.getFrameIndex(n.next):r>=i-1?r=0:this.drawable&&r++),r},setFrameCallback:function(t,e){return t=this.getFrame(t),t&&(t.callback=e),this},onEnterFrame:null});return n}),define("hilo/view/DOMElement",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Drawable"],function(t,e,i,r){var n=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("DOMElement"),n.superclass.constructor.call(this,e),this.drawable=new r;var i=this.drawable.domElement=e.element||t.createElement("div");i.id=this.id,this.pointerEnabled&&(i.style.pointerEvents="visible")},_render:function(t,e){this.onUpdate&&this.onUpdate(e)===!1||(t.transform(this),this.visible&&this.alpha>0&&this.render(t,e))},render:function(t,e){if("dom"!==t.renderType){var i,r=t.canvas,n=this.drawable.domElement,a=this.depth,o=r.nextSibling;if(n.parentNode)return;for(;o&&3!=o.nodeType&&(i=parseInt(o.style.zIndex)||0,!(0>=i||i>a));)o=o.nextSibling;r.parentNode.insertBefore(this.drawable.domElement,o)}else t.draw(this)}});return n}),define("hilo/view/Graphics",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/CacheMixin"],function(t,e,i,r){var n=function(){var a=document.createElement("canvas"),o=a.getContext&&a.getContext("2d");return e.create({Extends:i,Mixes:r,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Graphics"),n.superclass.constructor.call(this,e),this._actions=[]},lineWidth:1,lineAlpha:1,lineCap:null,lineJoin:null,miterLimit:10,hasStroke:!1,strokeStyle:"0",hasFill:!1,fillStyle:"0",fillAlpha:0,lineStyle:function(t,e,i,r,n,a){var o=this,s=o._addAction;return s.call(o,["lineWidth",o.lineWidth=t||1]),s.call(o,["strokeStyle",o.strokeStyle=e||"0"]),s.call(o,["lineAlpha",o.lineAlpha=i||1]),void 0!=r&&s.call(o,["lineCap",o.lineCap=r]),void 0!=n&&s.call(o,["lineJoin",o.lineJoin=n]),void 0!=a&&s.call(o,["miterLimit",o.miterLimit=a]),o.hasStroke=!0,o},beginFill:function(t,e){var i=this,r=i._addAction;return r.call(i,["fillStyle",i.fillStyle=t]),r.call(i,["fillAlpha",i.fillAlpha=e||1]),i.hasFill=!0,i},endFill:function(){var t=this,e=t._addAction;return t.hasStroke&&e.call(t,["stroke"]),t.hasFill&&e.call(t,["fill"]),t.setCacheDirty(!0),t},beginLinearGradientFill:function(t,e,i,r,n,a){for(var s=this,h=o.createLinearGradient(t,e,i,r),l=0,c=n.length;c>l;l++)h.addColorStop(a[l],n[l]);return s.hasFill=!0,s._addAction(["fillStyle",s.fillStyle=h])},beginRadialGradientFill:function(t,e,i,r,n,a,s,h){for(var l=this,c=o.createRadialGradient(t,e,i,r,n,a),u=0,d=s.length;d>u;u++)c.addColorStop(h[u],s[u]);return l.hasFill=!0,l._addAction(["fillStyle",l.fillStyle=c])},beginBitmapFill:function(t,e){var i=this,r=o.createPattern(t,e||"");return i.hasFill=!0,i._addAction(["fillStyle",i.fillStyle=r])},beginPath:function(){return this._addAction(["beginPath"])},closePath:function(){return this._addAction(["closePath"])},moveTo:function(t,e){return this._addAction(["moveTo",t,e])},lineTo:function(t,e){return this._addAction(["lineTo",t,e])},quadraticCurveTo:function(t,e,i,r){return this._addAction(["quadraticCurveTo",t,e,i,r])},bezierCurveTo:function(t,e,i,r,n,a){return this._addAction(["bezierCurveTo",t,e,i,r,n,a])},drawRect:function(t,e,i,r){return this._addAction(["rect",t,e,i,r])},drawRoundRectComplex:function(t,e,i,r,n,a,o,s){var h=this,l=h._addAction;return l.call(h,["moveTo",t+n,e]),l.call(h,["lineTo",t+i-a,e]),l.call(h,["arc",t+i-a,e+a,a,-Math.PI/2,0,!1]),l.call(h,["lineTo",t+i,e+r-o]),l.call(h,["arc",t+i-o,e+r-o,o,0,Math.PI/2,!1]),l.call(h,["lineTo",t+s,e+r]),l.call(h,["arc",t+s,e+r-s,s,Math.PI/2,Math.PI,!1]),l.call(h,["lineTo",t,e+n]),l.call(h,["arc",t+n,e+n,n,Math.PI,3*Math.PI/2,!1]),h},drawRoundRect:function(t,e,i,r,n){return this.drawRoundRectComplex(t,e,i,r,n,n,n,n)},drawCircle:function(t,e,i){return this._addAction(["arc",t+i,e+i,i,0,2*Math.PI,0])},drawEllipse:function(t,e,i,r){var n=this;if(i==r)return n.drawCircle(t,e,i);var a=n._addAction,o=i/2,s=r/2,h=.5522847498307933,l=h*o,c=h*s;return t+=o,e+=s,a.call(n,["moveTo",t+o,e]),a.call(n,["bezierCurveTo",t+o,e-c,t+l,e-s,t,e-s]),a.call(n,["bezierCurveTo",t-l,e-s,t-o,e-c,t-o,e]),a.call(n,["bezierCurveTo",t-o,e+c,t-l,e+s,t,e+s]),a.call(n,["bezierCurveTo",t+l,e+s,t+o,e+c,t+o,e]),n},drawSVGPath:function(t){var e=this,i=e._addAction,r=t.split(/,| (?=[a-zA-Z])/);i.call(e,["beginPath"]);for(var n=0,a=r.length;a>n;n++){var o=r[n],s=o[0].toUpperCase(),h=o.substring(1).split(/,| /);switch(0==h[0].length&&h.shift(),s){case"M":i.call(e,["moveTo",h[0],h[1]]);break;case"L":i.call(e,["lineTo",h[0],h[1]]);break;case"C":i.call(e,["bezierCurveTo",h[0],h[1],h[2],h[3],h[4],h[5]]);break;case"Z":i.call(e,["closePath"])}}return e},_draw:function(t){var e,i=this,r=i._actions,n=r.length;for(t.beginPath(),e=0;n>e;e++){var a=r[e],o=a[0],s=a.length>1?a.slice(1):null;"function"==typeof t[o]?t[o].apply(t,s):t[o]=a[1]}},render:function(t,e){var i=this;t.canvas;"canvas"===t.renderType?i._draw(t.context):(i.cache(),t.draw(i))},clear:function(){var t=this;return t._actions.length=0,t.lineWidth=1,t.lineAlpha=1,t.lineCap=null,t.lineJoin=null,t.miterLimit=10,t.hasStroke=!1,t.strokeStyle="0",t.hasFill=!1,t.fillStyle="0",t.fillAlpha=1,t.setCacheDirty(!0),t},_addAction:function(t){var e=this;return e._actions.push(t),e}})}();return n}),define("hilo/view/Text",["hilo/core/Class","hilo/core/Hilo","hilo/view/View","hilo/view/CacheMixin"],function(t,e,i,r){var n=t.create({Extends:i,Mixes:r,constructor:function(t){t=t||{},this.id=this.id||t.id||e.getUid("Text"),n.superclass.constructor.call(this,t),t.font||(this.font="12px arial"),this._fontHeight=n.measureFontHeight(this.font)},text:null,color:"#000",textAlign:null,textVAlign:null,outline:!1,lineSpacing:0,maxWidth:200,font:null,textWidth:0,textHeight:0,setFont:function(t){var e=this;return e.font!==t&&(e.font=t,e._fontHeight=n.measureFontHeight(t)),e},render:function(t,e){var i=this;t.canvas;if("canvas"===t.renderType)i._draw(t.context);else if("dom"===t.renderType){var r=i.drawable,n=r.domElement,a=n.style;a.font=i.font,a.textAlign=i.textAlign,a.color=i.color,a.width=i.width+"px",a.height=i.height+"px",a.lineHeight=i._fontHeight+i.lineSpacing+"px",n.innerHTML=i.text,t.draw(this)}else i.cache(),t.draw(i)},_draw:function(t){var e=this,i=e.text.toString();if(i){t.font=e.font,t.textAlign=e.textAlign,t.textBaseline="top";var r,n,a,o,s,h=i.split(/\r\n|\r|\n|
/),l=0,c=0,u=e._fontHeight+e.lineSpacing,d=[];for(r=0,o=h.length;o>r;r++)if(n=h[r],a=t.measureText(n).width,a<=e.maxWidth)d.push({text:n,y:c}),a>l&&(l=a),c+=u;else{var f,p,v,m="",g=0;for(p=0,s=n.length;s>p;p++)v=n[p],f=t.measureText(m+v).width,f>e.maxWidth?(d.push({text:m,y:c}),g>l&&(l=g),c+=u,m=v):(g=f,m+=v),p==s-1&&(d.push({text:m,y:c}),m!==v&&f>l&&(l=f),c+=u)}e.textWidth=l,e.textHeight=c,e.width||(e.width=l),e.height||(e.height=c);var _=0;switch(e.textVAlign){case"middle":_=e.height-e.textHeight>>1;break;case"bottom":_=e.height-e.textHeight}var x=e.background;x&&(t.fillStyle=x,t.fillRect(0,0,e.width,e.height)),e.outline?t.strokeStyle=e.color:t.fillStyle=e.color;for(var r=0;r>1;break;case"right":case"end":n=a}r.outline?t.strokeText(e,n,i):t.fillText(e,n,i)},Statics:{measureFontHeight:function(t){var i,r=document.documentElement,n=e.createElement("div",{style:{font:t,position:"absolute"},innerHTML:"M"});return r.appendChild(n),i=n.offsetHeight,r.removeChild(n),i}}});return n}),define("hilo/view/BitmapText",["hilo/core/Class","hilo/core/Hilo","hilo/view/Container","hilo/view/Bitmap"],function(t,e,i,r){var n=t.create({Extends:i,constructor:function(t){t=t||{},this.id=this.id||t.id||e.getUid("BitmapText"),n.superclass.constructor.call(this,t);var i=t.text+"";i&&(this.text="",this.setText(i)),this.pointerChildren=!1},glyphs:null,letterSpacing:0,text:"",textAlign:"left",setText:function(t){var e=this,i=t.toString(),r=i.length;if(e.text!=i){e.text=i;var n,a,o,s,h=0,l=0,c=0;for(n=0;r>n;n++)a=i.charAt(n),o=e.glyphs[a],o&&(c=h+(h>0?e.letterSpacing:0),e.children[n]?(s=e.children[n],s.setImage(o.image,o.rect)):(s=e._createBitmap(o),e.addChild(s)),s.x=c,h=c+o.rect[2],l=Math.max(l,o.rect[3]));for(n=e.children.length-1;n>=r;n--)e._releaseBitmap(e.children[n]),e.children[n].removeFromParent();return e.width=h,e.height=l,this.setTextAlign(),e}},_createBitmap:function(t){var e;return n._pool.length?(e=n._pool.pop(),e.setImage(t.image,t.rect)):e=new r({image:t.image,rect:t.rect}),e},_releaseBitmap:function(t){n._pool.push(t)},setTextAlign:function(t){switch(this.textAlign=t||this.textAlign,this.textAlign){case"center":this.pivotX=.5*this.width;break;case"right":this.pivotX=this.width;break;case"left":default:this.pivotX=0}return this},hasGlyphs:function(t){var e=this.glyphs;if(!e)return!1;var i,t=t.toString(),r=t.length;for(i=0;r>i;i++)if(!e[t.charAt(i)])return!1;return!0},Statics:{_pool:[],createGlyphs:function(t,e,i,r){var n=t.toString();i=i||n.length,r=r||1;for(var a=e.width/i,o=e.height/r,s={},h=0,l=t.length;l>h;h++)charStr=n.charAt(h),s[charStr]={image:e,rect:[a*(h%i),o*Math.floor(h/i),a,o]};return s}}});return n}),define("hilo/view/Button",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Drawable"],function(t,e,i,r){var n=e.create({Extends:i,constructor:function(e){e=e||{},this.id=this.id||e.id||t.getUid("Button"),n.superclass.constructor.call(this,e),this.drawable=new r(e),this.setState(n.UP)},upState:null,overState:null,downState:null,disabledState:null,state:null,enabled:!0,useHandCursor:!0,setEnabled:function(t){return this.enabled!=t&&(t?this.setState(n.UP):this.setState(n.DISABLED)),this},setState:function(e){if(this.state!==e){this.state=e,this.pointerEnabled=this.enabled=e!==n.DISABLED;var i;switch(e){case n.UP:i=this.upState;break;case n.OVER:i=this.overState;break;case n.DOWN:i=this.downState;break;case n.DISABLED:i=this.disabledState}i&&(this.drawable.init(i),t.copy(this,i,!0))}return this},fire:function(t,e){if(this.enabled){var i="string"==typeof t?t:t.type;switch(i){case"mousedown":case"touchstart":case"touchmove":this.setState(n.DOWN);break;case"mouseover":this.setState(n.OVER);break;case"mouseup":this.overState?this.setState(n.OVER):this.upState&&this.setState(n.UP);break;case"touchend":case"touchout":case"mouseout":this.setState(n.UP)}return n.superclass.fire.call(this,t,e)}},Statics:{UP:"up",OVER:"over",DOWN:"down",DISABLED:"disabled"}});return n}),define("hilo/util/TextureAtlas",["hilo/core/Class"],function(t){var e=function(){function e(t){var e=t.frames;if(!e)return null;var i,r=[];if(e instanceof Array)for(var n=0,a=e.length;a>n;n++)i=e[n],r[n]={image:t.image,rect:i};else for(var o=e.frameWidth,s=e.frameHeight,h=t.width/o|0,l=t.height/s|0,c=e.numFrames||h*l,n=0;c>n;n++)r[n]={image:t.image,rect:[n%h*o,(n/h|0)*s,o,s]};return r}function i(t,e){var i=t.sprites;if(!i)return null;var a,o,s,h={};for(var l in i){if(a=i[l],n(a))o=r(e[a]);else if(a instanceof Array){o=[];for(var c=0,u=a.length;u>c;c++){var d,f=a[c];n(f)?s=r(e[f]):(d=f.rect,n(d)&&(d=e[f.rect]),s=r(d,f)),o[c]=s}}else{o=[];for(var c=a.from;c<=a.to;c++)o[c-a.from]=r(e[c],a[c])}h[l]=o}return h}function r(t,e){var i={image:t.image,rect:t.rect};return e&&(i.name=e.name||null,i.duration=e.duration||0,i.stop=!!e.stop,i.next=e.next||null),i}function n(t){return"number"==typeof t}return t.create({constructor:function(t){this._frames=e(t),this._sprites=i(t,this._frames)},_frames:null,_sprites:null,getFrame:function(t){var e=this._frames;return e&&e[t]},getSprite:function(t){var e=this._sprites;return e&&e[t]},Statics:{createSpriteFrames:function(t,e,i,r,n,a,o){if("[object Array]"===Object.prototype.toString.call(t)){for(var e=[],s=0,h=t.length;h>s;s++)e=e.concat(this.createSpriteFrames.apply(this,t[s]));return e}if("string"==typeof e){var l=e.split(",");e=[];for(var c=0,u=l.length;u>c;c++){var d=l[c].split("-");if(1==d.length)e.push(parseInt(d[0]));else for(var s=parseInt(d[0]),h=parseInt(d[1]);h>=s;s++)e.push(s)}}for(var f=Math.floor(i.width/r),s=0;s=this._targetFPS?(this._measuredFPS=1e3/(this._tickTime/this._tickCount)+.5>>0,this._tickCount=0,this._tickTime=0):this._tickTime+=t-this._lastTime,this._lastTime=t;for(var r=0,n=i.length;n>r;r++)i[r].tick(e)}},getMeasuredFPS:function(){return this._measuredFPS},addTick:function(t){if(!t||"function"!=typeof t.tick)throw new Error("Ticker: The tick object must implement the tick method.");this._tickers.push(t)},removeTick:function(t){var e=this._tickers,i=e.indexOf(t);i>=0&&e.splice(i,1)}});return i}),define(function(){var t=Array.prototype,e=t.slice;t.indexOf=t.indexOf||function(t,e){e=e||0;var i,r=this.length;if(0==r||e>=r)return-1;for(0>e&&(e=r+e),i=e;r>i;i++)if(this[i]===t)return i;return-1};var i=Function.prototype;i.bind=i.bind||function(t){function i(){var a=n.concat(e.call(arguments));return r.apply(this instanceof i?this:t,a)}var r=this,n=e.call(arguments,1),a=function(){};return a.prototype=r.prototype,i.prototype=new a,i}}),define("hilo/util/drag",["hilo/core/Class","hilo/core/Hilo"],function(t,e){var i={startDrag:function(t){function i(t){t.stopPropagation(),a(t),h.off(e.event.POINTER_START,i),h.fire("dragStart",l),h.__dragX=h.x-l.x,h.__dragY=h.y-l.y,s||(s=this.getStage()),s.on(e.event.POINTER_MOVE,n),document.addEventListener(e.event.POINTER_END,r)}function r(t){document.removeEventListener(e.event.POINTER_END,r),s&&s.off(e.event.POINTER_MOVE,n),h.fire("dragEnd",l),h.on(e.event.POINTER_START,i)}function n(t){a(t),h.fire("dragMove",l);var e=l.x+h.__dragX,i=l.y+h.__dragY;h.x=Math.max(c,Math.min(d,e)),h.y=Math.max(u,Math.min(f,i))}function a(t){l.preX=l.x,l.preY=l.y,l.x=t.stageX,l.y=t.stageY}function o(){document.removeEventListener(e.event.POINTER_END,r),s&&s.off(e.event.POINTER_MOVE,n),h.off(e.event.POINTER_START,i)}var s,h=this,t=t||[-(1/0),-(1/0),1/0,1/0],l={x:0,y:0,preX:0,preY:0},c=t[0],u=t[1],d=t[2]==1/0?1/0:c+t[2],f=t[3]==1/0?1/0:u+t[3];h.on(e.event.POINTER_START,i),h.stopDrag=o},stopDrag:function(){}};return i}),define("hilo/tween/Tween",["hilo/core/Class"],function(t){var e=function(){function i(){return+new Date}return t.create({constructor:function(t,e,i,r){var n=this;n.target=t,n._startTime=0,n._seekTime=0,n._pausedTime=0,n._pausedStartTime=0,n._reverseFlag=1,n._repeatCount=0,3==arguments.length&&(r=i,i=e,e=null);for(var a in r)n[a]=r[a];n.setProps(e,i),!r.duration&&r.time&&(n.duration=r.time||0,n.time=0)},target:null,duration:0,delay:0,paused:!1,loop:!1,reverse:!1,repeat:0,repeatDelay:0,ease:null,time:0,onStart:null,onUpdate:null,onComplete:null,setProps:function(t,e){var i=this,r=i.target,n=t||e,a=i._fromProps={},o=i._toProps={};t=t||r,e=e||r;for(var s in n)o[s]=e[s]||0,r[s]=a[s]=t[s]||0;return i},start:function(){var t=this;return t._startTime=i()+t.delay,t._seekTime=0,t._pausedTime=0,t.paused=!1,e.add(t),t},stop:function(){return e.remove(this),this},pause:function(){var t=this;return t.paused=!0,t._pausedStartTime=i(),t},resume:function(){var t=this;return t.paused=!1,t._pausedStartTime&&(t._pausedTime+=i()-t._pausedStartTime),t._pausedStartTime=0,t},seek:function(t,r){var n=this,a=i();return n._startTime=a,n._seekTime=t,n._pausedTime=0,void 0!==r&&(n.paused=r),n._update(a,!0),e.add(n),n},link:function(t){var i=this,r=t.delay,n=i._startTime;if("string"==typeof r){var a=0==r.indexOf("+"),o=0==r.indexOf("-");r=a||o?Number(r.substr(1))*(a?1:-1):Number(r)}return t.delay=r,t._startTime=a||o?n+i.duration+r:n+r,i._next=t,e.remove(t),i},_render:function(t){var e,i=this,r=i.target,n=i._fromProps;for(e in n)r[e]=n[e]+(i._toProps[e]-n[e])*t},_update:function(t,r){var n=this;if(!n.paused||r){var a=t-n._startTime-n._pausedTime+n._seekTime;if(!(0>a)){var o,s=a/n.duration,h=!1;s=0>=s?0:s>=1?1:n.ease?n.ease(s):s,n.reverse&&(n._reverseFlag<0&&(s=1-s),1e-7>s&&(n.repeat>0&&n._repeatCount++>=n.repeat||0==n.repeat&&!n.loop?h=!0:(n._startTime=i(),n._pausedTime=0,n._reverseFlag*=-1))),0==n.time&&(o=n.onStart)&&o.call(n,n),n.time=a,n._render(s),(o=n.onUpdate)&&o.call(n,s,n),s>=1&&(n.reverse?(n._startTime=i(),n._pausedTime=0,n._reverseFlag*=-1):n.loop||n.repeat>0&&n._repeatCount++0&&t>=c?(l._render(s),l.time=a,e.add(l)):h&&(0>c||c>t)&&l.start()}return h?((o=n.onComplete)&&o.call(n,n),!0):void 0}}},Statics:{_tweens:[],tick:function(){var t,r,n=e._tweens,a=n.length;for(r=0;a>r;r++)t=n[r],t&&t._update(i())&&(n.splice(r,1),r--);return e},add:function(t){var i=e._tweens;return-1==i.indexOf(t)&&i.push(t),e},remove:function(t){if(t instanceof Array){for(var i=0,r=t.length;r>i;i++)e.remove(t[i]);return e}var i,n=e._tweens;if(t instanceof e)i=n.indexOf(t),i>-1&&n.splice(i,1);else for(i=0;it?7.5625*(t-=.54545)*t+.75:.90909>t?7.5625*(t-=.81818)*t+.9375:7.5625*(t-=.95455)*t+.984375},function(t){return.5>t?.5*_.EaseIn(2*t):.5*_.EaseOut(2*t-1)+.5});return{Linear:e,Quad:i,Cubic:r,Quart:n,Quint:a,Sine:f,Expo:p,Circ:v,Elastic:m,Back:g,Bounce:_}}();return t}),define("hilo/loader/ImageLoader",["hilo/core/Class"],function(t){var e=t.create({load:function(t){var e=this,i=new Image;t.crossOrigin&&(i.crossOrigin=t.crossOrigin),i.onload=function(){e.onLoad(i)},i.onerror=i.onabort=e.onError.bind(i),i.src=t.src+(t.noCache?(-1==t.src.indexOf("?")?"?":"&")+"t="+ +new Date:"")},onLoad:function(t){t=t||window.event;var e=t;return e.onload=e.onerror=e.onabort=null,e},onError:function(t){var e=t.target;return e.onload=e.onerror=e.onabort=null,t}});return e}),define("hilo/loader/ScriptLoader",["hilo/core/Class"],function(t){var e=t.create({load:function(t){var i=this,r=t.src,n="jsonp"==t.type;if(n){var a=t.callbackName||"callback",o=t.callback||"jsonp"+ ++e._count,s=window;s[o]||(s[o]=function(t){delete s[o]})}n&&(r+=(-1==r.indexOf("?")?"?":"&")+a+"="+o),t.noCache&&(r+=(-1==r.indexOf("?")?"?":"&")+"t="+ +new Date);var h=document.createElement("script");h.type="text/javascript",h.async=!0,h.onload=i.onLoad.bind(i),h.onerror=i.onError.bind(i),h.src=r,t.id&&(h.id=t.id),document.getElementsByTagName("head")[0].appendChild(h)},onLoad:function(t){var e=t.target;return e.onload=e.onerror=null,e},onError:function(t){var e=t.target;return e.onload=e.onerror=null,t},Statics:{_count:0}});return e}),define("hilo/loader/LoadQueue",["hilo/core/Class","hilo/event/EventMixin","hilo/loader/ImageLoader","hilo/loader/ScriptLoader"],function(t,e,i,r){function n(t){var e,i,r=/\/?[^\/]+\.(\w+)(\?\S+)?$/i;return(e=t.match(r))&&(i=e[1].toLowerCase()),i||null}var a=t.create({Mixes:e,constructor:function(t){this._source=[],this.add(t)},maxConnections:2,_source:null,_loaded:0,_connections:0,_currentIndex:-1,add:function(t){var e=this;return t&&(t=t instanceof Array?t:[t],e._source=e._source.concat(t)),e},get:function(t){if(t)for(var e=this._source,i=0;i=i)return void t.fire("complete");if(t._currentIndexe.z})},tick:function(){this.sortZ()}});return o}();return i}),define("hilo/game/ParticleSystem",["hilo/core/Hilo","hilo/core/Class","hilo/view/View","hilo/view/Container","hilo/view/Bitmap","hilo/view/Drawable"],function(t,e,i,r,n,a){var o=function(){function n(t,e){return e?t+2*(Math.random()-.5)*e:t}for(var o=["x","y","vx","vy","ax","ay","rotation","rotationV","scale","scaleV","alpha","alphaV","life"],s=[],h=0,l=o.length;l>h;h++){
+var c=o[h];s.push(c),s.push(c+"Var")}var u={x:0,y:0,vx:0,vy:0,ax:0,ay:0,scale:1,scaleV:0,alpha:1,alphaV:0,rotation:0,rotationV:0,life:1},d=[],f=e.create({Extends:r,constructor:function v(e){this.id=this.id||e.id||t.getUid("ParticleSystem"),this.emitterX=0,this.emitterY=0,this.gx=0,this.gy=0,this.totalTime=1/0,this.emitNum=10,this.emitNumVar=0,this.emitTime=.2,this.emitTimeVar=0,this.particle={},v.superclass.constructor.call(this,e),this.reset(e)},Statics:{PROPS:s,PROPS_DEFAULT:u,diedParticles:d},reset:function(e){t.copy(this,e),this.particle.system=this,this.totalTime<=0&&(this.totalTime=1/0)},onUpdate:function(t){t*=.001,this._isRun&&(this._totalRunTime+=t,this._currentRunTime+=t,this._currentRunTime>=this._emitTime&&(this._currentRunTime=0,this._emitTime=n(this.emitTime,this.emitTimeVar),this._emit()),this._totalRunTime>=this.totalTime&&this.stop())},_emit:function(){for(var t=n(this.emitNum,this.emitNumVar)>>0,e=0;t>e;e++)this.addChild(p.create(this.particle))},start:function(){this.stop(!0),this._currentRunTime=0,this._totalRunTime=0,this._isRun=!0,this._emitTime=n(this.emitTime,this.emitTimeVar)},stop:function(t){if(this.isRun=!1,t)for(var e=this.children.length-1;e>=0;e--)this.children[e].destroy()}}),p=e.create({Extends:i,constructor:function m(e){this.id=this.id||e.id||t.getUid("Particle"),m.superclass.constructor.call(this,e),this.init(e)},onUpdate:function(t){if(t*=.001,!this._died){var e=this.ax+this.system.gx,i=this.ay+this.system.gy;this.vx+=e*t,this.vy+=i*t,this.x+=this.vx*t,this.y+=this.vy*t,this.rotation+=this.rotationV,this._time>.1&&(this.alpha+=this.alphaV),this.scale+=this.scaleV,this.scaleX=this.scaleY=this.scale,this._time+=t,(this._time>=this.life||this.alpha<0)&&this.destroy()}},setImage:function(t,e){this.drawable=this.drawable||new a;var e=e||[0,0,t.width,t.height];this.width=e[2],this.height=e[3],this.drawable.rect=e,this.drawable.image=t},destroy:function(){this.died=!0,this.removeFromParent(),d.push(this)},init:function(t){this.system=t.system,this._died=!1,this._time=0,this.alpha=1;for(var e=0,i=s.length;i>e;e++){var r=s[e],a=void 0===t[r]?u[r]:t[r];this[r]=n(a,t[r+"Var"])}if(this.x+=this.system.emitterX,this.y+=this.system.emitterY,t.image){var o=t.frame;o&&o[0].length&&(o=o[Math.random()*o.length>>0]),this.setImage(t.image,o),void 0!==t.pivotX&&(this.pivotX=t.pivotX*o[2]),void 0!==t.pivotY&&(this.pivotY=t.pivotY*o[3])}},Statics:{create:function(t){if(d.length>0){var e=d.pop();return e.init(t),e}return new p(t)}}});return f}();return o});
\ No newline at end of file
diff --git a/build/amd/hilo-amd.zip b/build/amd/hilo-amd.zip
index f45944c6e8eb2ad9a50916eecb7b161d3eb9df35..e19fbf4028c6c077521e6726fda03743be0fb622 100644
GIT binary patch
delta 166297
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