Push preloader logic into lime.app.Preloader class
Conflicts: tools/helpers/FlashHelper.hx tools/project/HXProject.hx tools/run.n
This commit is contained in:
1478
lime/Assets.hx
1478
lime/Assets.hx
File diff suppressed because it is too large
Load Diff
114
lime/app/Preloader.hx
Normal file
114
lime/app/Preloader.hx
Normal file
@@ -0,0 +1,114 @@
|
||||
package lime.app;
|
||||
|
||||
|
||||
#if flash
|
||||
import flash.display.LoaderInfo;
|
||||
import flash.display.Sprite;
|
||||
import flash.events.Event;
|
||||
import flash.events.ProgressEvent;
|
||||
import flash.Lib;
|
||||
#end
|
||||
|
||||
|
||||
class Preloader #if flash extends Sprite #end {
|
||||
|
||||
|
||||
public var complete:Bool;
|
||||
public var onComplete:Dynamic;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
#if flash
|
||||
super ();
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public function init (config:Config):Void {
|
||||
|
||||
#if flash
|
||||
Lib.current.addChild (this);
|
||||
Lib.current.loaderInfo.addEventListener (Event.COMPLETE, loaderInfo_onComplete);
|
||||
Lib.current.loaderInfo.addEventListener (Event.INIT, loaderInfo_onInit);
|
||||
Lib.current.loaderInfo.addEventListener (ProgressEvent.PROGRESS, loaderInfo_onProgress);
|
||||
Lib.current.addEventListener (Event.ENTER_FRAME, current_onEnter);
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function start ():Void {
|
||||
|
||||
#if flash
|
||||
if (Lib.current.contains (this)) {
|
||||
|
||||
Lib.current.removeChild (this);
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
if (onComplete != null) {
|
||||
|
||||
onComplete ();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function update ():Void {
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// Event Handlers
|
||||
|
||||
|
||||
|
||||
|
||||
#if flash
|
||||
private function current_onEnter (event:Event):Void {
|
||||
|
||||
if (complete) {
|
||||
|
||||
Lib.current.loaderInfo.removeEventListener (Event.COMPLETE, loaderInfo_onComplete);
|
||||
Lib.current.loaderInfo.removeEventListener (Event.INIT, loaderInfo_onInit);
|
||||
Lib.current.loaderInfo.removeEventListener (ProgressEvent.PROGRESS, loaderInfo_onProgress);
|
||||
|
||||
start ();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function loaderInfo_onComplete (event:flash.events.Event):Void {
|
||||
|
||||
complete = true;
|
||||
update ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function loaderInfo_onInit (event:flash.events.Event):Void {
|
||||
|
||||
update ();
|
||||
|
||||
}
|
||||
|
||||
|
||||
private function loaderInfo_onProgress (event:flash.events.ProgressEvent):Void {
|
||||
|
||||
update ();
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
}
|
||||
@@ -4,14 +4,20 @@ import ::APP_MAIN::;
|
||||
class ApplicationMain {
|
||||
|
||||
|
||||
private var app:lime.app.Application;
|
||||
private static var app:lime.app.Application;
|
||||
private static var config:lime.app.Config;
|
||||
private static var preloader:lime.app.Preloader;
|
||||
|
||||
|
||||
public static function main () {
|
||||
|
||||
var app = new ::APP_MAIN:: ();
|
||||
flash.Lib.current.stage.align = flash.display.StageAlign.TOP_LEFT;
|
||||
flash.Lib.current.stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
|
||||
|
||||
var config:lime.app.Config = {
|
||||
preloader = new ::if (PRELOADER_NAME != "")::::PRELOADER_NAME::::else::lime.app.Preloader::end:: ();
|
||||
preloader.onComplete = start;
|
||||
|
||||
config = {
|
||||
|
||||
antialiasing: Std.int (::WIN_ANTIALIASING::),
|
||||
borderless: ::WIN_BORDERLESS::,
|
||||
@@ -28,13 +34,21 @@ class ApplicationMain {
|
||||
|
||||
}
|
||||
|
||||
preloader.init (config);
|
||||
|
||||
}
|
||||
|
||||
|
||||
private static function start ():Void {
|
||||
|
||||
app = new ::APP_MAIN:: ();
|
||||
app.create (config);
|
||||
|
||||
var result = app.exec ();
|
||||
|
||||
#if sys
|
||||
Sys.exit (result);
|
||||
#end
|
||||
//#if sys
|
||||
//Sys.exit (result);
|
||||
//#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
622
templates/haxe/DefaultAssetLibrary.hx
Normal file
622
templates/haxe/DefaultAssetLibrary.hx
Normal file
@@ -0,0 +1,622 @@
|
||||
package;
|
||||
|
||||
|
||||
import haxe.Timer;
|
||||
import haxe.Unserializer;
|
||||
import lime.graphics.ImageData;
|
||||
import lime.utils.ByteArray;
|
||||
import lime.Assets;
|
||||
|
||||
#if sys
|
||||
import sys.FileSystem;
|
||||
#end
|
||||
|
||||
#if flash
|
||||
import flash.display.Bitmap;
|
||||
import flash.display.BitmapData;
|
||||
import flash.display.Loader;
|
||||
import flash.events.Event;
|
||||
import flash.media.Sound;
|
||||
import flash.net.URLLoader;
|
||||
import flash.net.URLRequest;
|
||||
#end
|
||||
|
||||
|
||||
class DefaultAssetLibrary extends AssetLibrary {
|
||||
|
||||
|
||||
public var className (default, null) = new Map <String, Dynamic> ();
|
||||
public var path (default, null) = new Map <String, String> ();
|
||||
public var type (default, null) = new Map <String, AssetType> ();
|
||||
|
||||
private var lastModified:Float;
|
||||
private var timer:Timer;
|
||||
|
||||
|
||||
public function new () {
|
||||
|
||||
super ();
|
||||
|
||||
#if flash
|
||||
|
||||
::if (assets != null)::::foreach assets::::if (embed)::className.set ("::id::", __ASSET__::flatName::);::else::path.set ("::id::", "::resourceName::");::end::
|
||||
type.set ("::id::", AssetType.$$upper(::type::));
|
||||
::end::::end::
|
||||
|
||||
#elseif html5
|
||||
|
||||
::if (assets != null)::var id;
|
||||
::foreach assets::::if (embed)::id = "::id::";
|
||||
::if (type == "font")::className.set (id, __ASSET__::flatName::);::else::path.set (id, ::if (resourceName == id)::id::else::"::resourceName::"::end::);::end::
|
||||
type.set (id, AssetType.$$upper(::type::));
|
||||
::end::::end::::end::
|
||||
|
||||
#else
|
||||
|
||||
#if (windows || mac || linux)
|
||||
|
||||
var useManifest = false;
|
||||
::if (assets != null)::::foreach assets::::if (embed)::
|
||||
className.set ("::id::", __ASSET__::flatName::);
|
||||
type.set ("::id::", AssetType.$$upper(::type::));
|
||||
::else::useManifest = true;
|
||||
::end::::end::::end::
|
||||
|
||||
if (useManifest) {
|
||||
|
||||
loadManifest ();
|
||||
|
||||
if (Sys.args ().indexOf ("-livereload") > -1) {
|
||||
|
||||
var path = FileSystem.fullPath ("manifest");
|
||||
lastModified = FileSystem.stat (path).mtime.getTime ();
|
||||
|
||||
timer = new Timer (2000);
|
||||
timer.run = function () {
|
||||
|
||||
var modified = FileSystem.stat (path).mtime.getTime ();
|
||||
|
||||
if (modified > lastModified) {
|
||||
|
||||
lastModified = modified;
|
||||
loadManifest ();
|
||||
|
||||
if (eventCallback != null) {
|
||||
|
||||
eventCallback (this, "change");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
loadManifest ();
|
||||
|
||||
#end
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function exists (id:String, type:AssetType):Bool {
|
||||
|
||||
var assetType = this.type.get (id);
|
||||
|
||||
if (assetType != null) {
|
||||
|
||||
if (assetType == type || ((type == SOUND || type == MUSIC) && (assetType == MUSIC || assetType == SOUND))) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
#if flash
|
||||
|
||||
if ((assetType == BINARY || assetType == TEXT) && type == BINARY) {
|
||||
|
||||
return true;
|
||||
|
||||
} else if (path.exists (id)) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
if (type == BINARY || type == null) {
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getBytes (id:String):ByteArray {
|
||||
|
||||
#if flash
|
||||
|
||||
return cast (Type.createInstance (className.get (id), []), ByteArray);
|
||||
|
||||
#elseif js
|
||||
|
||||
/*var bytes:ByteArray = null;
|
||||
var data = ApplicationMain.urlLoaders.get (path.get (id)).data;
|
||||
|
||||
if (Std.is (data, String)) {
|
||||
|
||||
bytes = new ByteArray ();
|
||||
bytes.writeUTFBytes (data);
|
||||
|
||||
} else if (Std.is (data, ByteArray)) {
|
||||
|
||||
bytes = cast data;
|
||||
|
||||
} else {
|
||||
|
||||
bytes = null;
|
||||
|
||||
}
|
||||
|
||||
if (bytes != null) {
|
||||
|
||||
bytes.position = 0;
|
||||
return bytes;
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
}*/
|
||||
|
||||
return null;
|
||||
|
||||
#else
|
||||
|
||||
return null;
|
||||
//if (className.exists(id)) return cast (Type.createInstance (className.get (id), []), ByteArray);
|
||||
//else return ByteArray.readFile (path.get (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getImageData (id:String):ImageData {
|
||||
|
||||
#if flash
|
||||
|
||||
var bitmapData = cast (Type.createInstance (className.get (id), []), BitmapData);
|
||||
return new ImageData (bitmapData, bitmapData.width, bitmapData.height);
|
||||
|
||||
#elseif js
|
||||
|
||||
return null;
|
||||
//return cast (ApplicationMain.loaders.get (path.get (id)).contentLoaderInfo.content, Bitmap).bitmapData;
|
||||
|
||||
#else
|
||||
|
||||
return null;
|
||||
//if (className.exists(id)) return cast (Type.createInstance (className.get (id), []), BitmapData);
|
||||
//else return BitmapData.load (path.get (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getMusic (id:String):Dynamic /*Sound*/ {
|
||||
|
||||
#if flash
|
||||
|
||||
return cast (Type.createInstance (className.get (id), []), Sound);
|
||||
|
||||
#elseif openfl_html5
|
||||
|
||||
/*var sound = new Sound ();
|
||||
sound.__buffer = true;
|
||||
sound.load (new URLRequest (path.get (id)));
|
||||
return sound;*/
|
||||
return null;
|
||||
|
||||
#elseif js
|
||||
|
||||
return null;
|
||||
//return new Sound (new URLRequest (path.get (id)));
|
||||
|
||||
#else
|
||||
|
||||
return null;
|
||||
//if (className.exists(id)) return cast (Type.createInstance (className.get (id), []), Sound);
|
||||
//else return new Sound (new URLRequest (path.get (id)), null, true);
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getPath (id:String):String {
|
||||
|
||||
//#if ios
|
||||
|
||||
//return SystemPath.applicationDirectory + "/assets/" + path.get (id);
|
||||
|
||||
//#else
|
||||
|
||||
return path.get (id);
|
||||
|
||||
//#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getSound (id:String):Dynamic /*Sound*/ {
|
||||
|
||||
#if flash
|
||||
|
||||
return cast (Type.createInstance (className.get (id), []), Sound);
|
||||
|
||||
#elseif js
|
||||
|
||||
return null;
|
||||
//return new Sound (new URLRequest (path.get (id)));
|
||||
|
||||
#else
|
||||
|
||||
return null;
|
||||
//if (className.exists(id)) return cast (Type.createInstance (className.get (id), []), Sound);
|
||||
//else return new Sound (new URLRequest (path.get (id)), null, type.get (id) == MUSIC);
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function getText (id:String):String {
|
||||
|
||||
#if js
|
||||
|
||||
/*var bytes:ByteArray = null;
|
||||
var data = ApplicationMain.urlLoaders.get (path.get (id)).data;
|
||||
|
||||
if (Std.is (data, String)) {
|
||||
|
||||
return cast data;
|
||||
|
||||
} else if (Std.is (data, ByteArray)) {
|
||||
|
||||
bytes = cast data;
|
||||
|
||||
} else {
|
||||
|
||||
bytes = null;
|
||||
|
||||
}
|
||||
|
||||
if (bytes != null) {
|
||||
|
||||
bytes.position = 0;
|
||||
return bytes.readUTFBytes (bytes.length);
|
||||
|
||||
} else {
|
||||
|
||||
return null;
|
||||
}*/
|
||||
|
||||
return null;
|
||||
|
||||
#else
|
||||
|
||||
var bytes = getBytes (id);
|
||||
|
||||
if (bytes == null) {
|
||||
|
||||
return null;
|
||||
|
||||
} else {
|
||||
|
||||
return bytes.readUTFBytes (bytes.length);
|
||||
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function isLocal (id:String, type:AssetType):Bool {
|
||||
|
||||
#if flash
|
||||
|
||||
if (type != AssetType.MUSIC && type != AssetType.SOUND) {
|
||||
|
||||
return className.exists (id);
|
||||
|
||||
}
|
||||
|
||||
#end
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function list (type:AssetType):Array<String> {
|
||||
|
||||
var items = [];
|
||||
|
||||
for (id in this.type.keys ()) {
|
||||
|
||||
if (type == null || exists (id, type)) {
|
||||
|
||||
items.push (id);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return items;
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function loadBytes (id:String, handler:ByteArray -> Void):Void {
|
||||
|
||||
#if flash
|
||||
|
||||
if (path.exists (id)) {
|
||||
|
||||
var loader = new URLLoader ();
|
||||
loader.addEventListener (Event.COMPLETE, function (event:Event) {
|
||||
|
||||
var bytes = new ByteArray ();
|
||||
bytes.writeUTFBytes (event.currentTarget.data);
|
||||
bytes.position = 0;
|
||||
|
||||
handler (bytes);
|
||||
|
||||
});
|
||||
loader.load (new URLRequest (path.get (id)));
|
||||
|
||||
} else {
|
||||
|
||||
handler (getBytes (id));
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
handler (getBytes (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function loadImageData (id:String, handler:ImageData -> Void):Void {
|
||||
|
||||
#if flash
|
||||
|
||||
if (path.exists (id)) {
|
||||
|
||||
var loader = new Loader ();
|
||||
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, function (event:Event) {
|
||||
|
||||
var bitmapData = cast (event.currentTarget.content, Bitmap).bitmapData;
|
||||
handler (new ImageData (bitmapData, bitmapData.width, bitmapData.height));
|
||||
|
||||
});
|
||||
loader.load (new URLRequest (path.get (id)));
|
||||
|
||||
} else {
|
||||
|
||||
handler (getImageData (id));
|
||||
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
handler (getImageData (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if (!flash && !html5)
|
||||
private function loadManifest ():Void {
|
||||
|
||||
try {
|
||||
|
||||
#if blackberry
|
||||
var bytes = ByteArray.readFile ("app/native/manifest");
|
||||
#elseif tizen
|
||||
var bytes = ByteArray.readFile ("../res/manifest");
|
||||
#elseif emscripten
|
||||
var bytes = ByteArray.readFile ("assets/manifest");
|
||||
#else
|
||||
var bytes = ByteArray.readFile ("manifest");
|
||||
#end
|
||||
|
||||
if (bytes != null) {
|
||||
|
||||
bytes.position = 0;
|
||||
|
||||
if (bytes.length > 0) {
|
||||
|
||||
var data = bytes.readUTFBytes (bytes.length);
|
||||
|
||||
if (data != null && data.length > 0) {
|
||||
|
||||
var manifest:Array<Dynamic> = Unserializer.run (data);
|
||||
|
||||
for (asset in manifest) {
|
||||
|
||||
if (!className.exists (asset.id)) {
|
||||
|
||||
path.set (asset.id, asset.path);
|
||||
type.set (asset.id, Type.createEnum (AssetType, asset.type));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
trace ("Warning: Could not load asset manifest (bytes was null)");
|
||||
|
||||
}
|
||||
|
||||
} catch (e:Dynamic) {
|
||||
|
||||
trace ('Warning: Could not load asset manifest (${e})');
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
#end
|
||||
|
||||
|
||||
public override function loadMusic (id:String, handler:Dynamic /*Sound*/ -> Void):Void {
|
||||
|
||||
#if (flash || js)
|
||||
|
||||
/*if (path.exists (id)) {
|
||||
|
||||
var loader = new Loader ();
|
||||
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, function (event) {
|
||||
|
||||
handler (cast (event.currentTarget.content, Bitmap).bitmapData);
|
||||
|
||||
});
|
||||
loader.load (new URLRequest (path.get (id)));
|
||||
|
||||
} else {*/
|
||||
|
||||
handler (getMusic (id));
|
||||
|
||||
//}
|
||||
|
||||
#else
|
||||
|
||||
handler (getMusic (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function loadSound (id:String, handler:Dynamic /*Sound*/ -> Void):Void {
|
||||
|
||||
#if (flash || js)
|
||||
|
||||
/*if (path.exists (id)) {
|
||||
|
||||
var loader = new Loader ();
|
||||
loader.contentLoaderInfo.addEventListener (Event.COMPLETE, function (event) {
|
||||
|
||||
handler (cast (event.currentTarget.content, Bitmap).bitmapData);
|
||||
|
||||
});
|
||||
loader.load (new URLRequest (path.get (id)));
|
||||
|
||||
} else {*/
|
||||
|
||||
handler (getSound (id));
|
||||
|
||||
//}
|
||||
|
||||
#else
|
||||
|
||||
handler (getSound (id));
|
||||
|
||||
#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
public override function loadText (id:String, handler:String -> Void):Void {
|
||||
|
||||
//#if js
|
||||
|
||||
/*if (path.exists (id)) {
|
||||
|
||||
var loader = new URLLoader ();
|
||||
loader.addEventListener (Event.COMPLETE, function (event:Event) {
|
||||
|
||||
handler (event.currentTarget.data);
|
||||
|
||||
});
|
||||
loader.load (new URLRequest (path.get (id)));
|
||||
|
||||
} else {
|
||||
|
||||
handler (getText (id));
|
||||
|
||||
}*/
|
||||
|
||||
//#else
|
||||
|
||||
var callback = function (bytes:ByteArray):Void {
|
||||
|
||||
if (bytes == null) {
|
||||
|
||||
handler (null);
|
||||
|
||||
} else {
|
||||
|
||||
handler (bytes.readUTFBytes (bytes.length));
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
loadBytes (id, callback);
|
||||
|
||||
//#end
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if flash
|
||||
|
||||
::foreach assets::::if (embed)::::if (type == "image")::@:keep class __ASSET__::flatName:: extends flash.display.BitmapData { public function new () { super (0, 0, true, 0); } }::else::@:keep class __ASSET__::flatName:: extends ::flashClass:: { }::end::::end::
|
||||
::end::
|
||||
|
||||
#elseif html5
|
||||
|
||||
//::foreach assets::::if (type == "font")::@:keep class __ASSET__::flatName:: extends openfl.text.Font { #if (!openfl_html5_dom) public function new () { super (); fontName = "::id::"; } #end }::end::
|
||||
//::end::
|
||||
|
||||
#elseif (windows || mac || linux)
|
||||
|
||||
::if (assets != null)::
|
||||
//::foreach assets::::if (embed)::::if (type == "image")::@:bitmap("::sourcePath::") class __ASSET__::flatName:: extends openfl.display.BitmapData {}
|
||||
//::elseif (type == "sound")::@:sound("::sourcePath::") class __ASSET__::flatName:: extends openfl.media.Sound {}
|
||||
//::elseif (type == "music")::@:sound("::sourcePath::") class __ASSET__::flatName:: extends openfl.media.Sound {}
|
||||
//::elseif (type == "font")::@:font("::sourcePath::") class __ASSET__::flatName:: extends openfl.text.Font {}
|
||||
//::else::@:file("::sourcePath::") class __ASSET__::flatName:: extends lime.utils.ByteArray {}
|
||||
::end::::end::::end::::end::
|
||||
|
||||
#end
|
||||
|
||||
Reference in New Issue
Block a user