mapgen/Gulpfile.coffee

210 lines
5.1 KiB
CoffeeScript
Raw Normal View History

2018-07-13 17:45:37 +03:00
watchify = require('watchify')
browserify = require('browserify')
browserSync = require('browser-sync')
gulp = require('gulp')
gutil = require('gulp-util')
coffee = require("gulp-coffee")
2018-07-13 17:45:37 +03:00
coffeify = require('coffeeify')
sass = require('gulp-sass')
uglify = require('gulp-uglify')
zip = require('gulp-zip')
concat = require('gulp-concat')
rename = require('gulp-rename')
2018-07-13 17:45:37 +03:00
source = require('vinyl-source-stream')
fs = require 'fs'
2018-08-13 11:25:01 +03:00
path = require 'path'
cson = require 'cson'
glob = require('glob-fs')({
builtins: false
})
mkdirp = require 'mkdirp'
reload = browserSync.reload
2018-07-13 17:45:37 +03:00
bundler = watchify(browserify({
entries: ["./build/game/main.coffee"]
debug: true
transform: [coffeify]
}))
bundle = () ->
return bundler.bundle()
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
.pipe(source('bundle.js'))
.pipe(gulp.dest('./build/game'))
html = (target, debug) ->
return () ->
sources = [
'html/index.html'
]
if (debug)
sources.push('html/test.html')
gulp.src(sources)
.pipe(gulp.dest(target))
gulp.src(['game/gamepad.min.js'])
.pipe(gulp.dest(target+"/game"))
2018-07-14 11:23:27 +03:00
gulp.src(['node_modules/salet/lib/index.min.js'])
.pipe(rename('salet.min.js'))
.pipe(gulp.dest(target+"/game"))
# Images
img = (target) ->
return () ->
return gulp.src(['img/*.png', 'img/*.jpeg', 'img/*.jpg']).pipe(gulp.dest(target))
# Audio assets
audio = (target) ->
return () ->
return gulp.src(['audio/*.mp3']).pipe(gulp.dest(target))
# Fonts
fonts = (target) ->
return () ->
return gulp.src(['fonts/*']).pipe(gulp.dest(target))
gulp.task('html', html('./build', true))
gulp.task('img', img('./build/img'))
gulp.task('audio', audio('./build/audio'))
gulp.task('fonts', fonts('./build/fonts'))
# SCSS styles
gulp.task('sass', () ->
gulp.src('sass/main.scss')
.pipe(sass({outputStyle: 'compressed'}).on('error', sass.logError))
.pipe(gulp.dest('./build/css'))
)
# Autotests
gulp.task('tests', () ->
gulp.src('test/*.js')
.pipe(gulp.dest('./build/test/'))
)
gulp.task('concatCoffee', () ->
gulp.src([
# language
'./game/translations/ru.coffee'
## additional functions
## the actual game
2018-08-12 18:07:52 +03:00
'./game/1_maze.coffee' # map
2018-07-14 18:22:02 +03:00
'./game/2_model.coffee' # story logic
2018-08-12 18:07:52 +03:00
'./game/3_engine.coffee' # engine stuff
2018-07-14 18:22:02 +03:00
'./game/4_plot.coffee' # plot
]).pipe(concat('./main.coffee'))
.pipe(gulp.dest('./build/game'))
)
2018-08-13 11:25:01 +03:00
2018-08-12 18:54:52 +03:00
gulp.task('procgen', () ->
2018-08-13 11:25:01 +03:00
#for language in ['ru', 'en']
for language in ['ru']
patterns = glob.readdirSync("game/procgen/#{language}/*.cson", {})
2018-08-12 18:54:52 +03:00
json = {}
for filename in patterns
2018-08-13 12:01:53 +03:00
snippet = cson.parseCSONString fs.readFileSync(filename)
2018-08-12 18:54:52 +03:00
if not snippet.groups?
snippet.groups = []
if snippet.phrases?
snippet.groups.push({
tags: [],
phrases: snippet.phrases
})
pattern = path.basename(filename)
pattern = pattern.replace(/\..+$/, "")
json[pattern] = snippet
2018-08-13 11:25:01 +03:00
mkdirp( "./build/game/procgen", (err) ->
fs.writeFileSync "./build/game/procgen/#{language}.json", JSON.stringify(json)
)
return gulp.src([
"build/game/procgen/ru.json",
#"build/game/procgen/en.json",
])
2018-08-12 18:54:52 +03:00
)
2018-07-13 17:45:37 +03:00
bundler.on('update', bundle)
bundler.on('log', gutil.log)
2018-08-13 11:25:01 +03:00
gulp.task('coffee', gulp.series('concatCoffee', bundle))
2018-08-13 11:25:01 +03:00
gulp.task('build', gulp.parallel(
'html',
'img',
'sass',
'coffee',
'audio',
'fonts',
2018-08-12 18:54:52 +03:00
'tests',
'procgen'
2018-08-13 11:25:01 +03:00
))
2018-08-13 11:25:01 +03:00
gulp.task('serve', gulp.series('build', () ->
browserSync({
server: {
baseDir: 'build'
}
online: true
browser: []
ghostMode: false
})
sassListener = () ->
reload('./build/css/main.css')
2018-08-13 11:25:01 +03:00
gulp.watch(['./test/*.js'], gulp.series('tests'))
gulp.watch(['./html/*.html'], gulp.series('html'))
gulp.watch(['./sass/*.scss'], gulp.series('sass'))
gulp.watch(['./img/*.png', './img/*.jpeg', './img/*.jpg'], gulp.series('img'))
gulp.watch([
'./game/*.coffee'
'./game/translations/*.cson'
2018-08-13 11:25:01 +03:00
], gulp.series('coffee'))
2018-08-12 18:54:52 +03:00
gulp.watch([
'./game/procgen/*/*.cson'
2018-08-13 11:25:01 +03:00
], gulp.series('procgen'))
gulp.watch(['./build/css/main.css'], sassListener)
gulp.watch(
['./build/game/bundle.js', './build/img/*', './build/index.html'],
2018-08-13 11:25:01 +03:00
browserSync.reload
)
))
gulp.task('html-dist', html('./dist', false))
gulp.task('fonts-dist', fonts('./dist/fonts'))
gulp.task('img-dist', img('./dist/img'))
gulp.task('audio-dist', audio('./dist/audio'))
gulp.task('legal-dist', () ->
return gulp.src(['LICENSE.txt'])
.pipe(gulp.dest("./dist"))
)
gulp.task('sass-dist', () ->
return gulp.src('./sass/main.scss')
.pipe(sass({outputStyle: 'compressed'}))
.pipe(gulp.dest('./dist/css'))
)
2018-08-13 11:25:01 +03:00
gulp.task('coffee-dist', gulp.series('concatCoffee', () ->
gulp.src('./build/game/main.coffee', {sourcemaps: false})
.pipe(coffee())
.pipe(uglify())
.on('error', gutil.log)
.pipe(gulp.dest('./dist/game/'))
2018-08-13 11:25:01 +03:00
))
gulp.task('dist', gulp.parallel(
'html-dist',
'img-dist',
'sass-dist',
'coffee-dist',
'audio-dist',
'fonts-dist',
'legal-dist'
2018-08-13 11:25:01 +03:00
))
2018-08-13 11:25:01 +03:00
gulp.task('zip', gulp.series('dist', () ->
return gulp.src('dist/**')
.pipe(zip('dist.zip'))
.pipe(gulp.dest('.'))
2018-08-13 11:25:01 +03:00
))