Different scenes are now managed correctly
This commit is contained in:
parent
d0e3d4bc3e
commit
baccd01111
|
@ -275,9 +275,10 @@ UserCreator.prototype.finish = function() {
|
|||
this.finishAction(this.finalResult);
|
||||
}
|
||||
|
||||
var ExpCreator = function(user_id, finishAction) {
|
||||
var ExpCreator = function(user_id, scene_id, finishAction) {
|
||||
this.finishAction = finishAction;
|
||||
this.user_id = user_id;
|
||||
this.scene_id = scene_id;
|
||||
|
||||
// Connect to db
|
||||
var self = this;
|
||||
|
@ -291,13 +292,11 @@ var ExpCreator = function(user_id, finishAction) {
|
|||
ExpCreator.prototype.execute = function() {
|
||||
var self = this;
|
||||
this.client.query(
|
||||
// TODO this is ugly, we should not do that...
|
||||
"INSERT INTO experiment(user_id, scene_id) VALUES($1,1);",
|
||||
[self.user_id],
|
||||
"INSERT INTO experiment(user_id, scene_id) VALUES($1,$2);",
|
||||
[self.user_id, self.scene_id],
|
||||
function(err, result) {
|
||||
self.client.query("SELECT MAX(id) AS id FROM experiment;", function(err, result) {
|
||||
self.finalResult = result.rows[0].id;
|
||||
console.log(self.finalResult);
|
||||
self.finish();
|
||||
});
|
||||
}
|
||||
|
@ -359,10 +358,16 @@ var ExpIdChecker = function(id, finishAction) {
|
|||
ExpIdChecker.prototype.execute = function() {
|
||||
var self = this;
|
||||
this.client.query(
|
||||
"SELECT count(id) > 0 AS answer FROM experiment WHERE id = $1;",
|
||||
"SELECT scene_id FROM experiment WHERE id = $1;",
|
||||
[self.id],
|
||||
function(err, result) {
|
||||
self.finalResult = result.rows[0].answer;
|
||||
console.log(err);
|
||||
console.log(result);
|
||||
if (result === undefined) {
|
||||
self.finalResult = null;
|
||||
} else {
|
||||
self.finalResult = result.rows[0].scene_id;
|
||||
}
|
||||
self.finish();
|
||||
}
|
||||
);
|
||||
|
@ -428,10 +433,10 @@ var tryUser = function(id, callback) {
|
|||
}
|
||||
}
|
||||
|
||||
module.exports.getInfo = function(id, callback) { new Info(id, callback); };
|
||||
module.exports.createUser = function(callback) { new UserCreator(callback); };
|
||||
module.exports.createExp = function(id, callback) { new ExpCreator(id, callback); };
|
||||
module.exports.checkUserId = function(id, callback) { new UserIdChecker(id, callback); };
|
||||
module.exports.checkExpId = function(id, callback) { new ExpIdChecker(id, callback); };
|
||||
module.exports.getAllExps = function(callback) { new ExpGetter(callback); };
|
||||
module.exports.getInfo = function(id, callback) { new Info(id, callback); };
|
||||
module.exports.createUser = function(callback) { new UserCreator(callback); };
|
||||
module.exports.createExp = function(id, scene_id, callback) { new ExpCreator(id, scene_id, callback); };
|
||||
module.exports.checkUserId = function(id, callback) { new UserIdChecker(id, callback); };
|
||||
module.exports.checkExpId = function(id, callback) { new ExpIdChecker(id, callback); };
|
||||
module.exports.getAllExps = function(callback) { new ExpGetter(callback); };
|
||||
module.exports.tryUser = tryUser;
|
||||
|
|
|
@ -3,6 +3,35 @@ var pg = require('pg');
|
|||
var pgc = require('../../private');
|
||||
var db = require('./dbrequests');
|
||||
|
||||
// Shuffle array
|
||||
function shuffle(array) {
|
||||
var currentIndex = array.length, temporaryValue, randomIndex ;
|
||||
|
||||
// While there remain elements to shuffle...
|
||||
while (0 !== currentIndex) {
|
||||
|
||||
// Pick a remaining element...
|
||||
randomIndex = Math.floor(Math.random() * currentIndex);
|
||||
currentIndex -= 1;
|
||||
|
||||
// And swap it with the current element.
|
||||
temporaryValue = array[currentIndex];
|
||||
array[currentIndex] = array[randomIndex];
|
||||
array[randomIndex] = temporaryValue;
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
function randomArray() {
|
||||
var arr = [];
|
||||
for (var i = 2; i < 5; i++) {
|
||||
arr.push(i);
|
||||
}
|
||||
arr = shuffle(arr);
|
||||
return arr;
|
||||
}
|
||||
|
||||
module.exports.index = function(req, res) {
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
|
||||
|
@ -11,14 +40,43 @@ module.exports.index = function(req, res) {
|
|||
});
|
||||
}
|
||||
|
||||
var generateSceneNumber = function(req, res) {
|
||||
if (req.session.scenes !== undefined) {
|
||||
req.session.currentSceneIndex++;
|
||||
} else {
|
||||
req.session.scenes = randomArray();
|
||||
req.session.currentSceneIndex = 0;
|
||||
console.log("Init : " + req.session.scenes);
|
||||
}
|
||||
|
||||
console.log("SceneIndex : " + req.session.currentSceneIndex);
|
||||
return req.session.scenes[req.session.currentSceneIndex];
|
||||
}
|
||||
|
||||
var sceneToFunction = function(scene) {
|
||||
switch (scene) {
|
||||
case 2:
|
||||
return 'initBobomb';
|
||||
case 3:
|
||||
return 'initMountain';
|
||||
case 4:
|
||||
return 'initWhomp';
|
||||
default:
|
||||
return 'initPeach';
|
||||
}
|
||||
}
|
||||
|
||||
var protoHelper = function(template) {
|
||||
return function(req, res) {
|
||||
db.tryUser(req.session.user_id, function(id) {
|
||||
db.createExp(id, function(id) {
|
||||
req.session.exp_id = id;
|
||||
req.session.user_id = id;
|
||||
req.session.save();
|
||||
// Get random scene number
|
||||
var scene = generateSceneNumber(req, res);
|
||||
res.locals.scene = sceneToFunction(scene);
|
||||
req.session.user_id = id;
|
||||
|
||||
db.createExp(id, req.session.scenes[req.session.currentSceneIndex], function(id) {
|
||||
req.session.exp_id = id;
|
||||
req.session.save();
|
||||
res.setHeader('Content-Type','text/html');
|
||||
res.render(template, res.locals, function(err, result) {
|
||||
res.send(result);
|
||||
|
@ -47,12 +105,15 @@ module.exports.replay = function(req, res, next) {
|
|||
// Get id parameter
|
||||
res.locals.id = tools.filterInt(req.params.id);
|
||||
|
||||
db.checkExpId(res.locals.id, function(idExist) {
|
||||
if (!idExist) {
|
||||
db.checkExpId(res.locals.id, function(scene_id) {
|
||||
console.log("Scene_id = " + scene_id);
|
||||
if (scene_id === null) {
|
||||
var err = new Error("This replay does not exist");
|
||||
err.status = 404;
|
||||
next(err);
|
||||
} else {
|
||||
res.locals.initjs = sceneToFunction(scene_id);
|
||||
console.log(scene_id + " " + res.locals.initjs);
|
||||
res.setHeader('Content-Type', 'text/html');
|
||||
res.render('prototype_replays.jade', res.locals, function(err, result) {
|
||||
res.send(result);
|
||||
|
|
|
@ -4,6 +4,8 @@ block title
|
|||
title #{title} - Prototype
|
||||
|
||||
block mainjs
|
||||
script initMainScene = #{scene};
|
||||
|
||||
script(src="/static/js/prototypeinteractive.min.js")
|
||||
|
||||
block description
|
||||
|
|
|
@ -7,6 +7,7 @@ block extrajs
|
|||
script(src="/static/js/prototypetools.min.js")
|
||||
script RecommendedCamera = FixedCamera;
|
||||
script var params = params || {}; params.get = params.get || {}; params.get.id = #{id};
|
||||
script initMainScene = #{initjs}
|
||||
script(src="/static/js/replay.min.js")
|
||||
|
||||
block extrahead
|
||||
|
|
|
@ -106,6 +106,10 @@ function initPeach(camera, scene, static_path, coins) {
|
|||
scene.add(camera);
|
||||
|
||||
Coin.init(0.001);
|
||||
var otherCams = [];
|
||||
var cameras = new CameraContainer(camera, otherCams);
|
||||
|
||||
return cameras;
|
||||
}
|
||||
|
||||
function initZeldaScene(scene, collidableObjects, loader, static_path) {
|
||||
|
|
|
@ -78,7 +78,9 @@ function init() {
|
|||
// Initialize pointer camera
|
||||
var camera1 = new PointerCamera(50, container_size.width() / container_size.height(), 0.1, 100000, renderer, container);
|
||||
|
||||
cameras = initBobomb(camera1, scene, static_path, coins);
|
||||
cameras = initMainScene(camera1, scene, static_path, coins);
|
||||
// cameras = initPeach(camera1, scene, static_path, coins);
|
||||
// cameras = initBobomb(camera1, scene, static_path, coins);
|
||||
// cameras = initWhomp(camera1, scene, static_path, coins);
|
||||
// cameras = initMountain(camera1, scene, static_path, coins);
|
||||
// cameras = initSponza(camera1, scene, static_path, coins);
|
||||
|
|
|
@ -67,7 +67,7 @@ function init() {
|
|||
|
||||
// Initialize pointer camera
|
||||
var camera1 = new ReplayCamera(50, container_size.width() / container_size.height(), 0.01, 100000, coins);
|
||||
cameras = initBobomb(camera1, scene, static_path, coins);
|
||||
cameras = initMainScene(camera1, scene, static_path, coins);
|
||||
camera1.cameras = cameras;
|
||||
|
||||
// Add listeners
|
||||
|
|
Loading…
Reference in New Issue