code-katas/snake/snake-page.js

82 lines
2.4 KiB
JavaScript
Raw Permalink Normal View History

var $canvas = $("#snakeCanvas");
var canvasEl = $canvas[0];
var $scoreValue = $("#score span.value");
var $levelSelectSection = $("#levelSelect");
canvasEl.width = canvasEl.clientWidth;
canvasEl.height = canvasEl.clientHeight;
var initializePage = function() {
// Load the snake levels onto the page UI.
2014-12-29 23:16:06 -06:00
var newHtml = "";
_.each(SnakeLevels, function(levelSet, setName) {
2014-12-29 23:16:06 -06:00
newHtml += "<h5>" + setName + "</h5>" +
"<ol levelSet='" + setName + "'>";
2014-12-29 23:16:06 -06:00
_.each(levelSet.levels, function(levelData, levelIdx) {
newHtml += "<li levelNum='" + levelIdx + "'>" +
levelData.name + "</li>"; });
newHtml += "</ol>"; });
2014-12-29 23:16:06 -06:00
$levelSelectSection.append(newHtml);
// Add listeners for each of the level list items.
var levelLis = document.querySelectorAll("#levelSelect li");
for (var i = 0; i < levelLis.length; ++i) {
levelLis[i].addEventListener("click", levelLiClicked); }
// Load the initial level.
// loadLevel({target: document.querySelector("#levelSelect li.selected")});
};
2014-12-29 23:16:06 -06:00
var levelLiClicked = function(ev) {
var $levelLi = $(ev.target);
var $levelSetOl = $levelLi.closest("ol");
$("#levelSelect li.selected").removeClass("selected");
$levelLi.addClass("selected");
loadLevel($levelSetOl.attr("levelSet"), $levelLi.attr("levelNum")); };
2014-12-29 23:16:06 -06:00
var loadSelectedLevel = function() {
var $selectedLi = $("#levelSelect li.selected");
var $selectedLevelSetOl = $selectedLi.closest("ol");
loadLevel($selectedLevelSetOl.attr("levelSet"),
$selectedLi.attr("levelNum")); };
2014-12-29 23:16:06 -06:00
var loadLevel = function(levelSetName, levelNum) {
console.log("Loading " + levelSetName + " level " + levelNum);
var levelData = SnakeLevels[levelSetName].levels[parseInt(levelNum)];
// TODO: create some way to select the difficulty (defaults to easy).
// TODO: Show start overlay UI
// Initialize the board using the level data.
2016-01-09 12:14:06 -06:00
$scoreValue.text("0");
Snake.initialize(levelData);
};
var nextLevel = function() { };
var updateScore = function(ev) {
2016-01-09 12:14:06 -06:00
var evDetail = ev.originalEvent.detail;
var curScore = parseInt($scoreValue.text());
$scoreValue.text(curScore + (evDetail.bodyLength * evDetail.fps));
if (evDetail.score == Snake.currentLevel.targetScore)
nextLevel(); };
$canvas.on('score', updateScore);
window.onload = initializePage;