From c147fa2c234cc237bbf10634d967ab11606a3cf9 Mon Sep 17 00:00:00 2001 From: Boris Kozorovitzky Date: Sat, 16 Mar 2013 22:13:27 +0200 Subject: [PATCH] Added count to level definition and fixed some bugs with buttons --- js/level_data/level2.js | 53 ++++------------------------------------- js/level_data/level3.js | 17 +++++++++++++ js/level_swapper.js | 19 ++++++++------- js/sprites/button.js | 16 +++++++++++-- js/states/level.js | 51 ++++++++++++++++++++++++++------------- 5 files changed, 80 insertions(+), 76 deletions(-) create mode 100644 js/level_data/level3.js diff --git a/js/level_data/level2.js b/js/level_data/level2.js index 3d530f3..468e677 100644 --- a/js/level_data/level2.js +++ b/js/level_data/level2.js @@ -1,65 +1,22 @@ define([], function () { return { - name:"level 2", + name: "level 2", targets: [ { type: "ball", options: { radius: 15 - } + }, + count: 5 }, { type: "ball", options: { radius: 25 - } - }, - { - type: "ball", - options: { - radius: 25 - } - }, - { - type: "ball", - options: { - radius: 15 - } - }, - { - type: "ball", - options: { - radius: 25 - } - }, - { - type: "ball", - options: { - radius: 25 - } - }, - { - type: "ball", - options: { - radius: 15 - } - }, - { - type: "ball", - options: { - radius: 25 - } - }, - { - type: "ball", - options: { - radius: 25 - } + }, + count: 7 } - - - ], explosions: 2, goal: 8 diff --git a/js/level_data/level3.js b/js/level_data/level3.js new file mode 100644 index 0000000..a736dc6 --- /dev/null +++ b/js/level_data/level3.js @@ -0,0 +1,17 @@ +define([], function () { + + return { + name: "level 3", + targets: [ + { + type: "ball", + options: { + radius: 20 + }, + count: 15 + } + ], + explosions: 3, + goal: 2 + }; +}); \ No newline at end of file diff --git a/js/level_swapper.js b/js/level_swapper.js index 1e42dd2..1fea4ab 100644 --- a/js/level_swapper.js +++ b/js/level_swapper.js @@ -1,12 +1,13 @@ -define(["require","jaws","./level_data/level1","./level_data/level2"], function (require,jaws) { +define(["require", "jaws", "./level_data/level1", "./level_data/level2", "./level_data/level3"], function (require, jaws) { var levels = []; levels.push(require("./level_data/level1")); levels.push(require("./level_data/level2")); + levels.push(require("./level_data/level3")); function _getLevelData(levelId) { var i, length = swapper.levels.length; if (typeof (levelId) === "number") { if (levelId >= 0 && levelId < length) { - return { levelData: swapper.levels[level], index: levelId }; + return { levelData: swapper.levels[levelId], index: levelId }; } } else { for (i = 0; i < length; i += 1) { @@ -17,11 +18,11 @@ } return null; - }; + } function _startLevel(Level, levelData) { jaws.switchGameState(Level, { fps: 30 }, levelData); - }; + } var swapper = { levels: levels, @@ -32,8 +33,8 @@ _startLevel(Level, result); } }, - nextLevel: function (Level, currentLevel) { - var result = _getLevelData(currentLevel.name), nextLevel; + nextLevel: function (Level, levelName) { + var result = _getLevelData(levelName), nextLevel; if (result) { nextLevel = _getLevelData(result.index + 1); if (nextLevel) { @@ -41,8 +42,8 @@ } } }, - isLastLevel: function (currentLevel) { - var result = _getLevelData(currentLevel.name), nextLevel; + isLastLevel: function (levelName) { + var result = _getLevelData(levelName), nextLevel; if (result) { nextLevel = _getLevelData(result.index + 1); if (nextLevel) { @@ -52,7 +53,7 @@ } } } - } + }; return swapper; }); \ No newline at end of file diff --git a/js/sprites/button.js b/js/sprites/button.js index 8329754..cadd19c 100644 --- a/js/sprites/button.js +++ b/js/sprites/button.js @@ -14,7 +14,9 @@ this.onClick = options.onClick; if (options.shortcut) { - jaws.on_keydown(options.shortcut, this.onClick); + this.shortcut = options.shortcut; + this.shortcutPressed = jaws.pressed(this.shortcut); + //jaws.on_keydown(options.shortcut, this.onClick); } this.drawing = new Drawing({ @@ -80,15 +82,25 @@ if (!this.pressed && pressed && this.bbox.contains(jaws.mouse_x, jaws.mouse_y) && this.onClick) { this.pressed = pressed; this.onClick(); + return; } this.pressed = pressed; + if (this.shortcut) { + pressed = jaws.pressed(this.shortcut); + if (!this.shortcutPressed && pressed && this.onClick) { + this.shortcutPressed = pressed; + this.onClick(); + return; + } + this.shortcutPressed = pressed; + } }; Button.prototype.innerMoveTo = function () { this.drawing.x = this.x; this.drawing.y = this.y; - } + }; return Button; }); \ No newline at end of file diff --git a/js/states/level.js b/js/states/level.js index 8a02beb..293e773 100644 --- a/js/states/level.js +++ b/js/states/level.js @@ -1,5 +1,5 @@ -define(["require", "jquery", "jaws","js/level_swapper", "js/common/sprite_list", "js/common/collision_manager", "js/common/colliders", - "./../sprites/explosion", "./../sprites/ball", "./../sprites/pointer", "./../sprites/button", "./../sprites/messageDialog", +define(["require", "jquery", "jaws", "js/level_swapper", "js/common/sprite_list", "js/common/collision_manager", "js/common/colliders", + "./../sprites/explosion", "./../sprites/ball", "./../sprites/pointer", "./../sprites/button", "./../sprites/messageDialog", "./../tusk/rect", "./../tusk/drawing", "./../tusk/text", "./../common/shapes"], function (require, $, jaws, levelSwapper) { var targetsHash = {}; @@ -21,28 +21,32 @@ var fps = $("#fps"); function generateTargets(field, targets) { - var i, length = targets.length, targetData, target, options, Target, randomNumber - result = new SpriteList(); + var i, j, length = targets.length, targetData, target, options, Target, randomNumber, + result = new SpriteList(), count; for (i = 0; i < length; i += 1) { targetData = targets[i]; if (!targetsHash.hasOwnProperty(targetData.type)) { console.log("Cannot load target of type " + targetData.type + " because it was not registered"); continue; } - randomNumber = Math.random(); - options = { - x: Math.random() * field.width + field.x, - y: Math.random() * field.height + field.y, - speedX: Math.sin(Math.PI * 2 * randomNumber) * 5, - speedY: Math.cos(Math.PI * 2 * randomNumber) * 5, - }; + count = targetData.count || 1; + for (j = 0; j < count; j += 1) { + randomNumber = Math.random(); - Target = targetsHash[targetData.type]; - options = $.extend(options, targetData.options); + options = { + x: Math.random() * field.width + field.x, + y: Math.random() * field.height + field.y, + speedX: Math.sin(Math.PI * 2 * randomNumber) * 5, + speedY: Math.cos(Math.PI * 2 * randomNumber) * 5 + }; - target = new Target(options); - result.add(target); + Target = targetsHash[targetData.type]; + options = $.extend(options, targetData.options); + + target = new Target(options); + result.add(target); + } } return result; @@ -150,10 +154,23 @@ setTimeout(levelSwapper.startLevel, 0, Level, level.levelData.name); } }, jaws.context)); + + if (!levelSwapper.isLastLevel(level.levelData.name)) { + wonDialogButtons.add(new Button({ + rx: 290, + ry: 85, + text: "Next level", + onClick: function () { + setTimeout(levelSwapper.nextLevel, 0, Level, level.levelData.name); + } + }, jaws.context)); + + } + level.gameWonDialog = new MessageDialog({ x: 100, y: 100, - height:120, + height: 120, text: "Level complete", align: "center" }, jaws.context, wonDialogButtons, level.field); @@ -230,7 +247,7 @@ this._handleInput(); this.targets.update(this.field); this.explosions.update(this.field); - + this._addExplosions(); this._handleCollisions(); this.restartButton.update(this.field);