nodegame-game-template
Version:
Template files for a standard nodeGame game
115 lines (95 loc) • 3.8 kB
JavaScript
/**
* # Requirements functions
* Copyright(c) {YEAR} {AUTHOR} <{AUTHOR_EMAIL}>
* MIT Licensed
*
* Processes the settings and sets the requirements for accessing the channel.
*
* http://nodegame.org
* ---
*/
module.exports = function(requirements, settings) {
var ngr = require('nodegame-requirements');
var errBegin;
errBegin = 'An error occurred while loading the requirements for game ' +
requirements.gameName + '. Err: ';
if (settings.nodegameBasic !== false) {
requirements.add(ngr.nodegameBasic);
}
if (settings.loadFrameTest !== false) {
requirements.add(ngr.loadFrameTest);
}
if (settings.ES6Support === true) {
requirements.add(ngr.ES6Support);
}
if (settings.cookieSupport) {
requirements.add(ngr.cookieSupport, settings.cookieSupport);
}
if ('object' === typeof settings.speedTest) {
requirements.add(ngr.speedTest, settings.speedTest);
}
else if ('undefined' !== typeof settings.speedTest) {
throw new TypeError(errBegin + 'speedTest must be object ' +
'or undefined. Found: ' + settings.speedTest);
}
if ('object' === typeof settings.viewportSize) {
requirements.add(ngr.viewportSize, settings.viewportSize);
}
else if ('undefined' !== typeof settings.viewportSize) {
throw new TypeError(errBegin + 'viewportSize must be object ' +
'or undefined. Found: ' + settings.viewportSize);
}
if ('number' !== typeof settings.maxExecTime && settings.maxExecTime > 0) {
requirements.setMaxExecutionTime(settings.maxExecTime);
}
else if ('number' !== typeof settings.maxExecTime) {
throw new TypeError(errBegin + 'maxExecTime must be number > 0 ' +
'or undefined. Found: ' + settings.maxExecTime);
}
if ('object' === typeof settings.browserDetect) {
if (settings.browserDetect.cb &&
'function' !== typeof settings.browserDetect.cb) {
throw new TypeError(errBegin + 'browserDetect.cb must be ' +
'function or undefined. Found: ' +
settings.browserDetect.cb);
}
// TODO: define a good set of options.
// if (!settings.browserDetect.cb && !settings.browserDetect.include &&
// !settings.browserDetect.exclude &&
// !settings.browserDetect.desktopOnly)
if (!settings.browserDetect.parser) {
settings.browserDetect.parser = ngr.parser;
}
requirements.add(ngr.browserDetect, settings.browserDetect);
}
// requirements.add(ngr.testFail);
// requirements.add(ngr.testSuccess);
requirements.onFailure(function() {
var str, args;
console.log('failed');
str = '%spanYou are NOT allowed to take the HIT. If you ' +
'have already taken it, you must return it.%span';
args = {
'%span': {
'class': 'requirements-fail'
}
};
W.sprintf(str, args, this.summaryResults);
// You can leave a feedback using the form below.
// window.feedback = node.widgets.append('Feedback', div);
});
requirements.onSuccess(function() {
var str, args;
str = '%spanYou are allowed to take the HIT.%span';
args = {
'%span': {
'class': 'requirements-success'
}
};
W.sprintf(str, args, this.summaryResults);
});
// Either success or failure.
// requirements.onComplete(function() {
// ...something.
// });
};