-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathapp.js
123 lines (102 loc) · 3.32 KB
/
app.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* Module dependencies.
*/
var express = require('express')
, everyone
, example = require('./lib/example')
, nowjs = require('now')
, sessions = require('./lib/sessions')
, gameConstructor = require('./game')
;
var app = module.exports = express.createServer();
var myGame; // the variable to hold THE one game (@TODO: have a collection of games)
// Configuration
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
app.configure('development', function(){
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
app.configure('production', function(){
app.use(express.errorHandler());
});
// Routes
app.get('/', function(req, res){
res.render('index', {
title: 'UtahJS: World Wide War'
});
example.exampleMethod();
});
app.listen(8000);
everyone = nowjs.initialize(app);
// *** Start a new game !!
var startNewGame = function() {
var nPlayers = sessions.countSessions(); // total players going to play this game
var nWide = 1500 + nPlayers * 300; // world width
var nTanksPerPlayer = 3; // tanks per player
myGame = new gameConstructor.newGame(); // create a game with a map of N pixels wide
myGame.init(nWide, nTanksPerPlayer); // initialize the game
myGame.startGameLoop(); // start up the main game loop
};
// ** Track all client-browser connections (stored in "sessions")
nowjs.on('connect', function() {
var id = this.user.clientId;
sessions.createSessionViaNow(this.user);
sessions.runOnAllSessions(function(sess) {
nowjs.getClient(sess.id, function () {
if (this.now && this.now.updatePlayerCount) {
this.now.updatePlayerCount(sessions.countSessions());
}
});
});
});
nowjs.on('disconnect', function() {
sessions.deleteSessionViaNow(this.user);
sessions.runOnAllSessions(function(sess) {
nowjs.getClient(sess.id, function () {
if (this.now && this.now.updatePlayerCount) {
this.now.updatePlayerCount(sessions.countSessions());
}
});
});
// if no sessions, stop all games
if (sessions.countSessions() <= 0 && myGame) {
myGame.gameOver = true;
}
});
// When anyone clicks "Start Game", this function is called
everyone.now.startGame = function() {
// create a new game
startNewGame();
// tell everyone to switch to the "Game Scene"
sessions.runOnAllSessions(function(sess) {
nowjs.getClient(sess.id, function () {
if (this.now) {
this.now.moveToGameScene();
}
});
});
};
everyone.now.getNumberOfPlayers = function() {
console.log(sessions.countSessions());
return sessions.countSessions();
}
// When any user wants to perform any action, then call this function (like "move my tank#3 left 3 pixels")
everyone.now.queueAction = function(tankID, action) {
if (myGame && this.user && this.user.clientId) {
// pass in the "userID" (session id)
tankID = parseInt(tankID);
myGame.queueAction(this.user.clientId, tankID, action);
}
};
// initialize + configuration
// *** PUBLISH TO CLIENT: debug log function (allow client to record log messages on the server console)
everyone.now.logStuff = function(msg){
console.log(msg);
}
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);