const gulp = require("gulp"); const gulpClean = require("gulp-clean"); const Config = require("./config.json"); const packageInfo = require("./package.json"); const { System, Sdk, Haxe, Project } = require("gulp-haxetool"); const dateformat = require("dateformat"); const argv = require("yargs").argv; const publish = require("./tasks/gulp-publish"); Project.useRuffle(); if (packageInfo.haxe) { Haxe.VERSION = packageInfo.haxe; } if (Config.SdkDir) { Sdk.dir = Config.SdkDir; } if (Config.BuildDir) { Haxe.buildDir = Config.BuildDir; } exports.clean = function clean() { return gulp.src("target/*", { read: false }).pipe(gulpClean()); }; exports.setup = function setup() { const builder = Project.Builder.new( client.config, Project.Platform.ANDROID, client.buildSystem, ); return builder.prepare(); }; exports.generate = function generate() { return exports.setup().then(() => new Haxe() .haxelib(["run", "protohx", "generate", "protohx.json"]) .then(({ stdout }) => { if (stdout.indexOf("FAIL") > -1) { throw stdout; } }), ); }; /** * base config */ const config = new Project.Config({ meta: { title: "Tank'z", filename: "tankz", icon: "src/client/resources/icon.png", pack: "ru.m.tankz", author: "shmyga ", company: "MegaLoMania", version: packageInfo.version + (Config.Develop ? "-SNAPSHOT" : ""), }, key: Config.Key, libs: packageInfo.haxeDependencies, sources: ["src/common/haxe", "src-gen/haxe"], assets: ["src/common/resources/config"], flags: ["proto_debug"], macros: [ `CompilationOption.set('build','${dateformat(new Date(), "yyyy-mm-dd HH:MM:ss")}')`, ], }); const host = argv.host || "localhost"; const port = argv.port || 5000; /** * client */ const client = new Project( Project.BuildSystem.OPENFL, [ Project.Platform.FLASH, Project.Platform.HTML5, Project.Platform.LINUX, Project.Platform.WINDOWS, Project.Platform.ANDROID, ], config.branch({ name: "client", sources: ["src/client/haxe"], main: "ru.m.tankz.Client", preloader: "ru.m.tankz.Preloader", assets: ["src/common/resources/level", "src/client/resources"], meta: { width: 1024, height: 576, }, flags: [ //'proto_debug', //'dom', //'dev_layout', //'bitmap_text', ], macros: [ `CompilationOption.set('host','${host}')`, `CompilationOption.set('port',${port})`, ], }), ).bind(module, gulp); /** * editor */ const editor = new Project( Project.BuildSystem.OPENFL, [Project.Platform.FLASH, Project.Platform.HTML5, Project.Platform.LINUX], config.branch({ name: "editor", sources: ["src/client/haxe", "src/editor/haxe"], main: "ru.m.tankz.editor.Editor", preloader: "ru.m.tankz.Preloader", assets: ["src/client/resources", "src/editor/resources"], meta: { filename: "editor", pack: "ru.m.tankz.editor", width: 1024, height: 768, }, flags: [ //'dev_layout', ], }), ).bind(module, gulp); /** * server */ const server = new Project( Project.BuildSystem.HAXE, Project.Platform.CPP, config.branch({ name: "server", sources: ["src/server/haxe"], main: "ru.m.tankz.server.Server", assets: ["src/common/resources/level"], }), ).bind(module, gulp); /** * publish */ module.exports.publish = publish( packageInfo.name, packageInfo.version, Config.PublishDir, Config.PublishUrl, ); /** * default */ const defaultSeries = [ exports.clean, exports.generate, module.exports["client:flash:build"], module.exports["client:flash:html"], module.exports["client:html5:build"], module.exports["editor:flash:build"], module.exports["editor:flash:html"], module.exports["editor:html5:build"], module.exports["server:cpp:build"], ]; if (System.isLinux) { defaultSeries.push( module.exports["client:linux:build"], module.exports["client:linux:archive"], module.exports["client:linux:deb"], module.exports["client:android:build"], ); } if (System.isWindows) { defaultSeries.push( module.exports["client:windows:build"], module.exports["client:windows:archive"], module.exports["client:windows:installer"], ); } defaultSeries.push(exports.publish); module.exports.default = gulp.series(defaultSeries);