1
0
forked from sent/waves
waves-fork/public/assets/g/core-ball/index.js
2025-04-09 17:11:14 -05:00

693 lines
21 KiB
JavaScript

"undefined" == typeof window.define && ((window.define = function () {}), (window.define.amd = 1)),
"undefined" == typeof window.$AJB && (window.$AJB = {}),
($AJB.lib = {}),
($AJB.general = {}),
($AJB.page = {}),
($AJB.lib.stopEvent = function () {
"use strict";
return function (a) {
a && (a.preventDefault ? (a.preventDefault(), a.stopPropagation()) : ((a.returnValue = !1), (a.cancelBubble = !0)));
};
}),
($AJB.lib.Storage = function () {
"use strict";
var a = {
setValue: function (a, b) {
window.localStorage && (window.localStorage[a] = b);
},
getValue: function (a) {
return window.localStorage ? window.localStorage[a] : void 0;
},
};
return a;
}),
($AJB.general.BeginStage = function () {
"use strict";
function a(a) {
function c() {
b(h, "click", function () {
e.fire(g, f);
}),
(j.innerHTML = "GO");
}
var h = a.getElementsByClassName("button")[0],
i = a.getElementsByClassName("text")[0],
j = document.getElementById("txtAr"),
k = {
show: function () {
a.style.display = "";
},
hide: function () {
a.style.display = "none";
},
level: function (a) {
(f = a), (i.innerHTML = "Level " + a);
},
on: function (a, b) {
e.add(a, b);
},
off: function (a, b) {
e.remove(a, b);
},
};
return c(), k;
}
var b = $AJB.lib.addEvent(),
c = $AJB.lib.CustEvent(),
d = $AJB.lib.util(),
e = c(),
f = 0,
g = "start";
return a;
}),
($AJB.general.Switcher = function () {
"use strict";
function a(a, b, c) {
var d,
e,
f = null,
g = !1,
h = {
point: [0, 0],
enabled: !1,
color: "#c8c8c8",
update: function () {
var a = h.point,
c = 30;
h.enabled &&
(0 === e
? ((d = h.color), a[0] < b / 2 ? ((a[0] = Math.min(a[0] + c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0)))
: 1 === e && ((d = "#000"), a[0] > b / 2 ? ((a[0] = Math.max(a[0] - c, b / 2)), (h.point = a)) : ((h.point = a), (g = !0))));
},
render: function () {
var e = h.point;
h.enabled && ((a.fillStyle = d), a.fillRect(e[0] - b / 2, e[1] - c / 2, b, c), g && ((h.enabled = !1), f && f()));
},
switchStage: function (d, i) {
0 === d ? (h.point = [-b / 2, c / 2]) : 1 === d && ((a.fillStyle = h.color), a.fillRect(0, 0, b, c), (h.point = [b + b / 2, c / 2])), (h.enabled = !0), (g = !1), (e = d), (f = i);
},
};
return h;
}
return a;
}),
($AJB.lib.addEvent = function () {
var a = $AJB.lib.util(),
b = { click: "touchstart", mousedown: "touchstart", mouseup: "touchend" };
return function (c, d, e, f) {
c.addEventListener ? c.addEventListener(a.isMobile ? b[d] || d : d, e, f) : c.attachEvent ? c.attachEvent("on" + d, e) : (c["on" + d] = e);
};
}),
($AJB.general.Levels = function () {
"use strict";
function a(a, b) {
return function () {
var c = 0;
return function () {
return (c += (a * b) % 360);
};
};
}
function b(a, b) {
return function () {
var c = 0,
d = 1,
e = +new Date();
return function () {
var f = +new Date();
return f - e > b && ((d = -d), (e = f)), (c += (d * a) % 360);
};
};
}
function c(a, b, c, d) {
return function () {
var e = 0,
f = +new Date();
return function () {
var g = +new Date();
return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
};
};
}
function d(a) {
var b = 1;
return (
h(document.body, "mousedown", function () {
b = -b;
}),
function () {
var c = 0;
return function () {
return (c += (a * b) % 360);
};
}
);
}
function e(a, b, c, d) {
return (
h(document.body, "mousedown", function () {
d = -d;
}),
function () {
var e = 0,
f = +new Date();
return function () {
var g = +new Date();
return g - f > c && ((a = b - a), (f = g)), (e += (a * d) % 360);
};
}
);
}
function f(a, b, c, d) {
i[a] = { childs: k[b], queueCount: c, round: j[d] };
}
var g,
h = $AJB.lib.addEvent(),
i = {},
j = {
A1: a(1.5, 1),
A2: a(1.5, -1),
B1: a(2.5, 1),
B2: a(2.5, -1),
C1: b(2.2, 3e3),
C2: b(3.5, 2e3),
D1: c(2, 2.3, 1200, 1),
D2: c(2, 2.3, 1200, -1),
D3: c(4, 4.5, 1700, 1),
D4: c(4, 4.5, 1700, -1),
D5: c(4, 4.5, 1700, 1),
D6: c(4, 4.5, 1700, -1),
E1: d(2),
E2: e(2, 2.3, 1e3, 1),
},
k = {
0: [],
2: [0, 180],
3: [0, 120, 240],
4: [0, 90, 180, 270],
5: [0, 72, 144, 216, 288],
6: [0, 60, 120, 180, 240, 300],
7: [0, 52, 103, 155, 206, 258, 309],
8: [0, 45, 90, 135, 180, 225, 270, 315],
9: [0, 40, 80, 120, 160, 200, 240, 280, 320],
10: [0, 36, 72, 108, 144, 180, 216, 252, 288, 324],
11: [0, 33, 66, 99, 131, 164, 197, 230, 262, 295, 328],
12: [0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330],
13: [0, 28, 56, 84, 111, 139, 167, 194, 222, 250, 277, 305, 333],
14: [0, 26, 52, 78, 103, 129, 155, 180, 206, 232, 258, 283, 309, 335],
15: [0, 24, 48, 72, 96, 120, 144, 168, 192, 216, 240, 264, 288, 312, 336],
16: [0, 23, 45, 68, 90, 113, 135, 158, 180, 203, 225, 248, 270, 293, 315, 338],
},
l = {
1: ["4", 8, "A1"],
2: ["6", 10, "A1"],
3: ["2", 20, "A1"],
4: ["8", 12, "A2"],
5: ["12", 8, "A1"],
6: ["10", 10, "A2"],
7: ["12", 12, "A1"],
8: ["16", 3, "A2"],
9: ["0", 26, "A2"],
10: ["16", 10, "A1"],
11: ["10", 8, "B1"],
12: ["6", 12, "B2"],
13: ["12", 4, "B1"],
14: ["8", 14, "B2"],
15: ["8", 6, "B1"],
16: ["5", 10, "B2"],
17: ["6", 12, "B1"],
18: ["8", 14, "B2"],
19: ["0", 23, "B1"],
20: ["10", 13, "B2"],
21: ["4", 12, "C1"],
22: ["6", 10, "C1"],
23: ["8", 12, "C1"],
24: ["7", 14, "C1"],
25: ["2", 18, "C1"],
26: ["4", 18, "C1"],
27: ["0", 24, "C1"],
28: ["4", 10, "C2"],
29: ["6", 13, "C2"],
30: ["4", 20, "C1"],
31: ["6", 8, "D1"],
32: ["2", 12, "D2"],
33: ["3", 14, "D2"],
34: ["3", 18, "D1"],
35: ["8", 12, "D1"],
36: ["7", 15, "D2"],
37: ["16", 8, "D2"],
38: ["0", 23, "D1"],
39: ["12", 12, "D1"],
40: ["12", 15, "D2"],
41: ["5", 10, "E1"],
42: ["6", 12, "E1"],
43: ["3", 15, "E1"],
44: ["3", 19, "E1"],
45: ["0", 24, "E1"],
46: ["2", 15, "E2"],
47: ["4", 16, "E2"],
48: ["12", 8, "E2"],
49: ["3", 20, "E2"],
50: ["16", 14, "E2"],
51: ["4", 6, "D3"],
52: ["4", 12, "D4"],
53: ["6", 13, "D3"],
54: ["0", 24, "D4"],
55: ["4", 21, "D3"],
56: ["16", 16, "A1"],
57: ["4", 24, "C1"],
58: ["4", 26, "D1"],
59: ["4", 25, "E2"],
60: ["13", 19, "E2"],
};
for (g in l) f(g, l[g][0], l[g][1], l[g][2]);
return i;
}),
($AJB.general.Collide = function () {
"use strict";
var a = $AJB.lib.util(),
b = {
check: function (b, c, d) {
var e = b.childs(),
f = e.length,
g = Math.ceil(2 * c.rad());
for (d = d || 1; f--; ) if (c !== e[f].ball && a.getPointDistance(c.pos(), e[f].ball.pos()) <= g + Math.ceil(2 * d)) return !0;
return !1;
},
};
return b;
}),
($AJB.general.Tween = function () {
"use strict";
var a = {
simple: function (b, c, d, e) {
var f = (c - b) / e,
g = +new Date();
return e > g - d ? ((a.isEnd = !1), b + (g - d) * f) : ((a.isEnd = !0), c);
},
isEnd: !0,
};
return a;
}),
($AJB.general.BallQueue = function () {
"use strict";
function a(a, f, g, h, i) {
function j() {
var b,
d,
e = k(a),
j = e.length;
for (b = 0; j > b; b++) (d = c(h, null, e[b], null, i)), d.pos(f, g + 3 * d.rad() * b), m.push(d);
}
function k(a) {
for (var b = a, c = []; b--; ) c.push(b + 1);
return c;
}
var l,
m = [],
n = [],
o = b();
return (
(i = i || 1),
(l = {
ballList: m,
add: function () {},
remove: function (a) {
var b = m[a];
return m.splice(a, 1), b;
},
clear: function () {
(n = []), (m = []);
},
popup: function () {
var a = m.shift();
(a.st = +new Date()), (a.sv = a.pos().y), n.push(a);
},
update: function () {
var a,
b,
c,
h = n.length,
i = m.length;
if (h) {
for (b = n[0].rad(), a = g - 3 * b; h--; ) n[h].pos(f, d.simple(n[h].sv, a, n[h].st, 50)), (c = n[n.length - 1].pos().y), n[h].pos().y === a && (o.fire(e, n[h]), n.splice(h, 1));
for (; i--; ) m[i].pos(f, c + 3 * b * (i + 1));
}
},
render: function () {
for (var a = m.length, b = n.length; a--; ) m[a].render();
for (; b--; ) n[b].render();
},
on: function (a, b) {
o.add(a, b);
},
off: function (a, b) {
o.remove(a, b);
},
destroy: function () {
for (var a = m.length; a--; ) m[a].destroy();
o.destroy();
},
}),
j(),
l
);
}
var b = $AJB.lib.CustEvent(),
c = $AJB.general.Ball(),
d = $AJB.general.Tween(),
e = "popup";
return a;
}),
($AJB.general.Ball = function () {
"use strict";
function a(a, c, d, e, f) {
function g() {
var c = b.getTextWidth(a, 0, 0, d, e);
b.drawText(a, i - c / 2, j + e / 3, d, e, "black");
}
var h,
i = 0,
j = 0;
return (
(f = f || 1),
(c = (c || 12) * f),
(e = (e || 15) * f),
(h = {
pos: function (a, b) {
return "undefined" != typeof a && (i = a), "undefined" != typeof b && (j = b), { x: i, y: j };
},
scale: function (a) {
return "undefined" != typeof a && (f = a), f;
},
rad: function (a) {
return "undefined" != typeof a && (c = a), c;
},
render: function (e) {
b.drawCircle(a, i, j, c, "#ffffff"), "undefined" != typeof d ? g(d) : "undefined" != typeof e && g(e);
},
destroy: function () {
h = null;
},
})
);
}
var b = $AJB.lib.util();
return a;
}),
($AJB.lib.util = function () {
"use strict";
return {
drawCircle: function (a, b, c, d, e) {
a.beginPath(), a.arc(b, c, d, 0, 2 * Math.PI, !1), (a.fillStyle = e || "red"), a.fill();
},
drawLine: function (a, b, c, d, e, f, g) {
(a.strokeStyle = f || "red"), (a.lineWidth = g || 1), a.beginPath(), a.moveTo(b, c), a.lineTo(d, e), a.stroke();
},
drawText: function (a, b, c, d, e, f) {
(a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.fillText(d, b, c);
},
getTextWidth: function (a, b, c, d, e, f) {
return (a.font = e + "px Verdana"), (a.fillStyle = f || "red"), a.measureText(d).width;
},
getPointDistance: function (a, b) {
return Math.floor(Math.sqrt(Math.floor(Math.pow(a.x - b.x, 2)) + Math.floor(Math.pow(a.y - b.y, 2))));
},
isMobile: /(mobile|iphone|ipod|ipad|ios|android|windows phone)/i.test(navigator.userAgent),
isAndroid: /android/i.test(navigator.userAgent),
isWeixin: /MicroMessenger/i.test(navigator.userAgent),
};
}),
($AJB.general.Core = function () {
"use strict";
function a(a, d, e, f, g) {
function h() {
for (var a, b, c, d, e = l.length; e--; )
(a = 3 * Math.cos(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + n), (b = 3 * Math.sin(((l[e].angle + j.angle()) * Math.PI) / 180) * m * g + o), (c = a / Math.abs(a)), (d = b / Math.abs(b)), l[e].ball.pos(a, b);
}
var i,
j,
k = 0,
l = [],
m = 50,
n = a.width / 2,
o = 4 * m * g;
return (
(g = g || 1),
(i = c(d, m, e, f, g)),
i.pos(n, o),
(j = {
pos: i.pos,
scale: i.scale,
rad: i.rad,
angle: function (a) {
return "undefined" != typeof a && (k = a), k;
},
addChild: function (a, b) {
l.push({ angle: a, ball: b });
},
clear: function () {
l = [];
},
childs: function () {
return l;
},
update: function () {
h();
},
render: function () {
var c,
e = l.length,
f = a.width,
h = a.height;
for (d.clearRect(0, 0, f, h), c = 0; e > c; c++) b.drawLine(d, n, o, l[c].ball.pos().x, l[c].ball.pos().y, "#ffffff", 1.5 * g), l[c].ball.render();
i.render();
},
destroy: function () {
j.clear(), (i = null), (j = null);
},
})
);
}
var b = $AJB.lib.util(),
c = $AJB.general.Ball();
return a;
}),
($AJB.lib.CustEvent = function () {
return function (a) {
function b(a) {
return Object.prototype.toString.call(a).slice(8, -1).toLowerCase();
}
var c = {};
return (
!a && (a = {}),
{
add: function (a, d) {
if ("function" === b(d)) {
var e = c;
(a = a.toLowerCase()), !e[a] && (e[a] = []), e[a].push(d);
}
},
remove: function (a, d) {
var e,
f = c[a];
if (((a = a.toLowerCase()), "function" === b(d) && f && f.length)) for (e = f.length - 1; e >= 0; e--) f[e] === d && f.splice(e, 1);
},
fire: function (b) {
var d, e, f, g;
if (((b = b.toLowerCase()), (d = c[b]), d && d.length)) for (e = Array.prototype.slice.call(arguments, 1), g = d.length, f = 0; g > f; f++) d[f].apply(a, e);
},
destroy: function () {
var a,
b = c.length - 1;
for (a = b; a >= 0; a--) evts.splice(a, 1);
},
}
);
};
}),
($AJB.general.Scene = function () {
"use strict";
function a(a, b, l, m) {
function n(a) {
var g = a.childs,
h = g.length;
for (y = a.round(), w && w.destroy(), w = c(b, l, B, 50, m); h--; ) w.addChild(g[h], d(l, null, "", null, m));
x && x.destroy(),
(x = e(a.queueCount, b.width / 2, w.pos().y + 4 * w.rad(), l, m)),
x.on("popup", function (a) {
w.addChild(90 - w.angle(), a), f.check(w, a, m) ? ((z = a), s()) : !x.ballList.length && r();
});
}
function o() {
y && (w.angle(y()), w.update(), x.update());
}
function p() {
var b,
c,
d,
e,
f = w.childs(),
g = f.length,
h = 25;
for (a.style.backgroundColor = u.bgColor; g--; ) (b = f[g].angle + w.angle()), (c = Math.cos((b * Math.PI) / 180) * h), (d = Math.sin((b * Math.PI) / 180) * h), (e = f[g].ball.pos()), f[g].ball.pos(e.x + c, e.y + d);
}
function q(a) {
var b,
c = [25, 15, 20, 15],
d = c.length,
e = 200,
f = e / d;
for (w.update(), b = 1; d >= b; b++) a > f * b && z.rad(c[b - 1] * m);
}
function r() {
"pass" !== A && ((a.style.backgroundColor = "#1CB01A"), (A = "pass"), (v = +new Date()));
}
function s() {
"fail" !== l && ((a.style.backgroundColor = "#B8111C"), (A = "fail"), (v = +new Date()));
}
function t() {
var a = "to be continued...",
c = h.getTextWidth(l, 0, 0, a, 30 * m);
h.drawText(l, (b.width - c) / 2, 200 * m, a, 30 * m, "yellow");
}
var u,
v,
w,
x,
y,
z,
A = "run",
B = 1;
return (u = {
enabled: !1,
run: function (b) {
var c = g[b];
(B = b), c ? ((u.enabled = !0), n(c), (a.style.backgroundColor = "#000"), (A = "run")) : t();
},
shot: function () {
x && x.ballList.length && x.popup();
},
update: function () {
var a;
u.enabled && ("run" === A ? o() : "pass" === A ? (p(), +new Date() - v > 1e3 && ((A = ""), k.fire(i))) : "fail" === A && ((a = +new Date() - v), q(a), a > 1e3 && ((A = ""), k.fire(j))));
},
render: function () {
u.enabled && (w.render(), x.render());
},
on: function (a, b) {
k.add(a, b);
},
off: function (a, b) {
k.remove(a, b);
},
});
}
var b = $AJB.lib.CustEvent(),
c = $AJB.general.Core(),
d = $AJB.general.Ball(),
e = $AJB.general.BallQueue(),
f = $AJB.general.Collide(),
g = $AJB.general.Levels(),
h = $AJB.lib.util(),
i = "passed",
j = "failed",
k = b();
return a;
}),
($AJB.general.Game = function () {
"use strict";
function a() {
var a = document.body.scrollWidth || document.documentElement.scrollWidth,
b = document.body.scrollHeight || document.documentElement.scrollHeight;
(r.width = a), (r.height = b), (i = l(x, a, b)), (s.style.backgroundColor = i.color), (s.style.width = a + "px"), (s.style.height = b + "px"), (j = b / 560);
}
function b() {}
function c() {
n(u, "mousedown", function () {});
}
function d(a) {
(D = +a), o.setValue(z, D), (document.title = A.replace(/\#\{level\}/, D)), (GlobalLevel = D), C.level(D), !p.isWeixin && p.isMobile && b();
}
function e() {
n(document.body, "mousedown", function (a) {
var b;
if (a && a.changedTouches) for (b = a.changedTouches.length; b--; ) h.shot();
else h.shot();
"1" != a.target.getAttribute("data-capture") && q(a);
}),
n(w, "mousedown", function () {
w.style.display = "none";
}),
n(v, "mousedown", function () {
E ||
((E = !0),
(t.style.display = ""),
d(1),
setTimeout(function () {
(t.style.display = "none"), (E = !1);
}, 1e3));
}),
h.on("passed", function () {
i.switchStage(0, function () {
(h.enabled = !1), d(D + 1), (r.style.display = "none"), C.show();
});
}),
h.on("failed", function () {
i.switchStage(0, function () {
(h.enabled = !1), (r.style.display = "none"), C.level(D), C.show();
});
}),
C.on("start", function () {
(r.style.display = ""),
C.hide(),
i.switchStage(1, function () {
h.run(D);
});
});
}
function f() {
window.clearTimeout(F), h.update(), h.render(), i.update(), i.render(), (F = window.setTimeout(f, 1e3 / y));
}
function g() {
a(), (h = k(document.body, r, x, j)), e(), c(), C.level(D), C.show(), f();
}
var h,
i,
j,
k = $AJB.general.Scene(),
l = $AJB.general.Switcher(),
m = $AJB.general.BeginStage(),
n = $AJB.lib.addEvent(),
o = $AJB.lib.Storage(),
p = $AJB.lib.util(),
q = $AJB.lib.stopEvent(),
r = document.getElementById("stage"),
s = document.getElementById("begin"),
t = document.getElementById("tip"),
u = document.getElementById("btnFW"),
v = document.getElementById("btnReset"),
w = document.getElementById("wxArrow"),
x = r.getContext("2d"),
y = 60,
z = "core-ball-level",
A = "",
B = "",
C = m(s),
D = +o.getValue(z) || 1,
E = !1,
F = 0,
G = { start: g, shareTitle: A, shareLevel: D };
return G;
}),
function share() {
console.log("share");
};
($AJB.page.index = function () {
"use strict";
var a = $AJB.general.Game();
a.start();
}),
$AJB.page.index();
GlobalLevel = $AJB.general.Game().shareLevel;