summaryrefslogtreecommitdiffstats
path: root/js/scores.js
diff options
context:
space:
mode:
authorPatrick Davison <snapwilliam@gmail.com>2012-07-31 22:34:08 -0700
committerPatrick Davison <snapwilliam@gmail.com>2012-07-31 22:34:08 -0700
commit2d290b23c402561ef30c1de665895c120dd79483 (patch)
tree8bde5ebd953f3dd375abe88e61e40571df313b1f /js/scores.js
parent628c2e712e39fe85762583fd1ddc12609746fc58 (diff)
downloadpathery-2d290b23c402561ef30c1de665895c120dd79483.tar.xz
Everything related to the scoreboard.
New feedback page. Changed the speed of the pauses on checkpoints during a path animation. Changed how notifications are recieved.
Diffstat (limited to 'js/scores.js')
-rw-r--r--js/scores.js221
1 files changed, 221 insertions, 0 deletions
diff --git a/js/scores.js b/js/scores.js
new file mode 100644
index 0000000..9985da1
--- /dev/null
+++ b/js/scores.js
@@ -0,0 +1,221 @@
+var scorePages = new Object;
+var currentPage = new Object;
+
+function scoresRequestPage(mapid, page) {
+ // console.log('scoresRequestPage', mapid, page);
+ if (typeof(ajax) != 'object') {
+ setTimeout(function() {scoresRequestPage(mapid, page)},200);
+ return false;
+ }
+ // Ask again if it's busy.
+ switch (ajax.xmlhttp.readyState) {
+ case 4:
+ case 0:
+ break;
+ default:
+ setTimeout(function() {scoresRequestPage(mapid, page)},300);
+ return false;
+ }
+
+ //console.log("Requesting Page", mapid, page, ajax.inUse);
+
+ // == Additionally, check for achievements.
+ ajax.requestFile = "do.php?checkachieve=true&r=reqScorePage&mapid="+mapid+"&reqPage="+page;
+ ajax.onCompletion = scoresRequestPageDone; // Specify function to be executed on response.
+ //ajax.onLoading = '';
+ //ajax.onLoaded = '';
+ //ajax.onFail = '';
+ ajax.runAJAX();// Do it!
+ return true;
+}
+function scoresRequestLoading() {
+ //Signify that it's working in some manner?
+ //console.log("I'm loading teh page...");
+}
+function scoresRequestPageDone() {
+ //console.log("Request Page Done", ajax.response);
+ var JO = decryptJSON(ajax.response);
+ if (JO == undefined)
+ return;
+ scoresUpdatePage(JO.mapid, JO.page, scoresFormatPage(JO));
+ if (JO.notificationtext != undefined) {
+ showNotification(JO.notificationtext);
+ if (checkSound(JO.mapid)) {
+ soundManager.setVolume('achieve', 50);
+ setTimeout("soundManager.play('achieve');", 350);
+ }
+ }
+}
+function scoresUpdatePage(mapid, page, html) {
+ // console.log("Updating Page", mapid, page);
+ scoresPreparePage(mapid, page);
+ scorePages[mapid][page].html = html;
+ //if (scorePages[mapid][page] == currentPage[mapid]) {
+ if (page == currentPage[mapid]) {
+ scoresShowPage(mapid, page);
+ }
+}
+function scoresShowMyPage(mapid) {
+ //Future use
+}
+
+function scoresShowPage(mapid, page) {
+ mapid = mapid - 0;
+ page = page - 0;
+ // console.log('scoresShowPage', mapid, page);
+ if (scoresPreparePage(mapid, page) == false) {
+ currentPage[mapid] = page;
+ // currentPage[mapid] = scorePages[mapid][page];
+ //Signify some sort of loadingness?
+ //Request Page
+ scoresRequestPage(mapid, page);
+ }
+
+ if (typeof(scorePages[mapid][page].html) === 'undefined') {
+ scoresRequestPage(mapid, page);
+ currentPage[mapid] = page;
+ return;
+ }
+ // console.log('scorpages', scorePages[mapid][page].html);
+ updateDsp(mapid, 'dspScore', scorePages[mapid][page].html);
+ //Also; update the page
+ // console.log('here', scorePages[mapid][page], currentPage[mapid], scorePages[mapid][page] != currentPage[mapid]);
+
+ if (page != currentPage[mapid]) {
+ scoresRequestPage(mapid, page);
+ }
+ currentPage[mapid] = page;
+ //currentPage[mapid] = scorePages[mapid][page];
+}
+
+function scoresPreparePage (mapid, page) {
+ if (typeof(scorePages[mapid]) != 'object') {
+ scorePages[mapid] = new Object;
+ scorePages[mapid][page] = new Object;
+ return false;
+ }
+ if (typeof(scorePages[mapid][page]) != 'object') {
+ scorePages[mapid][page] = new Object;
+ return false;
+ }
+ return true;
+}
+function scoresFormatPage(JO) {
+ // console.log("Formating page");
+
+ var p = "<table class='score'>";
+ if (JO.pageCount > 1) {
+ var navi = scoresFormatPageNavi(JO);
+ p = p+"<tr><td colspan='3' style='text-align:center;'>"+navi+"</td></tr>";
+ }
+ p = p+"<tr title='Updated "+JO.updateTime+"'>";
+ p = p+"<th>Rank</th>";
+ p = p+"<th style='width:125px; overflow:hidden; text-align:left; padding-left:42px;'>Name</th>";
+ p = p+"<th>Moves</th>";
+ p = p+"</tr>";
+
+ var showedLastUser = true;
+ var x = 0;
+
+ var previousI = 0;
+
+ for (var i in JO.users) {
+ var u = JO.users[i];
+ var scoredLocalTime = new Date();
+ scoredLocalTime.setTime(scoredLocalTime.getTime() - u.secondsSinceScored * 1000);
+
+ var styleClass = '';
+
+ if (previousI != i + 1)
+ if (previousI < i - 1 && previousI != 0)
+ styleClass = 'border-top: 6px solid #777799;';
+
+ p = p+ "<tr style='"+styleClass+" background-color: "+u.background+"; color:"+u.displayColor+";' title='Scored "+scoredLocalTime.format("h:MM:ss TT")+"'>";
+ p = p+ "<td style='text-align:right;'>";
+
+ // !! Don't forget to make sure these images are cached;
+ if (u.medal == 'gold') {
+ p = p+ "<img src='../images/MedalGoldCAR.png' style='width:32px;height:32px;vertical-align:middle'>";
+ } else if (u.medal == 'silver') {
+ p = p+ "<img src='../images/MedalSilverCAR.png' style='width:32px;height:32px;vertical-align:middle'>";
+ }
+ //p = p+ "<img src='../images/MedalGoldCAb.png' style='width:30px;height:30px;vertical-align:middle'>";
+
+ p = p+ i+ "</td>";
+ p = p+ "<td style='vertical-align: middle;'>";
+ p = p+ " <div class='grid_td' style='float:left; width:35px; height:35px; background:"+u.wallColor+" url(images/marks/"+u.wallEmblem+");'>";
+ p = p+ " <div style='background-color:transparent;' class='grid_td_inner grid_td_rocks'>";
+ p = p+ " </div>";
+ p = p+ " </div>";
+ p = p+ "";
+ p = p+ "<span style='float:left; padding: 5px 0px 3px 3px; width:120px; overflow:hidden; text-overflow: ellipsis; '><a href='achievements?id="+u.ID+"' style='color:"+u.displayColor+"'>"+u.display+"</a></span>";
+ p = p+ "</td>";
+
+ //Medals commented out 'till able to use them in a more friendly way.
+ // !! Don't forget to make sure these images are cached;
+ // if (u.medal == 'gold') {
+ // p = p+ "<td class='scoreMedal scoreGold'>"+u.moves+"</td>";
+ // } else if (u.medal == 'silver') {
+ // p = p+ "<td class='scoreMedal scoreSilver'>"+u.moves+"</td>";
+ // } else {
+ // p = p+ "<td class='scoreMedal'>"+u.moves+"</td>";
+ // }
+ p = p+ "<td style='text-align:right;'>"+u.moves+"</td>";
+ p = p+ "</tr>";
+
+ previousI = i;
+ }
+
+ //p = p+"<tr><th colspan='3' style='text-align:center;'>"+navi+"</th></tr>";
+ p = p+"</table>";
+
+ var nextPage = JO.page - 0 + 1;
+ var prevPage = JO.page - 1;
+
+ if (JO.pageCount > 1) {
+ if (JO.page < JO.pageCount) {
+ p = p+"<a href='javascript:scoresShowPage("+JO.mapid+", "+nextPage+")' class='rightBtn scoreActive'>&gt;</a>";
+ } else
+ p = "<div class='rightBtn scoreDisabled'>&gt;</div>"+p;
+ if (JO.page > 1) {
+ p = "<a href='javascript:scoresShowPage("+JO.mapid+", "+prevPage+")' class='leftBtn scoreActive'>&lt;</a>"+p;
+ } else
+ p = "<div class='leftBtn scoreDisabled'>&lt;</div>"+p;
+ }
+ p = "<div class='scoreContainer1'>"+p+"</div>";
+
+ //console.log(p);
+ //console.log('jo page', JO.page);
+ //console.log('jo pagecount', JO.pageCount);
+ //javascript:scoresShowPage($mapid, $x)
+ //p = JO.navi+p;
+ return p;
+}
+function scoresFormatPageNavi(JO) {
+ var r = '';
+ var showedPrevPage = true;
+ for (var i = 1; i <= JO.pageCount; i++) {
+ if (
+ (JO.page > i - 3 && JO.page < i + 3)
+ || (i == 1)
+ || (i == JO.pageCount)
+ || (i == JO.userPage)
+ ) {
+
+ if (!showedPrevPage)
+ r = r + ' ... ';
+ if (JO.page == i) {
+ r = r + " <b style='color:#aaaabb; font-size:150%;'>" + i + "</b>";
+ } else if (i == JO.userPage) {
+ r = r + " <a href='javascript:scoresShowPage("+JO.mapid+", "+i+")' style='color:#99cc99;' title='You are on this page'><i>" + i + '</i></a>';
+ } else {
+ r = r + " <a href='javascript:scoresShowPage("+JO.mapid+", "+i+")'>" + i + '</a>';
+ }
+ showedPrevPage = true;
+ } else {
+ showedPrevPage = false;
+ }
+ }
+
+ return r;
+} \ No newline at end of file