const gulp = require('gulp'); const concat = require('gulp-concat'); const uglify = require('gulp-uglify'); const babel = require('gulp-babel'); const template = require('gulp-template'); const {Haxe, FlashPlayer} = require('gulp-haxetool'); const version = require('./version'); const prepare = require('./prepare'); const generate = prepare.generate; const Debug = require('./debug'); const webserver = require('gulp-webserver'); const run = require('gulp-run'); const tail = require('./tail'); const deb = require('gulp-debian'); const dateformat = require('dateformat'); const build = (platform, values, debug) => function build() { const build = dateformat(new Date(), 'yyyy-mm-dd HH:MM:ss'); let macro = [`CompilationOption.set('build','${build}')`]; if (debug) macro = macro.concat(debug.macro()); return gulp.src('.') .pipe(new Haxe().openfl({ command: 'build', platform: platform, version: version, debug: debug, values: {...values, proto_debug:debug}, macro: macro, })) .pipe(gulp.dest(`target/${platform}`)); }; const flashIndex = function() { return gulp.src('src/client/html/index.html') .pipe(template({ scripts: ['app.min.js'], swf: 'tankz.swf' })) .pipe(gulp.dest('target/flash')) }; const flashJs = function() { const src = [ 'src/client/html/js/*.js' ]; return gulp.src(src) .pipe(babel({presets: ['es2015']})) .pipe(uglify()) .pipe(concat('app.min.js')) .pipe(gulp.dest('target/flash')) }; const webapp = function () { return gulp.src('src/webapp/*').pipe(gulp.dest('target')); }; const buildDeb = gulp.series( () => gulp.src('src/client/debian/**/*').pipe(gulp.dest('target/debian')), () => gulp.src('target/linux/**/*').pipe(gulp.dest('target/debian/usr/share/tankz')), () => gulp.src('target/debian/*') .pipe(deb({ package: 'tankz', version: version, section: 'base', priority: 'optional', architecture: 'all', maintainer: 'shmyga ', description: 'Tank\'z', changelog: [], postinst: [ 'if [ "$1" = "configure" ] && [ -x "`which update-menus 2>/dev/null`" ] ; then\n' + ' update-menus\n' + 'fi' ], _target: '/', _out: 'target', _clean: false, _verbose: true })) ); exports['client:flash:html'] = gulp.parallel(flashIndex, flashJs); exports['client:flash'] = gulp.series(prepare(Haxe.ID), generate(), build('flash'), exports['client:flash:html']); exports['client:html5'] = gulp.series(prepare(Haxe.ID), generate(), build('html5')); exports['client:html5-dom'] = gulp.series(prepare(Haxe.ID), generate(), build('html5', {dom:true})); exports['client:linux'] = gulp.series(prepare(Haxe.ID), generate(), build('linux')); exports['client:webapp'] = webapp; exports['client:deb'] = buildDeb; exports['client'] = gulp.series( prepare(Haxe.ID), generate(), gulp.parallel(build('flash'), build('html5'), build('linux')), exports['client:flash:html'], webapp, buildDeb, ); const testFlash = function() { const debug = new Debug(); return build('flash', {}, debug)() .pipe(new FlashPlayer().run(true)) .pipe(debug.run()); }; const testHtml5 = (dom) => function() { return gulp.series( build('html5', {dom:dom}), () => gulp.src('target/html5').pipe(webserver({ host: 'localhost', port: 3000, open: true, fallback: 'index.html' })) )(); }; const testLinux = () => { const debug = new Debug(); return gulp.series( build('linux', {}, debug), () => gulp.src('target/linux/tankz') .pipe(run('./tankz', {cwd: 'target/linux', verbosity: 1})) .pipe(tail(Debug.log)) //.pipe(gulp.dest('target/log')) )(); }; exports['client:flash:test'] = gulp.series(prepare(Haxe.ID, FlashPlayer.ID), generate(), testFlash); exports['client:html5:test'] = gulp.series(prepare(Haxe.ID), generate(), testHtml5()); exports['client:html5-dom:test'] = gulp.series(prepare(Haxe.ID), generate(), testHtml5(true)); exports['client:linux:test'] = gulp.series(prepare(Haxe.ID), generate(), testLinux); exports['client:test'] = exports['client:flash:test'];