1
0
forked from sent/waves
waves/public/assets/g/flappyplane/js/main.min.js
2025-04-09 17:11:14 -05:00

301 lines
8.7 KiB
JavaScript

function getCookie(e) {
for (
var o = e + "=", t = document.cookie.split(";"), s = 0;
s < t.length;
s++
) {
var a = t[s].trim();
if (0 == a.indexOf(o)) return a.substring(o.length, a.length);
}
return "";
}
function setCookie(e, o, t) {
var s = new Date();
s.setTime(s.getTime() + 24 * t * 60 * 60 * 1e3);
var a = "expires=" + s.toGMTString();
document.cookie = e + "=" + o + "; " + a;
}
function showSplash() {
(currentstate = states.SplashScreen),
(velocity = 0),
(position = 180),
(rotation = 0),
(score = 0),
$("#player").css({ y: 0, x: 0 }),
updatePlayer($("#player")),
soundSwoosh.stop(),
soundSwoosh.play(),
$(".pipe").remove(),
(pipes = new Array()),
$(".animated").css("animation-play-state", "running"),
$(".animated").css("-webkit-animation-play-state", "running"),
$("#splash").transition({ opacity: 1 }, 2e3, "ease");
}
function startGame() {
(currentstate = states.GameScreen),
soundHit.play(),
soundHit.stop(),
$("#splash").stop(),
$("#splash").transition({ opacity: 0 }, 500, "ease"),
setBigScore(),
debugmode && $(".boundingbox").show();
var e = 1e3 / 60;
(loopGameloop = setInterval(gameloop, e)),
(loopPipeloop = setInterval(updatePipes, 1400)),
playerJump(),
soundNasheed.stop(),
soundNasheed.play();
}
function updatePlayer(e) {
(rotation = Math.min((velocity / 10) * 40, 40)),
$(e).css({ rotate: rotation, top: position });
}
function gameloop() {
var e = $("#player");
(velocity += gravity), (position += velocity), updatePlayer(e);
var o = document.getElementById("player").getBoundingClientRect(),
t = 34,
s = 24,
a = t - 8 * Math.sin(Math.abs(rotation) / 90),
i = (s + o.height) / 2,
n = (o.width - a) / 2 + o.left,
r = (o.height - i) / 2 + o.top,
p = n + a,
c = r + i;
if (debugmode) {
var l = $("#playerbox");
l.css("left", n), l.css("top", r), l.css("height", i), l.css("width", a);
}
if (o.bottom >= $("#land").offset().top) return void playerDead();
var u = $("#ceiling");
if ((r <= u.offset().top + u.height() && (position = 0), null != pipes[0])) {
var d = pipes[0],
h = d.children(".pipe_upper"),
m = h.offset().top + h.height(),
y = h.offset().left - 2,
g = y + pipewidth,
f = m + pipeheight;
if (debugmode) {
var l = $("#pipebox");
l.css("left", y),
l.css("top", m),
l.css("height", pipeheight),
l.css("width", pipewidth);
}
return p > y && !(r > m && f > c)
? void playerDead()
: void (n > g && (pipes.splice(0, 1), playerScore()));
}
}
function screenClick() {
currentstate == states.GameScreen
? playerJump()
: currentstate == states.SplashScreen && startGame();
}
function playerJump() {
(velocity = jump), soundJump.stop(), soundJump.play();
}
function setBigScore(e) {
var o = $("#bigscore");
if ((o.empty(), !e))
for (var t = score.toString().split(""), s = 0; s < t.length; s++)
o.append(
"<img src='assets/font_big_" + t[s] + ".png' alt='" + t[s] + "'>"
);
}
function setSmallScore() {
var e = $("#currentscore");
e.empty();
for (var o = score.toString().split(""), t = 0; t < o.length; t++)
e.append(
"<img src='assets/font_small_" + o[t] + ".png' alt='" + o[t] + "'>"
);
}
function setHighScore() {
var e = $("#highscore");
e.empty();
for (var o = highscore.toString().split(""), t = 0; t < o.length; t++)
e.append(
"<img src='assets/font_small_" + o[t] + ".png' alt='" + o[t] + "'>"
);
}
function setMedal() {
var e = $("#medal");
return (
e.empty(),
10 > score
? !1
: (score >= 10 && (medal = "bronze"),
score >= 20 && (medal = "silver"),
score >= 30 && (medal = "gold"),
score >= 40 && (medal = "platinum"),
e.append(
'<img src="assets/medal_' + medal + '.png" alt="' + medal + '">'
),
!0)
);
}
function playerDead() {
$(".animated").css("animation-play-state", "paused"),
$(".animated").css("-webkit-animation-play-state", "paused");
var e = $(
'<div id="explosion" style="top: ' +
$("#player").position().top +
'px; left:60px;"></div>'
);
$("#flyarea").append(e);
var o = $("#player").position().top + $("#player").width(),
t = $("#flyarea").height(),
s = Math.max(0, t - o);
$("#player").transition({ y: s + "px", rotate: 90 }, 1e3, "easeInOutCubic"),
(currentstate = states.ScoreScreen),
clearInterval(loopGameloop),
clearInterval(loopPipeloop),
(loopGameloop = null),
(loopPipeloop = null),
isIncompatible.any()
? (soundHit.play(), showScore())
: soundHit.play().bindOnce("ended", function () {
soundDie.play().bindOnce("ended", function () {
showScore();
});
});
}
function showScore() {
soundNasheed.stop(),
$("#scoreboard").css("display", "block"),
setBigScore(!0),
score > highscore &&
((highscore = score), setCookie("highscore", highscore, 999)),
setSmallScore(),
setHighScore();
var e = setMedal();
soundSwoosh.stop(),
soundSwoosh.play(),
$("#scoreboard").css({ y: "40px", opacity: 0 }),
$("#replay").css({ y: "40px", opacity: 0 }),
$("#scoreboard").transition(
{ y: "0px", opacity: 1 },
600,
"ease",
function () {
soundSwoosh.stop(),
soundSwoosh.play(),
$("#replay").transition({ y: "0px", opacity: 1 }, 600, "ease"),
e &&
($("#medal").css({ scale: 2, opacity: 0 }),
$("#medal").transition({ opacity: 1, scale: 1 }, 1200, "ease"));
}
),
(replayclickable = !0);
}
function playerScore() {
(score += 1), soundScore.stop(), soundScore.play(), setBigScore();
}
function updatePipes() {
$(".pipe")
.filter(function () {
return $(this).position().left <= -100;
})
.remove();
var e = 80,
o = 420 - pipeheight - 2 * e,
t = Math.floor(Math.random() * o + e),
s = 420 - pipeheight - t,
a = $(
'<div class="pipe animated"><div class="pipe_upper" style="height: ' +
t +
'px;"></div><div class="pipe_lower" style="height: ' +
s +
'px;"></div></div>'
);
$("#flyarea").append(a), pipes.push(a);
}
var debugmode = !1,
states = Object.freeze({ SplashScreen: 0, GameScreen: 1, ScoreScreen: 2 }),
currentstate,
gravity = 0.25,
velocity = 0,
position = 180,
rotation = 0,
jump = -4.6,
score = 0,
highscore = 0,
pipeheight = 100,
pipewidth = 52,
pipes = new Array(),
replayclickable = !1;
(buzz.defaults.preload = !0), (buzz.defaults.formats = ["ogg"]);
var volume = 30,
soundJump = new buzz.sound("assets/sounds/sfx_wing"),
soundScore = new buzz.sound("assets/sounds/sfx_point"),
soundDie = new buzz.sound("assets/sounds/sfx_die"),
soundSwoosh = new buzz.sound("assets/sounds/sfx_swooshing"),
soundNasheed = new buzz.sound("assets/sounds/nasheed"),
soundHit = new buzz.sound("assets/sounds/sfx_hit");
buzz.all().setVolume(volume), soundNasheed.setVolume(15);
var loopGameloop, loopPipeloop;
$(document).ready(function () {
"?debug" == window.location.search && (debugmode = !0),
"?easy" == window.location.search && (pipeheight = 200);
var e = getCookie("highscore");
"" != e && (highscore = parseInt(e)), showSplash();
}),
$(document).keydown(function (e) {
32 == e.keyCode &&
(currentstate == states.ScoreScreen
? $("#replay").click()
: screenClick());
}),
"ontouchstart" in window
? $(document).on("touchstart", screenClick)
: $(document).on("mousedown", screenClick),
$("#replay").click(function () {
$("#explosion").remove(),
replayclickable &&
((replayclickable = !1),
soundSwoosh.stop(),
soundSwoosh.play(),
$("#scoreboard").transition(
{ y: "-40px", opacity: 0 },
1e3,
"ease",
function () {
$("#scoreboard").css("display", "none"), showSplash();
}
));
});
var isIncompatible = {
Android: function () {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function () {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function () {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function () {
return navigator.userAgent.match(/Opera Mini/i);
},
Safari: function () {
return (
navigator.userAgent.match(/OS X.*Safari/) &&
!navigator.userAgent.match(/Chrome/)
);
},
Windows: function () {
return navigator.userAgent.match(/IEMobile/i);
},
any: function () {
return (
isIncompatible.Android() ||
isIncompatible.BlackBerry() ||
isIncompatible.iOS() ||
isIncompatible.Opera() ||
isIncompatible.Safari() ||
isIncompatible.Windows()
);
},
};