logo change, style change, games json file; almost whole revamp is in this commit
@@ -22,7 +22,7 @@ body {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 6;
|
||||
pointer-events: none;
|
||||
cursor: progress;
|
||||
}
|
||||
|
||||
.loading-icon {
|
||||
@@ -35,7 +35,6 @@ body {
|
||||
width: 256;
|
||||
height: 256;
|
||||
scale: 0.6;
|
||||
pointer-events: visiblePainted;
|
||||
}
|
||||
|
||||
.loading-tip {
|
||||
|
||||
@@ -1,14 +1,37 @@
|
||||
@import url('https://fonts.googleapis.com/css2?family=Trispace:wght@100&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@300&display=swap');
|
||||
@import url('https://fonts.googleapis.com/css2?family=Assistant:wght@500&display=swap');
|
||||
|
||||
/*i titled these poorly, without trying how any of it looks*/
|
||||
:root {
|
||||
--bg: #202020;
|
||||
--block-color: #2b2b2b;
|
||||
--button-color: #373737;
|
||||
--games-color: #373737a6;
|
||||
--hover-color: #3c3c3c;
|
||||
--scrollbar-color: #434343;
|
||||
--scroll-track-color: #111;
|
||||
--font-color: #dcddde;
|
||||
--font-family: 'Work Sans', sans-serif;
|
||||
--font-family: 'Assistant', sans-serif;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background: var(--scrollbar-color);
|
||||
background-clip: content-box;
|
||||
border-radius: 16px;
|
||||
border: 2.9px solid transparent;
|
||||
box-shadow: inset 2px 2px 2px hsla(0,0%,100%,.25),inset -2px -2px 2px rgba(0,0,0,.25);
|
||||
transition: all 0.2s ease-in;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: var(--hover-color);
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background: linear-gradient(90deg,var(--scrollbar-color),var(--scrollbar-color) 1px,var(--scroll-track-color) 0,var(--scroll-track-color));
|
||||
}
|
||||
|
||||
html {
|
||||
@@ -59,17 +82,23 @@ body.noscript {
|
||||
display: grid;
|
||||
}
|
||||
|
||||
.homepage {
|
||||
.homepage, .games, .proxy, .settings {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
margin-top: 15rem;
|
||||
width: 100vw;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
z-index: 10;
|
||||
}
|
||||
|
||||
.games {
|
||||
flex-direction: column;
|
||||
top: 2.5%;
|
||||
}
|
||||
|
||||
#title {
|
||||
z-index: 50;
|
||||
position: relative;
|
||||
@@ -89,6 +118,57 @@ body.noscript {
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
#gamesList {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
z-index: 10;
|
||||
width: 75%;
|
||||
height: 60vh;
|
||||
font-family: var(--font-family);
|
||||
overflow-y: scroll;
|
||||
}
|
||||
|
||||
#gamesList li {
|
||||
padding: 1rem;
|
||||
transition: all 0.2s ease-in;
|
||||
letter-spacing: 1px;
|
||||
background-color: var(--games-color);
|
||||
}
|
||||
|
||||
#gamesList li:hover, #gamesList li:focus, #gamesList .active {
|
||||
background-color: var(--hover-color);
|
||||
}
|
||||
|
||||
.searchbar {
|
||||
display: flex;
|
||||
width: 75%;
|
||||
justify-content: center;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
#search {
|
||||
all: unset;
|
||||
margin-right: 4px;
|
||||
width: 100%;
|
||||
padding: 1rem;
|
||||
font-family: var(--font-family);
|
||||
color: var(--font-color);
|
||||
background-color: var(--block-color);
|
||||
}
|
||||
|
||||
#sort {
|
||||
all: unset;
|
||||
margin: 0;
|
||||
border: none;
|
||||
background-color: var(--block-color);
|
||||
color: var(--font-color);
|
||||
font-size: 1rem;
|
||||
font-family: var(--font-family);
|
||||
padding: 1rem;
|
||||
width: 20%;
|
||||
}
|
||||
|
||||
logo img {
|
||||
z-index: 50;
|
||||
position: fixed;
|
||||
@@ -97,18 +177,38 @@ logo img {
|
||||
scale: 0.45;
|
||||
}
|
||||
|
||||
img[alt="MonkeyGG2 Icon"] {
|
||||
filter: brightness(110%);
|
||||
}
|
||||
|
||||
img[alt="Proxy Icon"] {
|
||||
margin: -1rem 0;
|
||||
}
|
||||
|
||||
.card .img-container {
|
||||
max-width: 256px;
|
||||
max-height: 256px;
|
||||
margin: 2rem 0;
|
||||
display: inline-flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.card .img-container > img, svg {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.card-row {
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
width: 90%;
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
.column {
|
||||
text-align: center;
|
||||
float: left;
|
||||
width: 25%;
|
||||
width: 33%;
|
||||
padding: 0 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.column button {
|
||||
@@ -122,11 +222,11 @@ logo img {
|
||||
|
||||
.card {
|
||||
box-shadow: var(--button-color) 0 4px 8px 0;
|
||||
padding: 16px;
|
||||
padding: 12px;
|
||||
text-align: center;
|
||||
background-color: var(--button-color);
|
||||
border-radius: 50px;
|
||||
font-size: 150%;
|
||||
font-size: 1.2rem;
|
||||
text-decoration: none;
|
||||
color: var(--font-color);
|
||||
font-family: var(--font-family);
|
||||
@@ -134,6 +234,24 @@ logo img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.card h5 {
|
||||
font-size: 2rem;
|
||||
letter-spacing: 1px;
|
||||
margin: 2px;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
background-color: var(--hover-color);
|
||||
}
|
||||
|
||||
#page-loader iframe {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 999;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
}
|
||||
@@ -0,0 +1,169 @@
|
||||
/*
|
||||
Data for all games
|
||||
|
||||
"name-of-game": "path/to/game"
|
||||
|
||||
The path should be from the games directory.
|
||||
|
||||
The list does not have to be ordered in any way but for the
|
||||
sake of simplicity we will order this list alphanumerically.
|
||||
*/
|
||||
{
|
||||
"1v1.LOL": "1v1-lol",
|
||||
"2048": "2048",
|
||||
"Achievement Unlocked": "flash/?game=achievement-unlocked",
|
||||
"Achievement Unlocked 2": "w-flash/?game=achievement-unlocked-2",
|
||||
"Achievement Unlocked 3": "w-flash/?game=achievement-unlocked-3",
|
||||
"A Dark Room": "a-dark-room",
|
||||
"Abandoned": "abandoned",
|
||||
"Ages of Conflict": "ages-of-conflict",
|
||||
"Age of War": "flash/?game=age-of-war",
|
||||
"Age of War Hacked": "flash/?game=age-of-war-hacked",
|
||||
"Amidst The Sky": "amidst-the-sky",
|
||||
"Another Gentlemans Adventure": "another-gentlemans-adventure",
|
||||
"Awesome Tanks": "awesome-tanks",
|
||||
"Awesome Tanks 2": "awesome-tanks-2",
|
||||
"Babel Tower": "babel-tower",
|
||||
"Basketball Stars": "basketball-stars",
|
||||
"Bloons": "flash/?game=bloons",
|
||||
"Bloons TD 1": "flash/?game=bloons-td-1",
|
||||
"Bloons TD 2": "flash/?game=bloons-td-2",
|
||||
"Bloons TD 3": "w-flash/?game=bloons-tower-defense-3",
|
||||
"Bloons TD 4": "w-flash/?game=bloons-tower-defense-4",
|
||||
"Bloons TD 5": "w-flash/?game=bloons-tower-defense-5",
|
||||
"Bloxorz": "flash/?game=bloxorz",
|
||||
"Brawl Stars Project Laser": "brawl-stars-project-laser",
|
||||
"Breaklock": "breaklock",
|
||||
"Cat Ninja": "w-flash/?game=cat-ninja",
|
||||
"Curveball": "flash/?game=curveball",
|
||||
"Chrome Dino": "chrome-dino",
|
||||
"Clicker Heroes": "clicker-heroes",
|
||||
"Clicker Heroes Updated": "clicker-heroes-updated",
|
||||
"Cookie Clicker": "cookie-clicker",
|
||||
"Core Ball": "core-ball",
|
||||
"Crossy Road": "crossy-road",
|
||||
"Conway's Game of Life": "conways-game-of-life",
|
||||
"Creative Kill Chamber": "flash/?game=creative-kill-chamber",
|
||||
"Cut The Rope": "cut-the-rope",
|
||||
"Dadish": "dadish",
|
||||
"Dadish 2": "dadish-2",
|
||||
"Don't Escape": "w-flash/?game=dont-escape",
|
||||
"Don't Escape 2": "w-flash/?game=dont-escape-2",
|
||||
"Don't Escape 3": "w-flash/?game=dont-escape-3",
|
||||
"Doodle Jump": "doodle-jump",
|
||||
"Drift Boss": "drift-boss",
|
||||
"Drift Hunters": "drift-hunters",
|
||||
"Drive Mad": "drive-mad",
|
||||
"Duck Life": "flash/?game=duck-life",
|
||||
"Duck Life 2": "flash/?game=duck-life-2",
|
||||
"Duck Life 3": "flash/?game=duck-life-3",
|
||||
"Duck Life 4": "duck-life-4",
|
||||
"Duck Life Treasure Hunt": "w-flash/?game=duck-life-treasure-hunt",
|
||||
"Dune!": "dune",
|
||||
"Eaglercraft 1.5.2": "eaglercraft",
|
||||
"Eaglercraft 1.8.8 (Multiplayer Only)": "eaglercraftx/",
|
||||
"EvoWars": "evowars",
|
||||
"Escape The Car": "flash/?game=escape-the-car",
|
||||
"Escape The Closet": "flash/?game=escape-the-closet",
|
||||
"Escape The Phonebooth": "flash/?game=escape-the-phonebooth",
|
||||
"Escape The Bathroom": "flash/?game=escape-the-bathroom",
|
||||
"Escape The Freezer": "w-flash/?game=escape-the-freezer",
|
||||
"Escape The Shack": "w-flash/?game=escape-the-shack",
|
||||
"Fireboy and Watergirl": "fireboy-and-watergirl",
|
||||
"Fireboy and Watergirl 2": "fireboy-and-watergirl-2",
|
||||
"Fireboy and Watergirl 3": "fireboy-and-watergirl-3",
|
||||
"Fireboy and Watergirl 4": "fireboy-and-watergirl-4",
|
||||
"Flash Chess": "flash/?game=flash-chess",
|
||||
"Friday Night Funkin": "friday-night-funkin",
|
||||
"Factory Balls": "flash/?game=factory-balls",
|
||||
"Flappy Bird": "flappy-bird",
|
||||
"Getaway Shootout": "getaway-shootout",
|
||||
"Gons io": "gons-io",
|
||||
"Gun Mayhem": "flash/?game=gun-mayhem",
|
||||
"Gun Mayhem 2": "flash/?game=gun-mayhem-2",
|
||||
"Gun Spin": "gunspin",
|
||||
"Henry Stickmin 0: Breaking The Bank": "flash/?game=breaking-the-bank",
|
||||
"Henry Stickmin 1: Escaping The Prison": "flash/?game=escaping-the-prison",
|
||||
"Henry Stickmin 2: Stealing The Diamond": "flash/?game=stealing-the-diamond",
|
||||
"Henry Stickmin 3: Infiltrating The Airship": "flash/?game=infiltrating-the-airship",
|
||||
"Henry Stickmin 4: Fleeing the Complex": "flash/?game=fleeing-the-complex",
|
||||
"Hextris": "hextris",
|
||||
"Incremancer": "incremancer",
|
||||
"Learn To Fly": "flash/?game=learn-to-fly",
|
||||
"Learn To Fly 2": "w-flash/?game=learn-to-fly-2",
|
||||
"Idle Breakout": "idle-breakout",
|
||||
"Maptroid": "maptroid",
|
||||
"Mario": "mario-game",
|
||||
"Monkey Mart": "monkey-mart",
|
||||
"MotoX3M": "motox3m",
|
||||
"N-gon": "n-gon",
|
||||
"Papas Pizzeria": "flash/?game=papas-pizzaria",
|
||||
"Papas Freezeria": "w-flash/?game=papas-freezeria",
|
||||
"Particle Clicker": "particle-clicker",
|
||||
"Planet Life": "planet-life",
|
||||
"P.craft": "pcraft",
|
||||
"Precision Client (Eaglercraft 1.5.2)": "precision-client/",
|
||||
"Progress Knight": "progress-knight",
|
||||
"Pull Of War": "pull-of-war",
|
||||
"Reach The Core": "reach-the-core",
|
||||
"Raft Wars": "flash/?game=raft-wars",
|
||||
"Raft Wars 2": "flash/?game=raft-wars-2",
|
||||
"Retro Bowl": "retro-bowl",
|
||||
"Retro Bowl Old": "retro-bowl-old",
|
||||
"Rogue Soul": "w-flash/?game=rogue-soul",
|
||||
"Rogue Soul 2": "w-flash/?game=rogue-soul-2",
|
||||
"Riddle School": "flash/?game=riddle-school",
|
||||
"Riddle School 2": "flash/?game=riddle-school-2",
|
||||
"Riddle School 3": "flash/?game=riddle-school-3",
|
||||
"Riddle School 4": "flash/?game=riddle-school-4",
|
||||
"Riddle School 5": "flash/?game=riddle-school-5",
|
||||
"Riddle Transfer": "flash/?game=riddle-transfer",
|
||||
"Riddle Transfer 2": "flash/?game=riddle-transfer-2",
|
||||
"Rooftop Snipers": "rooftop-snipers",
|
||||
"Rookie Bowman": "rookie-bowman",
|
||||
"Run 3": "run-3",
|
||||
"Sandspiel": "sandspiel",
|
||||
"Scuba Bear": "scuba-bear",
|
||||
"Slope": "slope",
|
||||
"Smash Karts": "smash-karts",
|
||||
"Stickman Hook": "stickman-hook",
|
||||
"Subway Surfers": "subway-surfers",
|
||||
"Subway Surfers New York": "subway-surfers-ny",
|
||||
"Stick War": "flash/?game=stick-war",
|
||||
"Submachine": "flash/?game=submachine",
|
||||
"Submachine 2": "flash/?game=submachine-2",
|
||||
"Submachine 3": "flash/?game=submachine-3",
|
||||
"Submachine 4": "flash/?game=submachine-4",
|
||||
"Submachine 5": "flash/?game=submachine-5",
|
||||
"Submachine 6": "flash/?game=submachine-6",
|
||||
"Submachine 7": "flash/?game=submachine-7",
|
||||
"Submachine 8": "flash/?game=submachine-8",
|
||||
"Submachine 9": "flash/?game=submachine-9",
|
||||
"Submachine 10": "flash/?game=submachine-10",
|
||||
"Submachine 0": "flash/?game=submachine-0",
|
||||
"Submachine 32 Chambers": "flash/?game=submachine-32-chambers",
|
||||
"Submachine FLF": "flash/?game=submachine-flf",
|
||||
"Sugar Sugar": "w-flash/?game=sugar-sugar",
|
||||
"The Final Earth": "the-final-earth",
|
||||
"There Is No Game": "there-is-no-game",
|
||||
"Time Shooter": "time-shooter",
|
||||
"Time Shooter 3": "time-shooter-3",
|
||||
"Tiny Fishing": "tiny-fishing",
|
||||
"Trace": "trace",
|
||||
"Tanuki Sunset": "tanuki-sunset",
|
||||
"Temple Run 2": "temple-run-2",
|
||||
"The Impossible Quiz": "flash/?game=the-impossible-quiz",
|
||||
"This Is The Only Level": "flash/?game=this-is-the-only-level",
|
||||
"This Is The Only Level 2": "w-flash/?game=this-is-the-only-level-2",
|
||||
"Tunnel Rush": "tunnel-rush",
|
||||
"Two Ball 3d": "two-ball-3d",
|
||||
"Vex 3": "vex-3",
|
||||
"Vex 4": "vex-4",
|
||||
"Vex 5": "vex-5",
|
||||
"Vex 6": "vex-6",
|
||||
"Vex 7": "vex-7",
|
||||
"Web OSU": "web-osu",
|
||||
"Ultimate Chess": "w-flash/?game=ultimate-chess",
|
||||
"X Trench Run": "x-trench-run",
|
||||
"Yohoho": "yohoho"
|
||||
}
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
@@ -0,0 +1,40 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<!-- Google tag (gtag.js) -->
|
||||
<script async src="https://www.googletagmanager.com/gtag/js?id=G-7L02W3ZMS5"></script>
|
||||
<script>
|
||||
window.dataLayer = window.dataLayer || [];
|
||||
function gtag(){dataLayer.push(arguments);}
|
||||
gtag('js', new Date());
|
||||
|
||||
gtag('config', 'G-7L02W3ZMS5');
|
||||
</script>
|
||||
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5648726754785335"
|
||||
crossorigin="anonymous"></script>
|
||||
<meta charset="utf-8" />
|
||||
<title>Core Ball</title>
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />
|
||||
<link rel="stylesheet" href="style.css" />
|
||||
</head>
|
||||
<body>
|
||||
<canvas style="display: none;" id="stage"></canvas>
|
||||
<div id="begin">
|
||||
<section class="center-box">
|
||||
<span class="title">Core Ball</span>
|
||||
<div class="button">
|
||||
<div id="txtAr">▶</div>
|
||||
<div class="text"></div>
|
||||
</div>
|
||||
<div class="op">
|
||||
<span id="btnFW"></span>
|
||||
<span id="btnReset"></span>
|
||||
<div id="tip"></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="wxArrow"></section>
|
||||
</div>
|
||||
<script type="text/javascript" src="index.js"></script>
|
||||
<script src="/global.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,692 @@
|
||||
"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;
|
||||
@@ -0,0 +1,3 @@
|
||||
requirejs.config({
|
||||
baseUrl : "http://dev.me/h5/core-ball/js"
|
||||
});
|
||||
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
* @fileoverview Ball
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var util = require("lib/util");
|
||||
|
||||
function Ball(stage, rad, num, fontSize, scale){
|
||||
var x = 0;
|
||||
var y = 0;
|
||||
var me;
|
||||
|
||||
scale = scale || 1;
|
||||
rad = (rad || 12) * scale;
|
||||
fontSize = (fontSize || 15) * scale;
|
||||
|
||||
function renderNumber(n){
|
||||
var w = util.getTextWidth(stage, 0, 0, num, fontSize);
|
||||
util.drawText(stage, x - w / 2, y + fontSize / 2, num, fontSize, "black");
|
||||
}
|
||||
|
||||
me = {
|
||||
pos : function(bx, by){
|
||||
typeof bx !== "undefined" && (x = bx);
|
||||
typeof by !== "undefined" && (y = by);
|
||||
return {
|
||||
x : x,
|
||||
y : y
|
||||
};
|
||||
},
|
||||
|
||||
//n :num,
|
||||
|
||||
scale : function(sc){
|
||||
typeof sc !== "undefined" && (scale = sc);
|
||||
return scale;
|
||||
},
|
||||
|
||||
rad : function(r){
|
||||
typeof r !== "undefined" && (rad = r);
|
||||
return rad;
|
||||
},
|
||||
|
||||
render : function(n){
|
||||
util.drawCircle(stage, x, y, rad, "#ffffff");
|
||||
|
||||
if(typeof num !== "undefined"){
|
||||
renderNumber(num);
|
||||
}else if(typeof n !== "undefined"){
|
||||
renderNumber(n);
|
||||
}
|
||||
},
|
||||
|
||||
destroy : function(){
|
||||
me = null;
|
||||
}
|
||||
};
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = Ball;
|
||||
});
|
||||
@@ -0,0 +1,139 @@
|
||||
/**
|
||||
* @fileoverview BallQueue
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var CustEvent = require("lib/CustEvent");
|
||||
var Ball = require("general/Ball");
|
||||
var Tween = require("general/Tween");
|
||||
|
||||
var EVENT_POPUP = "popup";
|
||||
|
||||
function BallQueue(n, x, y, stage, scale){
|
||||
var me;
|
||||
var ballList = [];
|
||||
var popList = [];
|
||||
var custEvent = CustEvent();
|
||||
|
||||
scale = scale || 1;
|
||||
|
||||
function init(){
|
||||
var numList = numToArr(n);
|
||||
var l = numList.length;
|
||||
var i;
|
||||
var ball;
|
||||
|
||||
for(i=0; i<l; i++){
|
||||
ball = Ball(stage, null, numList[i], null, scale);
|
||||
ball.pos(x, y + ball.rad() * 3 * i );
|
||||
ballList.push(ball);
|
||||
}
|
||||
}
|
||||
|
||||
function numToArr(n){
|
||||
var i = n;
|
||||
var ret = [];
|
||||
|
||||
while(i--){
|
||||
ret.push(i + 1);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
me = {
|
||||
|
||||
ballList : ballList,
|
||||
|
||||
add : function(ball){
|
||||
|
||||
},
|
||||
|
||||
remove : function(idx){
|
||||
var ret = ballList[idx];
|
||||
ballList.splice(idx, 1);
|
||||
return ret;
|
||||
},
|
||||
|
||||
|
||||
clear : function(){
|
||||
popList = [];
|
||||
ballList = [];
|
||||
},
|
||||
|
||||
popup : function(){
|
||||
var popBall = ballList.shift();
|
||||
|
||||
popBall.st = +(new Date);
|
||||
popBall.sv = popBall.pos().y;
|
||||
popList.push(popBall);
|
||||
},
|
||||
|
||||
update : function(){
|
||||
var ev;
|
||||
var i = popList.length;
|
||||
var r;
|
||||
var j = ballList.length;
|
||||
var py;
|
||||
|
||||
if(i){
|
||||
r = popList[0].rad();
|
||||
ev = y - 3 * r;
|
||||
while(i--){
|
||||
popList[i].pos(x, Tween.simple(popList[i].sv, ev, popList[i].st, 50));
|
||||
py = popList[popList.length - 1].pos().y;
|
||||
if(popList[i].pos().y === ev){
|
||||
custEvent.fire(EVENT_POPUP, popList[i]);
|
||||
popList.splice(i, 1);
|
||||
}
|
||||
}
|
||||
|
||||
while(j--){
|
||||
ballList[j].pos(x, py + 3 * r * (j + 1));
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render : function(){
|
||||
var i = ballList.length;
|
||||
var j = popList.length;
|
||||
|
||||
while(i--){
|
||||
ballList[i].render();
|
||||
}
|
||||
|
||||
while(j--){
|
||||
popList[j].render();
|
||||
}
|
||||
},
|
||||
|
||||
on : function(type, handle){
|
||||
custEvent.add(type, handle);
|
||||
},
|
||||
|
||||
off : function(type, handle){
|
||||
custEvent.remove(type, handle);
|
||||
},
|
||||
|
||||
destroy : function(){
|
||||
var i = ballList.length;
|
||||
|
||||
while(i--){
|
||||
ballList[i].destroy();
|
||||
}
|
||||
|
||||
custEvent.destroy();
|
||||
}
|
||||
};
|
||||
|
||||
init();
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = BallQueue;
|
||||
});
|
||||
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* @fileoverview BeginStage
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
var addEvent = require("lib/addEvent");
|
||||
var CustEvent = require("lib/CustEvent");
|
||||
var util = require("lib/util");
|
||||
|
||||
var custEvent = CustEvent();
|
||||
var level = 0;
|
||||
|
||||
var EVENT_START = "start";
|
||||
|
||||
function BeginStage(node){
|
||||
var btnStart = node.getElementsByClassName("button")[0];
|
||||
var txtLevel = node.getElementsByClassName("text")[0];
|
||||
var txtAr = document.getElementById("txtAr");
|
||||
|
||||
function init(){
|
||||
addEvent(btnStart, "click", function(){
|
||||
custEvent.fire(EVENT_START, level);
|
||||
});
|
||||
|
||||
if(util.isAndroid){
|
||||
txtAr.innerHTML = "GO";
|
||||
}else{
|
||||
txtAr.innerHTML ="▶";
|
||||
}
|
||||
}
|
||||
|
||||
var me = {
|
||||
show : function(){
|
||||
node.style.display = "";
|
||||
},
|
||||
|
||||
hide : function(){
|
||||
node.style.display = "none";
|
||||
},
|
||||
|
||||
level : function(lv){
|
||||
level = lv;
|
||||
txtLevel.innerHTML = "level " + lv;
|
||||
},
|
||||
|
||||
on : function(type, handle){
|
||||
custEvent.add(type, handle);
|
||||
},
|
||||
|
||||
off : function(type, handle){
|
||||
custEvent.remove(type, handle);
|
||||
}
|
||||
};
|
||||
|
||||
init();
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = BeginStage;
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
/**
|
||||
* @fileoverview Collide
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var util = require("lib/util");
|
||||
|
||||
var Collide = {
|
||||
check : function(core, ball, scale){
|
||||
var childs = core.childs();
|
||||
var i = childs.length;
|
||||
var d = Math.ceil(2 * ball.rad());
|
||||
|
||||
scale = scale || 1;
|
||||
while(i--){
|
||||
if(ball !== childs[i].ball && util.getPointDistance(ball.pos(), childs[i].ball.pos()) <= d + Math.ceil(2 * scale)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = Collide;
|
||||
});
|
||||
@@ -0,0 +1,101 @@
|
||||
/**
|
||||
* @fileoverview Core
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var util = require("lib/util");
|
||||
var Ball = require("general/Ball");
|
||||
|
||||
function Core(canvas, stage, num, fontSize, scale){
|
||||
var angle = 0;
|
||||
var color = "#ffffff";
|
||||
var childs = [];
|
||||
var r = 50;
|
||||
var x = canvas.width / 2;
|
||||
var y = 4 * r * scale;
|
||||
var ball;
|
||||
var me;
|
||||
|
||||
scale = scale || 1;
|
||||
ball = Ball(stage, r, num, fontSize, scale);
|
||||
ball.pos(x, y);
|
||||
|
||||
function updateChilds(){
|
||||
var i = childs.length;
|
||||
var cx;
|
||||
var cy;
|
||||
var dx;
|
||||
var dy;
|
||||
|
||||
while(i--){
|
||||
cx = Math.cos((childs[i].angle + me.angle()) * Math.PI / 180) * 3 * r * scale + x;
|
||||
cy = Math.sin((childs[i].angle + me.angle()) * Math.PI / 180) * 3 * r * scale + y;
|
||||
dx = cx / Math.abs(cx);
|
||||
dy = cy / Math.abs(cy);
|
||||
|
||||
childs[i].ball.pos(cx, cy);
|
||||
}
|
||||
}
|
||||
|
||||
me = {
|
||||
|
||||
pos : ball.pos,
|
||||
|
||||
scale : ball.scale,
|
||||
|
||||
rad : ball.rad,
|
||||
|
||||
angle : function(ag){
|
||||
typeof ag !== "undefined" && (angle = ag);
|
||||
return angle;
|
||||
},
|
||||
|
||||
addChild : function(angle, ball){
|
||||
childs.push({
|
||||
angle :angle,
|
||||
ball : ball
|
||||
});
|
||||
},
|
||||
|
||||
clear : function(){
|
||||
childs = [];
|
||||
},
|
||||
|
||||
childs : function(){
|
||||
return childs;
|
||||
},
|
||||
|
||||
update : function(){
|
||||
updateChilds();
|
||||
},
|
||||
|
||||
render : function(){
|
||||
var l = childs.length;
|
||||
var i;
|
||||
var w = canvas.width;
|
||||
var h = canvas.height;
|
||||
|
||||
stage.clearRect(0, 0, w, h);
|
||||
for(i=0; i<l; i++){
|
||||
util.drawLine(stage, x, y, childs[i].ball.pos().x, childs[i].ball.pos().y, "#ffffff", 1.5 * scale);
|
||||
childs[i].ball.render();
|
||||
}
|
||||
ball.render();
|
||||
},
|
||||
|
||||
destroy : function(){
|
||||
me.clear();
|
||||
ball = null;
|
||||
me = null;
|
||||
}
|
||||
};
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = Core;
|
||||
});
|
||||
@@ -0,0 +1,172 @@
|
||||
/**
|
||||
* @fileoverview Game
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-04
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var Scene = require("general/Scene");
|
||||
var Switcher = require("general/Switcher");
|
||||
var BeginStage = require("general/BeginStage");
|
||||
var addEvent = require("lib/addEvent");
|
||||
var Storage = require("lib/Storage");
|
||||
var util = require("lib/util");
|
||||
var stopEvent = require("lib/stopEvent");
|
||||
//var LevelCode = require("general/LevelCode");
|
||||
|
||||
var canvas = document.getElementById("stage");
|
||||
var bsNode = document.getElementById("begin");
|
||||
var tip = document.getElementById("tip");
|
||||
var btnFW = document.getElementById("btnFW");
|
||||
var btnReset = document.getElementById("btnReset");
|
||||
var wxArrow = document.getElementById("wxArrow");
|
||||
var stage = canvas.getContext("2d");
|
||||
|
||||
var FPS = 60;
|
||||
var BASE_HEIGHT = 560;
|
||||
var STORAGE_KEY = "core-ball-level";
|
||||
var WX_SHARE_TEXT = "Core Ball(酷啵)-练手活的HTML5游戏,我已玩到第#{level}关了,你也来试试吧!";
|
||||
var SHARE_HREF = "sinaweibo://share?content=Core Ball(酷啵) - 练手活的HTML5小游戏,我已玩到第#{level}关了,你也来试试吧! http://coreball.sinaapp.com";
|
||||
|
||||
var scene;
|
||||
var beginStage = BeginStage(bsNode);
|
||||
var switcher;
|
||||
var level = +Storage.getValue(STORAGE_KEY) || 1;
|
||||
var scale;
|
||||
var isResetting = false
|
||||
var tid = 0;
|
||||
|
||||
function adaptScreen(){
|
||||
var width = document.body.scrollWidth || document.documentElement.scrollWidth;
|
||||
var height = document.body.scrollHeight || document.documentElement.scrollHeight;
|
||||
|
||||
canvas.width = width;
|
||||
canvas.height = height;
|
||||
|
||||
switcher = Switcher(stage, width, height);
|
||||
bsNode.style.backgroundColor = switcher.color;
|
||||
bsNode.style.width = width + "px";
|
||||
bsNode.style.height = height + "px";
|
||||
|
||||
scale = height / 560;
|
||||
}
|
||||
|
||||
function updateSharedHref(){
|
||||
btnFW.href = SHARE_HREF.replace(/#\{level\}/, level);
|
||||
}
|
||||
|
||||
function initForward(){
|
||||
if(util.isWeixin){
|
||||
addEvent(btnFW, "mousedown", function(){
|
||||
wxArrow.style.display = "";
|
||||
});
|
||||
|
||||
}else if(util.isMobile){
|
||||
updateSharedHref();
|
||||
|
||||
}else{
|
||||
//http://service.weibo.com/share/share.php?url=http://ra.ndom.me/core-ball/index.html&type=button&language=zh_cn&appkey=2hwszt&searchPic=true&style=number
|
||||
}
|
||||
}
|
||||
|
||||
function updateLevel(lv){
|
||||
level = +lv;
|
||||
Storage.setValue(STORAGE_KEY, level);
|
||||
document.title = WX_SHARE_TEXT.replace(/\#\{level\}/, level);
|
||||
beginStage.level(level);
|
||||
!util.isWeixin && util.isMobile && updateSharedHref();
|
||||
}
|
||||
|
||||
|
||||
function initEvent(){
|
||||
addEvent(document.body, "mousedown", function(evt){
|
||||
var i;
|
||||
|
||||
if(evt && evt.changedTouches){
|
||||
i = evt.changedTouches.length;
|
||||
while(i--){
|
||||
scene.shot();
|
||||
}
|
||||
}else{
|
||||
scene.shot();
|
||||
}
|
||||
|
||||
evt.target.getAttribute("data-capture")!="1" && stopEvent(evt);
|
||||
});
|
||||
|
||||
addEvent(wxArrow, "mousedown", function(){
|
||||
wxArrow.style.display = "none";
|
||||
});
|
||||
|
||||
addEvent(btnReset, "mousedown", function(){
|
||||
if(!isResetting){
|
||||
isResetting = true;
|
||||
tip.style.display = "";
|
||||
updateLevel(1);
|
||||
setTimeout(function(){
|
||||
tip.style.display = "none";
|
||||
isResetting = false;
|
||||
}, 1000);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
scene.on("passed", function(){
|
||||
switcher.switchStage(0, function(){
|
||||
scene.enabled = false;
|
||||
updateLevel(level + 1);
|
||||
canvas.style.display = "none";
|
||||
beginStage.show();
|
||||
});
|
||||
});
|
||||
|
||||
scene.on("failed", function(){
|
||||
switcher.switchStage(0, function(){
|
||||
scene.enabled = false;
|
||||
canvas.style.display = "none";
|
||||
beginStage.level(level);
|
||||
beginStage.show();
|
||||
});
|
||||
});
|
||||
|
||||
beginStage.on("start", function(){
|
||||
canvas.style.display = "";
|
||||
beginStage.hide();
|
||||
switcher.switchStage(1, function(){
|
||||
scene.run(level);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function timerHandle(){
|
||||
window.clearTimeout(tid);
|
||||
scene.update();
|
||||
scene.render();
|
||||
|
||||
switcher.update();
|
||||
switcher.render();
|
||||
tid = window.setTimeout(timerHandle, 1000 / FPS);
|
||||
}
|
||||
|
||||
|
||||
function init(){
|
||||
adaptScreen();
|
||||
scene = Scene(document.body, canvas, stage, scale);
|
||||
initEvent();
|
||||
initForward();
|
||||
beginStage.level(level);
|
||||
beginStage.show();
|
||||
|
||||
timerHandle();
|
||||
}
|
||||
|
||||
var Game = {
|
||||
start : init
|
||||
};
|
||||
|
||||
|
||||
|
||||
module.exports = Game;
|
||||
});
|
||||
@@ -0,0 +1,35 @@
|
||||
/**
|
||||
* @fileoverview LevelCode
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-13
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var md5 = require("lib/md5");
|
||||
var SALT = "Handsome";
|
||||
var map = {};
|
||||
var l = 60;
|
||||
var i;
|
||||
|
||||
for(i=1; i<=l; i++){
|
||||
map[md5(i + SALT)] = i;
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
encode : function(n){
|
||||
var k;
|
||||
|
||||
for(k in map){
|
||||
if(map[k] == n){
|
||||
return k;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
decode : function(code){
|
||||
return map[code];
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,292 @@
|
||||
/**
|
||||
* @fileoverview Levels
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-06
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var addEvent = require("lib/addEvent");
|
||||
|
||||
var Levels = {};
|
||||
var k;
|
||||
|
||||
function typeAB(v, d){
|
||||
return function(){
|
||||
var angle = 0;
|
||||
return function(){
|
||||
angle += v * d % 360;
|
||||
return angle;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function typeC(v, td){
|
||||
return function(){
|
||||
var angle = 0;
|
||||
var d = 1;
|
||||
var t = +(new Date);
|
||||
return function(){
|
||||
var t2 = +(new Date);
|
||||
if(t2 - t > td){
|
||||
d = -d;
|
||||
t = t2;
|
||||
}
|
||||
angle += d * v % 360;
|
||||
return angle;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function typeD(v, sum, td, d){
|
||||
return function(){
|
||||
var angle = 0;
|
||||
var t = +(new Date);
|
||||
|
||||
return function(){
|
||||
var t2 = +(new Date);
|
||||
if(t2 - t > td){
|
||||
v = sum - v;
|
||||
t = t2;
|
||||
}
|
||||
angle += v * d % 360;
|
||||
return angle;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function typeE(v1, v2){
|
||||
var d = 1;
|
||||
var map = {
|
||||
"-1" : v2,
|
||||
"1" : v1
|
||||
};
|
||||
var v = v2 ? map[d] : v1;
|
||||
|
||||
addEvent(document.body, "mousedown", function(){
|
||||
d = -d;
|
||||
v = v2 ? map[d] : v1;
|
||||
});
|
||||
return function(){
|
||||
var angle = 0;
|
||||
|
||||
return function(){
|
||||
angle += v * d % 360;
|
||||
return angle;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function typeDE(v, sum, td, d){
|
||||
addEvent(document.body, "mousedown", function(){
|
||||
d = -d;
|
||||
});
|
||||
return function(){
|
||||
var angle = 0;
|
||||
var t = +(new Date);
|
||||
|
||||
return function(){
|
||||
var t2 = +(new Date);
|
||||
if(t2 - t > td){
|
||||
v = sum - v;
|
||||
t = t2;
|
||||
}
|
||||
angle += v * d % 360;
|
||||
return angle;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
function typeF(v1, v2, td1, td2){
|
||||
return function(){
|
||||
var angle = 0;
|
||||
var t = +(new Date);
|
||||
var i = 0;
|
||||
var arr = [[v1, td1], [v2, td2]];
|
||||
var d = 1;
|
||||
|
||||
return function(){
|
||||
var t2 = +(new Date);
|
||||
var v = arr[i][0];
|
||||
if(t2 - t > arr[i][1]){
|
||||
v = arr[i][0];
|
||||
i = (i + 1) % 2;
|
||||
t = +(new Date);
|
||||
d = -d;
|
||||
}
|
||||
|
||||
angle += d * v;
|
||||
return angle;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var roundTypes = {
|
||||
"A1" : typeAB(1.5, 1),
|
||||
"A2" : typeAB(1.5, -1),
|
||||
|
||||
"B1" : typeAB(2.5, 1),
|
||||
"B2" : typeAB(2.5, -1),
|
||||
|
||||
"C1" : typeC(2.2, 3000),
|
||||
"C2" : typeC(3.5, 2000),
|
||||
|
||||
"D1" : typeD(2, 2.3, 1200, 1),
|
||||
"D2" : typeD(2, 2.3, 1200, -1),
|
||||
"D3" : typeD(4, 4.5, 700, 1),
|
||||
"D4" : typeD(4, 4.5, 700, -1),
|
||||
"D5" : typeD(4, 4.5, 1700, 1),
|
||||
"D6" : typeD(4, 4.5, 1700, -1),
|
||||
|
||||
"E1" : typeE(2),
|
||||
"E2" : typeDE(2, 2.3, 1000, 1),
|
||||
"E3" : typeDE(2, 2.5, 1000, 1),
|
||||
"E4" : typeE(3, 2),
|
||||
"E5" : typeE(1.5, 3.2),
|
||||
|
||||
"F1" : typeF(2, 0.3, 200, 300),
|
||||
"F2" : typeF(3.5, 1, 250, 1500),
|
||||
"F3" : typeF(0.5, 1.8, 350, 1500),
|
||||
"F4" : typeF(1.8, 0.5, 1000, 150),
|
||||
"F5" : typeF(0.5, 2.2, 350, 1500)
|
||||
};
|
||||
|
||||
var childsTypes = {
|
||||
"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]
|
||||
};
|
||||
|
||||
var data = {
|
||||
"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" : ["11", 12, "A1"],
|
||||
"8" : ["14", 6, "A2"],
|
||||
"9" : ["0", 26, "A2"],
|
||||
"10" : ["14", 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, "E3"],
|
||||
|
||||
"51" : ["6", 10, "D3"],
|
||||
"52" : ["2", 18, "D4"],
|
||||
"53" : ["8", 14, "D3"],
|
||||
"54" : ["0", 24, "D4"],
|
||||
"55" : ["4", 21, "D3"],
|
||||
"56" : ["16", 16, "A1"],
|
||||
"57" : ["4", 22, "C1"],
|
||||
"58" : ["4", 26, "D1"],
|
||||
"59" : ["4", 25, "E2"],
|
||||
"60" : ["12", 14, "E2"],
|
||||
|
||||
"61" : ["10", 11, "F1"],
|
||||
"62" : ["4", 21, "F1"],
|
||||
"63" : ["8", 16, "F1"],
|
||||
"64" : ["2", 24, "F1"],
|
||||
"65" : ["16", 8, "F1"],
|
||||
"66" : ["12", 14, "F2"],
|
||||
"67" : ["8", 19, "F2"],
|
||||
"68" : ["3", 21, "F2"],
|
||||
"69" : ["0", 32, "F2"],
|
||||
"70" : ["8", 20, "F1"],
|
||||
|
||||
"71" : ["12", 12, "F5"],
|
||||
"72" : ["8", 18, "F3"],
|
||||
"73" : ["15", 15, "F5"],
|
||||
"74" : ["3", 18, "F3"],
|
||||
"75" : ["3", 22, "F5"],
|
||||
"76" : ["5", 22, "F4"],
|
||||
"77" : ["6", 21, "F4"],
|
||||
"78" : ["9", 18, "F4"],
|
||||
"79" : ["8", 21, "F4"],
|
||||
"80" : ["6", 24, "F4"],
|
||||
|
||||
"81" : ["5", 12, "E4"],
|
||||
"82" : ["7", 14, "E4"],
|
||||
"83" : ["2", 21, "E4"],
|
||||
"84" : ["0", 24, "E4"],
|
||||
"85" : ["7", 16, "E4"],
|
||||
"86" : ["12", 13, "E5"],
|
||||
"87" : ["4", 15, "E5"],
|
||||
"88" : ["5", 19, "E5"],
|
||||
"89" : ["8", 18, "E4"],
|
||||
"90" : ["16", 16, "E4"]
|
||||
|
||||
};
|
||||
|
||||
|
||||
function bindLevles(lv, ct, count, rt){
|
||||
Levels[lv] = {
|
||||
childs : childsTypes[ct],
|
||||
queueCount : count,
|
||||
round : roundTypes[rt]
|
||||
};
|
||||
}
|
||||
|
||||
for(k in data){
|
||||
bindLevles(k, data[k][0], data[k][1], data[k][2]);
|
||||
}
|
||||
|
||||
|
||||
module.exports = Levels;
|
||||
});
|
||||
@@ -0,0 +1,196 @@
|
||||
/**
|
||||
* @fileoverview Scene
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-11
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var CustEvent = require("lib/CustEvent");
|
||||
var Core = require("general/Core");
|
||||
var Ball = require("general/Ball");
|
||||
var BallQueue = require("general/BallQueue");
|
||||
var Collide = require("general/Collide");
|
||||
var Levels = require("general/Levels");
|
||||
var util = require("lib/util");
|
||||
|
||||
var EVENT_PASSED = "passed";
|
||||
var EVENT_FAILED = "failed";
|
||||
|
||||
var custEvent = CustEvent();
|
||||
|
||||
|
||||
|
||||
function Scene(container, canvas, stage, scale){
|
||||
var me;
|
||||
var state = "run";
|
||||
var level = 1;
|
||||
var ts;
|
||||
var core;
|
||||
var ballQueue;
|
||||
var roundHandle;
|
||||
var failedBall;
|
||||
|
||||
function initStage(conf){
|
||||
var childs = conf.childs;
|
||||
var i = childs.length;
|
||||
|
||||
roundHandle = conf.round();
|
||||
|
||||
core && core.destroy();
|
||||
core = Core(canvas, stage, level, 50, scale);
|
||||
|
||||
while(i--){
|
||||
core.addChild(childs[i], Ball(stage, null, "", null, scale));
|
||||
}
|
||||
|
||||
ballQueue && ballQueue.destroy();
|
||||
ballQueue = BallQueue(conf.queueCount, canvas.width / 2, core.pos().y + core.rad() * 4, stage, scale);
|
||||
ballQueue.on("popup", function(ball){
|
||||
core.addChild(90 - core.angle(), ball);
|
||||
if(Collide.check(core, ball, scale)){
|
||||
failedBall = ball;
|
||||
fail();
|
||||
}else{
|
||||
!ballQueue.ballList.length && pass();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function stageUpdate(){
|
||||
if(roundHandle){
|
||||
core.angle(roundHandle());
|
||||
core.update();
|
||||
ballQueue.update();
|
||||
}
|
||||
}
|
||||
|
||||
function updatePass(){
|
||||
var childs = core.childs();
|
||||
var i = childs.length;
|
||||
var angle;
|
||||
var v = 25;
|
||||
var dx;
|
||||
var dy;
|
||||
var pos;
|
||||
|
||||
container.style.backgroundColor = me.bgColor;
|
||||
while(i--){
|
||||
angle = childs[i].angle + core.angle();
|
||||
dx = Math.cos(angle * Math.PI / 180) * v;
|
||||
dy = Math.sin(angle * Math.PI / 180) * v;
|
||||
|
||||
pos = childs[i].ball.pos();
|
||||
childs[i].ball.pos(pos.x + dx, pos.y + dy);
|
||||
}
|
||||
}
|
||||
|
||||
function updateFail(t){
|
||||
var rs = [25, 15, 20, 15];
|
||||
var l = rs.length;
|
||||
var tm = 200;
|
||||
var m = tm / l;
|
||||
var i;
|
||||
|
||||
core.update();
|
||||
|
||||
for(i=1; i<=l; i++){
|
||||
t > m * i && failedBall.rad(rs[i-1] * scale);
|
||||
}
|
||||
}
|
||||
|
||||
function pass(){
|
||||
if(state !== "pass"){
|
||||
container.style.backgroundColor = "#1CB01A";
|
||||
state = "pass";
|
||||
ts = +(new Date);
|
||||
}
|
||||
}
|
||||
|
||||
function fail(){
|
||||
if(stage !== "fail"){
|
||||
container.style.backgroundColor = "#B8111C";
|
||||
state = "fail";
|
||||
ts = +(new Date);
|
||||
}
|
||||
}
|
||||
|
||||
function toBeContinued(){
|
||||
var text = "to be continued...";
|
||||
var w = util.getTextWidth(stage, 0, 0, text, 30 * scale);
|
||||
|
||||
util.drawText(stage, (canvas.width - w) / 2, 200 * scale, text, 30 * scale, "yellow");
|
||||
|
||||
|
||||
}
|
||||
|
||||
me = {
|
||||
enabled : false,
|
||||
|
||||
run : function(lv){
|
||||
var conf = Levels[lv];
|
||||
level = lv;
|
||||
if(conf){
|
||||
me.enabled = true;
|
||||
initStage(conf);
|
||||
container.style.backgroundColor = "#000";
|
||||
state = "run";
|
||||
|
||||
}else{
|
||||
toBeContinued();
|
||||
}
|
||||
},
|
||||
|
||||
shot : function(){
|
||||
ballQueue && ballQueue.ballList.length && ballQueue.popup();
|
||||
},
|
||||
|
||||
update : function(){
|
||||
var t;
|
||||
if(!me.enabled){
|
||||
return;
|
||||
}
|
||||
|
||||
if(state === "run"){
|
||||
stageUpdate();
|
||||
|
||||
}else if(state === "pass"){
|
||||
updatePass();
|
||||
if(+(new Date) - ts > 1000){
|
||||
state = "";
|
||||
custEvent.fire(EVENT_PASSED);
|
||||
}
|
||||
|
||||
}else if(state === "fail"){
|
||||
t = +(new Date) - ts;
|
||||
updateFail(t);
|
||||
if(t > 1000){
|
||||
state = "";
|
||||
custEvent.fire(EVENT_FAILED);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render : function(){
|
||||
if(me.enabled){
|
||||
core.render();
|
||||
ballQueue.render();
|
||||
}
|
||||
},
|
||||
|
||||
on : function(type, handle){
|
||||
custEvent.add(type, handle);
|
||||
},
|
||||
|
||||
off : function(type, handle){
|
||||
custEvent.remove(type, handle);
|
||||
}
|
||||
};
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = Scene;
|
||||
});
|
||||
@@ -0,0 +1,84 @@
|
||||
/**
|
||||
* @fileoverview Switcher
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-04
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
function Switcher(stage, width, height){
|
||||
var color;
|
||||
var callBack = null;
|
||||
var type;
|
||||
var isEnd = false;
|
||||
|
||||
var me = {
|
||||
point : [0, 0],
|
||||
|
||||
enabled : false,
|
||||
|
||||
color : "#c8c8c8",
|
||||
|
||||
update : function(){
|
||||
var p = me.point;
|
||||
var v = 30;
|
||||
|
||||
if(me.enabled){
|
||||
if(type === 0){
|
||||
color = me.color;
|
||||
if(p[0] < width / 2){
|
||||
p[0] = Math.min(p[0] + v, width / 2);
|
||||
me.point = p;
|
||||
}else{
|
||||
me.point = p;
|
||||
isEnd = true;
|
||||
}
|
||||
|
||||
}else if(type === 1){
|
||||
color = "#000";
|
||||
if(p[0] > width / 2){
|
||||
p[0] = Math.max(p[0] - v, width / 2);
|
||||
me.point = p;
|
||||
}else{
|
||||
me.point = p;
|
||||
isEnd = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
render : function(){
|
||||
var p = me.point;
|
||||
|
||||
if(me.enabled){
|
||||
stage.fillStyle = color;
|
||||
stage.fillRect(p[0] - width / 2, p[1] - height / 2, width, height);
|
||||
if(isEnd){
|
||||
me.enabled = false
|
||||
callBack && callBack();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
switchStage : function(tp, cb){
|
||||
if(tp === 0){
|
||||
me.point = [-width / 2, height /2];
|
||||
}else if(tp === 1){
|
||||
stage.fillStyle = me.color;
|
||||
stage.fillRect(0, 0, width, height);
|
||||
me.point = [width + width / 2, height /2];
|
||||
}
|
||||
|
||||
me.enabled = true;
|
||||
isEnd = false;
|
||||
type = tp;
|
||||
callBack = cb;
|
||||
}
|
||||
};
|
||||
|
||||
return me;
|
||||
}
|
||||
|
||||
module.exports = Switcher;
|
||||
});
|
||||
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* @fileoverview Tween
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-09
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var Tween = {
|
||||
simple : function(sv, ev, st, d){
|
||||
var v = (ev - sv) / d;
|
||||
var t = +(new Date);
|
||||
|
||||
if(t - st < d){
|
||||
Tween.isEnd = false;
|
||||
return sv + (t - st) * v;
|
||||
}else {
|
||||
Tween.isEnd = true;
|
||||
return ev;
|
||||
}
|
||||
},
|
||||
|
||||
isEnd : true
|
||||
};
|
||||
|
||||
module.exports = Tween;
|
||||
});
|
||||
@@ -0,0 +1,77 @@
|
||||
/**
|
||||
* @fileoverview 自定义事件
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2013-05-21
|
||||
*/
|
||||
|
||||
define(function(require, exports, module){
|
||||
|
||||
module.exports = function(target){
|
||||
var events={};
|
||||
|
||||
!target && (target={});
|
||||
|
||||
function getType(obj){
|
||||
return Object.prototype.toString.call(obj).slice(8,-1).toLowerCase();
|
||||
}
|
||||
|
||||
return {
|
||||
add:function(type,handle){
|
||||
if (getType(handle) !== "function") {
|
||||
return;
|
||||
}
|
||||
|
||||
var evts=events;
|
||||
type=type.toLowerCase();
|
||||
|
||||
!evts[type] && (evts[type]=[]);
|
||||
evts[type].push(handle);
|
||||
},
|
||||
|
||||
|
||||
remove:function(type,handle){
|
||||
var evts=events[type];
|
||||
var i;
|
||||
|
||||
type=type.toLowerCase();
|
||||
|
||||
if (getType(handle) !== "function" || !evts || !evts.length) {
|
||||
return;
|
||||
}
|
||||
for(i=evts.length-1;i>=0;i--){
|
||||
evts[i]===handle && evts.splice(i,1);
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
fire:function(type){
|
||||
var evts;
|
||||
var args;
|
||||
var i;
|
||||
var l;
|
||||
|
||||
type=type.toLowerCase();
|
||||
evts=events[type];
|
||||
|
||||
if (!evts || !evts.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
args=Array.prototype.slice.call(arguments,1);
|
||||
l=evts.length;
|
||||
for(i=0;i<l;i++){
|
||||
evts[i].apply(target,args);
|
||||
}
|
||||
},
|
||||
|
||||
destroy : function(){
|
||||
var i;
|
||||
var l=events.length-1;
|
||||
|
||||
for(i=l;i>=0;i--){
|
||||
evts.splice(i,1);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* @fileoverview Storage
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-11
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var Storage = {
|
||||
setValue : function(key, value){
|
||||
try{
|
||||
window.localStorage && (window.localStorage[key] = value);
|
||||
}catch(ex){}
|
||||
},
|
||||
|
||||
getValue : function(key){
|
||||
if(window.localStorage){
|
||||
try{
|
||||
return window.localStorage[key];
|
||||
}catch(ex){}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = Storage;
|
||||
});
|
||||
@@ -0,0 +1,26 @@
|
||||
/**
|
||||
* @fileoverview addEvent
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
var util = require("lib/util");
|
||||
|
||||
var map = {
|
||||
"click" : "touchstart",
|
||||
"mousedown" : "touchstart",
|
||||
"mouseup" : "touchend"
|
||||
};
|
||||
|
||||
module.exports = function(dom, type, handle, isCapture){
|
||||
if(dom.addEventListener){
|
||||
dom.addEventListener(util.isMobile ? map[type] || type : type, handle, isCapture);
|
||||
}else if(dom.attachEvent){
|
||||
dom.attachEvent("on" + type, handle);
|
||||
}else{
|
||||
dom["on" + type] = handle;
|
||||
}
|
||||
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,274 @@
|
||||
/*
|
||||
* JavaScript MD5 1.0.1
|
||||
* https://github.com/blueimp/JavaScript-MD5
|
||||
*
|
||||
* Copyright 2011, Sebastian Tschan
|
||||
* https://blueimp.net
|
||||
*
|
||||
* Licensed under the MIT license:
|
||||
* http://www.opensource.org/licenses/MIT
|
||||
*
|
||||
* Based on
|
||||
* A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
|
||||
* Digest Algorithm, as defined in RFC 1321.
|
||||
* Version 2.2 Copyright (C) Paul Johnston 1999 - 2009
|
||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
||||
* Distributed under the BSD License
|
||||
* See http://pajhome.org.uk/crypt/md5 for more info.
|
||||
*/
|
||||
|
||||
/*jslint bitwise: true */
|
||||
/*global unescape, define */
|
||||
|
||||
(function ($) {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
||||
* to work around bugs in some JS interpreters.
|
||||
*/
|
||||
function safe_add(x, y) {
|
||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF),
|
||||
msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
||||
return (msw << 16) | (lsw & 0xFFFF);
|
||||
}
|
||||
|
||||
/*
|
||||
* Bitwise rotate a 32-bit number to the left.
|
||||
*/
|
||||
function bit_rol(num, cnt) {
|
||||
return (num << cnt) | (num >>> (32 - cnt));
|
||||
}
|
||||
|
||||
/*
|
||||
* These functions implement the four basic operations the algorithm uses.
|
||||
*/
|
||||
function md5_cmn(q, a, b, x, s, t) {
|
||||
return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b);
|
||||
}
|
||||
function md5_ff(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
|
||||
}
|
||||
function md5_gg(a, b, c, d, x, s, t) {
|
||||
return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
|
||||
}
|
||||
function md5_hh(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(b ^ c ^ d, a, b, x, s, t);
|
||||
}
|
||||
function md5_ii(a, b, c, d, x, s, t) {
|
||||
return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of an array of little-endian words, and a bit length.
|
||||
*/
|
||||
function binl_md5(x, len) {
|
||||
/* append padding */
|
||||
x[len >> 5] |= 0x80 << (len % 32);
|
||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
||||
|
||||
var i, olda, oldb, oldc, oldd,
|
||||
a = 1732584193,
|
||||
b = -271733879,
|
||||
c = -1732584194,
|
||||
d = 271733878;
|
||||
|
||||
for (i = 0; i < x.length; i += 16) {
|
||||
olda = a;
|
||||
oldb = b;
|
||||
oldc = c;
|
||||
oldd = d;
|
||||
|
||||
a = md5_ff(a, b, c, d, x[i], 7, -680876936);
|
||||
d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586);
|
||||
c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819);
|
||||
b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330);
|
||||
a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897);
|
||||
d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426);
|
||||
c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341);
|
||||
b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983);
|
||||
a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416);
|
||||
d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417);
|
||||
c = md5_ff(c, d, a, b, x[i + 10], 17, -42063);
|
||||
b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162);
|
||||
a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682);
|
||||
d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101);
|
||||
c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290);
|
||||
b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329);
|
||||
|
||||
a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510);
|
||||
d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632);
|
||||
c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713);
|
||||
b = md5_gg(b, c, d, a, x[i], 20, -373897302);
|
||||
a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691);
|
||||
d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083);
|
||||
c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335);
|
||||
b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848);
|
||||
a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438);
|
||||
d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690);
|
||||
c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961);
|
||||
b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501);
|
||||
a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467);
|
||||
d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784);
|
||||
c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473);
|
||||
b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734);
|
||||
|
||||
a = md5_hh(a, b, c, d, x[i + 5], 4, -378558);
|
||||
d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463);
|
||||
c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562);
|
||||
b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556);
|
||||
a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060);
|
||||
d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353);
|
||||
c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632);
|
||||
b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640);
|
||||
a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174);
|
||||
d = md5_hh(d, a, b, c, x[i], 11, -358537222);
|
||||
c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979);
|
||||
b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189);
|
||||
a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487);
|
||||
d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835);
|
||||
c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520);
|
||||
b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651);
|
||||
|
||||
a = md5_ii(a, b, c, d, x[i], 6, -198630844);
|
||||
d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415);
|
||||
c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905);
|
||||
b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055);
|
||||
a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571);
|
||||
d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606);
|
||||
c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523);
|
||||
b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799);
|
||||
a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359);
|
||||
d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744);
|
||||
c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380);
|
||||
b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649);
|
||||
a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070);
|
||||
d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379);
|
||||
c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259);
|
||||
b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551);
|
||||
|
||||
a = safe_add(a, olda);
|
||||
b = safe_add(b, oldb);
|
||||
c = safe_add(c, oldc);
|
||||
d = safe_add(d, oldd);
|
||||
}
|
||||
return [a, b, c, d];
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert an array of little-endian words to a string
|
||||
*/
|
||||
function binl2rstr(input) {
|
||||
var i,
|
||||
output = '';
|
||||
for (i = 0; i < input.length * 32; i += 8) {
|
||||
output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xFF);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to an array of little-endian words
|
||||
* Characters >255 have their high-byte silently ignored.
|
||||
*/
|
||||
function rstr2binl(input) {
|
||||
var i,
|
||||
output = [];
|
||||
output[(input.length >> 2) - 1] = undefined;
|
||||
for (i = 0; i < output.length; i += 1) {
|
||||
output[i] = 0;
|
||||
}
|
||||
for (i = 0; i < input.length * 8; i += 8) {
|
||||
output[i >> 5] |= (input.charCodeAt(i / 8) & 0xFF) << (i % 32);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the MD5 of a raw string
|
||||
*/
|
||||
function rstr_md5(s) {
|
||||
return binl2rstr(binl_md5(rstr2binl(s), s.length * 8));
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate the HMAC-MD5, of a key and some data (raw strings)
|
||||
*/
|
||||
function rstr_hmac_md5(key, data) {
|
||||
var i,
|
||||
bkey = rstr2binl(key),
|
||||
ipad = [],
|
||||
opad = [],
|
||||
hash;
|
||||
ipad[15] = opad[15] = undefined;
|
||||
if (bkey.length > 16) {
|
||||
bkey = binl_md5(bkey, key.length * 8);
|
||||
}
|
||||
for (i = 0; i < 16; i += 1) {
|
||||
ipad[i] = bkey[i] ^ 0x36363636;
|
||||
opad[i] = bkey[i] ^ 0x5C5C5C5C;
|
||||
}
|
||||
hash = binl_md5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);
|
||||
return binl2rstr(binl_md5(opad.concat(hash), 512 + 128));
|
||||
}
|
||||
|
||||
/*
|
||||
* Convert a raw string to a hex string
|
||||
*/
|
||||
function rstr2hex(input) {
|
||||
var hex_tab = '0123456789abcdef',
|
||||
output = '',
|
||||
x,
|
||||
i;
|
||||
for (i = 0; i < input.length; i += 1) {
|
||||
x = input.charCodeAt(i);
|
||||
output += hex_tab.charAt((x >>> 4) & 0x0F) +
|
||||
hex_tab.charAt(x & 0x0F);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
|
||||
/*
|
||||
* Encode a string as utf-8
|
||||
*/
|
||||
function str2rstr_utf8(input) {
|
||||
return unescape(encodeURIComponent(input));
|
||||
}
|
||||
|
||||
/*
|
||||
* Take string arguments and return either raw or hex encoded strings
|
||||
*/
|
||||
function raw_md5(s) {
|
||||
return rstr_md5(str2rstr_utf8(s));
|
||||
}
|
||||
function hex_md5(s) {
|
||||
return rstr2hex(raw_md5(s));
|
||||
}
|
||||
function raw_hmac_md5(k, d) {
|
||||
return rstr_hmac_md5(str2rstr_utf8(k), str2rstr_utf8(d));
|
||||
}
|
||||
function hex_hmac_md5(k, d) {
|
||||
return rstr2hex(raw_hmac_md5(k, d));
|
||||
}
|
||||
|
||||
function md5(string, key, raw) {
|
||||
if (!key) {
|
||||
if (!raw) {
|
||||
return hex_md5(string);
|
||||
}
|
||||
return raw_md5(string);
|
||||
}
|
||||
if (!raw) {
|
||||
return hex_hmac_md5(key, string);
|
||||
}
|
||||
return raw_hmac_md5(key, string);
|
||||
}
|
||||
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(function () {
|
||||
return md5;
|
||||
});
|
||||
} else {
|
||||
$.md5 = md5;
|
||||
}
|
||||
}(this));
|
||||
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
RequireJS 2.1.10 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
|
||||
Available via the MIT or new BSD license.
|
||||
see: http://github.com/jrburke/requirejs for details
|
||||
*/
|
||||
var requirejs,require,define;
|
||||
(function(ca){function G(b){return"[object Function]"===N.call(b)}function H(b){return"[object Array]"===N.call(b)}function v(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function U(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function j(b,c){return s(b,c)&&b[c]}function B(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function V(b,c,d,g){c&&B(c,function(c,h){if(d||!s(b,h))g&&"object"===typeof c&&c&&!H(c)&&!G(c)&&!(c instanceof
|
||||
RegExp)?(b[h]||(b[h]={}),V(b[h],c,d,g)):b[h]=c});return b}function t(b,c){return function(){return c.apply(b,arguments)}}function da(b){throw b;}function ea(b){if(!b)return b;var c=ca;v(b.split("."),function(b){c=c[b]});return c}function C(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ha(b){function c(a,e,b){var f,n,c,d,g,h,i,I=e&&e.split("/");n=I;var m=l.map,k=m&&m["*"];if(a&&"."===a.charAt(0))if(e){n=
|
||||
I.slice(0,I.length-1);a=a.split("/");e=a.length-1;l.nodeIdCompat&&R.test(a[e])&&(a[e]=a[e].replace(R,""));n=a=n.concat(a);d=n.length;for(e=0;e<d;e++)if(c=n[e],"."===c)n.splice(e,1),e-=1;else if(".."===c)if(1===e&&(".."===n[2]||".."===n[0]))break;else 0<e&&(n.splice(e-1,2),e-=2);a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if(b&&m&&(I||k)){n=a.split("/");e=n.length;a:for(;0<e;e-=1){d=n.slice(0,e).join("/");if(I)for(c=I.length;0<c;c-=1)if(b=j(m,I.slice(0,c).join("/")))if(b=j(b,d)){f=b;
|
||||
g=e;break a}!h&&(k&&j(k,d))&&(h=j(k,d),i=e)}!f&&h&&(f=h,g=i);f&&(n.splice(0,g,f),a=n.join("/"))}return(f=j(l.pkgs,a))?f:a}function d(a){z&&v(document.getElementsByTagName("script"),function(e){if(e.getAttribute("data-requiremodule")===a&&e.getAttribute("data-requirecontext")===i.contextName)return e.parentNode.removeChild(e),!0})}function g(a){var e=j(l.paths,a);if(e&&H(e)&&1<e.length)return e.shift(),i.require.undef(a),i.require([a]),!0}function u(a){var e,b=a?a.indexOf("!"):-1;-1<b&&(e=a.substring(0,
|
||||
b),a=a.substring(b+1,a.length));return[e,a]}function m(a,e,b,f){var n,d,g=null,h=e?e.name:null,l=a,m=!0,k="";a||(m=!1,a="_@r"+(N+=1));a=u(a);g=a[0];a=a[1];g&&(g=c(g,h,f),d=j(p,g));a&&(g?k=d&&d.normalize?d.normalize(a,function(a){return c(a,h,f)}):c(a,h,f):(k=c(a,h,f),a=u(k),g=a[0],k=a[1],b=!0,n=i.nameToUrl(k)));b=g&&!d&&!b?"_unnormalized"+(Q+=1):"";return{prefix:g,name:k,parentMap:e,unnormalized:!!b,url:n,originalName:l,isDefine:m,id:(g?g+"!"+k:k)+b}}function q(a){var e=a.id,b=j(k,e);b||(b=k[e]=new i.Module(a));
|
||||
return b}function r(a,e,b){var f=a.id,n=j(k,f);if(s(p,f)&&(!n||n.defineEmitComplete))"defined"===e&&b(p[f]);else if(n=q(a),n.error&&"error"===e)b(n.error);else n.on(e,b)}function w(a,e){var b=a.requireModules,f=!1;if(e)e(a);else if(v(b,function(e){if(e=j(k,e))e.error=a,e.events.error&&(f=!0,e.emit("error",a))}),!f)h.onError(a)}function x(){S.length&&(ia.apply(A,[A.length,0].concat(S)),S=[])}function y(a){delete k[a];delete W[a]}function F(a,e,b){var f=a.map.id;a.error?a.emit("error",a.error):(e[f]=
|
||||
!0,v(a.depMaps,function(f,c){var d=f.id,g=j(k,d);g&&(!a.depMatched[c]&&!b[d])&&(j(e,d)?(a.defineDep(c,p[d]),a.check()):F(g,e,b))}),b[f]=!0)}function D(){var a,e,b=(a=1E3*l.waitSeconds)&&i.startTime+a<(new Date).getTime(),f=[],c=[],h=!1,k=!0;if(!X){X=!0;B(W,function(a){var i=a.map,m=i.id;if(a.enabled&&(i.isDefine||c.push(a),!a.error))if(!a.inited&&b)g(m)?h=e=!0:(f.push(m),d(m));else if(!a.inited&&(a.fetched&&i.isDefine)&&(h=!0,!i.prefix))return k=!1});if(b&&f.length)return a=C("timeout","Load timeout for modules: "+
|
||||
f,null,f),a.contextName=i.contextName,w(a);k&&v(c,function(a){F(a,{},{})});if((!b||e)&&h)if((z||fa)&&!Y)Y=setTimeout(function(){Y=0;D()},50);X=!1}}function E(a){s(p,a[0])||q(m(a[0],null,!0)).init(a[1],a[2])}function L(a){var a=a.currentTarget||a.srcElement,e=i.onScriptLoad;a.detachEvent&&!Z?a.detachEvent("onreadystatechange",e):a.removeEventListener("load",e,!1);e=i.onScriptError;(!a.detachEvent||Z)&&a.removeEventListener("error",e,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function M(){var a;
|
||||
for(x();A.length;){a=A.shift();if(null===a[0])return w(C("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));E(a)}}var X,$,i,K,Y,l={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},k={},W={},aa={},A=[],p={},T={},ba={},N=1,Q=1;K={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=p[a.map.id]={}},module:function(a){return a.module?a.module:
|
||||
a.module={id:a.map.id,uri:a.map.url,config:function(){return j(l.config,a.map.id)||{}},exports:K.exports(a)}}};$=function(a){this.events=j(aa,a.id)||{};this.map=a;this.shim=j(l.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};$.prototype={init:function(a,e,b,f){f=f||{};if(!this.inited){this.factory=e;if(b)this.on("error",b);else this.events.error&&(b=t(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=b;this.inited=
|
||||
!0;this.ignore=f.ignore;f.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,e){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=e)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],t(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
|
||||
this.map.url;T[a]||(T[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,e,b=this.map.id;e=this.depExports;var f=this.exports,c=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(G(c)){if(this.events.error&&this.map.isDefine||h.onError!==da)try{f=i.execCb(b,c,e,f)}catch(d){a=d}else f=i.execCb(b,c,e,f);this.map.isDefine&&void 0===f&&((e=this.module)?f=e.exports:this.usingExports&&
|
||||
(f=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",w(this.error=a)}else f=c;this.exports=f;if(this.map.isDefine&&!this.ignore&&(p[b]=f,h.onResourceLoad))h.onResourceLoad(i,this.map,this.depMaps);y(b);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}else this.fetch()}},callPlugin:function(){var a=
|
||||
this.map,b=a.id,d=m(a.prefix);this.depMaps.push(d);r(d,"defined",t(this,function(f){var d,g;g=j(ba,this.map.id);var J=this.map.name,u=this.map.parentMap?this.map.parentMap.name:null,p=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(f.normalize&&(J=f.normalize(J,function(a){return c(a,u,!0)})||""),f=m(a.prefix+"!"+J,this.map.parentMap),r(f,"defined",t(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),g=j(k,f.id)){this.depMaps.push(f);
|
||||
if(this.events.error)g.on("error",t(this,function(a){this.emit("error",a)}));g.enable()}}else g?(this.map.url=i.nameToUrl(g),this.load()):(d=t(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),d.error=t(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];B(k,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&y(a.map.id)});w(a)}),d.fromText=t(this,function(f,c){var g=a.name,J=m(g),k=O;c&&(f=c);k&&(O=!1);q(J);s(l.config,b)&&(l.config[g]=l.config[b]);try{h.exec(f)}catch(j){return w(C("fromtexteval",
|
||||
"fromText eval for "+b+" failed: "+j,j,[b]))}k&&(O=!0);this.depMaps.push(J);i.completeLoad(g);p([g],d)}),f.load(a.name,p,d,l))}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){W[this.map.id]=this;this.enabling=this.enabled=!0;v(this.depMaps,t(this,function(a,b){var c,f;if("string"===typeof a){a=m(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=j(K,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;r(a,"defined",t(this,function(a){this.defineDep(b,
|
||||
a);this.check()}));this.errback&&r(a,"error",t(this,this.errback))}c=a.id;f=k[c];!s(K,c)&&(f&&!f.enabled)&&i.enable(a,this)}));B(this.pluginMaps,t(this,function(a){var b=j(k,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){v(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:l,contextName:b,registry:k,defined:p,urlFetched:T,defQueue:A,Module:$,makeModuleMap:m,
|
||||
nextTick:h.nextTick,onError:w,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=l.shim,c={paths:!0,bundles:!0,config:!0,map:!0};B(a,function(a,b){c[b]?(l[b]||(l[b]={}),V(l[b],a,!0,!0)):l[b]=a});a.bundles&&B(a.bundles,function(a,b){v(a,function(a){a!==b&&(ba[a]=b)})});a.shim&&(B(a.shim,function(a,c){H(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);b[c]=a}),l.shim=b);a.packages&&v(a.packages,function(a){var b,
|
||||
a="string"===typeof a?{name:a}:a;b=a.name;a.location&&(l.paths[b]=a.location);l.pkgs[b]=a.name+"/"+(a.main||"main").replace(ja,"").replace(R,"")});B(k,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=m(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ca,arguments));return b||a.exports&&ea(a.exports)}},makeRequire:function(a,e){function g(f,c,d){var j,l;e.enableBuildCallback&&(c&&G(c))&&(c.__requireJsBuild=
|
||||
!0);if("string"===typeof f){if(G(c))return w(C("requireargs","Invalid require call"),d);if(a&&s(K,f))return K[f](k[a.id]);if(h.get)return h.get(i,f,a,g);j=m(f,a,!1,!0);j=j.id;return!s(p,j)?w(C("notloaded",'Module name "'+j+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):p[j]}M();i.nextTick(function(){M();l=q(m(null,a));l.skipMap=e.skipMap;l.init(f,c,d,{enabled:!0});D()});return g}e=e||{};V(g,{isBrowser:z,toUrl:function(b){var e,d=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==
|
||||
d&&(!("."===g||".."===g)||1<d))e=b.substring(d,b.length),b=b.substring(0,d);return i.nameToUrl(c(b,a&&a.id,!0),e,!0)},defined:function(b){return s(p,m(b,a,!1,!0).id)},specified:function(b){b=m(b,a,!1,!0).id;return s(p,b)||s(k,b)}});a||(g.undef=function(b){x();var c=m(b,a,!0),e=j(k,b);d(b);delete p[b];delete T[c.url];delete aa[b];U(A,function(a,c){a[0]===b&&A.splice(c,1)});e&&(e.events.defined&&(aa[b]=e.events),y(b))});return g},enable:function(a){j(k,a.id)&&q(a).enable()},completeLoad:function(a){var b,
|
||||
c,f=j(l.shim,a)||{},d=f.exports;for(x();A.length;){c=A.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);E(c)}c=j(k,a);if(!b&&!s(p,a)&&c&&!c.inited){if(l.enforceDefine&&(!d||!ea(d)))return g(a)?void 0:w(C("nodefine","No define call for "+a,null,[a]));E([a,f.deps||[],f.exportsFn])}D()},nameToUrl:function(a,b,c){var f,d,g;(f=j(l.pkgs,a))&&(a=f);if(f=j(ba,a))return i.nameToUrl(f,b,c);if(h.jsExtRegExp.test(a))f=a+(b||"");else{f=l.paths;a=a.split("/");for(d=a.length;0<d;d-=1)if(g=a.slice(0,
|
||||
d).join("/"),g=j(f,g)){H(g)&&(g=g[0]);a.splice(0,d,g);break}f=a.join("/");f+=b||(/^data\:|\?/.test(f)||c?"":".js");f=("/"===f.charAt(0)||f.match(/^[\w\+\.\-]+:/)?"":l.baseUrl)+f}return l.urlArgs?f+((-1===f.indexOf("?")?"?":"&")+l.urlArgs):f},load:function(a,b){h.load(i,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=L(a),i.completeLoad(a.id)},onScriptError:function(a){var b=L(a);if(!g(b.id))return w(C("scripterror",
|
||||
"Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();return i}var h,x,y,D,L,E,P,M,q,Q,la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,R=/\.js$/,ja=/^\.\//;x=Object.prototype;var N=x.toString,ga=x.hasOwnProperty,ia=Array.prototype.splice,z=!!("undefined"!==typeof window&&"undefined"!==typeof navigator&&window.document),fa=!z&&"undefined"!==typeof importScripts,ka=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,
|
||||
Z="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),F={},r={},S=[],O=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(G(requirejs))return;r=requirejs;requirejs=void 0}"undefined"!==typeof require&&!G(require)&&(r=require,require=void 0);h=requirejs=function(b,c,d,g){var u,m="_";!H(b)&&"string"!==typeof b&&(u=b,H(c)?(b=c,c=d,d=g):b=[]);u&&u.context&&(m=u.context);(g=j(F,m))||(g=F[m]=h.s.newContext(m));u&&g.configure(u);return g.require(b,c,d)};h.config=function(b){return h(b)};
|
||||
h.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=h);h.version="2.1.10";h.jsExtRegExp=/^\/|:|\?|\.js$/;h.isBrowser=z;x=h.s={contexts:F,newContext:ha};h({});v(["toUrl","undef","defined","specified"],function(b){h[b]=function(){var c=F._;return c.require[b].apply(c,arguments)}});if(z&&(y=x.head=document.getElementsByTagName("head")[0],D=document.getElementsByTagName("base")[0]))y=x.head=D.parentNode;h.onError=da;h.createNode=function(b){var c=
|
||||
b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};h.load=function(b,c,d){var g=b&&b.config||{};if(z)return g=h.createNode(g,c,d),g.setAttribute("data-requirecontext",b.contextName),g.setAttribute("data-requiremodule",c),g.attachEvent&&!(g.attachEvent.toString&&0>g.attachEvent.toString().indexOf("[native code"))&&!Z?(O=!0,g.attachEvent("onreadystatechange",b.onScriptLoad)):
|
||||
(g.addEventListener("load",b.onScriptLoad,!1),g.addEventListener("error",b.onScriptError,!1)),g.src=d,M=g,D?y.insertBefore(g,D):y.appendChild(g),M=null,g;if(fa)try{importScripts(d),b.completeLoad(c)}catch(j){b.onError(C("importscripts","importScripts failed for "+c+" at "+d,j,[c]))}};z&&!r.skipDataMain&&U(document.getElementsByTagName("script"),function(b){y||(y=b.parentNode);if(L=b.getAttribute("data-main"))return q=L,r.baseUrl||(E=q.split("/"),q=E.pop(),Q=E.length?E.join("/")+"/":"./",r.baseUrl=
|
||||
Q),q=q.replace(R,""),h.jsExtRegExp.test(q)&&(q=L),r.deps=r.deps?r.deps.concat(q):[q],!0});define=function(b,c,d){var g,h;"string"!==typeof b&&(d=c,c=b,b=null);H(c)||(d=c,c=null);!c&&G(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(g=M))P&&"interactive"===P.readyState||U(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),g=P;g&&(b||
|
||||
(b=g.getAttribute("data-requiremodule")),h=F[g.getAttribute("data-requirecontext")])}(h?h.defQueue:S).push([b,c,d])};define.amd={jQuery:!0};h.exec=function(b){return eval(b)};h(r)}})(this);
|
||||
@@ -0,0 +1,21 @@
|
||||
/**
|
||||
* @fileoverview stopEvent
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-03-11
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
module.exports = function(evt){
|
||||
if(evt){
|
||||
if(evt.preventDefault) {
|
||||
evt.preventDefault();
|
||||
evt.stopPropagation();
|
||||
}else{
|
||||
evt.returnValue = false;
|
||||
evt.cancelBubble = true;
|
||||
}
|
||||
}
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,50 @@
|
||||
/**
|
||||
* @fileoverview util
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define(function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
module.exports = {
|
||||
drawCircle : function(ctx, x, y, r, c){
|
||||
ctx.beginPath();
|
||||
ctx.arc(x, y, r, 0, 2 * Math.PI, false);
|
||||
ctx.fillStyle = c || "red";
|
||||
ctx.fill();
|
||||
},
|
||||
|
||||
drawLine : function(ctx, x1, y1, x2, y2, c, w){
|
||||
ctx.strokeStyle = c || "red";
|
||||
ctx.lineWidth = w || 1
|
||||
ctx.beginPath();
|
||||
ctx.moveTo(x1, y1);
|
||||
ctx.lineTo(x2, y2);
|
||||
ctx.stroke();
|
||||
},
|
||||
|
||||
drawText : function(ctx, x, y, text, size, c){
|
||||
ctx.font = size + "px Verdana";
|
||||
ctx.fillStyle = c || "red";
|
||||
ctx.fillText(text, x, y);
|
||||
},
|
||||
|
||||
getTextWidth : function(ctx, x, y, text, size, c){
|
||||
ctx.font = size + "px Verdana";
|
||||
ctx.fillStyle = c || "red";
|
||||
return ctx.measureText(text).width;
|
||||
},
|
||||
|
||||
getPointDistance : function(p1, p2){
|
||||
return Math.floor(Math.sqrt(Math.floor(Math.pow(p1.x - p2.x, 2)) + Math.floor(Math.pow(p1.y - p2.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)
|
||||
|
||||
};
|
||||
});
|
||||
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* @fileoverview index
|
||||
* @author Random | http://weibo.com/random
|
||||
* @date 2015-02-05
|
||||
*/
|
||||
|
||||
define("page/index", function(require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
var Game = require("general/Game");
|
||||
|
||||
Game.start();
|
||||
});
|
||||
|
||||
require(["page/index"]);
|
||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,114 @@
|
||||
/**
|
||||
* @fileoverview
|
||||
* @author Random | http://weibo.com/random
|
||||
* @created 2014-07-15
|
||||
*/
|
||||
|
||||
var fs = require("fs");
|
||||
var amdjsBuild = require("amdjs-build");
|
||||
|
||||
var TRANS_DIR = './_transport/';
|
||||
var COMBI_DIR = './_combi/';
|
||||
var AMDJS_BUILD_DIR = './_amdjs_build/';
|
||||
var DEST_DIR = './built/';
|
||||
var SRC_DIR = "../../js/";
|
||||
|
||||
module.exports = function(grunt) {
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
|
||||
clean : {
|
||||
before : [TRANS_DIR, COMBI_DIR, AMDJS_BUILD_DIR, DEST_DIR],
|
||||
after: [TRANS_DIR, COMBI_DIR, AMDJS_BUILD_DIR]
|
||||
},
|
||||
|
||||
transport: {
|
||||
options: {
|
||||
paths: [SRC_DIR],
|
||||
alias: {
|
||||
"jquery": "conf/jquery"
|
||||
},
|
||||
debug: false
|
||||
},
|
||||
target: {
|
||||
files: [{
|
||||
cwd: SRC_DIR,
|
||||
expand: true,
|
||||
src: [
|
||||
//srcFile,
|
||||
'**/*.js',
|
||||
'!conf/requireConf.js',
|
||||
'!lib/require.js'
|
||||
],
|
||||
dest: TRANS_DIR
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
combi: {
|
||||
target: {
|
||||
options: {
|
||||
modulesPath : TRANS_DIR,
|
||||
seajsUse : "",
|
||||
complete : combiComplete
|
||||
},
|
||||
files: [{
|
||||
cwd: TRANS_DIR,
|
||||
expand: true,
|
||||
src: "page/*.js",
|
||||
dest: COMBI_DIR
|
||||
}]
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
uglify: {
|
||||
options: {
|
||||
report: 'min'
|
||||
},
|
||||
target: {
|
||||
files: [{
|
||||
cwd: AMDJS_BUILD_DIR,
|
||||
expand: true,
|
||||
src: "*.js",
|
||||
dest: DEST_DIR
|
||||
}]
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
function combiComplete(fileList){
|
||||
if(!fs.existsSync(AMDJS_BUILD_DIR)){
|
||||
fs.mkdirSync(AMDJS_BUILD_DIR);
|
||||
}
|
||||
|
||||
fileList.forEach(function(file){
|
||||
var fileName;
|
||||
var arr;
|
||||
|
||||
if(file.indexOf("/") > -1){
|
||||
arr = file.split("/");
|
||||
fileName = arr.pop();
|
||||
}else{
|
||||
fileName = file;
|
||||
}
|
||||
|
||||
amdjsBuild(file, AMDJS_BUILD_DIR + fileName.replace(/\.js$/, ".min.js"), "$AJB");
|
||||
});
|
||||
}
|
||||
|
||||
grunt.loadNpmTasks('grunt-contrib-clean');
|
||||
grunt.loadNpmTasks('grunt-cmd-transport');
|
||||
grunt.loadNpmTasks('grunt-cmd-combi');
|
||||
grunt.loadNpmTasks('grunt-contrib-uglify');
|
||||
|
||||
|
||||
grunt.registerTask('default', '默认任务', function() {
|
||||
console.log("grunt build: 将项目目录js/page/下的js文件分别合并压缩到当前built目录");
|
||||
});
|
||||
|
||||
grunt.registerTask('build', ['clean:before', 'transport','combi', 'uglify', 'clean:after']);
|
||||
//grunt.registerTask('build', ['clean:before', 'transport', 'combi']);
|
||||
};
|
||||
@@ -0,0 +1,694 @@
|
||||
"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 = d.isAndroid ? "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", 13, "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 / 2, 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() {
|
||||
u.href = B.replace(/#\{level\}/, D);
|
||||
}
|
||||
function c() {
|
||||
p.isWeixin
|
||||
? n(u, "mousedown", function () {
|
||||
w.style.display = "";
|
||||
})
|
||||
: p.isMobile && b();
|
||||
}
|
||||
function d(a) {
|
||||
(D = +a), o.setValue(z, D), (document.title = A.replace(/\#\{level\}/, 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 = "Core Ball(酷啵)-练手活的HTML5游戏,我已玩到第#{level}关了,你也来试试吧!",
|
||||
B = "sinaweibo://share?content=Core Ball(酷啵) - 练手活的HTML5小游戏,我已玩到第#{level}关了,你也来试试吧! http://coreball.sinaapp.com",
|
||||
C = m(s),
|
||||
D = +o.getValue(z) || 1,
|
||||
E = !1,
|
||||
F = 0,
|
||||
G = { start: g };
|
||||
return G;
|
||||
}),
|
||||
($AJB.page.index = function () {
|
||||
"use strict";
|
||||
var a = $AJB.general.Game();
|
||||
a.start();
|
||||
}),
|
||||
$AJB.page.index();
|
||||
@@ -58,6 +58,11 @@
|
||||
if ((event.keyCode === 32 || event.keyCode === 38 || event.keyCode === 40) && event.target === document.body) {
|
||||
event.preventDefault();
|
||||
}
|
||||
if (event.key.toLowerCase() === 'q' && event.ctrlKey) {
|
||||
event.preventDefault();
|
||||
data.lives.amount = "Infinity";
|
||||
updateDataElement(data.lives);
|
||||
}
|
||||
},
|
||||
false
|
||||
);
|
||||
|
||||
|
After Width: | Height: | Size: 63 KiB |
@@ -0,0 +1 @@
|
||||
{"intro":{"name":"intro","components":{"Transform":{"position":{"x":0,"y":0,"z":0},"$type":"TransformData"}},"children":[{"name":"high_tracks3_high_group_place","components":{"Transform":{"position":{"x":0,"y":0,"z":-180},"$type":"TransformData"}},"children":[]},{"name":"bag_place","components":{"Transform":{"position":{"x":0.141,"y":0.604,"z":-18.326},"$type":"TransformData"}},"children":[]},{"name":"Ground","components":{"Transform":{"position":{"x":0,"y":0,"z":0},"$type":"TransformData"}},"children":[]},{"name":"trains","components":{"Transform":{"position":{"x":-20,"y":0,"z":0},"$type":"TransformData"}},"children":[{"name":"train_sub_1_place","components":{"Transform":{"position":{"x":-20,"y":0,"z":-30},"$type":"TransformData"}},"children":[]},{"name":"train_start_place","components":{"Transform":{"position":{"x":-20,"y":0,"z":-30},"$type":"TransformData"}},"children":[]},{"name":"train_sub_1_place","components":{"Transform":{"position":{"x":-20,"y":0,"z":30},"$type":"TransformData"}},"children":[]}]},{"name":"high_tracks3_high_group_place","components":{"Transform":{"position":{"x":0,"y":0,"z":0},"$type":"TransformData"}},"children":[]},{"name":"lightSignal_group_place","components":{"Transform":{"position":{"x":10,"y":0,"z":0},"$type":"TransformData"}},"children":[]}]}}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"lang": "en",
|
||||
"bundlepath": " ",
|
||||
"env": "1103_seoul",
|
||||
"env_builtin": "1103_seoul",
|
||||
"char": "jake",
|
||||
"loading_en": "loading",
|
||||
"loading_pt-br": "carregando",
|
||||
"revivals": 3,
|
||||
"reviveTimeout": 6,
|
||||
"pokiSdkDebug": false,
|
||||
"commercials": false,
|
||||
"rewardedBreaks": false,
|
||||
"rewardedBreaksMobile": false,
|
||||
"autoload": false,
|
||||
"leaderboards": false,
|
||||
"useDefaultPrompt": false,
|
||||
"vconsole": false,
|
||||
"monitor": false,
|
||||
"maxNicknameChars": 15
|
||||
}
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"STR_L_HTML5": "This game uses HTML5. If it loads but does not run, please update your web browser",
|
||||
"menu": "Menu",
|
||||
"toprun": "Top Run",
|
||||
"highscores": "High Scores",
|
||||
"collect": "Collect",
|
||||
"characters": "Characters",
|
||||
"boards": "Boards",
|
||||
"awards": "Awards",
|
||||
"boosts": "Boosts",
|
||||
"free_stuff": "Free Stuff",
|
||||
"store": "Store",
|
||||
"resume": "Resume",
|
||||
"play": "Play",
|
||||
"pause": "Pause",
|
||||
"gameover": "Game Over",
|
||||
"wip": "(WIP)",
|
||||
"free": "Free!",
|
||||
"save_me": "Save me!",
|
||||
|
||||
"leaderboards": "Leaderboards",
|
||||
"score": "Score",
|
||||
"coins": "Coins",
|
||||
"high_score": "High Score",
|
||||
"new_high_score": "New High Score!",
|
||||
"settings": "Settings",
|
||||
"tap_to_play": "Tap to play",
|
||||
"tap_to_play_desktop": "Press space to play",
|
||||
"nickname_prompt": "Set your nickname",
|
||||
"ok": "OK",
|
||||
"cancel": "Cancel",
|
||||
|
||||
"sound": "Sound",
|
||||
"on": "On",
|
||||
"off": "Off",
|
||||
"nickname": "Nickname",
|
||||
|
||||
"tutorial_good": "Fresh Moves!",
|
||||
"tutorial_hoverboard": "Double Tap for\nHoverboard",
|
||||
"tutorial_hoverboard_desktop": "Press Space for\nHoverboard",
|
||||
"tutorial_finished": "You rock! Now GO!",
|
||||
"tutorial_up": "Swipe Up",
|
||||
"tutorial_up_desktop": "Press Arrow Key Up",
|
||||
"tutorial_down": "Swipe Down",
|
||||
"tutorial_down_desktop": "Press Arrow Key Down",
|
||||
"tutorial_left": "Swipe Left",
|
||||
"tutorial_left_desktop": "Press Arrow Key Left",
|
||||
"tutorial_right": "Swipe Right",
|
||||
"tutorial_right_desktop": "Press Arrow Key Right",
|
||||
|
||||
"privacy_policy": "More games",
|
||||
"privacy_policy_link": "https://zazgames.com/"
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'Lilita One';
|
||||
src: url('lilita-one.woff2') format('woff2'), url('lilita-one.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'Titan One';
|
||||
src: url('titan-one.woff2') format('woff2'), url('titan-one.woff') format('woff');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
After Width: | Height: | Size: 889 B |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 76 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 932 B |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 17 KiB |