Fixed semicolon issues
[interactive-pacbot.git] / Gruntfile.js
1 // Generated on 2014-03-28 using generator-phaser-official 0.0.8-rc-2
2 'use strict';
3 var config = require('./config.json');
4 var _ = require('underscore');
5 _.str = require('underscore.string');
6
7 // Mix in non-conflict functions to Underscore namespace if you want
8 _.mixin(_.str.exports());
9
10 var LIVERELOAD_PORT = 35729;
11 var lrSnippet = require('connect-livereload')({port: LIVERELOAD_PORT});
12 var mountFolder = function (connect, dir) {
13   return connect.static(require('path').resolve(dir));
14 };
15  
16 module.exports = function (grunt) {
17   // load all grunt tasks
18   require('matchdep').filterDev('grunt-*').forEach(grunt.loadNpmTasks);
19  
20   grunt.initConfig({
21     watch: {
22       scripts: {
23         files: [
24             'game/**/*.js',
25             '!game/main.js'
26         ],
27         options: {
28           spawn: false,
29           livereload: LIVERELOAD_PORT
30         },
31         tasks: ['build']
32       }
33     },
34     connect: {
35       options: {
36         port: 9000,
37         // change this to '0.0.0.0' to access the server from outside
38         hostname: 'localhost'
39       },
40       livereload: {
41         options: {
42           middleware: function (connect) {
43             return [
44               lrSnippet,
45               mountFolder(connect, 'dist')
46             ];
47           }
48         }
49       }
50     },
51     open: {
52       server: {
53         path: 'http://localhost:9000'
54       }
55     },
56     copy: {
57       dist: {
58         files: [
59           // includes files within path and its sub-directories
60           { expand: true, src: ['assets/**'], dest: 'dist/' },
61           { expand: true, flatten: true, src: ['vendor/*.js'], dest: 'dist/js/' },
62           { expand: true, src: ['css/**'], dest: 'dist/' },
63           { expand: true, src: ['index.html'], dest: 'dist/' }
64         ]
65       }
66     },
67     browserify: {
68       build: {
69         src: ['game/main.js'],
70         dest: 'dist/js/game.js'
71       }
72     }
73   });
74   
75   grunt.registerTask('build', ['buildBootstrapper', 'browserify','copy']);
76   grunt.registerTask('serve', ['build', 'connect:livereload', 'open', 'watch']);
77   grunt.registerTask('default', ['serve']);
78   grunt.registerTask('prod', ['build', 'copy']);
79
80   grunt.registerTask('buildBootstrapper', 'builds the bootstrapper file correctly', function() {
81     var stateFiles = grunt.file.expand('game/states/*.js');
82     var gameStates = [];
83     var statePattern = new RegExp(/(\w+).js$/);
84     stateFiles.forEach(function(file) {
85       var state = file.match(statePattern)[1];
86       if (!!state) {
87         gameStates.push({shortName: state, stateName: _.capitalize(state) + 'State'});
88       }
89     });
90     config.gameStates = gameStates;
91     console.log(config);
92     var bootstrapper = grunt.file.read('templates/_main.js.tpl');
93     bootstrapper = grunt.template.process(bootstrapper,{data: config});
94     grunt.file.write('game/main.js', bootstrapper);
95   });
96 };