2018-07-13 17:45:37 +03:00
|
|
|
watchify = require('watchify')
|
|
|
|
browserify = require('browserify')
|
2018-07-13 16:38:44 +03:00
|
|
|
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')
|
2018-07-13 16:38:44 +03:00
|
|
|
sass = require('gulp-sass')
|
2018-09-22 17:20:40 +03:00
|
|
|
minify = require('gulp-minify')
|
2018-07-13 16:38:44 +03:00
|
|
|
zip = require('gulp-zip')
|
|
|
|
concat = require('gulp-concat')
|
|
|
|
rename = require('gulp-rename')
|
2018-09-22 17:58:51 +03:00
|
|
|
rm = require( 'gulp-rm' )
|
2018-07-13 17:45:37 +03:00
|
|
|
source = require('vinyl-source-stream')
|
2018-07-13 16:38:44 +03:00
|
|
|
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'
|
2018-07-13 16:38:44 +03:00
|
|
|
|
|
|
|
reload = browserSync.reload
|
|
|
|
|
2018-07-13 17:45:37 +03:00
|
|
|
bundler = watchify(browserify({
|
|
|
|
entries: ["./build/game/main.coffee"]
|
|
|
|
debug: true
|
|
|
|
transform: [coffeify]
|
|
|
|
}))
|
|
|
|
|
2018-09-22 18:23:32 +03:00
|
|
|
gulp.task('bundle-dist', () ->
|
|
|
|
return browserify({
|
|
|
|
entries: ["./build/game/main.coffee"]
|
|
|
|
debug: true
|
|
|
|
transform: [coffeify]
|
|
|
|
})
|
|
|
|
.bundle()
|
|
|
|
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
|
|
|
|
.pipe(source('bundle.js'))
|
|
|
|
.pipe(gulp.dest('./build/game'))
|
|
|
|
)
|
|
|
|
gulp.task('minify-dist', () ->
|
|
|
|
return gulp.src(['./build/game/bundle.js'])
|
|
|
|
.pipe(minify())
|
|
|
|
.pipe(gulp.dest('./dist/game/'))
|
|
|
|
)
|
|
|
|
|
2018-07-13 17:45:37 +03:00
|
|
|
bundle = () ->
|
|
|
|
return bundler.bundle()
|
|
|
|
.on('error', gutil.log.bind(gutil, 'Browserify Error'))
|
|
|
|
.pipe(source('bundle.js'))
|
|
|
|
.pipe(gulp.dest('./build/game'))
|
|
|
|
|
2018-07-13 16:38:44 +03:00
|
|
|
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'])
|
2018-07-13 16:38:44 +03:00
|
|
|
.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
|
2018-07-13 16:38:44 +03:00
|
|
|
]).pipe(concat('./main.coffee'))
|
|
|
|
.pipe(gulp.dest('./build/game'))
|
|
|
|
)
|
2018-08-13 11:25:01 +03:00
|
|
|
|
2018-09-23 12:59:42 +03:00
|
|
|
gulp.task('procgen', (done) ->
|
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
|
|
|
|
})
|
2018-09-10 20:58:13 +03:00
|
|
|
delete snippet.phrases
|
2018-08-12 18:54:52 +03:00
|
|
|
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)
|
|
|
|
)
|
2018-09-23 12:59:42 +03:00
|
|
|
return done()
|
|
|
|
###
|
2018-08-13 11:25:01 +03:00
|
|
|
return gulp.src([
|
|
|
|
"build/game/procgen/ru.json",
|
|
|
|
#"build/game/procgen/en.json",
|
|
|
|
])
|
2018-09-23 12:59:42 +03:00
|
|
|
###
|
2018-08-12 18:54:52 +03:00
|
|
|
)
|
2018-07-13 16:38:44 +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-07-13 16:38:44 +03:00
|
|
|
|
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-07-13 16:38:44 +03:00
|
|
|
|
2018-08-13 11:25:01 +03:00
|
|
|
gulp.task('serve', gulp.series('build', () ->
|
2018-07-13 16:38:44 +03:00
|
|
|
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'))
|
2018-07-13 16:38:44 +03:00
|
|
|
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'))
|
2018-07-13 16:38:44 +03:00
|
|
|
|
|
|
|
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
|
|
|
|
)
|
|
|
|
))
|
2018-07-13 16:38:44 +03:00
|
|
|
|
|
|
|
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-09-22 18:23:32 +03:00
|
|
|
gulp.task('remove-big-bundle-dist', (done) ->
|
|
|
|
return gulp.src([
|
|
|
|
'./dist/game/bundle-min.js'
|
|
|
|
])
|
|
|
|
.pipe(rm())
|
|
|
|
.on('end', () -> done())
|
2018-09-22 17:58:51 +03:00
|
|
|
)
|
|
|
|
|
2018-09-22 18:23:32 +03:00
|
|
|
gulp.task('rename-min-bundle-dist', (done) ->
|
2018-09-22 17:58:51 +03:00
|
|
|
return gulp.src([
|
2018-09-22 18:23:32 +03:00
|
|
|
'./dist/game/bundle-min.js'
|
2018-09-22 17:58:51 +03:00
|
|
|
])
|
2018-09-22 18:23:32 +03:00
|
|
|
.pipe(rename('bundle.js'))
|
|
|
|
.pipe(gulp.dest('./dist/game/'))
|
|
|
|
.on('end', () -> done())
|
2018-09-22 17:58:51 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
gulp.task('coffee-dist', gulp.series(
|
2018-09-23 13:23:08 +03:00
|
|
|
'procgen'
|
2018-09-22 17:58:51 +03:00
|
|
|
'concatCoffee'
|
|
|
|
'bundle-dist'
|
2018-09-22 18:23:32 +03:00
|
|
|
'minify-dist'
|
|
|
|
'rename-min-bundle-dist'
|
2018-09-22 17:58:51 +03:00
|
|
|
'remove-big-bundle-dist'
|
|
|
|
)
|
|
|
|
)
|
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',
|
2018-07-13 16:38:44 +03:00
|
|
|
'legal-dist'
|
2018-08-13 11:25:01 +03:00
|
|
|
))
|
2018-07-13 16:38:44 +03:00
|
|
|
|
2018-08-13 11:25:01 +03:00
|
|
|
gulp.task('zip', gulp.series('dist', () ->
|
2018-07-13 16:38:44 +03:00
|
|
|
return gulp.src('dist/**')
|
|
|
|
.pipe(zip('dist.zip'))
|
|
|
|
.pipe(gulp.dest('.'))
|
2018-08-13 11:25:01 +03:00
|
|
|
))
|