levels starting

This commit is contained in:
Peter Cottle 2013-01-05 22:07:50 -08:00
parent 27498419c9
commit 903b537fda
10 changed files with 270 additions and 29 deletions

View file

@ -0,0 +1,63 @@
var _ = require('underscore');
var Backbone = require('backbone');
// Each level is part of a "sequence;" levels within
// a sequence proceed in order.
var levelSequences = {
intro: [
require('../../levels/intro/1'),
require('../../levels/intro/2')
],
rebase: [
require('../../levels/rebase/1'),
require('../../levels/rebase/2')
]
};
function LevelArbiter() {
this.levelMap = {};
this.init();
}
LevelArbiter.prototype.init = function() {
var previousLevelID;
_.each(levelSequences, function(levels, levelSequenceName) {
// for this particular sequence...
_.each(levels, function(level) {
this.validateLevel(level);
this.levelMap[level.id] = level;
// build up the chaining between levels
if (previousLevelID) {
this.levelMap[previousLevelID]['nextLevelID'] = level.id;
}
previousLevelID = level.id;
}, this);
}, this);
};
LevelArbiter.prototype.validateLevel = function(level) {
level = level || {};
var requiredFields = [
'id',
'name',
'goalTree',
'solutionCommand'
];
var optionalFields = [
'hint',
'disabledMap'
];
_.each(requiredFields, function(field) {
if (level[field] === undefined) {
throw new Error('I need this field for a level: ' + field);
}
})
};
exports.LevelArbiter = LevelArbiter;

View file

@ -43,15 +43,15 @@ var Level = Sandbox.extend({
},
initName: function(options) {
this.levelName = options.levelName;
this.levelID = options.levelID;
if (!this.levelName || !this.levelID) {
this.levelName = 'Rebase Classic';
this.name = options.name;
this.id = options.id;
if (!this.name || !this.id) {
this.name = 'Rebase Classic';
console.warn('REALLY BAD FORM need ids and names');
}
this.levelToolbar = new LevelToolbar({
levelName: this.levelName
name: this.name
});
},
@ -89,9 +89,6 @@ var Level = Sandbox.extend({
},
initVisualization: function(options) {
if (!options.level.startTree) {
console.warn('No start tree specified for this level!!! using default...');
}
this.mainVis = new Visualization({
el: options.el || this.getDefaultVisEl(),
treeString: options.level.startTree

View file

@ -0,0 +1,12 @@
var _ = require('underscore');
var Q = require('q');
// horrible hack to get localStorage Backbone plugin
var Backbone = (!require('../util').isBrowser()) ? require('backbone') : window.Backbone;
var ModalTerminal = require('../views').ModalTerminal;
var ContainedBase = require('../views').ContainedBase;
var ConfirmCancelView = require('../views').ConfirmCancelView;
var LeftRightView = require('../views').LeftRightView;
var ModalAlert = require('../views').ModalAlert;
var KeyboardListener = require('../util/keyboard').KeyboardListener;

View file

@ -348,7 +348,7 @@ var LevelToolbar = BaseView.extend({
initialize: function(options) {
options = options || {};
this.JSON = {
levelName: options.levelName || 'Some level! (unknown name)'
name: options.name || 'Some level! (unknown name)'
};
this.beforeDestination = $($('#commandLineHistory div.toolbar')[0]);