From 362be074f47f836614113218a460ef6223ff711c Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Wed, 23 Mar 2022 14:00:32 -0700 Subject: [PATCH] Merge HXProject defaults and exclude architectures at end --- src/lime/tools/ApplicationData.hx | 13 ++ src/lime/tools/HXProject.hx | 228 ++++---------------------- src/lime/tools/MetaData.hx | 14 ++ src/lime/tools/ProjectXMLParser.hx | 34 ++-- src/lime/tools/WindowData.hx | 35 ++++ tools/CommandLineTools.hx | 31 +++- tools/platforms/AIRPlatform.hx | 67 ++++++++ tools/platforms/AndroidPlatform.hx | 80 +++++++++ tools/platforms/EmscriptenPlatform.hx | 64 ++++++++ tools/platforms/FlashPlatform.hx | 61 +++++++ tools/platforms/HTML5Platform.hx | 67 +++++++- tools/platforms/IOSPlatform.hx | 72 ++++++++ tools/platforms/LinuxPlatform.hx | 77 +++++++++ tools/platforms/MacPlatform.hx | 77 +++++++++ tools/platforms/TVOSPlatform.hx | 72 ++++++++ tools/platforms/TizenPlatform.hx | 73 +++++++++ tools/platforms/WindowsPlatform.hx | 86 ++++++++++ tools/utils/CreateTemplate.hx | 10 +- 18 files changed, 924 insertions(+), 237 deletions(-) diff --git a/src/lime/tools/ApplicationData.hx b/src/lime/tools/ApplicationData.hx index bf5876f89..b5e43a674 100644 --- a/src/lime/tools/ApplicationData.hx +++ b/src/lime/tools/ApplicationData.hx @@ -10,3 +10,16 @@ typedef ApplicationData = @:optional var swfVersion:Float; @:optional var url:String; } + +@:dox(hide) class _ApplicationDataType +{ + public static var fields:ApplicationData = { + file: "", + init: "", + main: "", + path: "", + preloader: "", + swfVersion: 0.0, + url: "" + } +} \ No newline at end of file diff --git a/src/lime/tools/HXProject.hx b/src/lime/tools/HXProject.hx index a25966611..02d581e9a 100644 --- a/src/lime/tools/HXProject.hx +++ b/src/lime/tools/HXProject.hx @@ -32,6 +32,7 @@ class HXProject extends Script // public var defines:Map; public var dependencies:Array; public var environment:Map; + public var excludeArchitectures:Array; public var haxedefs:Map; public var haxeflags:Array; public var haxelibs:Array; @@ -60,10 +61,6 @@ class HXProject extends Script @:isVar public var window(get, set):WindowData; public var windows:Array; - private var defaultApp:ApplicationData; - private var defaultArchitectures:Array; - private var defaultMeta:MetaData; - private var defaultWindow:WindowData; private var needRerun:Bool; public static var _command:String; @@ -73,6 +70,7 @@ class HXProject extends Script public static var _targetFlags:Map; public static var _templatePaths:Array; public static var _userDefines:Map; + private static var initialized:Bool; public static function main() @@ -128,184 +126,38 @@ class HXProject extends Script targetFlags = MapTools.copy(_targetFlags); templatePaths = _templatePaths.copy(); - defaultMeta = - { - title: "MyApplication", - description: "", - packageName: "com.example.myapp", - version: "1.0.0", - company: "", - companyUrl: "", - buildNumber: null, - companyId: "" - } - defaultApp = - { - main: "Main", - file: "MyApplication", - path: "bin", - preloader: "", - swfVersion: 17, - url: "", - init: null - } - defaultWindow = - { - width: 800, - height: 600, - parameters: "{}", - background: 0xFFFFFF, - fps: 30, - hardware: true, - display: 0, - resizable: true, - borderless: false, - orientation: Orientation.AUTO, - vsync: false, - fullscreen: false, - allowHighDPI: true, - alwaysOnTop: false, - antialiasing: 0, - allowShaders: true, - requireShaders: false, - depthBuffer: true, - stencilBuffer: true, - colorDepth: 32, - maximized: false, - minimized: false, - hidden: false, - title: "" - } - platformType = PlatformType.DESKTOP; architectures = []; + excludeArchitectures = []; - switch (target) + platformType = switch (target) { - case AIR: - if (targetFlags.exists("ios") || targetFlags.exists("android")) - { - platformType = PlatformType.MOBILE; + case AIR if (targetFlags.exists("ios") || targetFlags.exists("android")): + PlatformType.MOBILE; - defaultWindow.width = 0; - defaultWindow.height = 0; - } - else - { - platformType = PlatformType.DESKTOP; - } - - architectures = []; - - case FLASH: - platformType = PlatformType.WEB; - architectures = []; - - case HTML5, FIREFOX: - platformType = PlatformType.WEB; - architectures = []; - - defaultWindow.width = 0; - defaultWindow.height = 0; - defaultWindow.fps = 60; - - case EMSCRIPTEN: - platformType = PlatformType.WEB; - architectures = []; - - defaultWindow.fps = 60; - defaultWindow.allowHighDPI = false; + case FLASH, HTML5, FIREFOX, EMSCRIPTEN: + PlatformType.WEB; case ANDROID, BLACKBERRY, IOS, TIZEN, WEBOS, TVOS: - platformType = PlatformType.MOBILE; + PlatformType.MOBILE; - if (target == Platform.IOS) - { - architectures = [Architecture.ARMV7, Architecture.ARM64]; - } - else if (target == Platform.ANDROID) - { - if (targetFlags.exists("simulator") || targetFlags.exists("emulator")) - { - architectures = [Architecture.X86]; - } - else - { - architectures = [Architecture.ARMV7]; - if (target == ANDROID) architectures.push(Architecture.ARM64); - } - } - else if (target == Platform.TVOS) - { - architectures = [Architecture.ARM64]; - } - else - { - architectures = [Architecture.ARMV6]; - } - - defaultWindow.width = 0; - defaultWindow.height = 0; - defaultWindow.fullscreen = true; - defaultWindow.requireShaders = true; - - case WINDOWS: - platformType = PlatformType.DESKTOP; - - if (targetFlags.exists("uwp") || targetFlags.exists("winjs")) - { - architectures = []; - - targetFlags.set("uwp", ""); - targetFlags.set("winjs", ""); - - defaultWindow.width = 0; - defaultWindow.height = 0; - defaultWindow.fps = 60; - } - else - { - switch (System.hostArchitecture) - { - case ARMV6: architectures = [ARMV6]; - case ARMV7: architectures = [ARMV7]; - case X86: architectures = [X86]; - case X64: architectures = [X64]; - default: architectures = []; - } - } - - defaultWindow.allowHighDPI = false; - - case MAC, LINUX: - platformType = PlatformType.DESKTOP; - switch (System.hostArchitecture) - { - case ARMV6: architectures = [ARMV6]; - case ARMV7: architectures = [ARMV7]; - case X86: architectures = [X86]; - case X64: architectures = [X64]; - default: architectures = []; - } - - defaultWindow.allowHighDPI = false; + case WINDOWS, MAC, LINUX, AIR: + PlatformType.DESKTOP; default: // TODO: Better handling of platform type for pluggable targets - - platformType = PlatformType.CONSOLE; - - defaultWindow.width = 0; - defaultWindow.height = 0; - defaultWindow.fps = 60; - defaultWindow.fullscreen = true; + PlatformType.CONSOLE; } - defaultArchitectures = architectures.copy(); + if (target == WINDOWS && targetFlags.exists("uwp") || targetFlags.exists("winjs")) + { + targetFlags.set("uwp", ""); + targetFlags.set("winjs", ""); + } - meta = ObjectTools.copyFields(defaultMeta, {}); - app = ObjectTools.copyFields(defaultApp, {}); - window = ObjectTools.copyFields(defaultWindow, {}); + meta = {}; + app = {}; + window = {}; windows = [window]; assets = new Array(); @@ -379,6 +231,8 @@ class HXProject extends Script project.environment.set(key, environment.get(key)); } + project.excludeArchitectures = excludeArchitectures.copy(); + for (key in haxedefs.keys()) { project.haxedefs.set(key, haxedefs.get(key)); @@ -834,14 +688,14 @@ class HXProject extends Script { if (project != null) { - ObjectTools.copyUniqueFields(project.meta, meta, project.defaultMeta); - ObjectTools.copyUniqueFields(project.app, app, project.defaultApp); + ObjectTools.copyFields(project.meta, meta); + ObjectTools.copyFields(project.app, app); for (i in 0...project.windows.length) { if (i < windows.length) { - ObjectTools.copyUniqueFields(project.windows[i], windows[i], project.defaultWindow); + ObjectTools.copyFields(project.windows[i], windows[i]); } else { @@ -853,31 +707,15 @@ class HXProject extends Script MapTools.copyUniqueKeys(project.environment, environment); MapTools.copyUniqueKeysDynamic(project.haxedefs, haxedefs); MapTools.copyUniqueKeys(project.libraryHandlers, libraryHandlers); + MapTools.copyUniqueKeys(project.targetFlags, targetFlags); MapTools.copyUniqueKeys(project.targetHandlers, targetHandlers); config.merge(project.config); - for (architecture in project.architectures) - { - if (defaultArchitectures.indexOf(architecture) == -1) - { - architectures.push(architecture); - } - } - - if (project.architectures.length > 0) - { - for (architecture in defaultArchitectures) - { - if (project.architectures.indexOf(architecture) == -1) - { - architectures.remove(architecture); - } - } - } - + architectures = ArrayTools.concatUnique(architectures, project.architectures); assets = ArrayTools.concatUnique(assets, project.assets); dependencies = ArrayTools.concatUnique(dependencies, project.dependencies, true); + excludeArchitectures = ArrayTools.concatUnique(excludeArchitectures, project.excludeArchitectures); haxeflags = ArrayTools.concatUnique(haxeflags, project.haxeflags); haxelibs = ArrayTools.concatUnique(haxelibs, project.haxelibs, true, "name"); icons = ArrayTools.concatUnique(icons, project.icons); @@ -1046,14 +884,6 @@ class HXProject extends Script windows = [window]; } - ObjectTools.copyMissingFields(defaultApp, app); - ObjectTools.copyMissingFields(defaultMeta, meta); - - for (item in windows) - { - ObjectTools.copyMissingFields(defaultWindow, item); - } - // config.populate (); for (field in Reflect.fields(app)) @@ -1398,7 +1228,7 @@ class HXProject extends Script if (main == null) { - main = defaultApp.main; + main = "Main"; } var indexOfPeriod = main.lastIndexOf("."); diff --git a/src/lime/tools/MetaData.hx b/src/lime/tools/MetaData.hx index 1849064f0..674097a3b 100644 --- a/src/lime/tools/MetaData.hx +++ b/src/lime/tools/MetaData.hx @@ -11,3 +11,17 @@ typedef MetaData = @:optional var title:String; @:optional var version:String; } + +@:dox(hide) class _MetaDataType +{ + public static var fields:MetaData = { + buildNumber: "", + company: "", + companyId: "", + companyUrl: "", + description: "", + packageName: "", + title: "", + version: "" + } +} \ No newline at end of file diff --git a/src/lime/tools/ProjectXMLParser.hx b/src/lime/tools/ProjectXMLParser.hx index d6550f6d2..2304e3529 100644 --- a/src/lime/tools/ProjectXMLParser.hx +++ b/src/lime/tools/ProjectXMLParser.hx @@ -439,11 +439,11 @@ class ProjectXMLParser extends HXProject name = "packageName"; } - if (Reflect.hasField(app, name)) + if (Reflect.hasField(ApplicationData._ApplicationDataType.fields, name)) { Reflect.setField(app, name, value); } - else if (Reflect.hasField(meta, name)) + else if (Reflect.hasField(MetaData._MetaDataType.fields, name)) { Reflect.setField(meta, name, value); } @@ -856,7 +856,7 @@ class ProjectXMLParser extends HXProject name = "packageName"; } - if (Reflect.hasField(meta, name)) + if (Reflect.hasField(MetaData._MetaDataType.fields, name)) { Reflect.setField(meta, name, value); } @@ -1336,7 +1336,7 @@ class ProjectXMLParser extends HXProject if (Reflect.hasField(Architecture, exclude.toUpperCase())) { - architectures.remove(Reflect.field(Architecture, exclude.toUpperCase())); + ArrayTools.addUnique(excludeArchitectures, Reflect.field(Architecture, exclude.toUpperCase())); } } @@ -1954,7 +1954,7 @@ class ProjectXMLParser extends HXProject while (id >= windows.length) { - windows.push(ObjectTools.copyFields(defaultWindow, {})); + windows.push({}); } for (attribute in element.x.attributes()) @@ -1994,35 +1994,23 @@ class ProjectXMLParser extends HXProject } case "height", "width", "fps", "antialiasing": - if (Reflect.hasField(windows[id], name)) - { - Reflect.setField(windows[id], name, Std.parseInt(value)); - } + Reflect.setField(windows[id], name, Std.parseInt(value)); case "parameters", "title": - if (Reflect.hasField(windows[id], name)) - { - Reflect.setField(windows[id], name, Std.string(value)); - } + Reflect.setField(windows[id], name, Std.string(value)); case "allow-high-dpi": - if (Reflect.hasField(windows[id], "allowHighDPI")) - { - Reflect.setField(windows[id], "allowHighDPI", value == "true"); - } + Reflect.setField(windows[id], "allowHighDPI", value == "true"); case "color-depth": - if (Reflect.hasField(windows[id], "colorDepth")) - { - Reflect.setField(windows[id], "colorDepth", Std.parseInt(value)); - } + Reflect.setField(windows[id], "colorDepth", Std.parseInt(value)); default: - if (Reflect.hasField(windows[id], name)) + if (Reflect.hasField(WindowData._WindowDataType.fields, name)) { Reflect.setField(windows[id], name, value == "true"); } - else if (Reflect.hasField(windows[id], formatAttributeName(name))) + else if (Reflect.hasField(WindowData._WindowDataType.fields, formatAttributeName(name))) { Reflect.setField(windows[id], formatAttributeName(name), value == "true"); } diff --git a/src/lime/tools/WindowData.hx b/src/lime/tools/WindowData.hx index c6141bafb..68dbfa490 100644 --- a/src/lime/tools/WindowData.hx +++ b/src/lime/tools/WindowData.hx @@ -32,3 +32,38 @@ typedef WindowData = @:optional var maximized:Bool; @:optional var hidden:Bool; } + +@:dox(hide) class _WindowDataType +{ + public static var fields:WindowData = { + width: 0, + height: 0, + x: 0.0, + y: 0.0, + background: 0, + parameters: "", + fps: 0, + hardware: false, + display: 0, + resizable: false, + borderless: false, + vsync: false, + fullscreen: false, + allowHighDPI: false, + alwaysOnTop: false, + antialiasing: 0, + orientation: Orientation.AUTO, + allowShaders: false, + requireShaders: false, + depthBuffer: false, + stencilBuffer: false, + title: "", + #if (js && html5) + element: null, + #end + colorDepth: 0, + minimized: false, + maximized: false, + hidden: false + } +} \ No newline at end of file diff --git a/tools/CommandLineTools.hx b/tools/CommandLineTools.hx index 7bfcca93e..cb3bbc327 100644 --- a/tools/CommandLineTools.hx +++ b/tools/CommandLineTools.hx @@ -54,7 +54,6 @@ class CommandLineTools words = new Array(); overrides = new HXProject(); - overrides.architectures = []; // Haxelib.setOverridePath (new Haxelib ("lime-tools"), Path.combine (Haxelib.getPath (new Haxelib ("lime")), "tools")); @@ -1859,18 +1858,25 @@ class CommandLineTools if (Reflect.hasField(project, field)) { var fieldValue = Reflect.field(project, field); - - if (Reflect.hasField(fieldValue, attribute)) + var typeValue:Dynamic = switch(field) { - if ((Reflect.field(fieldValue, attribute) is String)) + case "app": ApplicationData._ApplicationDataType.fields; + case "meta": MetaData._MetaDataType.fields; + case "window": WindowData._WindowDataType.fields; + default: fieldValue; + }; + + if (Reflect.hasField(typeValue, attribute)) + { + if ((Reflect.field(typeValue, attribute) is String)) { Reflect.setField(fieldValue, attribute, projectDefines.get(key)); } - else if ((Reflect.field(fieldValue, attribute) is Float)) + else if ((Reflect.field(typeValue, attribute) is Float)) { Reflect.setField(fieldValue, attribute, Std.parseFloat(projectDefines.get(key))); } - else if ((Reflect.field(fieldValue, attribute) is Bool)) + else if ((Reflect.field(typeValue, attribute) is Bool)) { Reflect.setField(fieldValue, attribute, (projectDefines.get(key).toLowerCase() == "true" || projectDefines.get(key) == "1")); @@ -2122,10 +2128,17 @@ class CommandLineTools if (field == "meta-build-number") property = "buildNumber"; var fieldReference = Reflect.field(overrides, fieldName); - - if (Reflect.hasField(fieldReference, property)) + var typeValue:Dynamic = switch(fieldName) { - var propertyReference = Reflect.field(fieldReference, property); + case "app": ApplicationData._ApplicationDataType.fields; + case "meta": MetaData._MetaDataType.fields; + case "window": WindowData._WindowDataType.fields; + default: fieldReference; + }; + + if (Reflect.hasField(typeValue, property)) + { + var propertyReference = Reflect.field(typeValue, property); if ((propertyReference is Bool)) { diff --git a/tools/platforms/AIRPlatform.hx b/tools/platforms/AIRPlatform.hx index 746b0ebe9..675eb8b0f 100644 --- a/tools/platforms/AIRPlatform.hx +++ b/tools/platforms/AIRPlatform.hx @@ -11,6 +11,7 @@ import lime.tools.FlashHelper; import lime.tools.HXProject; import lime.tools.Icon; import lime.tools.IconHelper; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformType; import lime.tools.ProjectHelper; @@ -28,6 +29,72 @@ class AIRPlatform extends FlashPlatform { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + if (project.targetFlags.exists("ios") || project.targetFlags.exists("android")) + { + defaults.window.width = 0; + defaults.window.height = 0; + } + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + targetDirectory = Path.combine(project.app.path, project.config.getString("air.output-directory", "air")); if (targetFlags.exists("android")) diff --git a/tools/platforms/AndroidPlatform.hx b/tools/platforms/AndroidPlatform.hx index ce399f241..867338d18 100644 --- a/tools/platforms/AndroidPlatform.hx +++ b/tools/platforms/AndroidPlatform.hx @@ -15,6 +15,7 @@ import lime.tools.DeploymentHelper; import lime.tools.HXProject; import lime.tools.Icon; import lime.tools.IconHelper; +import lime.tools.Orientation; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; import sys.io.File; @@ -28,6 +29,85 @@ class AndroidPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + if (project.targetFlags.exists("simulator") || project.targetFlags.exists("emulator")) + { + defaults.architectures = [Architecture.X86]; + } + else + { + defaults.architectures = [Architecture.ARMV7, Architecture.ARM64]; + } + + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fullscreen = true; + defaults.window.requireShaders = true; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + if (command != "display" && command != "clean") { // project = project.clone (); diff --git a/tools/platforms/EmscriptenPlatform.hx b/tools/platforms/EmscriptenPlatform.hx index e86bee0fa..6f8ddf9da 100644 --- a/tools/platforms/EmscriptenPlatform.hx +++ b/tools/platforms/EmscriptenPlatform.hx @@ -13,6 +13,7 @@ import lime.tools.CPPHelper; import lime.tools.DeploymentHelper; import lime.tools.HTML5Helper; import lime.tools.HXProject; +import lime.tools.Orientation; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; import sys.io.File; @@ -26,6 +27,69 @@ class EmscriptenPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + defaults.window.fps = 60; + defaults.window.allowHighDPI = false; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + targetDirectory = Path.combine(project.app.path, project.config.getString("emscripten.output-directory", "emscripten")); outputFile = targetDirectory + "/bin/" + project.app.file + ".js"; } diff --git a/tools/platforms/FlashPlatform.hx b/tools/platforms/FlashPlatform.hx index 2a1473072..f832ccd8a 100644 --- a/tools/platforms/FlashPlatform.hx +++ b/tools/platforms/FlashPlatform.hx @@ -13,6 +13,7 @@ import lime.tools.HXProject; import lime.tools.ProjectHelper; import lime.tools.FlashHelper; import lime.tools.HTML5Helper; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import sys.io.File; @@ -33,6 +34,66 @@ class FlashPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + targetDirectory = Path.combine(project.app.path, project.config.getString("flash.output-directory", "flash")); } diff --git a/tools/platforms/HTML5Platform.hx b/tools/platforms/HTML5Platform.hx index de0c2f22d..07ebb29c3 100644 --- a/tools/platforms/HTML5Platform.hx +++ b/tools/platforms/HTML5Platform.hx @@ -17,6 +17,7 @@ import lime.tools.HXProject; import lime.tools.Icon; import lime.tools.IconHelper; import lime.tools.ModuleHelper; +import lime.tools.Orientation; import lime.tools.ProjectHelper; import lime.tools.PlatformTarget; import sys.io.File; @@ -32,7 +33,71 @@ class HTML5Platform extends PlatformTarget { super(command, _project, targetFlags); - initialize(command, _project); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fps = 60; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + initialize(command, project); } public override function build():Void diff --git a/tools/platforms/IOSPlatform.hx b/tools/platforms/IOSPlatform.hx index 592be63ec..e08a6db15 100644 --- a/tools/platforms/IOSPlatform.hx +++ b/tools/platforms/IOSPlatform.hx @@ -25,6 +25,7 @@ import lime.tools.ImageHelper; import lime.tools.IOSHelper; import lime.tools.Keystore; import lime.tools.LaunchStoryboard; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; @@ -37,6 +38,77 @@ class IOSPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + defaults.architectures = [Architecture.ARMV7, Architecture.ARM64]; + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fullscreen = true; + defaults.window.requireShaders = true; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + targetDirectory = Path.combine(project.app.path, project.config.getString("ios.output-directory", "ios")); } diff --git a/tools/platforms/LinuxPlatform.hx b/tools/platforms/LinuxPlatform.hx index 7c7a11622..435545b34 100644 --- a/tools/platforms/LinuxPlatform.hx +++ b/tools/platforms/LinuxPlatform.hx @@ -15,6 +15,7 @@ import lime.tools.HXProject; import lime.tools.JavaHelper; import lime.tools.NekoHelper; import lime.tools.NodeJSHelper; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; @@ -34,6 +35,82 @@ class LinuxPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + switch (System.hostArchitecture) + { + case ARMV6: defaults.architectures = [ARMV6]; + case ARMV7: defaults.architectures = [ARMV7]; + case X86: defaults.architectures = [X86]; + case X64: defaults.architectures = [X64]; + default: defaults.architectures = []; + } + + defaults.window.allowHighDPI = false; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + for (architecture in project.architectures) { if (!targetFlags.exists("32") && architecture == Architecture.X64) diff --git a/tools/platforms/MacPlatform.hx b/tools/platforms/MacPlatform.hx index 59f8dcf19..5c26aa6c6 100644 --- a/tools/platforms/MacPlatform.hx +++ b/tools/platforms/MacPlatform.hx @@ -19,6 +19,7 @@ import lime.tools.IconHelper; import lime.tools.JavaHelper; import lime.tools.NekoHelper; import lime.tools.NodeJSHelper; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; @@ -38,6 +39,82 @@ class MacPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + switch (System.hostArchitecture) + { + case ARMV6: defaults.architectures = [ARMV6]; + case ARMV7: defaults.architectures = [ARMV7]; + case X86: defaults.architectures = [X86]; + case X64: defaults.architectures = [X64]; + default: defaults.architectures = []; + } + + defaults.window.allowHighDPI = false; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + for (architecture in project.architectures) { if (architecture == Architecture.X64) diff --git a/tools/platforms/TVOSPlatform.hx b/tools/platforms/TVOSPlatform.hx index f66d11960..6a04157d8 100644 --- a/tools/platforms/TVOSPlatform.hx +++ b/tools/platforms/TVOSPlatform.hx @@ -22,6 +22,7 @@ import lime.tools.HXProject; import lime.tools.Icon; import lime.tools.IconHelper; import lime.tools.Keystore; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; @@ -35,6 +36,77 @@ class TVOSPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + defaults.architectures = [Architecture.ARM64]; + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fullscreen = true; + defaults.window.requireShaders = true; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + targetDirectory = Path.combine(project.app.path, project.config.getString("tvos.output-directory", "tvos")); } diff --git a/tools/platforms/TizenPlatform.hx b/tools/platforms/TizenPlatform.hx index 808b13058..78e616c38 100644 --- a/tools/platforms/TizenPlatform.hx +++ b/tools/platforms/TizenPlatform.hx @@ -3,6 +3,7 @@ package; import hxp.HXML; import hxp.Path; import hxp.System; +import lime.tools.Architecture; import lime.tools.AssetHelper; import lime.tools.AssetType; import lime.tools.CPPHelper; @@ -24,6 +25,78 @@ class TizenPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + defaults.architectures = [Architecture.ARMV6]; + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fullscreen = true; + defaults.window.requireShaders = true;= + defaults.window.allowHighDPI = false; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + targetDirectory = Path.combine(project.app.path, project.config.getString("tizen.output-directory", "tizen")); } diff --git a/tools/platforms/WindowsPlatform.hx b/tools/platforms/WindowsPlatform.hx index e466670a8..51f5b3b9d 100644 --- a/tools/platforms/WindowsPlatform.hx +++ b/tools/platforms/WindowsPlatform.hx @@ -22,6 +22,7 @@ import lime.tools.JavaHelper; import lime.tools.ModuleHelper; import lime.tools.NekoHelper; import lime.tools.NodeJSHelper; +import lime.tools.Orientation; import lime.tools.Platform; import lime.tools.PlatformTarget; import lime.tools.ProjectHelper; @@ -41,6 +42,91 @@ class WindowsPlatform extends PlatformTarget { super(command, _project, targetFlags); + var defaults = new HXProject(); + + defaults.meta = { + title: "MyApplication", + description: "", + packageName: "com.example.myapp", + version: "1.0.0", + company: "", + companyUrl: "", + buildNumber: null, + companyId: "" + }; + + defaults.app = + { + main: "Main", + file: "MyApplication", + path: "bin", + preloader: "", + swfVersion: 17, + url: "", + init: null + }; + + defaults.window = + { + width: 800, + height: 600, + parameters: "{}", + background: 0xFFFFFF, + fps: 30, + hardware: true, + display: 0, + resizable: true, + borderless: false, + orientation: Orientation.AUTO, + vsync: false, + fullscreen: false, + allowHighDPI: true, + alwaysOnTop: false, + antialiasing: 0, + allowShaders: true, + requireShaders: false, + depthBuffer: true, + stencilBuffer: true, + colorDepth: 32, + maximized: false, + minimized: false, + hidden: false, + title: "" + }; + + if (project.targetFlags.exists("uwp") || project.targetFlags.exists("winjs")) + { + defaults.window.width = 0; + defaults.window.height = 0; + defaults.window.fps = 60; + } + else + { + switch (System.hostArchitecture) + { + case ARMV6: defaults.architectures = [ARMV6]; + case ARMV7: defaults.architectures = [ARMV7]; + case X86: defaults.architectures = [X86]; + case X64: defaults.architectures = [X64]; + default: defaults.architectures = []; + } + } + + defaults.window.allowHighDPI = false; + + for (i in 1...project.windows.length) + { + defaults.windows.push(defaults.window); + } + + defaults.merge(project); + project = defaults; + + for (excludeArchitecture in project.excludeArchitectures) + { + project.architectures.remove(excludeArchitecture); + } + if (project.targetFlags.exists("uwp") || project.targetFlags.exists("winjs")) { targetType = "winjs"; diff --git a/tools/utils/CreateTemplate.hx b/tools/utils/CreateTemplate.hx index f4aaa7062..7ef2a1567 100644 --- a/tools/utils/CreateTemplate.hx +++ b/tools/utils/CreateTemplate.hx @@ -187,27 +187,27 @@ class CreateTemplate if (overrides != null) { - if (overrides.meta.packageName != overrides.defaultMeta.packageName) + if (Reflect.hasField(overrides.meta, "packageName")) { packageName = overrides.meta.packageName; } - if (overrides.meta.title != overrides.defaultMeta.title) + if (Reflect.hasField(overrides.meta, "title")) { title = overrides.meta.title; } - if (overrides.meta.version != overrides.defaultMeta.version) + if (Reflect.hasField(overrides.meta, "version")) { version = overrides.meta.version; } - if (overrides.meta.company != overrides.defaultMeta.company) + if (Reflect.hasField(overrides.meta, "company")) { company = overrides.meta.company; } - if (overrides.app.file != overrides.defaultApp.file) + if (Reflect.hasField(overrides.app, "file")) { file = overrides.app.file; }