hextris/js/view.js

237 lines
7.7 KiB
JavaScript
Raw Normal View History

2014-07-01 15:02:52 +00:00
// t: current time, b: begInnIng value, c: change In value, d: duration
function easeOutCubic(t, b, c, d) {
2014-07-19 20:19:07 +00:00
return c*((t=t/d-1)*t*t + 1) + b;
2014-07-01 15:02:52 +00:00
}
2014-06-24 00:55:04 +00:00
function renderText(x, y, fontSize, color, text, font) {
ctx.save();
2014-06-24 00:55:04 +00:00
if (!font) {
font = 'px/0 Roboto';
}
fontSize *= settings.scale;
2014-06-24 00:55:04 +00:00
ctx.font = fontSize + font;
ctx.textAlign = 'center';
2014-05-26 05:11:47 +00:00
ctx.fillStyle = color;
ctx.fillText(text, x, y + (fontSize / 2) - 9 * settings.scale);
ctx.restore();
}
2014-05-26 03:42:06 +00:00
function drawScoreboard() {
if (scoreOpacity < 1) {
scoreOpacity += 0.01;
2014-07-02 14:58:02 +00:00
textOpacity += 0.01;
2014-05-26 18:24:38 +00:00
}
2014-06-24 00:55:04 +00:00
2014-07-02 14:58:02 +00:00
ctx.globalAlpha = textOpacity;
2014-06-24 00:58:07 +00:00
if (gameState === 0) {
2014-06-24 00:55:04 +00:00
renderText(trueCanvas.width/2+ gdx + 6 * settings.scale, trueCanvas.height/2+ gdy, 60, "rgb(236, 240, 241)", String.fromCharCode("0xf04b"), 'px FontAwesome');
renderText(trueCanvas.width/2+ gdx + 6 * settings.scale, trueCanvas.height/2+ gdy - 170 * settings.scale, 150, "#2c3e50", "Hextris");
renderText(trueCanvas.width/2+ gdx + 5 * settings.scale, trueCanvas.height/2+ gdy + 100 * settings.scale, 20, "rgb(44,62,80)", 'Play!');
}
2014-07-02 15:10:36 +00:00
else if(gameState!=0 && textOpacity>0){
2014-07-02 14:58:02 +00:00
textOpacity -= 0.05;
renderText(trueCanvas.width/2+ gdx + 6 * settings.scale, trueCanvas.height/2+ gdy, 60, "rgb(236, 240, 241)", String.fromCharCode("0xf04b"), 'px FontAwesome');
renderText(trueCanvas.width/2+ gdx + 6 * settings.scale, trueCanvas.height/2+ gdy - 170 * settings.scale, 150, "#2c3e50", "Hextris");
renderText(trueCanvas.width/2+ gdx + 5 * settings.scale, trueCanvas.height/2+ gdy + 100 * settings.scale, 20, "rgb(44,62,80)", 'Play!');
ctx.globalAlpha = scoreOpacity;
renderText(trueCanvas.width/2+ gdx, trueCanvas.height/2+ gdy, 50, "rgb(236, 240, 241)", score);
}
2014-06-24 00:55:04 +00:00
else {
2014-07-02 14:58:02 +00:00
ctx.globalAlpha = scoreOpacity;
2014-06-24 00:55:04 +00:00
renderText(trueCanvas.width/2+ gdx, trueCanvas.height/2+ gdy, 50, "rgb(236, 240, 241)", score);
}
2014-06-24 00:58:07 +00:00
2014-05-26 18:24:38 +00:00
ctx.globalAlpha = 1;
}
function clearGameBoard() {
2014-05-25 22:27:25 +00:00
drawPolygon(trueCanvas.width / 2, trueCanvas.height / 2, 6, trueCanvas.width / 2, 30, hexagonBackgroundColor, 0, 'rgba(0,0,0,0)');
}
2014-05-26 01:49:03 +00:00
function drawPolygon(x, y, sides, radius, theta, fillColor, lineWidth, lineColor) {
ctx.fillStyle = fillColor;
ctx.lineWidth = lineWidth;
ctx.strokeStyle = lineColor;
ctx.beginPath();
var coords = rotatePoint(0, radius, theta);
ctx.moveTo(coords.x + x, coords.y + y);
var oldX = coords.x;
var oldY = coords.y;
for (var i = 0; i < sides; i++) {
coords = rotatePoint(oldX, oldY, 360 / sides);
ctx.lineTo(coords.x + x, coords.y + y);
oldX = coords.x;
oldY = coords.y;
}
2014-05-25 14:41:06 +00:00
ctx.closePath();
ctx.fill();
ctx.stroke();
2014-05-26 05:11:47 +00:00
ctx.strokeStyle = 'rgba(0,0,0,0)';
2014-05-25 14:41:06 +00:00
}
2014-05-23 05:10:12 +00:00
function showHighScores() {
$('#highscores').html(function() {
var str = '<li> High Scores: </li>';
for (var i = 0; i < highscores.length; i++) {
2014-07-05 13:57:51 +00:00
str += '<li>' + highscores[i]+'</li>';
2014-05-23 05:10:12 +00:00
}
return str;
});
toggleClass('#highscores', 'not-visible');
}
function toggleClass(element, active) {
if ($(element).hasClass(active)) {
$(element).removeClass(active);
}
else {
$(element).addClass(active);
}
}
2014-07-02 15:10:36 +00:00
function showText(text){
var messages = {
2014-07-19 21:49:39 +00:00
'paused':"<div class='centeredHeader unselectable'>Paused</div><br><div class='unselectable centeredSubHeader'>Press p to resume</div><div style='height:100px;line-height:100px;cursor:pointer;'><div class = 'centeredSubSubHeader'>Click here for the main menu!</div></div>",
'pausedMobile':"<div class='centeredHeader unselectable'>Paused</div><div style='height:100px;line-height:100px;cursor:pointer;'><div class = 'centeredSubSubHeader'>Tap here for the main menu!</div></div>",
2014-07-05 02:23:19 +00:00
'start':"<div class='centeredHeader unselectable' style='line-height:80px;'>Press enter to start</div>",
2014-07-05 13:57:51 +00:00
'gameover':"<div class='centeredHeader unselectable'> Game Over: "+score+" pts</div><br><div style='font-size:24px;' class='centeredHeader unselectable'> High Scores:</div><table class='tg' style='margin:0px auto'>"
2014-07-02 15:10:36 +00:00
};
2014-07-05 13:57:51 +00:00
if (text == 'gameover') {
var allZ = 1;
var i;
2014-07-20 01:46:05 +00:00
console.log(highscores);
for (i = 0; i < 3; i++) {
2014-07-19 22:03:16 +00:00
if (highscores[i] !== undefined && highscores[i] != 0) {
2014-07-20 01:46:05 +00:00
messages['gameover'] += "<tr> <th class='tg-031e'>"+(i+1)+".</th> <th class='tg-031e'>"+highscores[i] + " pts</th> </tr>";
}
}
var restartText;
if (settings.platform == 'mobile') {
restartText = 'Tap anywhere to restart!';
} else {
restartText = 'Press enter (or click anywhere!) to restart!';
2014-07-05 13:57:51 +00:00
}
messages['gameover'] += "</table><br><div class='unselectable centeredSubHeader'>" + restartText + "</div>";
2014-07-19 20:19:07 +00:00
if (allZ) {
for (i = 0; i < highscores.length; i++) {
if (highscores[i] != 0) {
allZ = 0;
}
}
2014-07-05 13:57:51 +00:00
}
}
2014-07-02 15:10:36 +00:00
var pt = document.getElementById("overlay");
pt.className = 'unfaded';
2014-07-19 20:19:07 +00:00
if (text == 'paused') {
$(pt).css('margin-top','-5%');
if (settings.platform == 'mobile') {
text = 'pausedMobile';
}
} else {
$(pt).css('margin-top','-10%');
}
2014-07-02 15:10:36 +00:00
pt.innerHTML = messages[text];
if(/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
$("#restartBtn").on('touchstart', function() {
if (gameState==2 || gameState==1 || importing == 1) {
init(1);
canRestart = false;
}
else if (gameState===0) {
resumeGame();
}
});
}
else {
$("#restartBtn").on('mousedown', function() {
if (gameState==2 || gameState==1 || importing == 1) {
init(1);
canRestart = false;
}
else if (gameState===0) {
resumeGame();
}
});
}
if (text == 'paused') {
$(".centeredSubSubHeader").on('mousedown', function() {
2014-07-19 21:49:39 +00:00
localStorage.setItem("saveState", exportSaveState());
$('#restartBtn').hide();
canRestart = false;
setTimeout(setMainMenu, 2);
});
} else if (text == 'pausedMobile') {
$(".centeredSubSubHeader").on('touchstart', function() {
2014-07-19 21:49:39 +00:00
localStorage.setItem("saveState", exportSaveState());
$('#restartBtn').hide();
setTimeout(setMainMenu, 2);
canRestart = false;
});
}
2014-07-02 15:10:36 +00:00
}
function setMainMenu() {
gameState = 4;
canRestart = false;
setTimeout(function(){
canRestart = 's';
}, 500);
$('#restartBtn').show();
if ($($("#pauseBtn").children()[0]).attr('class').indexOf('pause') == -1) {
$("#pauseBtn").html('<i class="fa fa-pause fa-2x"></i>');
} else {
$("#pauseBtn").html('<i class="fa fa-play fa-2x"></i>');
}
}
2014-07-02 15:10:36 +00:00
function hideText(text){
var pt = document.getElementById("overlay");
pt.className = 'faded';
pt.innerHTML = '';
}
function gameOverDisplay(){
2014-07-20 01:46:05 +00:00
updateHighScore();
2014-07-02 15:10:36 +00:00
var c = document.getElementById("canvas");
c.className = "blur";
showText('gameover');
}
2014-07-04 20:42:55 +00:00
function pause(o) {
var message;
if (o) {
message = '';
} else {
2014-07-05 00:33:26 +00:00
message = 'paused';
2014-07-04 20:42:55 +00:00
}
2014-07-02 15:10:36 +00:00
var c = document.getElementById("canvas");
if (gameState == -1 ) {
hideText();
2014-07-19 20:19:07 +00:00
gameState = prevGameState;
2014-07-02 15:10:36 +00:00
}
else if(gameState != -2 && gameState !== 0 && gameState !== 2) {
if (message == 'paused') {
showText(message);
2014-07-04 20:42:55 +00:00
}
2014-07-02 15:10:36 +00:00
prevGameState = gameState;
gameState = -1;
}
2014-07-19 23:12:28 +00:00
}