mirror of
https://github.com/Melon-Bread/Pet.GB
synced 2024-11-25 05:08:18 -05:00
658 lines
13 KiB
Haxe
658 lines
13 KiB
Haxe
#if !lime_hybrid
|
|
|
|
|
|
import openfl.Assets;
|
|
|
|
|
|
#if (!macro && !display && !waxe)
|
|
|
|
|
|
@:access(openfl._legacy.Assets)
|
|
|
|
|
|
class ApplicationMain {
|
|
|
|
|
|
private static var barA:flash.display.Sprite;
|
|
private static var barB:flash.display.Sprite;
|
|
private static var container:flash.display.Sprite;
|
|
private static var forceHeight:Int;
|
|
private static var forceWidth:Int;
|
|
|
|
#if hxtelemetry
|
|
public static var telemetryConfig:hxtelemetry.HxTelemetry.Config;
|
|
#end
|
|
|
|
|
|
public static function main () {
|
|
|
|
flash.Lib.setPackage ("Melon Bread", "Pet.GB", "com.example.myapp", "0.0.1");
|
|
|
|
|
|
#if ios
|
|
flash.display.Stage.shouldRotateInterface = function (orientation:Int):Bool {
|
|
return (orientation == flash.display.Stage.OrientationLandscapeLeft || orientation == flash.display.Stage.OrientationLandscapeRight);
|
|
|
|
}
|
|
#end
|
|
|
|
#if hxtelemetry
|
|
telemetryConfig = new hxtelemetry.HxTelemetry.Config ();
|
|
telemetryConfig.allocations = true;
|
|
telemetryConfig.host = "localhost";
|
|
telemetryConfig.app_name = "Pet.GB";
|
|
#end
|
|
|
|
|
|
|
|
#if tizen
|
|
flash.display.Stage.setFixedOrientation (flash.display.Stage.OrientationLandscapeRight);
|
|
#end
|
|
|
|
flash.Lib.create (function () {
|
|
|
|
flash.Lib.current.stage.align = flash.display.StageAlign.TOP_LEFT;
|
|
flash.Lib.current.stage.scaleMode = flash.display.StageScaleMode.NO_SCALE;
|
|
flash.Lib.current.loaderInfo = flash.display.LoaderInfo.create (null);
|
|
|
|
#if mobile
|
|
|
|
forceWidth = 160;
|
|
forceHeight = 144;
|
|
|
|
container = new flash.display.Sprite ();
|
|
barA = new flash.display.Sprite ();
|
|
barB = new flash.display.Sprite ();
|
|
|
|
flash.Lib.current.stage.addChild (container);
|
|
container.addChild (flash.Lib.current);
|
|
container.addChild (barA);
|
|
container.addChild (barB);
|
|
|
|
applyScale ();
|
|
flash.Lib.current.stage.addEventListener (flash.events.Event.RESIZE, applyScale);
|
|
|
|
#end
|
|
|
|
#if windows
|
|
try {
|
|
|
|
var currentPath = haxe.io.Path.directory (Sys.executablePath ());
|
|
Sys.setCwd (currentPath);
|
|
|
|
} catch (e:Dynamic) {}
|
|
#elseif linux
|
|
try {
|
|
|
|
if (!sys.FileSystem.exists (Sys.getCwd () + "/lime-legacy.ndll")) {
|
|
|
|
Sys.setCwd (haxe.io.Path.directory (Sys.executablePath ()));
|
|
|
|
}
|
|
|
|
} catch (e:Dynamic) {}
|
|
#end
|
|
|
|
|
|
|
|
openfl.Assets.initialize ();
|
|
|
|
var hasMain = false;
|
|
|
|
for (methodName in Type.getClassFields (Main)) {
|
|
|
|
if (methodName == "main") {
|
|
|
|
hasMain = true;
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (hasMain) {
|
|
|
|
Reflect.callMethod (Main, Reflect.field (Main, "main"), []);
|
|
|
|
} else {
|
|
|
|
var instance:DocumentClass = Type.createInstance (DocumentClass, []);
|
|
|
|
if (Std.is (instance, flash.display.DisplayObject)) {
|
|
|
|
flash.Lib.current.addChild (cast instance);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
160, 144,
|
|
59,
|
|
0,
|
|
(true ? flash.Lib.HARDWARE : 0) |
|
|
(true ? flash.Lib.ALLOW_SHADERS : 0) |
|
|
(false ? flash.Lib.REQUIRE_SHADERS : 0) |
|
|
(false ? flash.Lib.DEPTH_BUFFER : 0) |
|
|
(false ? flash.Lib.STENCIL_BUFFER : 0) |
|
|
(true ? flash.Lib.RESIZABLE : 0) |
|
|
(false ? flash.Lib.BORDERLESS : 0) |
|
|
(true ? flash.Lib.VSYNC : 0) |
|
|
(false ? flash.Lib.FULLSCREEN : 0) |
|
|
(0 == 4 ? flash.Lib.HW_AA_HIRES : 0) |
|
|
(0 == 2 ? flash.Lib.HW_AA : 0),
|
|
"Pet.GB",
|
|
null
|
|
#if mobile, ScaledStage #end
|
|
);
|
|
|
|
}
|
|
|
|
#if mobile
|
|
public static function applyScale (?_) {
|
|
var scaledStage:ScaledStage = cast flash.Lib.current.stage;
|
|
|
|
var xScale:Float = scaledStage.__stageWidth / forceWidth;
|
|
var yScale:Float = scaledStage.__stageHeight / forceHeight;
|
|
|
|
if (xScale < yScale) {
|
|
|
|
flash.Lib.current.scaleX = xScale;
|
|
flash.Lib.current.scaleY = xScale;
|
|
flash.Lib.current.x = (scaledStage.__stageWidth - (forceWidth * xScale)) / 2;
|
|
flash.Lib.current.y = (scaledStage.__stageHeight - (forceHeight * xScale)) / 2;
|
|
|
|
} else {
|
|
|
|
flash.Lib.current.scaleX = yScale;
|
|
flash.Lib.current.scaleY = yScale;
|
|
flash.Lib.current.x = (scaledStage.__stageWidth - (forceWidth * yScale)) / 2;
|
|
flash.Lib.current.y = (scaledStage.__stageHeight - (forceHeight * yScale)) / 2;
|
|
|
|
}
|
|
|
|
if (flash.Lib.current.x > 0) {
|
|
|
|
barA.graphics.clear ();
|
|
barA.graphics.beginFill (0x000000);
|
|
barA.graphics.drawRect (0, 0, flash.Lib.current.x, scaledStage.__stageHeight);
|
|
|
|
barB.graphics.clear ();
|
|
barB.graphics.beginFill (0x000000);
|
|
var x = flash.Lib.current.x + (forceWidth * flash.Lib.current.scaleX);
|
|
barB.graphics.drawRect (x, 0, scaledStage.__stageWidth - x, scaledStage.__stageHeight);
|
|
|
|
} else {
|
|
|
|
barA.graphics.clear ();
|
|
barA.graphics.beginFill (0x000000);
|
|
barA.graphics.drawRect (0, 0, scaledStage.__stageWidth, flash.Lib.current.y);
|
|
|
|
barB.graphics.clear ();
|
|
barB.graphics.beginFill (0x000000);
|
|
var y = flash.Lib.current.y + (forceHeight * flash.Lib.current.scaleY);
|
|
barB.graphics.drawRect (0, y, scaledStage.__stageWidth, scaledStage.__stageHeight - y);
|
|
|
|
}
|
|
|
|
}
|
|
#end
|
|
|
|
|
|
#if neko
|
|
@:noCompletion @:dox(hide) public static function __init__ () {
|
|
|
|
untyped $loader.path = $array (haxe.io.Path.directory (Sys.executablePath ()), $loader.path);
|
|
untyped $loader.path = $array ("./", $loader.path);
|
|
untyped $loader.path = $array ("@executable_path/", $loader.path);
|
|
|
|
}
|
|
#end
|
|
|
|
|
|
}
|
|
|
|
|
|
@:build(DocumentClass.build())
|
|
@:keep class DocumentClass extends Main {}
|
|
|
|
|
|
#if mobile
|
|
class ScaledStage extends flash.display.Stage {
|
|
|
|
|
|
public var __stageHeight (get, null):Int;
|
|
public var __stageWidth (get, null):Int;
|
|
|
|
|
|
public function new (inHandle:Dynamic, inWidth:Int, inHeight:Int) {
|
|
|
|
super (inHandle, 0, 0);
|
|
|
|
}
|
|
|
|
|
|
private function get___stageHeight ():Int {
|
|
|
|
return super.get_stageHeight ();
|
|
|
|
}
|
|
|
|
|
|
private function get___stageWidth():Int {
|
|
|
|
return super.get_stageWidth ();
|
|
|
|
}
|
|
|
|
|
|
private override function get_stageHeight ():Int {
|
|
|
|
return 144;
|
|
|
|
}
|
|
|
|
private override function get_stageWidth ():Int {
|
|
|
|
return 160;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
#end
|
|
|
|
|
|
#elseif macro
|
|
|
|
|
|
import haxe.macro.Context;
|
|
import haxe.macro.Expr;
|
|
|
|
|
|
class DocumentClass {
|
|
|
|
|
|
macro public static function build ():Array<Field> {
|
|
|
|
var classType = Context.getLocalClass ().get ();
|
|
var searchTypes = classType;
|
|
|
|
while (searchTypes.superClass != null) {
|
|
|
|
if (searchTypes.pack.length >= 2 && (searchTypes.pack[1] == "display" || searchTypes.pack[2] == "display") && searchTypes.name == "DisplayObject") {
|
|
|
|
var fields = Context.getBuildFields ();
|
|
var method = macro { return flash.Lib.current.stage; }
|
|
|
|
fields.push ({ name: "get_stage", access: [ APrivate, AOverride ], kind: FFun({ args: [], expr: method, params: [], ret: macro :flash.display.Stage }), pos: Context.currentPos () });
|
|
return fields;
|
|
|
|
}
|
|
|
|
searchTypes = searchTypes.superClass.t.get ();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#elseif waxe
|
|
|
|
|
|
class ApplicationMain {
|
|
|
|
|
|
public static var autoShowFrame:Bool = true;
|
|
public static var frame:wx.Frame;
|
|
#if openfl
|
|
static public var nmeStage:wx.NMEStage;
|
|
#end
|
|
|
|
|
|
public static function main () {
|
|
|
|
#if openfl
|
|
flash.Lib.setPackage ("Melon Bread", "Pet.GB", "com.example.myapp", "0.0.1");
|
|
|
|
#end
|
|
|
|
wx.App.boot (function () {
|
|
|
|
|
|
frame = wx.Frame.create (null, null, "Pet.GB", null, { width: 160, height: 144 });
|
|
|
|
|
|
#if openfl
|
|
var stage = wx.NMEStage.create (frame, null, null, { width: 160, height: 144 });
|
|
#end
|
|
|
|
var hasMain = false;
|
|
for (methodName in Type.getClassFields (Main)) {
|
|
if (methodName == "main") {
|
|
hasMain = true;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (hasMain) {
|
|
Reflect.callMethod (Main, Reflect.field (Main, "main"), []);
|
|
}else {
|
|
var instance = Type.createInstance (Main, []);
|
|
}
|
|
|
|
if (autoShowFrame) {
|
|
wx.App.setTopWindow (frame);
|
|
frame.shown = true;
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
#if neko
|
|
@:noCompletion @:dox(hide) public static function __init__ () {
|
|
|
|
untyped $loader.path = $array (haxe.io.Path.directory (Sys.executablePath ()), $loader.path);
|
|
untyped $loader.path = $array ("./", $loader.path);
|
|
untyped $loader.path = $array ("@executable_path/", $loader.path);
|
|
|
|
}
|
|
#end
|
|
|
|
|
|
}
|
|
|
|
|
|
#else
|
|
|
|
|
|
import Main;
|
|
|
|
class ApplicationMain {
|
|
|
|
|
|
public static function main () {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#end
|
|
|
|
|
|
#else
|
|
|
|
|
|
#if !macro
|
|
|
|
|
|
@:access(lime.app.Application)
|
|
@:access(lime.Assets)
|
|
|
|
|
|
class ApplicationMain {
|
|
|
|
|
|
public static var config:lime.app.Config;
|
|
public static var preloader:openfl.display.Preloader;
|
|
|
|
|
|
public static function create ():Void {
|
|
|
|
var app = new lime.app.Application ();
|
|
app.create (config);
|
|
openfl.Lib.application = app;
|
|
|
|
#if !flash
|
|
var stage = new openfl._legacy.display.HybridStage (app.window.width, app.window.height, app.window.config.background);
|
|
stage.addChild (openfl.Lib.current);
|
|
app.addModule (stage);
|
|
#end
|
|
|
|
var display = new flixel.system.FlxPreloader ();
|
|
|
|
preloader = new openfl.display.Preloader (display);
|
|
app.setPreloader (preloader);
|
|
preloader.onComplete.add (init);
|
|
preloader.create (config);
|
|
|
|
#if (js && html5)
|
|
var urls = [];
|
|
var types = [];
|
|
|
|
|
|
urls.push ("flixel/sounds/beep.ogg");
|
|
types.push (lime.Assets.AssetType.SOUND);
|
|
|
|
|
|
urls.push ("flixel/sounds/flixel.ogg");
|
|
types.push (lime.Assets.AssetType.SOUND);
|
|
|
|
|
|
urls.push ("Nokia Cellphone FC Small");
|
|
types.push (lime.Assets.AssetType.FONT);
|
|
|
|
|
|
urls.push ("Monsterrat");
|
|
types.push (lime.Assets.AssetType.FONT);
|
|
|
|
|
|
urls.push ("flixel/images/ui/button.png");
|
|
types.push (lime.Assets.AssetType.IMAGE);
|
|
|
|
|
|
|
|
if (config.assetsPrefix != null) {
|
|
|
|
for (i in 0...urls.length) {
|
|
|
|
if (types[i] != lime.Assets.AssetType.FONT) {
|
|
|
|
urls[i] = config.assetsPrefix + urls[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
preloader.load (urls, types);
|
|
#end
|
|
|
|
var result = app.exec ();
|
|
|
|
#if (sys && !nodejs && !emscripten)
|
|
Sys.exit (result);
|
|
#end
|
|
|
|
}
|
|
|
|
|
|
public static function init ():Void {
|
|
|
|
var loaded = 0;
|
|
var total = 0;
|
|
var library_onLoad = function (__) {
|
|
|
|
loaded++;
|
|
|
|
if (loaded == total) {
|
|
|
|
start ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
preloader = null;
|
|
|
|
|
|
|
|
if (total == 0) {
|
|
|
|
start ();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static function main () {
|
|
|
|
config = {
|
|
|
|
build: "251",
|
|
company: "Melon Bread",
|
|
file: "Pet.GB",
|
|
fps: 59,
|
|
name: "Pet.GB",
|
|
orientation: "landscape",
|
|
packageName: "com.example.myapp",
|
|
version: "0.0.1",
|
|
windows: [
|
|
|
|
{
|
|
antialiasing: 0,
|
|
background: 0,
|
|
borderless: false,
|
|
depthBuffer: false,
|
|
display: 0,
|
|
fullscreen: false,
|
|
hardware: true,
|
|
height: 144,
|
|
parameters: "{}",
|
|
resizable: true,
|
|
stencilBuffer: false,
|
|
title: "Pet.GB",
|
|
vsync: true,
|
|
width: 160,
|
|
x: null,
|
|
y: null
|
|
},
|
|
]
|
|
|
|
};
|
|
|
|
#if (js && html5)
|
|
#if (munit || utest)
|
|
openfl.Lib.embed (null, 160, 144, "null");
|
|
#end
|
|
#else
|
|
create ();
|
|
#end
|
|
|
|
}
|
|
|
|
|
|
public static function start ():Void {
|
|
|
|
var hasMain = false;
|
|
var entryPoint = Type.resolveClass ("Main");
|
|
|
|
for (methodName in Type.getClassFields (entryPoint)) {
|
|
|
|
if (methodName == "main") {
|
|
|
|
hasMain = true;
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
lime.Assets.initialize ();
|
|
|
|
if (hasMain) {
|
|
|
|
Reflect.callMethod (entryPoint, Reflect.field (entryPoint, "main"), []);
|
|
|
|
} else {
|
|
|
|
var instance:DocumentClass = Type.createInstance (DocumentClass, []);
|
|
|
|
if (Std.is (instance, flash.display.DisplayObject)) {
|
|
|
|
flash.Lib.current.addChild (cast instance);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
openfl.Lib.current.stage.dispatchEvent (new openfl.events.Event (openfl.events.Event.RESIZE, false, false));
|
|
|
|
}
|
|
|
|
|
|
#if neko
|
|
@:noCompletion @:dox(hide) public static function __init__ () {
|
|
|
|
var loader = new neko.vm.Loader (untyped $loader);
|
|
loader.addPath (haxe.io.Path.directory (Sys.executablePath ()));
|
|
loader.addPath ("./");
|
|
loader.addPath ("@executable_path/");
|
|
|
|
}
|
|
#end
|
|
|
|
|
|
}
|
|
|
|
|
|
@:build(DocumentClass.build())
|
|
@:keep class DocumentClass extends Main {}
|
|
|
|
|
|
#else
|
|
|
|
|
|
import haxe.macro.Context;
|
|
import haxe.macro.Expr;
|
|
|
|
|
|
class DocumentClass {
|
|
|
|
|
|
macro public static function build ():Array<Field> {
|
|
|
|
var classType = Context.getLocalClass ().get ();
|
|
var searchTypes = classType;
|
|
|
|
while (searchTypes.superClass != null) {
|
|
|
|
if (searchTypes.pack.length >= 2 && (searchTypes.pack[1] == "display" || searchTypes.pack[2] == "display") && searchTypes.name == "DisplayObject") {
|
|
|
|
var fields = Context.getBuildFields ();
|
|
var method = macro { return flash.Lib.current.stage; }
|
|
|
|
fields.push ({ name: "get_stage", access: [ APrivate, AOverride ], kind: FFun({ args: [], expr: method, params: [], ret: macro :flash.display.Stage }), pos: Context.currentPos () });
|
|
return fields;
|
|
|
|
}
|
|
|
|
searchTypes = searchTypes.superClass.t.get ();
|
|
|
|
}
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#end
|
|
|
|
|
|
#end
|